var XMLHTTPUtil;
(function() {
	if (XMLHTTPUtil == null) {
		XMLHTTPUtil = {};


	function getXMLHTTP(){
		var A=null;
		try{
			A=new ActiveXObject("Msxml2.XMLHTTP")
		}catch(e){
			try{
				A=new ActiveXObject("Microsoft.XMLHTTP")
			} catch(oc){
				A=null
			}
		}
		if(!A && typeof XMLHttpRequest != "undefined") {
			A=new XMLHttpRequest()
		}
		return A
	}
	
	
	XMLHTTPUtil.createRPCCallStringFunction = function (uriPrefix, beforeFunc, afterFunc) {		
		var _xmlHttp = null;
		if (uriPrefix == null)
			uriPrefix = '';
		var callServerFunc = function callServer(uri, func, data){
			if(_xmlHttp&&_xmlHttp.readyState!=0){
					if (afterFunc)
						afterFunc();
					_xmlHttp.abort()
				}
				_xmlHttp=getXMLHTTP();
				if(_xmlHttp){
					var postfix = '?';
					if (uri.indexOf('?') != -1)
						postfix = '&';
					
					postfix += 'cachetimestamp=' + new Date().getTime();
					_xmlHttp.open("POST",uriPrefix + uri + postfix, true);
					_xmlHttp.setRequestHeader('Accept-Charset','ISO-8859-1');
					_xmlHttp.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
					_xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
					_xmlHttp.onreadystatechange=function() {
						if(_xmlHttp.readyState==4&&_xmlHttp.responseText) {
							try {
								func(_xmlHttp.responseText);
							} catch(ex) {
								throw ('Error executing process function\n\n' + ex + '\n\n' +func);
							}
							if (afterFunc)
								afterFunc();
							
						}
					};
					if (beforeFunc)
						beforeFunc();
					var dataS = null;
					if (data) {
						var amp ='';
						dataS = '';
						dataS=data;
					}
					_xmlHttp.send(dataS);
				}
			}
		
		return callServerFunc;
		
	}
	
	
	
	
	
	XMLHTTPUtil.createRPCCallFunction = function (uriPrefix, beforeFunc, afterFunc) {
		
		var _xmlHttp = null;
		if (uriPrefix == null)
			uriPrefix = '';
		
		var callServerFunc = 
			function callServer(uri, func, data){
				
				if(_xmlHttp&&_xmlHttp.readyState!=0){
					if (afterFunc)
						afterFunc();
					_xmlHttp.abort()
				}
				_xmlHttp=getXMLHTTP();
				if(_xmlHttp){
					var postfix = '?';
					if (uri.indexOf('?') != -1)
						postfix = '&';
					
					postfix += 'cachetimestamp=' + new Date().getTime();
					_xmlHttp.open("POST",uriPrefix + uri + postfix, true);
					_xmlHttp.setRequestHeader('Accept-Charset','ISO-8859-1');
					_xmlHttp.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
					_xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
					_xmlHttp.onreadystatechange=function() {
						if(_xmlHttp.readyState==4&&_xmlHttp.responseText) {
							try {
								func(_xmlHttp.responseText);
							} catch(ex) {
								throw ('Error executing process function\n\n' + ex + '\n\n' +func);
							}
							if (afterFunc)
								afterFunc();
							
						}
					}
					;
					
					if (beforeFunc)
						beforeFunc();
					var dataS = null;
					if (data) {
						var amp ='';
						dataS = '';
						for (var x in data) {
							var val = data[x];
							if (val.push && val.join) {
								for (var i=0; i<val.length; i++) {
									dataS+= amp + x + '=' + escape(data[x][i]);
								}
							} else {
								dataS+= amp + x + '=' + escape(data[x]);
							}
							amp = '&';
						}
					}
					//alert(dataS);
					_xmlHttp.send(dataS);
				}
			}
		
		return callServerFunc;
		
	}


	}
}) ();

