function MyAjax() {	
	this.req = null;	//Obejto XMLHttpRequest	
	this.url = null;
	this.method = 'GET';
	this.async = true;
	this.status = null;
	this.statusText = '';
	this.postData = null;
	this.readyState = null;
	this.responseText = null;
	this.responseXML = null;
	this.handleResp = null;
	this.responseFormat = 'text', // 'text', 'xml', or 'object'
	this.mimeType = null;
	this.loadingDiv=null;
	
	this.contenedor=null;
	this.file=null;

	function getXMLHTTP(){ //CREA EL OBJETO XMLHTTP
		var req;
		try {
			// Try to create object for Firefox, Safari, IE7, etc.
			req = new XMLHttpRequest();
		}
		catch (e) {
			try {
				// Try to create object for later versions of IE.
				req = new ActiveXObject('MSXML2.XMLHTTP');
			}
			catch (e) {
				try {
					 // Try to create object for early versions of IE.
					req = new ActiveXObject('Microsoft.XMLHTTP');
				}
				catch (e) {
					// Could not create an XMLHttpRequest object.
					return false;
				}
			}
		}
		return req;
	}
	
	this.doSyncRequest = function(url,method,format,vars){ //LLAMADA SINCRONICA. NO SE PROCESARA OTRA INSTRUCCION DE JAVASCRIPT HASTA QUE ESTA FUNCION DEVUELVA RESPUESTA
		var req=getXMLHTTP();
		var resp;
		var self=this;
		this.req=req;
		req.open( method, url+(method=='GET'?'?'+vars:'') ,false);	
		
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
	
			    // Do stuff to handle response
				switch (format) {
					case 'text':
						resp = req.responseText;
					break;
						case 'xml':
							resp = req.responseXML;
						break;
					case 'object':
						resp = req;
					break;
				}
				//if (req.status >= 200 && req.status <= 299) {
				if ((req.status == 200)||(req.status == 0)){
					self.handleResp(resp,self);
				}
				else {
					self.handleErr(req);
					}
				}
		};
			
		if(method =='POST'){
			req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');//Sin este ecabezado no funciona el envío por POST
			req.send(vars);	//Envio las variables por post
		}
		else{ //GET
			req.send(null);	
		}
		switch (format) {
			case 'text':
				resp = req.responseText;
				break;
			case 'xml':
				resp = req.responseXML;
				break;
			case 'object':
				resp = req;
				break;
		}
		this.handleResp(resp);
		//return resp; //Devuelvo el resultado
	}

	this.doAsyncRequest = function(url,method,format,vars){ //LLAMADA ASINCRONICA
		var req=getXMLHTTP();
		var resp;
		var self=this;
		this.req=req;
		req.open( method, url+(method=='GET'?'?'+vars:'') ,true);	
		
		req.onreadystatechange = function() {
			
			if (req.readyState == 4) {
			    // Do stuff to handle response
				switch (format) {
					case 'text':
						resp = req.responseText;
					break;
						case 'xml':
							resp = req.responseXML;
						break;
					case 'object':
						resp = req;
					break;
				}
				//if (req.status >= 200 && req.status <= 299) {
				if ((req.status == 200)||(req.status == 0)){ //VALORES DE RESPUESTA EXITOSA
					self.handleResp(resp,self);
				}
				else {
					self.handleErr(req);
					}
				}
			};
		
		if(method=='POST'){
			req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');//Sin este ecabezado no funciona el envío por POST
			req.send(vars); 
		}
		else{
			req.send(null);
		}
		switch (format) {
			case 'text':
				resp = req.responseText;
				break;
			case 'xml':
				resp = req.responseXML;
				break;
			case 'object':
				resp = req;
				break;
		}
		this.handleResp(resp);
		
	}
	
	this.handleResp = function(resp,ajax) {
		alert(resp);
	};	
	
	this.handleErr = function(req) { //Función para capturar error
			var errorWin;
			try {
				errorWin = window.open('', 'errorWin');
				errorWin.document.body.innerHTML = "AJAX ERROR: "+req.responseText;
			}
			catch (e) {
				alert('An error occurred, but the error message cannot be '
				 + 'displayed. This is probably because of your browser\'s '
				 + 'pop-up blocker.\n'
				 + 'Please allow pop-ups from this web site if you want to '
				 + 'see the full error messages.\n'
				 + '\n'
				 + 'Status Code: ' + req.status + '\n'
				 + 'Status Description: ' + req.statusText);
			}
	};	
}
