function oRequest()
{
	this.xmlhttp=null;
	this._callback="";
	this._layerfill="";
	this._url="";
	this._postdata="";
	this.fireEvent=null;
	this.returnType = "html";

	this.Create=function()
	{
		if(!this.xmlhttp)
		{
			try 
			{ 
				this.xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
			}
			catch(e)
			{ 
				try
				{ 
					this.xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
				} 
				catch(E) { xmlhttp=false; }
			}
			if (!this.xmlhttp && typeof XMLHttpRequest!='undefined') { this.xmlhttp=new XMLHttpRequest(); } 
		}
		
		return this.xmlhttp;
	}

	this.setData = function(data)
	{
		this._postdata = data;
	}
	

	this.Send = function(url,layerfill,callback,evt,returntype)
	{
		//url: url to call
		//layerfills:	<div> tag on which we print de combo body (<select>..</select>)
		//return:	void
		var oReqHTTP;
		var _callback2;
		var _layerfill2;
		var _fireEvent = this.fireEvent = (evt!=undefined)?evt:this.fireEvent;
		var _returntype = this.returnType = (returntype!=undefined)?returntype:this.returnType;
		if(typeof(MM_findObj)=="undefined")
		{
			alert("Error: MM_Functions.js file not found \nSource: Send(url,callback)");
			return;
		}
		
		this._layerfill = _layerfill2 = (layerfill!=undefined)?MM_findObj(layerfill):"";
		_callback2 = this._callback  = callback;

		this._url	= url;
		if(this._url!="")
		{
			//avoid cache
			if(this._url.indexOf("?")==-1){
				this._url = this._url + "?p_" + Math.random()*9999999999;
			}else{
				this._url = this._url + "&p_" + Math.random()*9999999999;
			}
			
			oReqHTTP = this.Create();
			if(oReqHTTP)
			{
				
				oReqHTTP.onreadystatechange = function()
				{ 
					
					if (oReqHTTP.readyState==4)
					{ 
						//alert(oReqHTTP.status);
						if(oReqHTTP.status==200)
						{
							
							//alert(_fireEvent);
							var x = oReqHTTP.responseText;
							//alert(x);
							switch(_returntype){
							case "html":
								
								//if layer has passed then asign the html result
								if(_layerfill2 && (typeof(_layerfill2.innerHTML)!="undefined") ){
									_layerfill2.innerHTML=x;
									
								}

								//old version of callback (without params)
								if(_callback2!=""){
									eval(_callback2);
								}

								//newer version of callback (fires an event)
								if(_fireEvent)
									_fireEvent(x);

								break;

							case "js"://get an object type always
								if(_fireEvent)
									_fireEvent(eval(x));
								else
									alert("Error: Must indicate javascript routine to pass the result");
							}
						}else{
							
							if(_fireEvent)
									if(oReqHTTP.status==404){
										_fireEvent(({error:oReqHTTP.status,msg:'No se encuentra el archivo:' + url,response:oReqHTTP.responseText, file:url}));
									}else{
										_fireEvent(({error:oReqHTTP.status,msg:'Ha ocurrido un error',response:oReqHTTP.responseText, file:url}));
									}
							else
								alert("Error: " + oReqHTTP.status);
						}
					
					}
				} 
				
				if(this._postdata==""){
					oReqHTTP.open("get", this._url, true);
					oReqHTTP.send(null);   
				}else{
					//alert("POST:" + this._postdata);
					//alert(typeof(oReqHTTP.setRequestHeader));
					try{
						oReqHTTP.open("post", this._url, true);
						oReqHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
						oReqHTTP.send(this._postdata);  
					}catch(e){
						alert(e.error);
					}

					
					
					
					
				}
				
			}else{
				alert("Error: Request object not created \nSource: Send(url,callback)");	
			}
		}else{
			alert("Error: callback object not found or invalid callback object \nSource: Send(url,callback)");
		}
		return null;
	}

}
