function createXmlHttpRequestObject()
{
	return createXmlHttpRequestObject(null);
}

function createXmlHttpRequestObject(requestHandler)
{
	// will store the reference to the XMLHttpRequest object
	var xmlHttp;
	// this should work for all browsers except IE6 and older
	try  {
		// try to create XMLHttpRequest object
		xmlHttp = new XMLHttpRequest();
		//alert("OK");
	}
	catch(e){
		//alert("ASSUME IE6");
		// assume IE6 or older
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.7.0",
										"MSXML2.XMLHTTP.6.0",
		                                "MSXML2.XMLHTTP.5.0",
		                                "MSXML2.XMLHTTP.4.0",
		                                "MSXML2.XMLHTTP.3.0",
		                                "MSXML2.XMLHTTP",
		                                "Microsoft.XMLHTTP");
		// try every prog id until one works
		for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) {
			try {
	            		// try to create XMLHttpRequest object
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
			}
			catch (e) {}
		}
	}
	// return the created object or display an error message
	if (!xmlHttp)
	{
		alert("Error creating the XMLHttpRequest object.");
		return null;
	}

	if(requestHandler != null)
		xmlHttp.onreadystatechange = requestHandler;	

	return xmlHttp;
}

function executeSynchronousAjax(target,query,encoding)
{
	return executeAjax(target,query,encoding,'',false);
}

function executeAsynchronousAjax(target,query,encoding,acallback)
{
	    return executeAjax(target,query,encoding,acallback,true);
}

function executeAjax(target,query,encoding,acallback,assyn)
{
	    if(target == 'index.php')
	    {
		window.location = target+"?"+query;
		return;
	    }
	    var widget = null;
	    if(assyn=='')
			assyn = false;
	    if(acallback=='')
		    widget = createXmlHttpRequestObject();
	    else
		    widget = createXmlHttpRequestObject(acallback);
	    widget.open("POST",target,assyn);
	    widget.setRequestHeader("Content-type","application/x-www-form-urlencoded; charset=ISO-8859-1");
	    widget.send(query);
	    if(!assyn)
	    {	    			
	    	//alert(widget.responseText);
	    }
	    return widget;
}

function isAjaxError(ajaxAnswer)
{
	if(ajaxAnswer.indexOf("<errors>")!=-1)
	{
		xmlDoc = parseXmlString(ajaxAnswer);
		var root = xmlDoc.documentElement;
		var error0 = root.childNodes[0];
		var errorcode = error0.firstChild;
		var message = errorcode.nextSibling;
		rtc = errorcode.firstChild.nodeValue;
		message = message.firstChild.nodeValue;
		//return rtc;
		return	manageAjaxError(rtc,message);
		
	}	
	else
		return 0;
}


function innerJsCall(codeNode, callBackCall,mustShowWait)
{
	if(mustShowWait)
	{
		showWaitPage();
		setTimeout("executeCallBackMethod('"+codeNode+"','"+callBackCall+"')",200);		
		return;
	}
	
	executeCallBackMethod(codeNode,callBackCall);
}
	
function executeCallBackMethod(codeNode,callBackCall)
{
	if(document.getElementById(codeNode))
	{
		thecode = document.getElementById(codeNode).text;
	
		eval(thecode);
		//force browser to catch the new javascript
		eval(callBackCall);
	} else { 
		//alert(codeNode + ' not found'); 
	}
}

function invertTableDivKey(aTableKey)
{
	table = document.getElementById(aTableKey);
	if(table != undefined)
	{
		//parent_div = table.parentNode;
		parent_div = table.childNodes.item(0);
		nname = parent_div.tagName;		
		nnames = '';
		try
		{
			nnames = nname.toLowerCase();
		}
		catch (e) {
			parent_div = table.parentNode;
			nname = parent_div.tagName;
			nnames = nname.toLowerCase();
		}
		if(nnames == 'div')
		{
			pid = parent_div.id;
			parent_div.id = aTableKey;
			table.id = pid;//'rm'+aTableKey+'rm';
		}
	}
}


function manageAjaxError(rtc,message)
{

	switch(rtc){
		case 1002 :
			window.location.replace("index.php?action=timeout");	
			break;
		default :
			alert(rtc + " : "+message);
			break;
	}
	hiddeWaitPage();
	return rtc;
}

function URLEncode(atext)
{
 // The Javascript escape and unescape functions do not correspond
 // with what browsers actually do...
 var SAFECHARS = "0123456789" + // Numeric
 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
 "abcdefghijklmnopqrstuvwxyz" +
 "-_.!~*'()"; // RFC2396 Mark characters
 var HEX = "0123456789ABCDEF";

 var plaintext = atext;
 var encoded = "";
 for (var i = 0; i < plaintext.length; i++ ) {
 var ch = plaintext.charAt(i);
 if (ch == " ") {
 encoded += "+"; // x-www-urlencoded, rather than %20
 } else if (SAFECHARS.indexOf(ch) != -1) {
 encoded += ch;
 } else {
 var charCode = ch.charCodeAt(0);
 if(charCode == 8216)
 	encoded +="'";
 else if(charCode == 8217)
 	encoded +="'";
 else if(charCode == 8211)
 	encoded +="-";
 else
 if (charCode > 255) {
 /*
 alert( "Unicode Character '"
 + parseInt(charCode)
 + "' cannot be encoded using standard URL encoding.\n" +
 "(URL encoding only supports 8-bit characters.)\n" +
 "A space (+) will be substituted." );
  */
 encoded += "+";
 } else {
 encoded += "%";
 encoded += HEX.charAt((charCode >> 4) & 0xF);
 encoded += HEX.charAt(charCode & 0xF);
 }
 }
 } // for

 return encoded;
};

function URLDecode(atext)
{
 // Replace + with ' '
 // Replace %xx with equivalent character
 // Put [ERROR] in output if %xx is invalid.
 var HEXCHARS = "0123456789ABCDEFabcdef";
 var encoded = atext;
 var plaintext = "";
 var i = 0;
 while (i < encoded.length) {
 var ch = encoded.charAt(i);
 if (ch == "+") {
 plaintext += " ";
 i++;
 } else if (ch == "%") {
 if (i < (encoded.length-2)
 && HEXCHARS.indexOf(encoded.charAt(i+1)) != -1
 && HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
 plaintext += unescape( encoded.substr(i,3) );
 i += 3;
 } else {
 alert( 'Bad escape combination near ...' + encoded.substr(i) );
 plaintext += "%[ERROR]";
 i++;
 }
 } else {
 plaintext += ch;
 i++;
 }
 } // while
 
 return plaintext;
};


function ajaxDownloadFromSpider(key,classname)
{
  var elemIF = document.createElement("iframe");
  req = "service.php?action=download&mod=__spider__&key="+key+'&classname='+URLEncode(classname);
  elemIF.src = req; 
  elemIF.style.display = "none";
  document.body.appendChild(elemIF);
}

function ajaxUploadFile(module,key,issrv)
{
  var elemIF = document.createElement("iframe");
  req = "service.php?action=download&mod="+module+"&key="+key+(issrv?'&srv=download':'');

  elemIF.src = req; 
  elemIF.style.display = "none";
  document.body.appendChild(elemIF);
}


