/**
*
* This code is the property of Järpås Datalager. 
* You may not copy or use any code on this site as your own or 
* in any other situation without written permission by Järpås datalager.
* 
* Theft or any other type of usage is prohibited by law and will 
* lead to punishment when recognized.
*
* In 'success' of stealing the code to convert as your own, you are 
* forever a liar, until you confess to Järpås Datalager. 
*
* The code is copyright by Järpås Datalager and Petrus Åström.
*
* Contact information: Ph: +46 510 91940
* 
* 
*/
/**
* Class and methods for retreaving data from server through xmlhttprequest
* Copyright Petrus Åström, Järpås Datalager, 2005-10
* You can NOT use this code without written permission from Järpås Datalager.
* Contact: petrus(dot)astrom(at)jdatalager(dot)se
*/


/*
* A requester class
*/
function Xmlrequester(CompletionHandler,ProgressHandler) {

	var req;
	var isIE = '';
	var params = '';
	var timeout;
	var starttime;
	var timediff;
	var sessionid = '';
	this.clientErrorFunc;
	var success = false;
	var xmldom=false;

	this.request = function(method, url, async) {
		createRequestObject();
		if(req) {
		var d = new Date();
		starttime = d.getMilliseconds();
			req.onreadystatechange = function() {
				processXMLRequests();
			}
//		var magic = getDivP('magic');
//		var mags = "&magic="+magic.value;
		req.open(method, url, async);
		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		req.setRequestHeader("Content-encoding", "iso8859-1");
		req.setRequestHeader("Content-length", params.length);
		req.setRequestHeader("Connection", "close");
		req.send(params);
		} else {
			try {
			req =  new ActiveXObject("Microsoft.XMLDOM");
			req.async = async;
			req.load(url+'?'+params+mags);
			xmldom=true;
			} catch(e) {}
		}
	}

	this.addParams = function(name, value) {
		params+=(params.length < 1)?''+name+'='+escape((''+value)):'&'+name+'='+escape((''+value)); 
	}

	this.clearParams = function() {
		params = '';
	}
	
	function createRequestObject() {
		try {
		        req = new XMLHttpRequest();
		} catch(e) {
		isIE = true;
		success=false;
		var MSXML_XMLHTTP_PROGIDS = new Array(
			'MSXML2.XMLHTTP.5.0',
			'MSXML2.XMLHTTP.4.0',
			'MSXML2.XMLHTTP.3.0',
			'MSXML2.XMLHTTP',
			'Microsoft.XMLHTTP'
		);

		for(var i=0;i < MSXML_XMLHTTP_PROGIDS.length && !success; i++) {
				try { 
				req = new ActiveXObject(MSXML_XMLHTTP_PROGIDS[i]);
				success=true;
				} catch(e) {}
		}
	
		}
	}
		
	function processXMLRequests() {
	
	if(xmldom) {
		CompletionHandler.request(req);
	} else {
	
	ProgressHandler.progress(req.readyState);
	
	var d = new Date();
	timediff = d.getMilliseconds() - starttime;
	if (timediff > timeout) {

	if (clientErrorFunc)
	clientErrorFunc('Server response error, halting request.');
	// Let client stop and clean up request
	delete req;
	createRequestObject();
	}
	
	
	if (req.readyState == 4) {
	if (req.status == 200) {
		CompletionHandler.request(req.responseXML, req.responseText);
		
		params = '';
		delete req;
	} else {
		if (clientErrorFunc)
		clientErrorFunc("There was a problem retrieving the XML data:\n" +
		req.statusText);
		delete req;
	}
	}
	}
	
	}
	
}
