var xmlHttp = createXmlHttpRequestObject();

function init(strQuery){
	if(window.XMLHttpRequest && window.XSLTProcessor && window.DOMParser){
		stylesheetDoc = "";
		loadStyleSheet();
		loadPage(1,strQuery);
		return;
	}

	if(window.ActiveXObject && createMsxml2DOMDocumentObject()){
		stylesheetDoc = "";
		loadStyleSheet();
		loadPage(1,strQuery);
		return true;
	}else{
		alert("Your browser doesn't support the necessary functionality.");
	}
}

function createMsxml2DOMDocumentObject(){
	var msxml2DOM;
	var msxml2DOMDocumentVersions = new Array("MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0");

	for(var i=0;i<msxml2DOMDocumentVersions.length && !msxml2DOM; i++){
		try{
				msxml2DOM = new ActiveXObject(msxml2DOMDocumentVersions[i]);
		}catch(e){
		}
	}

	if(!msxml2DOM)
		alert("Please upgrade your MSXML version from \n" + "http://msdn.microsoft.com/XML/XMLDownloads/default.aspx");
	else
		return msxml2DOM;
}

function createXmlHttpRequestObject(){
	var xmlHttp;

	try{
		xmlHttp = new XMLHttpRequest();
		return xmlHttp;
	}catch(e){
		var xmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP");

		for(var i=0;i<xmlHttpVersions.length && !xmlHttp; i++){
			try{
				xmlHttp = new ActiveXObject(xmlHttpVersions[i]);
			}catch(e){
			}
		}
		if(!xmlHttp)
			alert("Error creating the XMLHttpRequest object.");
		else
			return xmlHttp;
	} 
}

function loadPage(pageNo,strQuery){
	editableID = false;

	if(xmlHttp && (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)){
		xmlHttp.open("GET",strQuery,true);
		xmlHttp.onreadystatechange = handlePageLoad;
		xmlHttp.send(null);
	}
}

function handlePageLoad(){
	if(xmlHttp.readyState == 4){
		if(xmlHttp.status == 200){
				response = xmlHttp.responseText;

				if(response.indexOf("ERRNO") >= 0 || response.indexOf("error") >= 0 || response.length == 0){
					alert(response.length == 0 ? "Server error." : response);
					return;
				}
				
				xmlResponse = xmlHttp.responseXML;

				if(window.XMLHttpRequest && window.XslTProcessor && window.DOMParser){
					var xsltProcessor = new XSLTProcessor();
					page = xsltProcessor.transformToFragment(xmlResponse,document);

					var pageDiv = document.getElementByID(divID);
					pageDiv.innerHTML = "";
					pageDiv.appendchild(page);
				}else if (window.ActiveXObject){
					var theDocument = createMsxml2DOMDocumentObject();
					theDocument.async = false;
					theDocument.load(xmlResponse);
					var pageDiv = document.getElementById(divID);

					if(stylesheetDoc){
						pageDiv.innerHTML = theDocument.transformNode(stylesheetDoc);
					}
				}else{
					alert("Error reading server response.");
				}
		}
	}
}

function loadStyleSheet(){
	xmlHttp.open("GET", xsltFileUrl, false);
	xmlHttp.send(null);

	if(this.DOMParser){
		var dp = new DOMParser();
		stylesheetDoc = dp.parseFromString(xmlHttp.responseText, "text/xml");
	}else{
		stylesheetDoc = createMsxml2DOMDocumentObject();
		stylesheetDoc.async = false;
		stylesheetDoc.load(xmlHttp.responseXML);
	}
}

function processChange(action,dSection){
	if(xmlHttp && (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)){
		var strURLQuery = feedingURL + "?action=" + action + createParamURL(dSection); 
		xmlHttp.open("GET",strURLQuery,true);
		xmlHttp.onreadystatechange = handleUPdatingRow;
		xmlHttp.send(null);
	}
}

function createParamURL(dSection){
	var strURLParams = '';
	for(var i=0; i<dSection.childNodes.length; i++){
		try{
			if(dSection.childNodes.item(i).id.indexOf("Container") > -1){
				strURLParams += createParamURL(dSection.childNodes.item(i));
			}else{
				switch(dSection.childNodes.item(i).type){
					case "text":
					case "textarea":
						strURLParams += "&" + dSection.childNodes.item(i).name + "=" + escape(dSection.childNodes.item(i).value);
						break;

					case "checkbox":
						strURLParams += "&" + dSection.childNodes.item(i).name + "=" + (dSection.childNodes.item(i).checked ? 1:0);
						break;

					case "select-one":
						strURLParams += "&" + dSection.childNodes.item(i).name + "=" +  dSection.childNodes.item(i).value;
						break;
				}
			}
		}catch(e){
			//Do Nothing
		}
	}
	return strURLParams;
}