// Class for associative array element:
function cAssocElm(key, value) {
	this.key   = key;
	this.value = value;
}	

function getXMLElementValueByName(XML, elementName)
{
	var element = XML.getElementsByTagName(elementName);
	if (element.length > 0) {
		if (element[0].childNodes.length > 0)
		{
			var value = element[0].childNodes[0].nodeValue;
		}
		else
		{
			var value = "";
		}
	} else {
		var value = false;
		alert("Error #1002: XML parse failed, error getting [" + elementName + "] element");
	}

	return value;
}

function doPostFromKeyValuePairs(url, keysValues, doneFunction)
{
	var req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) 
    {
    	try 
    	{
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } 
    else if(window.ActiveXObject) 
    {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
    
	if(req) {
		
		req.onreadystatechange = function () {
    
        
    			if (req.readyState == 4) 
    			{
        			// only if "OK"
						        			
        			eval(doneFunction);
        			req = false;
    			}
		}
		
		try 
		{
			req.open("POST", url, true);
		}
		catch(e)
		{
//					alert("Error : " + e);
			window.status = "AJAX error" + e;
		}

		data = new Array();
		for (a = 0; a < keysValues.length; a++) {
			data.push(keysValues[a].key + "=" + keysValues[a].value);
		}
		
		send_data = data.join("&");
//				alert(send_data);
	
		req.send(send_data);
	}

}

function doPostFromElement(url, elementID, doneFunction)
{
	var req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) 
    {
    	try 
    	{
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } 
    else if(window.ActiveXObject) 
    {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
    
	if(req) {
		
		req.onreadystatechange = function () {
    
        
    			if (req.readyState == 4) 
    			{
        			// only if "OK"
        			//alert("done");
        			req = false;
        			
        			eval(doneFunction);
        			//window.status = doneMessage;
    			}
		}
		
		try 
		{
			req.open("POST", url, true);
		}
		catch(e)
		{
//					alert("Error : " + e);
			window.status = "AJAX error";
		}
			
		data = document.getElementById(elementID).value;
		
		//alert(data);
		
		req.send(data);
	}
}

function htmlSpecialCharsReversed(str)
{
	str = replaceAll(str, /&gt;/, ">");
	str = replaceAll(str, /&lt;/, "<");
	str = replaceAll(str, /&#039;/, "\'");
	str = replaceAll(str, /&quot;/, "\"");
	str = replaceAll(str, /&amp;/, "&");
	
	return str;
}

function replaceAll(str, regExp, replacement)
{
	var tmp = "";
	while (true)
	{
		tmp = str.replace(regExp, replacement);
		if (str == tmp)
		{
			break;
		}
		str = tmp;
	}
	
	return str;
}