/**
*
* @author Ala'a A. Ibrahim <alaa_ibrahim@maktoob.com>
* @copyright Maktoob.com, Inc. (c) 2006.
* @version 1.0.6.8.30
**/

//Make IE Behave like Mozilla
if ( typeof( window.XMLHttpRequest ) == "undefined" ) {
    window.XMLHttpRequest = function() {
                    var arrSignatures = ["MSXML2.XMLHTTP.7.0","MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
                    
		for (var i=0; i < arrSignatures.length; i++) {
			try {
				var oRequest = new ActiveXObject(arrSignatures[i]);
				return oRequest;
			} catch (oError) {
				//ignore
			}
		}
		throw new Error("MSXML is not installed on your system.");
	}
}

//Make an Xml Loader For IE and Mozilla
function XmlDom() {
	if(window.ActiveXObject) {
            var arrSignatures = ["MSXML2.XMLHTTP.7.0","MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
            "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
            "Microsoft.XMLHTTP"];
                    
		for (var i=0; i < arrSignatures.length; i++) {
			try {
				var oXmlDom = new ActiveXObject(arrSignatures[i]);
				return oXmlDom;
			} catch (oError) {
				//ignore
			}
		}
		throw new Error("MSXML is not installed on your system.");
	} else if (document.implementation && document.implementation.createDocument) {
		var oXmlDom = document.implementation.createDocument("","",null);
		oXmlDom.addEventListener("load", function () {
			this.__changeReadyState__(4);
		}, false);
		return oXmlDom;
	} else {
		throw new Error("Your browser doesn't support an XML DOM object.");
	}
}

/**
* AjaxGet
* Perform an HTTPRequest on the url sent to it, and send the result to
* the callback function, this function uses the javascript XMLHTTPRequest
* if it's not supported, it trys to use the JVM URL object to perform the
* Same task.
*
* @author Ala'a A. Ibrahim <alaa_ibrahim@maktoob.com>
* @copyright Maktoob.com, Inc. (c) 2006.
* @version 1.0.6.8.30
*
* @param string url
* @param function callback
* @param bool XML Whether the result is XML or Text, true for XML, default false
*/
function AJAXPost() {
	var url = arguments[0];
	var callback = arguments[1];
	var bXMLResult = arguments[2];
	var callLoading = arguments[3];
	
	if(typeof XMLHttpRequest == "object" || typeof XMLHttpRequest == "function" || window.ActiveXObject) {
		var xmlhttp = new XMLHttpRequest();
		xmlhttp.onreadystatechange= function () {
			if (xmlhttp.readyState == 4) {
				if (xmlhttp.status == 200) {
					if(bXMLResult) {
						callback(xmlhttp.responseXML)
					} else {
						callback(xmlhttp.responseText)
					};
				} else {
					throw new Error("Could not connect to page")
				}
			}
		}
		urlData = url.split("?");
		url= urlData[0];
		data = urlData[1];
		if(data == undefined) {
			data = "";
		}
		xmlhttp.open('POST', url, true);
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", data.length);
		xmlhttp.send(data)
	} else if(navigator.javaEnabled() && typeof java != "undefined" && typeof java.net != "undefined") {
		var oURL = new java.net.URL(url);
		var oStream = this.oURL.openStream();
		var oReader = new java.io.BufferedReader(new java.io.InputStreamReader(oStream));
		var sResponseText = "";
		var sLine = oReader.readLine();
		while (sLine != null) {
			sResponseText += sLine + "\n";
			sLine = oReader.readLine();
		}
		oReader.close();
		if(arguments[2]) {
			var oXmlDom = new XmlDom();
			oXmlDom.onreadystatechange = function () {
				if (oXmlDom.readyState == 4) {
					oXmlDom.loadXML(sResponseText);
					callback(oXmlDom);
				}
			};
		} else {
			callback(sResponseText);
		}
	} else {
		throw new Error("Could Not Perform AJAX Here")
	}
}
