
function ajaxObj() {

	this.proxyUrl = "http://"+document.domain+"/cgi-bin/tools/proxy?p=32241&url=";
	this.pendingRequests = 0;
	this.ourInterval = 0;

	this.createRequest = function(){
		var asyncHttp = null;
		try{
			asyncHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				asyncHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				asyncHttp = null;
			}
		}
		if(!asyncHttp && typeof XMLHttpRequest!='undefined'){
			try{
				asyncHttp = new XMLHttpRequest();
			} catch(e) {
				asyncHttp = null;
			}
		}
		if(!asyncHttp && window.createRequest){
			try{
				asyncHttp = window.createRequest();
			}catch(e){
				asyncHttp = null;
			}
		}
		return asyncHttp;
	}
	

	this.localRequest = function( url, onSuccess, onTimeout, onFailure, tVar ){
		var requestObj = this.createRequest();
		if( requestObj ){
			this.makeRequest(requestObj, url, onSuccess, onTimeout, onFailure, tVar);
		}
	}

	this.proxyRequest = function( url, onSuccess, onTimeout, onFailure, tVar ){
		var requestObj = this.createRequest();
		if( requestObj ){
			url = url.replace(/ /, '+');
			url = this.proxyUrl + escape(url);
			//url = this.proxyUrl + url;
			this.makeRequest(requestObj, url, onSuccess, onTimeout, onFailure, tVar);
		}
	}

	this.makeRequest = function(requestObj, url, onSuccess, onTimeout, onFailure, tVar ){
			requestObj.open("GET", url, true );
			var ajaxComm = this;
			requestObj.onreadystatechange = function(){
				if( requestObj.readyState == 4 ){
					ajaxComm.pendingRequests--;
					if ( requestObj.status == 200 ){
						onSuccess(requestObj.responseText, tVar);
					} else {
						onFailure(requestObj.responseText, tVar);
					}
				}
			}
			this.pendingRequests++;
			requestObj.send(null);
	}

	this.headRequest = function(url, onSuccess, onTimeout, onFailure, tVar){
		var requestObj = this.createRequest();
		var ajaxComm = this;
		if( requestObj ){
			try {
				requestObj.open("HEAD", url, true);
				requestObj.onreadystatechange=function(){
					if (requestObj.readyState==4) {
							onSuccess(requestObj.status, tVar);
					}
				}
				requestObj.send(null);
			} catch(e) {} 
		}
	}

	this.post = function(url, paramObj, onSuccess, onTimeout, onFailure){
		var requestObj = this.createRequest();
		if( requestObj ){
			var params = ""
			for( var i in paramObj ){
				var p = escape(paramObj[i]);
				p = p.replace(/,/, ".");
				params += escape(i)+"="+p+"&";
			}
	//		params = params.replace( /.*&$/, "" );
			requestObj.open("POST", url, true);

			//Send the proper header information along with the request
			requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			requestObj.setRequestHeader("Content-length", params.length);
			requestObj.setRequestHeader("Connection", "close");
			var ajaxComm = this;

			requestObj.onreadystatechange = function() {//Call a function when the state changes.
				if(requestObj.readyState == 4 && requestObj.status == 200) {
					ajaxComm.pendingRequests--;
					onSuccess(requestObj.responseText);
				}
			}	
			this.pendingRequests++;
			requestObj.send(params);
		}
	}

	this.doneLoading = function( func, checkTime, tVar ){
		if( this.pendingRequests > 0 ){
			if( navigator.appName.match(/Microsoft/i)){
				var tmp = this;
				tmp.ourInterval = window.setInterval(function(){tmp.doneLoadingTest( tmp, func, tVar)}, 100);
			} else {
				this.ourInterval = setInterval(this.doneLoadingTest, 100, this, func, tVar);
			}
		} else {
			if( tVar ){
				func(tVar);
			} else {
				func();
			}
		}
	}

	this.doneLoadingTest = function(ac, func, tVar){
		if( parseInt(ac.pendingRequests) <= 0 ){
			if( navigator.appName.match(/Microsoft/i)){
				window.clearInterval( ac.ourInterval );
			} else {
				clearInterval( ac.ourInterval );
			}
			if( tVar ){
				func(tVar);
			} else {
				func();
			}
		}
	}
}
