/******************************************************************************
xmlutilities.js
	Copyright (C) 2007 Atlantic Database Systems, Inc. All rights reserved.
	Define global items.
******************************************************************************/


/******************************************************************************
mkxmlitem (value, tagName)
	Helper to return an XML string for a value.
******************************************************************************/

function mkxmlitem (value, tagName)
{
	return "<" + tagName + ">" + value + "</" + tagName + ">";
}

/******************************************************************************
mkxmltext (text, tagName)
	Helper to return an XML string for a text value.
******************************************************************************/

function mkxmltext (text, tagName)
{
	return mkxmlitem (DoEncode (text), tagName);
}

/******************************************************************************
getxmlint (tree, tagName)
	Helper to return the value of an integer entry in XML.
******************************************************************************/

function getxmlint (tree, tagName)
{
	var	szText = getxmlitem (tree, tagName);
	var	nValue = szText ? parseInt (TrimLZ (szText)) : null;
	return (nValue != null && !isNaN (nValue)) ? nValue : null;
}

/******************************************************************************
getxmlbool (tree, tagName)
	Helper to return the value of a bool entry in XML.
******************************************************************************/

function getxmlbool (tree, tagName)
{
	var	bValue = false;
	var	nValue = null;
	var	szText = getxmlitem (tree, tagName);
	if (szText) {
		nValue = parseInt (szText);
		bValue = !isNaN (nValue) ? (nValue != 0) : false;
	}

	return bValue;
}

/******************************************************************************
getxmlitem (tree, tagName)
	Helper to return the value of an entry in XML.
******************************************************************************/

function getxmlitem (tree, tagName)
{
	var	szItem = "";

	try {
		var	n = tree.getElementsByTagName (tagName)[0];
		szItem = n.hasChildNodes () ? n.firstChild.nodeValue : "";
	} catch (e) {
//		SetUserMsg ("XML can't find " + tagName);
		return null;
	}

	return DoDecode (szItem);
}

/******************************************************************************
getxmltext (tree, tagName)
	Helper to return the value of a text entry in XML.
******************************************************************************/

function getxmltext (tree, tagName)
{
	var	szText = getxmlitemex (tree, tagName);
	return szText ? DoDecode (szText) : "";
}

/******************************************************************************
getxmlitemex (tree, tagName)
	Helper to return the value of a possibly extended item in XML.
******************************************************************************/

function getxmlitemex (tree, tagName)
{
	var	szItem = "";

	try {
		var	n = tree.getElementsByTagName (tagName)[0];
		szItem = getNodeText (n);
	} catch (e) {
//		SetUserMsg ("XML can't find " + tagName);
		return null;
	}

	return DoDecode (szItem);
}

/******************************************************************************
getNodeText (n)
	Helper to return the text from a tree.
******************************************************************************/

function getNodeText (n)
{
	var	szText = "";

	switch (n.nodeType) {
	case 1:					// Node.ELEMENT_NODE:
		for (var cn = n.firstChild; cn; cn = cn.nextSibling)
			szText += getNodeText (cn);

		break;
	case 3:					// Node.TEXT_NODE:
		szText = n.nodeValue;
		break;
	}

	return szText;
}

/******************************************************************************
DoEncode (v)
	Encode a value for transmission and storage.
******************************************************************************/

function DoEncode (v)
{
	var	szRes;

	try {
		szRes = encodeURIComponent (v);
	} catch (e) {
		szRes = escape (v);
	}

	return szRes;
}

/******************************************************************************
DoDecode (v)
	Decode a value received.
******************************************************************************/

function DoDecode (v)
{
	var	szRes;

	try {
		szRes = decodeURIComponent (v);
	} catch (e) {
		szRes = unescape (v);
	}

	return szRes;
}

