var GlobalDivName;
var ResultParams = new Array();
var Ok=0
NORMAL_STATE = 4;
INIT_STATE = 0;
HttpObj = CreateXMLHttp();

function CreateXMLHttp()
{
    var Ret = null;
    try
	{
        Ret = new ActiveXObject('Msxml2.XMLHTTP');
    }
    catch (e)
	{
        try
		{
            Ret = new ActiveXObject('Microsoft.XMLHTTP');
        }
        catch (ee) {
            Ret = null;
        }
    }
    if (!Ret && typeof XMLHttpRequest != 'undefined')
        Ret = new XMLHttpRequest();

    return Ret;
}

/*function RefreshAjaxDiv(DivName, Url)
{
	if (HttpObj.readyState == NORMAL_STATE || HttpObj.readyState == INIT_STATE)
	{
		HttpObj.open('GET', Url, true);
		HttpObj.onreadystatechange = ShowResult;
		GlobalDivName = DivName;
		HttpObj.send(null);
	}
}

function ShowResult()
{
	if (HttpObj.readyState == NORMAL_STATE)
	{
		if (HttpObj.responseText)
		{
			Div = document.getElementById(GlobalDivName);
			Div.innerHTML = HttpObj.responseText;
		}
	}
}*/
function ProcessFormRadioAndCheck(Obj,Type,Value)
{
	//alert("Objeto "+Type+" Nombre: "+Obj.name+" Valor: "+Value);
	if ((Type=="radio") || (Type=="checkbox"))
	{	
		
		if (Obj.checked)
			return Value;
		else
			return 0;
	
	}else
		return 1;
}

function AnularPeticion()
{
		//HttpObj.abort();
		alert("La Conexion esta demorando mucho!");
}


function SendForm(DivName, Urls, FormId, CallPostFunc, EmptyDiv,DivAjaxState,MsjLoading)
{
         var FormObj = document.getElementById(FormId);
         var LongForm = FormObj.elements.length;
         var String2Send = "";
         var SeparateFields;
         SeparateFields = "";
         for (var i=0; i <= FormObj.elements.length-1;i++) {
			if (ProcessFormRadioAndCheck(FormObj.elements[i],FormObj.elements[i].type,FormObj.elements[i].value))
			{
				String2Send += SeparateFields+FormObj.elements[i].name+'='+encodeURI(FormObj.elements[i].value);
         		SeparateFields="&";
			}
		 }
		 RefreshAjaxDiv(DivName, Urls, '', '', '', '', 'POST', '',String2Send,EmptyDiv,DivAjaxState,MsjLoading,CallPostFunc);
		 return false;
}


//COMMENTS
function RefreshAjaxDiv(DivName, Urls, PostFunc, ResultSplitChar, NotOkFunc, OkFunc, AjaxMethod, JSResp, PostVars, EmptyDiv, DivShowAjaxState, MsjLoading,PostFunc2Show)
{
/*	HttpObj.open("HEAD", "/index.php",true);
	HttpObj.onreadystatechange=function() {
	  							if (HttpObj.readyState==4)
	  							{
	   								alert(HttpObj.getAllResponseHeaders())
	   								alert("File was last modified on - "+HttpObj.getResponseHeader("Last-Modified"))
	  							}
	 						}
	 HttpObj.send(null)*/
	if (EmptyDiv && document.getElementById(DivName))
		document.getElementById(DivName).innerHTML = "";
	
	//alert(HttpObj.readyState);
	if (HttpObj.readyState == NORMAL_STATE || HttpObj.readyState == INIT_STATE)
	{
		ResultParams[0] = PostFunc;
		ResultParams[1] = ResultSplitChar;
		ResultParams[2] = NotOkFunc;
		ResultParams[3] = OkFunc;
		ResultParams[4] = JSResp;
		ResultParams[5] = PostFunc2Show;
		if( AjaxMethod!= 'POST' ){
			AjaxMethod = 'GET';
			PostVars = null;
		}
		
//		if( Urls.indexOf('?')=='-1' ) Urls += "?";
//		else Urls += "&";
//		Urls += "AjxStp=" + new Date().getTime();
		HttpObj.open(AjaxMethod, Urls, true);
		//var tmrAnular = setTimeout("AnularPeticion()", 20000); //20000 = 20 segundos
//alert('URL:'+Urls);
		HttpObj.onreadystatechange=function(){
			/*Los Estados son:
			0 = uninitialized
			1 = loading
			2 = loaded
			3 = interactive
			4 = complete*/
			switch (HttpObj.readyState){
				case 1:
					  //Si Existe la Div de Muestra de Estado la muestra.
					  if (document.getElementById(DivShowAjaxState)){
						  	if (MsjLoading)
									document.getElementById(DivShowAjaxState).innerHTML=MsjLoading;
							document.getElementById(DivShowAjaxState).style.display = "inline";
					  }
					  break
				case 4:
						//clearTimeout(tmrAnular);
					  if(HttpObj.status==200){						
							if (HttpObj.responseText)
							{
							//alert(HttpObj.getAllResponseHeaders())
							//alert("ResponseText para Div:"+GlobalDivName+" :"+HttpObj.responseText);
								if( ResultParams[0] )
									eval(ResultParams[0]);
					
								var ResultArray = new Array();
								if( ResultParams[1] )
								{
									ResultArray = HttpObj.responseText.split( ResultParams[1] );
									var ResponseText = ResultArray[1];
								}
								else
									var ResponseText = HttpObj.responseText;
					
								// Si retorna 1, asumo que viene con error y evalúo la función asociada al error
								if( ResultArray[0]=="1" && ResultParams[2] )
									eval(ResultParams[2]);
									// Si retorna 0, asumo que viene sin error y evalúo la función asociada
								else if( ResultArray[0]=="0" && ResultParams[3] )
										eval(ResultParams[3]);
								
								Div = document.getElementById(GlobalDivName);
					
								//Si devuelvo solo JS le hago un eval
								if (ResultParams[4])
								{
									eval(ResponseText);
								}
								else
								{ 
									if(ResponseText.indexOf("//JS_AJAX;")!=-1)
									{
										ResponseText = ResponseText.substring(10);
										//alert(ResponseText);
										eval(ResponseText);
									}
									else
									{
										//alert(ResponseText);
										Div.innerHTML = ResponseText;
									}
								}
									if( ResultParams[5] ){
										eval(ResultParams[5]);
									}
								}
					  }else
					  	alert("No se pudo recuperar la información: " + HttpObj.statusText);
						//Si Existe Div de Estado la Oculta
						if (document.getElementById(DivShowAjaxState)){
							document.getElementById(DivShowAjaxState).style.display = "none";
						}
					  break;
			}
		}
		//HttpObj.open(AjaxMethod, Urls, true);
		
		if(document.body)
			document.body.style.cursor='wait';

//		HttpObj.onreadystatechange = ShowResult;
		GlobalDivName = DivName;
		HttpObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		HttpObj.send(PostVars);

		if(document.body)
			document.body.style.cursor='default';
	}
/*	else
	{
		var FuncStr = "RefreshAjaxDiv('"+DivName+"','"+Urls+"'";
		if( PostFunc ) FuncStr += ",'"+PostFunc+"'";
		if( ResultSplitChar ) FuncStr += ",'"+ResultSplitChar+"'";
		if( NotOkFunc ) FuncStr += ",'"+NotOkFunc+"'";
		if( OkFunc ) FuncStr += ",'"+OkFunc+"'";
		if( AjaxMethod ) FuncStr += ",'"+AjaxMethod+"'";
		if( JSResp ) FuncStr += ",'"+JSResp+"'";
		if( PostVars ) FuncStr += ",'"+PostVars+"'";		
		FuncStr += ")";
		TObj = window.setTimeout(FuncStr,50);
	}	*/
}

function ShowResult()
{
	if (HttpObj.readyState == NORMAL_STATE && HttpObj.status == 200 )
	{
		if (HttpObj.responseText)
		{

//alert(HttpObj.getAllResponseHeaders())
//alert("ResponseText para Div:"+GlobalDivName+" :"+HttpObj.responseText);
			if( ResultParams[0] )
				eval(ResultParams[0]);

			var ResultArray = new Array();
			if( ResultParams[1] )
			{
				ResultArray = HttpObj.responseText.split( ResultParams[1] );
				var ResponseText = ResultArray[1];
			}
			else
				var ResponseText = HttpObj.responseText;

			// Si retorna 1, asumo que viene con error y evalúo la función asociada al error
			if( ResultArray[0]=="1" && ResultParams[2] )
				eval(ResultParams[2]);
				// Si retorna 0, asumo que viene sin error y evalúo la función asociada
			else if( ResultArray[0]=="0" && ResultParams[3] )
					eval(ResultParams[3]);
			
			Div = document.getElementById(GlobalDivName);

			//Si devuelvo solo JS le hago un eval

			if (ResultParams[4])
			{
				eval(ResponseText);
			}
			else
			{ 
				if(ResponseText.indexOf("//JS_AJAX;")!=-1)
				{
					ResponseText = ResponseText.substring(10);
					//alert(ResponseText);
					eval(ResponseText);
				}
				else
				{
					//alert(ResponseText);
					Div.innerHTML = ResponseText;
				}
			}
		}
	}
}

function ProcessAjaxResponse(FormName)
{
	document.forms[FormName].reset();
	for(i=1; i < FieldsArrayIndex.length; i = i+2)
	{
		if(document.forms[FormName].elements[FieldsArrayIndex[i]])
		{
			FieldObj = document.forms[FormName].elements[FieldsArrayIndex[i]];
			
			//Caso de los radio buttons
			if(FieldObj.name==undefined)
			{
				FieldObjLength = document.forms[FormName].elements[FieldsArrayIndex[i]].length;	
				for(j=0; j < FieldObjLength; j++)
				{
					if(FieldObj[j].value==FieldsArray[i])	
						FieldObj[j].checked = true;
					break;
				}
			}
			
			switch(FieldObj.type)
			{
				case "text":
				case "hidden":
				case "textarea":
				case "select-one":
					FieldObj.value = FieldsArray[i];
				break;
				case "checkbox":
					if(FieldObj.value==FieldsArray[i])
						FieldObj.checked = true;
				break;
				case "select-multiple":
					//FALTA
				break;
			}
		}
	}
}
