var Ajax = new Object();
Ajax.Request=function(url,onload,method,onerror){
	this.url = url;
	this.req = null;
	this.onload = onload;
	this.method = (method)?method:"GET";
	this.onerror = (onerror)?onerror:this.defaultError;
	this.loadXMLDoc(url);
}
Ajax.Request.prototype = {
	loadXMLDoc:function(url){		
		if(window.XMLHttpRequest){
			this.req=new XMLHttpRequest();
		}
		else if(window.ActiveXObject){
			try{
				this.req = new ActiveXObject("Msxml3.XMLHTTP");
			}catch(e){
				try{
					this.req = new ActiveXObject("Msxml2.XMLHTTP");
				}catch(e){
					try{
						this.req = new ActiveXObject("Microsoft.XMLHTTP");
					}catch(e){}
				}
			}
		}		
		if(this.req){
			try{
				var loader=this;
				this.req.onreadystatechange = function(){
					loader.onReadyState.call(loader);
				}							
				this.req.open(this.method,url,true);
				
				if(this.method == "POST"){
					this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
				}				
				this.req.send(null);
			}
			catch(err){
				this.onerror.call(this);
			}
		}
	},
	onReadyState:function(){
		var req=this.req;
		var ready=req.readyState;		
		if(ready == 4){
			var httpStatus = req.status;
			if(httpStatus == 200 || httpStatus == 0){
				this.onload.call(this);
			}else{
				this.onerror.call(this);
			}
		}
	},
	defaultError:function(){
		alert("error fetching data!"
			+"\n\nreadyState:"+this.req.readyState
			+"\nstatus: "+this.req.Status
			+"\nheaders: "+this.req.getAllResponseHeaders());
	}
}
