var XMLERR = "!XMLERR!";

function getChildNodesLength(sXML, sNode, lIndex, sChildNodesName) {
	var lPos = 0;
	var lEndPos;
	var sTempXML;
	var lCount = 0;

	if (sNode != "") {
		sTempXML = selectSingleNode(sXML, sNode, lIndex);
		if (sTempXML == XMLERR) {
			return -1;
		}
	}
	else {
		sTempXML = sXML;
	}
	
	sChildNodesName = "<" + sChildNodesName + ">";
	while (lPos != -1) {
		lPos = sTempXML.indexOf(sChildNodesName, lPos)
		if (lPos != -1) {
			lCount = lCount + 1;
			lPos = lPos + 1;
		}
	}
	return lCount;
}

//@Avi 13 May 2001 the new parameter lChildIndex
function setSingleNodeText(sXML, sParentNode, lIndex, sNode, sText, lChildIndex) {
	var lPos = -1;
	var lEndPos;
	var sEndNode;

	sText = system_GetXMLSignOut(sText);
	sEndNode = "</" + sParentNode + ">";
	sParentNode = "<" + sParentNode + ">";
	for (var i=0; i<=lIndex; i++) {
		lPos = lPos + 1;
		lPos = sXML.indexOf(sParentNode, lPos);
		if (lPos == -1) {
			return XMLERR;	
		}
	}
	lEndPos = sXML.indexOf(sEndNode, lPos);
	if (lEndPos == -1) {
		return XMLERR;	
	}
	lEndPos = lEndPos + sEndNode.length;

	sEndNode = "</" + sNode + ">";
	sNode = "<" + sNode + ">";
	
	
	//@Avi 13 May 2001 using the parameter lChildIndex
	if (setSingleNodeText.arguments.length>5)
	{
		for (var i=0; i<=lChildIndex; i++) {
			lPos = lPos + 1;
			lPos = sXML.indexOf(sNode, lPos);
			if (lPos == -1) {
				return XMLERR;	
			}
		}
	}
	else
	{
		lPos = sXML.indexOf(sNode, lPos);
		if (lPos == -1 || lPos > lEndPos) {
			return XMLERR;	
		}
	}
	lPos = lPos + sNode.length;
	
	
	lEndPos = sXML.indexOf(sEndNode, lPos);
	if (lEndPos == -1) {
		return XMLERR;	
	}
	return sXML.substring(0, lPos) + sText + sXML.substring(lEndPos);
}

//@Avi 13MAY 2001 adding the lChildIndex parameter
function selectSingleNodeText(sXML, sParentNode, lIndex, sNode,lChildIndex) {
	var lPos;
	var lEndPos;
	var sTempXML;

	if (sParentNode != "") {
		sTempXML = selectSingleNode(sXML, sParentNode, lIndex);
		if (sTempXML == XMLERR) {
			return XMLERR;
		}
	}
	else {
		sTempXML = sXML;
	}
	
	//@Avi 13MAY 2001 Using lChildIndex parameter
	if (selectSingleNodeText.arguments.length>4)
	{
		sTempXML = selectSingleNode(sTempXML,sNode,lChildIndex);
		if (sTempXML == XMLERR) {
			return XMLERR;
		}
	}
	//@Avi 13MAY 2001 Using lChildIndex parameter End
	var sEndNode = "</" + sNode + ">";
	sNode = "<" + sNode + ">";
	lPos = sTempXML.indexOf(sNode, 0);
	if (lPos == -1) {
		return XMLERR;	
	}
	lPos = lPos + sNode.length;
	lEndPos = sTempXML.indexOf(sEndNode, lPos);
	if (lEndPos == -1) {
		return XMLERR;	
	}
	return sTempXML.substring(lPos, lEndPos);

}

function selectSingleNode(sXML, sNode, lIndex) {
	var lPos = -1;
	var lEndPos;
	var sEndNode;

	sEndNode = "</" + sNode + ">";
	sNode = "<" + sNode + ">";
	for (var i=0; i<=lIndex; i++) {
		lPos = lPos + 1;
		lPos = sXML.indexOf(sNode, lPos);
		if (lPos == -1) {
			return XMLERR;	
		}
	}
	lEndPos = sXML.indexOf(sEndNode, lPos);
	if (lEndPos == -1) {
		return XMLERR;	
	}
	lEndPos = lEndPos + sEndNode.length;
	return sXML.substring(lPos, lEndPos);
}
