var ajaxURL;
var ajaxPars;
var ajaxFuncion;

function ajax(url, pars)
{
	if (pars==undefined) pars='';
	
	var ajax = crearAjax();

	ajax.onreadystatechange = function ()
	{
		
		if (ajax.readyState==1) 
		{
			if(eval("document.getElementById('divAjax')"))
				document.getElementById('divAjax').style.display = '';
		}
        else if (ajax.readyState==4)
        {
        	if(eval("document.getElementById('divAjax')"))
        		document.getElementById('divAjax').style.display = 'none';

        	if(ajax.status==200)
			{
        		if (ajax.responseText=="NO_SESION")
        		{
        			ajaxURL = url;
        			ajaxPars = pars;
        			ajaxFuncion = funcion;
        			if (!eval("document.getElementById('ifrProceso')"))
        				insertHTML (document.getElementById("dProc"), "<iframe id='ifrProceso' class='ifrProceso'></iframe>");
        			document.getElementById("ifrProceso").contentWindow.location.href = "index.php?controlador=w3_login&accion=reloginAjax";
        		}
        		else
					responseAjax(ajax.responseText);
			}
			else if(ajax.status==404)
            {
				alert("La direccion no existe");
            }
			else
            {
				alert("Error: " + ajax.status);
            }
        }
	}

	ajax.open("POST", url, true);
	ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	ajax.send(pars);

	return;	
}

function crearAjax()
{
	if(window.XMLHttpRequest)		// Mozilla, Safari, Crhome etc..
		return (new XMLHttpRequest());
	else if (window.ActiveXObject)	// IExplorer
	{
		try
		{
			return new ActiveXObject ("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				return new ActiveXObject ("Microsoft.XMLHTTP");
			}
			catch(e)
			{
			}
		}
	}
	else
		return false;
}

function responseAjaxGUI(nIframe)
{
	alert(document.getElementById(nIframe).innerHTML);
}

function responseAjax(sXML)
{
	var contenido;
	oXML = crearXML(sXML);
	target = getText(oXML.getElementsByTagName("target")[0]);
	cmds = oXML.getElementsByTagName("cmd");
	if (target=="normal")
	{
		for(var i=0;i<cmds.length;i++)
		{
			cmd = cmds[i];
			contenido = getText(cmd);
			switch(cmd.getAttribute('tipo'))
			{
			case "script":
				script = contenido;
				eval(script);
				break;
			case "call":
				funcion = cmd.getAttribute('funcion');
				pars = contenido;
				if ("window." + funcion)
					eval("window." + funcion + "(" + pars + ");");
				break;
			case "asignar":
				nombre = cmd.getAttribute('nombre');
				att = cmd.getAttribute('att');
				valor = contenido;
				switch(att)
				{
				case "innerHTML":
					document.getElementById(nombre).innerHTML = valor;
					var x = document.getElementById(nombre).getElementsByTagName("script");   
					for (var c = 0; c < x.length; c++) { eval(x[c].text);}  
					break;
				case "value":
					document.getElementById(nombre).value = valor;
					break;
				default:
					eval("document.getElementById('" + nombre + "')." + att + " = '" + valor + "';");
				}
				break;
			}
		}
	}
	else
	{
		for(var i=0;i<cmds.length;i++)
		{
			cmd = cmds[i];
			contenido = getText(cmd);
			switch(cmd.getAttribute('tipo'))
			{
			case "script":
				script = contenido;
				parent.eval(script);
				break;
			case "call":
				funcion = cmd.getAttribute('funcion');
				pars = contenido;
				if ("parent.window." + funcion)
					eval("parent.window." + funcion + "(" + pars + ");");
				break;
			case "asignar":
				nombre = cmd.getAttribute('nombre');
				att = cmd.getAttribute('att');
				valor = contenido;
				switch(att)
				{
				case "innerHTML":
					parent.document.getElementById(nombre).innerHTML = valor;
					break;
				case "value":
					parent.document.getElementById(nombre).value = valor;
					break;
				default:
					parent.eval("document.getElementById('" + nombre + "')." + att + " = '" + valor + "';");
				}
				break;
			}
		}
	}
}

var tipoXml=0;

function getText(obj)
{
	return (tipoXml==0)?obj.text:obj.textContent;
}

function crearXML(sXML)
{
	if($.browser.msie)
	{
		tipoXml = 0;
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(sXML);
		xmlDoc = xmlDoc.documentElement;
		return(xmlDoc);
	}
	else
	{
		tipoXml = 1;
		parser = new DOMParser();
		xmlDoc = parser.parseFromString(sXML,"text/xml");
		xmlDoc = xmlDoc.firstChild;
		return(xmlDoc);
	}
} 

function iniciarAjax()
{
	var strHTMLAjax;
	var x;
	var y;
	var largo;
	var alto;

	largo = 200; 
	alto = 60;
	x = (mWin.Modal_largo / 2) - (largo / 2) ;
	y = (mWin.Modal_alto / 2) - (alto / 2);
	
	strHTMLAjax = "<div id='divAjax' class='divAjax' style='display:none;position:absolute;width:" + largo + "px;height:" + alto + "px;top:" + y + "px;left:" + x + "px'>";
	strHTMLAjax += "<table cellpadding='0' cellspacing='0' width='100%' height='100%'>";
	strHTMLAjax += "<tr height='8px'>";
	strHTMLAjax += "<td width='8px'><img src='public/estilos/" + estilo + "/rec_ajax_sup_izq.png' /></td>";
	strHTMLAjax += "<td style='background-image: url(public/estilos/" + estilo + "/rec_ajax_sup_med.png); background-repeat: repeat-x'></td>";
	strHTMLAjax += "<td width='8px'><img src='public/estilos/" + estilo + "/rec_ajax_sup_der.png' /></td>";
	strHTMLAjax += "</tr>";
	strHTMLAjax += "<tr>";
	strHTMLAjax += "<td width='8px' style='background-image: url(public/estilos/" + estilo + "/rec_ajax_cen_izq.png); background-repeat: repeat-y'></td>";
	strHTMLAjax += "<td class='recAjax'>";
	strHTMLAjax += "	<table width='100%' height='100%'>";
	strHTMLAjax += "	<tr><td align='center'><img src='public/estilos/" + estilo + "/ajax.gif' /></td></tr>";
	strHTMLAjax += "	<tr><td align='center'><span id='textoAjax' class='textoAjax'>Cargando ...</span></td></tr>";
	strHTMLAjax += "	</table>";
	strHTMLAjax += "</td>";
	strHTMLAjax += "<td width='8px' style='background-image: url(public/estilos/" + estilo + "/rec_ajax_cen_der.png); background-repeat: repeat-y'></td>";
	strHTMLAjax += "</tr>";
	strHTMLAjax += "<tr height='8px'>";
	strHTMLAjax += "<td width='8px'><img src='public/estilos/" + estilo + "/rec_ajax_inf_izq.png' /></td>";
	strHTMLAjax += "<td style='background-image: url(public/estilos/" + estilo + "/rec_ajax_inf_med.png); background-repeat: repeat-x'></td>";
	strHTMLAjax += "<td width='8px'><img src='public/estilos/" + estilo + "/rec_ajax_inf_der.png' /></td>";
	strHTMLAjax += "</tr>";
	strHTMLAjax += "</table>";
	strHTMLAjax += "</div>";

	insertHTML(document.getElementById("dProc"), strHTMLAjax);
}	

function ajaxGUI(url, pars, form)
{
	var GUI = "";
	var mObj, i;
	var nombre, tipo, valor;
	var sepVars = "";
	var sepDato = "::";
	var sepVar = ";";

	if (pars==undefined) pars='';

	var Objs = document.getElementsByTagName("body")[0].getElementsByTagName("*");

	bFile = false;
	for ( var c = 0; c < Objs.length; c++)
	{
		mObj = Objs[c];
		TAG = mObj.getAttribute("TAG");

		if (TAG == "att")
		{
			nombre = mObj.id;
			tipoControl = mObj.type;
			switch (tipoControl)
			{
			case "text":
			case "password":
			case "hidden":
			case "textarea":
			case "select-one":
				valor = mObj.value;
				break;
			case "image":
				valor = mObj.src;
				break;
			case "file":
				oForm = mObj.parentNode;
				while ((oForm.tagName!="FORM")&&(oForm!=undefined))
					oForm = oForm.parentNode;
				if (oForm!=undefined)
				{
					bFile = true;
					idFile = nombre;
				}
				valor = mObj.value;
				break;
			case "div":
				valor = mObj.outerHTML;
				break;
			case "checkbox":
				if (mObj.checked)
					valor = "S";
				else
					valor = "N";
				break;
			}
			GUI = nombre + sepDato + ajaxBaseStr(valor) + sepVars + GUI;
			sepVars = sepVar;
		}
	}

	if (bFile)
	{
//		var n = 'f' + Math.floor(Math.random() * 99999);

		if (document.getElementById("ifrProceso")== undefined)
		{
			if (document.getElementById("dAjaxGUI")== undefined)
			{	
				d = document.createElement('DIV');
				d.id = "dAjaxGUI";
			}
			else
				d = document.getElementById("dAjaxGUI");
			d.innerHTML = '<iframe style="display:none" src="about:blank" id="ifrProceso" name="ifrProceso"></iframe>';
			document.body.appendChild(d);
		}

		if (document.getElementById("GUI")== undefined)
			$('#' + idFile).after("<input type='hidden' name='GUI' id='GUI'>");

		if (document.getElementById("ajax-form")== undefined)
			$('#' + idFile).after("<input type='hidden' name='ajax-form' value='S'>");

		$('#GUI').val(GUI);
		oForm.setAttribute('action', url);
		oForm.setAttribute('target', "ifrProceso");
		document.getElementById("ifrProceso").onComplete = responseAjaxGUI("ifrProceso");
		oForm.submit();
	}
	else
	{
		if ((pars!="")&&(pars!=undefined))
			pars += "&GUI=" + GUI;
		else
			pars = "GUI=" + GUI;

		ajax(url, pars);
	}
}

function ajaxBaseStr(valor)
{
	valor = ajaxReplaceAll(valor, '=', '{igual}');
	valor = ajaxReplaceAll(valor, '"', '{comillas}');
	valor = ajaxReplaceAll(valor, "'", "{tilde}");
	valor = ajaxReplaceAll(valor, "|", "{pipe}");
	valor = ajaxReplaceAll(valor, ";", "{puntoycoma}");
	valor = ajaxReplaceAll(valor, "&", "{ampersan}");
	valor = ajaxReplaceAll(valor, '\n', '{salto}');
	return valor;
}

/*
function ajaxBaseStr(valor)
{
	valor = ajaxReplaceAll(valor, '{igual}', '=');
	valor = ajaxReplaceAll(valor, '{comillas}', '"');
	valor = ajaxReplaceAll(valor, "{tilde}", "'");
	valor = ajaxReplaceAll(valor, "{pipe}", "|");
	valor = ajaxReplaceAll(valor, "{puntoycoma}", ";");
	valor = ajaxReplaceAll(valor, '{salto}', '\n');
	return valor;
}
*/
function ajaxReplaceAll(cadena, patron, cambio)
{
	var st = cadena;
	if (patron.length == 0)
		return st;
	var idx = st.indexOf(patron);
	while (idx >= 0)
	{
		st = st.substring(0, idx) + cambio + st.substr(idx + patron.length);
		idx = st.indexOf(patron);
	}
	return st;
}

function ajaxUrl(objeto, subObjeto, params, tipo)
{
	if (params==undefined) params="";
	if (tipo==undefined) tipo = 'C';
	switch(tipo)
	{
	case 'C' :
		surl = 'index.php?componente=' + objeto + '&modulo=' + subObjeto + (params!=''?'&'+params:'');
		break;
	case 'A' :
		mObjeto = objeto.split(':');
		objeto1 = mObjeto[0];
		objeto2 = (mObjeto[1]==undefined)?mObjeto[0]:mObjeto[1];
		surl = 'index.php?app=' + objeto1 + '&controlador=' + objeto2 + ((subObjeto!='')?'&accion='+subObjeto:'') + (params!=''?'&'+params:'');
		break;
	}
	return surl;
}


