/**
 * @author Pablo
 */
function MyAjax()
{
	
	
	this.CreateRequest = function()
	{
			if(window.XMLHttpRequest)
			{
				this.objRequest = new XMLHttpRequest();
			}
			else if(window.ActiveXObject)
			{
				this.objRequest = new ActiveXObject("Microsoft.XMLHTTP");	
			}
			else
			{
				throw new Error("No se pudo crear el objeto MyAjax. El Explorador no soporta este tipo de conexion");
			}
	}
	
	this.CreateRequest();		
	
	
	this.onStart = function()
	{
		
	}
	
	this.onComplete = function()
	{
		
	}
	
	this.getResponse = function()
	{
		return this.objRequest.responseText;
	}
	
	this.RegisterEvents = function(args)
	{
		if(args.onStart)
			this.onStart = args.onStart;

		if(args.onComplete)
			this.onComplete = args.onComplete;			
	}
	
	this.HtmlEntities = function(s)
	{	
	    var div = document.createElement('div');
	    var text = document.createTextNode(s);
	    div.appendChild(text);
	    return div.innerHTML;
	}
	
	this.HtmlEntityDecode = function(string)
	{
	    var ret, tarea = document.createElement('textarea');
	    tarea.innerHTML = string;
	    ret = tarea.value;
	    return ret;
	}
	
	this.nl2br = function(str)
	{
    	return str.replace(/([^>])\n/g, '$1<br />');
	}
		
	this.Load = function(url, div)
	{		
		var strToSend = "";
		
		this.objRequest.open("GET", url, true);		
		var objRequest = this.objRequest;
		var funcComplete = this.onComplete;
		
		this.objRequest.onreadystatechange = function()
		{
			if (objRequest.readyState == 4) 
			{ 
				if (objRequest.status == 200) 
				{ 
					objDiv = document.getElementById(div);
								
					funcComplete();
						
					if(objDiv)
						objDiv.innerHTML = objRequest.responseText;
					else
						throw new Error("No se pudo encontrar el DIV.");			
				} 
				else 
				{
					throw new Error(objRequest.statusText);
				}
			}
		}
	
		this.objRequest.send("");
		this.onStart();
	}

	
	this.SendAndLoad = function(url, div, method, vars)
	{		
		var strToSend = "";
		
		if(vars)
			for(var name in vars)
				strToSend += name + "=" + vars[name] + "&";
	
		strToSend = strToSend.substr(0, strToSend.length - 1);

		if(method == "" || method.toLowerCase() == "get")
		{
			this.objRequest.open("GET", url, true);
		}
		else
		{
			this.objRequest.open( "POST", url, true );
			this.objRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		}
		
		var objRequest = this.objRequest;
		var funcComplete = this.onComplete;
		
		this.objRequest.onreadystatechange = function()
		{
			if (objRequest.readyState == 4) 
			{ 
				if (objRequest.status == 200) 
				{ 
					objDiv = document.getElementById(div);
					
					
					funcComplete();
						
					if(objDiv)
						objDiv.innerHTML = objRequest.responseText;
					else
						throw new Error("No se pudo encontrar el DIV.");
					
				} 
				else 
				{
					throw new Error(objRequest.statusText);
				}
			}
		}
	
		this.objRequest.send(strToSend);
		this.onStart();
	}


	this.Send = function(url, method, vars)
	{		
		var strToSend = "";
		
		if(vars)
			for(var name in vars)
				strToSend += name + "=" + vars[name] + "&";
		
		strToSend = strToSend.substr(0, strToSend.length - 1);
		
		if(method == "" || method.toLowerCase() == "get")
		{
			this.objRequest.open("GET", url, true);
		}
		else
		{
			this.objRequest.open( "POST", url, true );
			this.objRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		}
		
		var objRequest = this.objRequest;
		var funcComplete = this.onComplete;
		
		this.objRequest.onreadystatechange = function()
		{
			if (objRequest.readyState == 4)  
				if (objRequest.status == 200) 	
					funcComplete();		
				else 
					throw new Error(objRequest.statusText);
	
		}
	
		this.objRequest.send(strToSend);
		this.onStart();
	}


	this.FormToString = function(form)
	{
		var strForm = "";	
		
		for(var i = 0; i < form.elements.length; i++)
		{
			if(form.elements[i].type == "select-one")
				strForm += form.elements[i].name + "=" + form.elements[i].options[form.elements[i].selectedIndex].value + "&";
			else if(form.elements[i].type == "checkbox")
				strForm += form.elements[i].name + "=" + form.elements[i].checked + "&";
			else	
				strForm += form.elements[i].name + "=" +escape(this.nl2br(form.elements[i].value)) + "&";
	   }
	   
	   strForm = strForm.substr(0,strForm.length - 1);
	   return strForm;
	}

	this.SendForm = function(url, form)
	{		
		var strToSend = this.FormToString(form);

		this.objRequest.open( "POST", url, true );
		this.objRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		
		var objRequest = this.objRequest;
		var funcComplete = this.onComplete;
		
		this.objRequest.onreadystatechange = function()
		{
			if(objRequest.readyState == 4)  
				if(objRequest.status == 200) 	
					funcComplete();		
				else 
					throw new Error(objRequest.statusText);
	
		}
	
		this.objRequest.send(strToSend);
		this.onStart();
	}
	
	this.SendFormAndLoad = function(url, div, form)
	{		
		var strToSend = this.FormToString(form);
		
		this.objRequest.open( "POST", url, true );
		this.objRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");
			
		var objRequest = this.objRequest;
		var funcComplete = this.onComplete;
		
		this.objRequest.onreadystatechange = function()
		{
			if (objRequest.readyState == 4) 
			{ 
				if (objRequest.status == 200) 
				{ 
					objDiv = document.getElementById(div);
					
					
					funcComplete();
						
					if(objDiv)
						objDiv.innerHTML = objRequest.responseText;
					else
						throw new Error("No se pudo encontrar el DIV.");
					
				} 
				else 
				{
					throw new Error(objRequest.statusText);
				}
			}
		}
	
		this.objRequest.send(strToSend);
		this.onStart();
	}
	
}
