 function getTagValue(element,defValue) {
    if (!element) { return defValue; }
    var node    = element.firstChild;
    if (!node) { return defValue; }
    var value   = node.nodeValue;
    if (!value) { return defValue; }
    return value;
 }

 function getElementValueFromPath(xml,nodePath,defValue) {
	var nodeNames	= nodePath.split(/\//g);
    var element = xml;
	for (var nIdx = 0; nIdx < nodeNames.length; nIdx++) {
		var nodeName	= nodeNames[nIdx];
		element	= element.getElementsByTagName(nodeName)[0];
	}
    if (!element) { return defValue; }
    var node    = element.firstChild;
    if (!node) { return defValue; }
    var value   = node.nodeValue;
    if (!value) { return defValue; }
    return value;
 }

 function getElementValuesFromPath(xml,nodePath,defValue) {
	var nodeNames	= nodePath.split(/\//g);
	var retArr		= new Array();
	var elements	= new Array();
	elements.push(xml);
	for (var nIdx = 0; nIdx < nodeNames.length; nIdx++) {
		var nodeName	= nodeNames[nIdx];
		var tmpArr	= new Array();
		for (var eIdx = 0; eIdx < elements.length; eIdx++) {
			var element	= elements[eIdx];
			var neweles	= element.getElementsByTagName(nodeName);
			for (var newIdx = 0; newIdx < neweles.length; newIdx++) {
				tmpArr.push(neweles[newIdx]);
			}
		}
		elements	= tmpArr;
	}
	var elements = xml.getElementsByTagName(nodeName);
	for (var eIdx = 0; eIdx < elements.length; eIdx++) {
		var element	= elements[eIdx];
		var node    = element.firstChild;
		if (!node) { retArr.push(defValue); continue; }
		var value   = node.nodeValue;
		if (!value) { retArr.push(defValue); continue; }
		retArr.push(value);
	}
    return retArr;
 }

 function sumElementValuesFromPath(xml,nodePath,defValue) {
	var sum 	= 0;
	var values	= getElementValuesFromPath(xml,nodePath,defValue);
	for (var vIdx = 0; vIdx < values.length; vIdx++) {
		var value	= values[vIdx].replace(/\D/g,"");
		if (!value.match(/^\d+$/)) { continue; }
		var val	= parseInt(values[vIdx].replace(/\D/,""));
		sum		+= val;
	}
	return sum;
 }

 function getElementValue(xml,nodeName,defValue) {
    var element = xml.getElementsByTagName(nodeName)[0];
    if (!element) { return defValue; }
    var node    = element.firstChild;
    if (!node) { return defValue; }
    var value   = node.nodeValue;
    if (!value) { return defValue; }
    return value;
 }

 function getElementValues(xml,nodeName,defValue) {
	var retArr	= new Array();
	var elements = xml.getElementsByTagName(nodeName);
	for (var eIdx = 0; eIdx < elements.length; eIdx++) {
		var element	= elements[eIdx];
		var node    = element.firstChild;
		if (!node) { retArr.push(defValue); continue; }
		var value   = node.nodeValue;
		if (!value) { retArr.push(defValue); continue; }
		retArr.push(value);
	}
    return retArr;
 }

 function sumElementValues(xml,nodeName,defValue) {
	var sum 	= 0;
	var values	= getElementValues(xml,nodeName,defValue);
	for (var vIdx = 0; vIdx < values.length; vIdx++) {
		var value	= values[vIdx].replace(/\D/,"");
//DEBUGPANE.innerHTML += values[vIdx] + " => " + value + "\n";
		if (!value.match(/^-?\d+$/)) { continue; }
		var val	= parseInt(values[vIdx].replace(/\D/,""));
		sum		+= val;
	}
	return sum;
 }

 function isElementValue(xml,nodeName,expValue) {
	var elements = xml.getElementsByTagName(nodeName);
	for (var eIdx = 0; eIdx < elements.length; eIdx++) {
		var element	= elements[eIdx];
		var node    = element.firstChild;
		if (!node) { retArr.push(defValue); continue; }
		var value   = node.nodeValue;
		if (value == expValue) { return 1; }
	}
    return 0;
 }

