function AR(){
	var req =new Object();
	req.timeout =null;
	req.generateUniqueUrl =true;
	req.url =window.location.href;
	req.method ="GET";
	req.async =true;
	req.username =null;
	req.password =null;
	req.parameters =new Object();
	req.requestIndex =AR.numARs++;
	req.responseReceived =false;
	req.groupName =null;
	req.queryString ="";
	req.responseText =null;
	req.responseXML =null;
	req.status =null;
	req.statusText =null;
	req.aborted =false;
	req.xmlHttpRequest =null;
	req.onTimeout=null;
	req.onLoading=null;
	req.onLoaded=null;
	req.onInteractive=null;
	req.onComplete=null;
	req.onSuccess=null;
	req.onError=null;
	req.onGroupBegin=null;
	req.onGroupEnd=null;
	
	req.xmlHttpRequest =AR.getXmlHttpRequest();
	if (req.xmlHttpRequest==null) {return null;}
	
	req.xmlHttpRequest.onreadystatechange =	function(){
		if(req==null||req.xmlHttpRequest==null){return;}
		if(req.xmlHttpRequest.readyState==1){
			req.onLoadingInternal(req);
			}
		if(req.xmlHttpRequest.readyState==2){
			req.onLoadedInternal(req);
			}
		if(req.xmlHttpRequest.readyState==3){
			req.onInteractiveInternal(req);
			}
		if(req.xmlHttpRequest.readyState==4){
			req.onCompleteInternal(req);
			}
		};

	req.onLoadingInternalHandled=false;
	req.onLoadedInternalHandled=false;
	req.onInteractiveInternalHandled=false;
	req.onCompleteInternalHandled=false;
	
	req.onLoadingInternal=function(){
		if(req.onLoadingInternalHandled){return;}
		AR.numActiveARs++;
		if(AR.numActiveARs==1&&typeof(window['ARBegin'])=="function"){
			ARBegin();
			}
		if(req.groupName!=null){
			if(typeof(AR.numActiveAGRs[req.groupName])=="undefined"){
				AR.numActiveAGRs[req.groupName]=0;
				}
			AR.numActiveAGRs[req.groupName]++;
			if(AR.numActiveAGRs[req.groupName]==1 && typeof(req.onGroupBegin)=="function"){
				req.onGroupBegin(req.groupName);
				}
			}
		if(typeof(req.onLoading)=="function"){
			req.onLoading(req);
			}
		req.onLoadingInternalHandled=true;
		};
		
	req.onLoadedInternal=function(){
		if(req.onLoadedInternalHandled){return;}
		if(typeof(req.onLoaded)=="function"){
			req.onLoaded(req);
			}
		req.onLoadedInternalHandled=true;
		};
	
	req.onInteractiveInternal=function(){
		if(req.onInteractiveInternalHandled){return;}
		if(typeof(req.onInteractive)=="function"){
			req.onInteractive(req);
			}
		req.onInteractiveInternalHandled=true;
		};
	
	req.onCompleteInternal=function(){
		if(req.onCompleteInternalHandled || req.aborted){return;}
		req.onCompleteInternalHandled=true;
		AR.numActiveARs--;
		if(AR.numActiveARs==0 && typeof(window['AREnd'])=="function"){
			AREnd(req.groupName);
			}
		if(req.groupName!=null){
			AR.numActiveAGRs[req.groupName]--;
			if(AR.numActiveAGRs[req.groupName]==0 && typeof(req.onGroupEnd)=="function"){
				req.onGroupEnd(req.groupName);
				}
			}
		req.responseReceived =true;
		req.status=req.xmlHttpRequest.status;
		req.statusText=req.xmlHttpRequest.statusText;
		req.responseText=req.xmlHttpRequest.responseText;
		req.responseXML=req.xmlHttpRequest.responseXML;
		if(typeof(req.onComplete)=="function") {
			req.onComplete(req);
			}
		if(req.xmlHttpRequest.status==200 && typeof(req.onSuccess)=="function"){
			req.onSuccess(req);
			}
		else if(typeof(req.onError)=="function"){
			req.onError(req);
			}
		//delete req.xmlHttpRequest['onreadystatechange'];
		req.xmlHttpRequest =null;
		};
		
	req.onTimeoutInternal=function(){
		if(req!=null && req.xmlHttpRequest!=null && !req.onCompleteInternalHandled){
			req.aborted =true;
			req.xmlHttpRequest.abort();
			AR.numActiveARs--;
			if(AR.numActiveARs==0 && typeof(window['AREnd'])=="function"){
				AREnd(req.groupName);
				}
			if(req.groupName!=null){
				AR.numActiveAGRs[req.groupName]--;
				if(AR.numActiveAGRs[req.groupName]==0 && typeof(req.onGroupEnd)=="function"){
					req.onGroupEnd(req.groupName);
					}
				}
			if(typeof(req.onTimeout)=="function"){
				req.onTimeout(req);
				}
			delete req.xmlHttpRequest['onreadystatechange'];
			req.xmlHttpRequest =null;
			}
		};

	req.process = function(){
		if(req.xmlHttpRequest!=null){
			if(req.generateUniqueUrl && req.method=="GET"){
				req.parameters["ARUniqueId"] =new Date().getTime() + "" + req.requestIndex;
				}
			var content =null;
			for(var i in req.parameters){
				if(req.queryString.length>0){
					req.queryString +="&";
					}
//			req.queryString +=encodeURIComponent(i) + "=" + encodeURIComponent(req.parameters[i]);
				req.queryString +=escape(i) + "=" + escape(req.parameters[i]);
				}
			if(req.method=="GET"){
				if(req.queryString.length>0){
					req.url +=((req.url.indexOf("?")>-1)?"&":"?") + req.queryString;
					}
				}
			req.xmlHttpRequest.open(req.method,req.url,req.async,req.username,req.password);
			if(req.method=="POST"){
				if(typeof(req.xmlHttpRequest.setRequestHeader)!="undefined"){
					req.xmlHttpRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
					}
				content =req.queryString;
				}
			if(req.timeout>0){
				setTimeout(req.onTimeoutInternal,req.timeout);
				}
			req.xmlHttpRequest.send(content);
			}
		};
	
	req.handleArguments =function(args){
		for(var i in args){
			if(typeof(req[i])=="undefined"){
				req.parameters[i] =args[i];
				}
			else{
				req[i] =args[i];
				}
			}
		};
		
	req.getAllResponseHeaders =function(){
		if(req.xmlHttpRequest!=null){
			if(req.responseReceived){
				return req.xmlHttpRequest.getAllResponseHeaders();
				}
			alert("Cannot getAllResponseHeaders because a response has not yet been received");
			}
		};
		
	req.getResponseHeader =function(headerName){
		if(req.xmlHttpRequest!=null){
			if(req.responseReceived){
				return req.xmlHttpRequest.getResponseHeader(headerName);
				}
			alert("Cannot getResponseHeader because a response has not yet been received");
			}
		};
	
	return req;
	}
	
AR.getXmlHttpRequest=function(){
	if(window.XMLHttpRequest){
		return new XMLHttpRequest();
		}
	else if(window.ActiveXObject){/*@cc_on @*/
/*@if(@_jscript_version >=5)
try{return new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{return new ActiveXObject("Microsoft.XMLHTTP");}catch(E){return null;}}@end @*/
		}
	else{
		return null;
		}
	};
	
AR.isActive=function(){
	return(AR.numActiveARs>0);
	};
	
AR.get=function(args){
	AR.doRequest("GET",args);
	};
	
AR.post=function(args){
	AR.doRequest("POST",args);
	};
	
AR.doRequest=function(method,args){
	if(typeof(args)!="undefined" && args!=null){
		var oAR =new AR();
		oAR.method=method;
		oAR.handleArguments(args);
		oAR.process();
		}
	};
	
AR.submit=function(theform, args){
	var oAR =new AR();
	if(oAR==null){
		return false;
		}
	var serializedForm =AR.serializeForm(theform);
	oAR.method =theform.method.toUpperCase();
	oAR.url =theform.action;
	oAR.handleArguments(args);
	oAR.queryString =serializedForm;
	oAR.process();
	return true;
	};
	
AR.serializeForm =function(theform){
	var els =theform.elements;
	var len =els.length;
	var queryString ="";
	this.addField =function(name,value){
		if(queryString.length>0){
			queryString +="&";
			}
		queryString +=encodeURIComponent(name) + "=" + encodeURIComponent(value);
		};
	for(var i=0;i<len;i++){
		var el =els[i];
		if(!el.disabled){
			switch(el.type){
				
				case 'text':
				case 'password':
				case 'hidden':
				case 'textarea':
					this.addField(el.name,el.value);
					break;
					
				case 'select-one':
					if(el.selectedIndex>=0){
						this.addField(el.name,el.options[el.selectedIndex].value);
						}
					break;
					
				case 'select-multiple':
					for(var j=0;j<el.options.length;j++){
						if(el.options[j].selected){
							this.addField(el.name,el.options[j].value);
							}
						}
					break;
					
				case 'checkbox':
				case 'radio':
					if(el.checked){
						this.addField(el.name,el.value);
						}
					break;
				}
			}
		}
	return queryString;
	};

AR.numActiveARs =0;
AR.numActiveAGRs =new Object();
AR.numARs =0;


