//LIBRERIA CON MIS NUEVAS FUNCIONALIDADES DE AJAX
/**
  * Funcion: AJAX-createREQ
  * Realizado por: Ernesto Herrera
  * Version Final: 14/03/2007
  * Descripcion: Crear objeto de tipo XML.
  */
function createREQ(){
	try{
		req = new XMLHttpRequest();
	}catch(err1){
		try{
			req = new ActiveXObject('Msxml2.XMLHTTP');
		}catch(err2){
			try{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(err3){
				req = false;
			}
		}
	}
	return req;
}
/**
  * Funcion: AJAX-requestGET
  * Realizado por: Ernesto Herrera
  * Version Final: 14/03/2007
  * Descripcion: Ejecutar Script y obtener respuesta por metodo Get.
  */
function requestGET(url,query,req) {
	var myRand=parseInt(Math.random()*99999999);
	req.open("GET",url+'?'+'query'+'&rand='+myRand,true);
	req.send(null);
}
/**
  * Funcion: AJAX-requestGET
  * Realizado por: Ernesto Herrera
  * Version Final: 14/03/2007
  * Descripcion: Ejecutar Script y obtener respuesta por metodo Post.
  */
function requestPOST(url,query,req) {
	req.open("POST", url,true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	req.send(query);
}
/**
  * Funcion: AJAX-doCallback
  * Realizado por: Ernesto Herrera
  * Version Final: 14/03/2007
  * Descripcion: Funcion que se evalua luego de obtener resultados del script.
  */
function doCallback(callback,item,xtra) {
	try{
		eval(callback + '(item,xtra)');
	}catch(err1){/*Handle Error*/}
}

/*--------------------------------------------------------------
	url 	 = Script
	query 	 = Parametros del Url
	callback = Funcion q llama despues de ejcuetar doAjax
	reqtype  = 'get' y 'post'
	getxml	 = 1 devuelve un XML, 0 devuelve un STRING
---------------------------------------------------------------*/
function doAjax_old(url,query,callback,reqtype,getxml) {
// crea la instancia del objeto XMLHTTPRequest 
var myreq = createREQ();

myreq.onreadystatechange = function() {
if(myreq.readyState == 4) {
   if(myreq.status == 200) {
      var item = myreq.responseText;
      if(getxml==1) {
         item = myreq.responseXML;
      }
      doCallback(callback, item);
    }
  }
}
if(reqtype=='post') {
requestPOST(url,query,myreq);
} else {
requestGET(url,query,myreq);
}
}

/**
  * Funcion: AJAX-doAjax
  * Realizado por: Ernesto Herrera
  * Version Final: 14/03/2007
  * Descripcion: Funcion Principal para Ejecutar AJAX.
  */
function doAjax(url,query,callback,reqtype,getxml,xtra,strMsgOut,intTime) {
	var blMsj = true;
	if (strMsgOut==undefined) blMsj=false;
	if (intTime==undefined) intTime = 90000;
	if (ExejScript()){
		if (xtra!=undefined){
			if (xtra==0) putDiv('frmTable');;
		}
		scriptExeTime(intTime);
		var myreq = createREQ();
		myreq.onreadystatechange = function() {
		if(myreq.readyState == 4) {
		   if(myreq.status == 200) {
			  var item = myreq.responseText;
			  if (blMsj)
				putDiv('frmAjax',frmAjaxValue());
			  SetValue('sts','OK');
			  clearTimeout(ExeScriptTime);
			  if(getxml==1) {
				 item = getXML(myreq);
			  }
			  if(getxml==2) {
				 item = eval(myreq.responseText);
			  }
			  doCallback(callback,item,xtra);
			}
		  }else{
			if (blMsj)
				putDiv('frmAjax','<div align="right">'+strMsgOut+'...</div>');
		  }
		}
		url = encodeURI(url);
		if(reqtype=='post') {
		  requestPOST(url,query,myreq);
		} else {
		  requestGET(url,query,myreq);
		}
	}else
		showBusyScriptMsg(GetExactValue('frmAjax'));
}
/**
  * Funcion: showBusyScriptMsg
  * Realizado por: Ernesto Herrera
  * Version Final: 14/03/2007
  * Descripcion: Mostrar Mensaje cuanddo se encuentra  ocupado el script.
  */
function showBusyScriptMsg(strMsg){
	if (strMsg==undefined) return false;
	var constI = "Aguarde un momento.\n";
	var strOut = '';
	if (strMsg.length>0){
		if (strMsg.indexOf('</')>0){
			var single1	 = strMsg.split('>');
			var single2	 = single1[1];
				single1	 = single2.split('<');
				strOut	 = constI+single1[0];
		}else
			strOut	 = constI+strMsg;
	}else
		strOut = "Cierre el navegador y cargue nuevamente esta pagina."
	//setValueById('txtfind',getGlobalVars('gSql'));
	alert(strOut);
}
/**
  * Funcion: ExejScript
  * Realizado por: Ernesto Herrera
  * Version Final: 14/03/2007
  * Descripcion: Valida que no se llame nuevamente el script si se esta ejecutando.
  */
function ExejScript(){
	var status = GetValue('sts');
	var cont   = true;
	if (status!=undefined){
		if (status.indexOf('WAITING')==0) cont = false;
	}
	return cont;
}
/**
  * Funcion: AJAX-getXML
  * Realizado por: Ernesto Herrera
  * Version Final: 14/03/2007
  * Descripcion: Obtener la respuesta XML del Script.
  */
function getXML(XMLReq){
	try {
		xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
	 	xmlDoc.async = false;
		xmlDoc.loadXML(XMLReq.responseText);
     } catch(err1) {
       try {
			xmlDoc = new ActiveXObject('Msxml2.DOMDocument');
       } catch (err2) {
		  try {
			  var oParser = new DOMParser();
			  xmlDoc	  = oParser.parseFromString(XMLReq.responseText,"text/xml");
		  } catch(err3) {
			xmlDoc = XMLReq.responseXML;
          }
       }
     }
    return xmlDoc;
}
/**
  * Funcion: scriptExeTime
  * Realizado por: Ernesto Herrera
  * Version Final: 29/03/2007
  * Descripcion: Tiempo de Espera de ejecucion del script.
  */
function scriptExeTime(intTime){
	var status = GetValue('sts');
	if (intTime!=undefined){
		SetValue('sts','WAITING');
		ExeScriptTime=setTimeout("ValidateErrorTime()",intTime);
	}
}
/**
  * Funcion: GetValue
  * Realizado por: Ernesto Herrera
  * Version Final: 28/05/2007
  * Descripcion: Extraer valores de la caja de texto oculta AJAX.
  */
function GetValue(strPlace){
	var strOut	 = '';
	/*var Ctxt	 = 5;*/
	var stra	 = getValueTxt('txtAjax');
	var single 	 = stra.split(getSeparator());
	var intLen	 = single.length;
	var intPlace = 0;
	switch(strPlace){
		case 'sts' : intPlace=0; break;
		case 'lgd' : intPlace=1; break;
	}
	/*if (intPlace!=Ctxt)*/
		strOut	 = single[intPlace];
	/*else{
		for(var x=intPlace;x<intLen;x++)
			strOut += single[x]+getSeparator();
	}*/
	return strOut;
}
/**
  * Funcion: SetValue
  * Realizado por: Ernesto Herrera
  * Version Final: 28/05/2007
  * Descripcion: Escribir  valores en la caja de texto oculta txtAjax.
  */
function SetValue(strPlace,strVal){
	if (strVal==undefined) strVal='';
	var stra  = getValueTxt('txtAjax');
	if (strPlace.indexOf('all')!=0){
		var single 	 = stra.split(getSeparator());
		var intLen	 = single.length;
		var intPlace = 0;
		switch(strPlace){
			case 'sts' : intPlace=0; break;
			case 'lgd' : intPlace=1; break;
		}
		single[intPlace]=strVal;
		single = single.join(getSeparator());
		try{
			document.getElementById('txtAjax').value = single;
		}catch(err1){/*HANDLE ERROR*/}
	}else{
		try{
			document.getElementById('txtAjax').value = strVal;
		}catch(err1){/*HANDLE ERROR*/}
	}
}
/**
  * Funcion: getSeparator
  * Realizado por: Ernesto Herrera
  * Version Final: 28/05/2007
  * Descripcion: Devuelve valor del separador.
  */
function getSeparator(){
	var strValue = '__S3p2r2t0rAJAX__';
	return strValue;
}

function GetExactValue(element,VAL){
	var strOut	= VAL;
	var stra	= getValueTxt(element);
	if (((stra.length)!=0)&&(stra.indexOf("No existe ningún objeto con el Id especificado.")!=0)) strOut=stra;
	return strOut;
}

/**
  * Funcion: ErrorTime
  * Realizado por: Ernesto Herrera
  * Version Final: 29/03/2007
  * Descripcion: Si el tiempo de Espera  de ejecucion del script esta  agotado muestra mensaje al usuario.
  */
function ValidateErrorTime(intento){
	var msgERR = 'Tiempo de espera agotado. Intente mas tarde.';
	var status = GetValue('sts');
	if (status.indexOf('WAITING')==0) alert(msgERR);
	SetValue('sts','OK');
	try{
		putDiv('frmAjax',frmAjaxValue());
		putDiv('TitPag',msgERR);
	}catch(err1){/*Handle Error*/}
}
/**
  * Funcion: MyCronometer
  * Realizado por: Ernesto Herrera
  * Version Final: 30/06/2007
  * Descripcion: Cronómetro en segundos, va descontando de 1 en 1.
  * Parametros de Entrada: 2 (Cantidad de segundos y Mensaje a Mostrar[putCronometerText]) Ej: MyCronometer(10,1);
  */
function MyCronometer(num,TimeTop,intMsg){
	var miliSeg  = 1000;
	var strNmFrm = 'frmAjax';
	if (intMsg  != undefined){
		TimeTop *=  miliSeg;
		if (num < TimeTop){
			num += miliSeg;
			Segs = setTimeout("MyCronometer("+num+","+TimeTop/miliSeg+","+intMsg+");",miliSeg);
			putCronometerText(strNmFrm,(((TimeTop-num)/miliSeg)+1),intMsg,false);
		}else
			putCronometerText(strNmFrm,0,intMsg,true);
	}else
		MyCronometer(0,--num,TimeTop);
}
/**
  * Funcion: putCronometerText
  * Realizado por: Ernesto Herrera
  * Version Final: 30/06/2007
  * Descripcion: Escribir el tiempo que ha recorrido el cronometro.
  */
function putCronometerText(frmNm,strSecs,intMsg,flag){
	var msgIni   = 'Espere ';
	var strNmSec = ' segundos';
	var msgFin	 = ' para que pueda intentar nuevamente...'+intMsg;
	if (strSecs<10) msgIni   = 'Espere 0';
	if (strSecs==1) strNmSec = ' segundo';
	if (flag==false)
		putDiv(frmNm,'<div align="center">'+msgIni+strSecs+strNmSec+msgFin+'</div>');
	else
		putDiv(frmNm,frmAjaxValue());
}

/**
  * Funcion: chkCheckBox
  * Realizado por: Ernesto Herrera
  * Version Final: 21/12/2007
  * Parametros: Objeto CheckBox y Mensaje (Para caso de que no haya ningun dato)
  * Descripcion: Devuelve True si se ha seleccionado algun CheckBox, False en caso contrario.
  */
function chkCheckBox(chk,msg){
	var x=0;
	var sw=false;
	while((x<chk.length)&&(!sw)){
		if (chk[x].checked) sw = !sw;
		x++;
	}
	if (!sw) alert(msg);
	return sw;
}

/**
  * Funcion: getCheckVals
  * Realizado por: Ernesto Herrera
  * Version Final: 21/12/2007
  * Descripcion: Obtener string de valores en status Checked de un checkbox, separados por coma(,)
  */
function getCheckVals(chk){
	var strOut = '';
	for(var x=0;x<chk.length;x++)
		if (chk[x].checked)	strOut += chk[x].value + ',';
	strOut = strOut.substr(0,strOut.length-1);
	return strOut;
}
	
/**
  * Funcion: getBrowser
  * Realizado por: Ernesto Herrera
  * Version Final: 08/08/2007
  * Descripcion: Obtener tipo de navegador, si es Netscape entonces retorna true.
  */
function getBrowser(){
	var sw  = false;
	var nav = window.navigator.appName;
	if (nav.indexOf('Netscape')==0) sw=true;
	return sw;
}
/**
  * Funcion: putfrmAjaxDivs
  * Realizado por: Ernesto Herrera
  * Version Final: 01/08/2007
  * Descripcion: Poner Objetos relacionados a AJAX(frmAjax,txtAjax).
  */
function putfrmAjaxDivs(nmDiv){
	var codeHtml = '<table width="100%" cellPadding="1" cellSpacing="1"><tr><td><a name="mrcTop"></a><div id="frmAjax"></div><input type="hidden" id="txtAjax"></td></tr><tr><td><div id="frmTop"></div></td></tr><tr><td>';
	codeHtml +='<table width="100%" cellPadding="0" cellSpacing="0"><tr><td width="20%" valign="top"><div id="frmMenu"></div></td><td valign="top" align><div id="frmMiddle"></div></td></tr></table></td></tr><tr><td><div id="frmBottom"></div></td></tr></table>';
	putDiv(nmDiv,codeHtml);
	putDiv('frmAjax',frmAjaxValue());
	SetValue('sts','OK');
	SetValue('lgd','OK');//SetValue('lgd','NO');
	putTop(1);
	//putMenu(3);
}

/**
  * Funcion: unLoading
  * Realizado por: Ernesto Herrera
  * Version Final: 08/08/2007
  * Descripcion: Al salirse de la pagina.
  */
function unLoading(){
	alert('Bye ;-).');
}
/**
  * Funcion: frmAjaxValue
  * Realizado por: Ernesto Herrera
  * Version Final: 01/08/2007
  * Descripcion: Valor que se le pone por defecto al div frmAjax.
  */
function frmAjaxValue(){
	return '<div>&nbsp;</div>';
}
/**
  * Funcion: Activity
  * Realizado por: Ernesto Herrera
  * Version Final: 19/06/2007
  * Descripcion: Validar que haya actividad en el site, si pasan intTime min sin actividad muestra mensaje y redirecciona al inicio
  */
function Activity(ir_a,intTime){
	var strNmMin = "minutos.";
	if (intTime==1) strNmMin = "minuto.";
	alert("Tu sesi\u00f3n ha caducado por no tener actividad en "+intTime+" "+strNmMin);
	document.location.replace(ir_a);
}
/**
  * Funcion: putSessionTime
  * Realizado por: Ernesto Herrera
  * Version Final: 19/06/2007
  * Descripcion: Poner tiempo de session de la pagina, si no se le pasa ningun valor de Tiempo por defecto 20.
  */
function putSessionTime(ScriptTimeMin,ScriptRedirect){
	if (ScriptRedirect==undefined) ScriptRedirect = 'index.html';
	if (ScriptTimeMin==undefined)  ScriptTimeMin  = 20;
	var MiliSeg		= ScriptTimeMin * 60000;
	Session_Time   	= setTimeout('Activity("'+ScriptRedirect+'",'+ScriptTimeMin+');',(MiliSeg));//60000 20 
}
/**
  * Funcion: setValueById
  * Realizado por: Ernesto Herrera
  * Version Final: 03/08/2007
  * Descripcion: Asignar un valor a un(os) objeto(s) por el id.
  */
function setValueById(id,value){
	if (value==undefined) value='';
	var single = id.split(',');
	for (var x=0;x<single.length;x++)
		document.getElementById(single[x]).value = value;
}

/**
  * Funcion: getGlobalVars
  * Realizado por: Ernesto Herrera
  * Version Final: 08/08/2007
  * Descripcion: Extraer valores en Variables Globales.
  */
function getGlobalVars(strgVar){
	var val='';
	switch(strgVar){
		case 'gSql': val = gSql; break;
		case 'gOpc': val = gOpc; break;
		case 'gAdm': val = gAdm; break;
		default: alert('Variable Global no declarada.');
	}
	return val;
}
/**
  * Funcion: getMaxVal
  * Realizado por: Ernesto Herrera
  * Version Final: 09/08/2007
  * Descripcion: Devuelve maximo valor entre dos valores.et
  */
function getMaxVal(val1,val2){
	var maxVal = val1;
	if (val1<val2) maxValv=val2;
	return maxVal;
}

/**
  * Funcion: showValuesOnTable
  * Realizado por: Ernesto Herrera
  * Version Final: 06/08/2007
  * Descripcion: Mostrar en  una tabla los resultados de la consulta.
  */
function showValuesOnTable(cursor){
	var txtcod;
	var largo	 = 0;
	var maxLargo = 0;
	var widthTbl = 95;
	var fields	 = cursor[0].fields;
	var VecHead  = fields.split('|');
	var headers  = VecHead[0].split(',');
	var blWidthT = true;
	var strAlign = '';
	var yAlign	 = 0;
	try{
		var inWidthT  = VecHead[1].split(',');
	}catch(err1){
		blWidthT = false;
	}
	var blAlign = true;
	try{
		var intAlign  = VecHead[2].split(',');
		//intAlign  = intAlign;
	}catch(err1){
		blAlign = false;
	}
	switch(headers.length){
		case 1: widthTbl=25;
		break;
		case 2: widthTbl=50;
		break;
		case 3: widthTbl=75;
		break;
		case 4: widthTbl=90;
		break;
	}
	maxLargo    = getMaxVal(fields.length,maxLargo);
	var code	= '';
	code	   += '<tr align="center">';
	for (var x=0;x<headers.length;x++){
		code += '<td nowrap class="subTituloTabla"><b>'+headers[x].toUpperCase()+'</b></td>';
	}
	code	 += '</tr>';
	for (var x=1;x<cursor.length;x++){
		code += '<tr>';
		if (x%2==1)
			txtcod = 2
		else
			txtcod = 1
		yAlign = 0
		for (property in cursor[x]){
			if (blAlign)
				strAlign = ' align="'+intAlign[yAlign]+'" ';
			else
				strAlign = '';
			code  += '<td class="TextoTabla'+txtcod+'" '+strAlign+'>'+cursor[x][property]+'</td>';
			yAlign++;
			largo  = cursor[x][property].length;
		}
		maxLargo = getMaxVal(largo,maxLargo);
		code += '</tr>';
	}
	if (maxLargo>185)
		widthTbl=95;
	else
		if ((maxLargo>150)&&(maxLargo<185))
			widthTbl=75;
		else
			if ((maxLargo>100)&&(maxLargo<150))
				widthTbl=60;
			else
				if ((maxLargo>50)&&(maxLargo<100))
					widthTbl=35;
				else
					if (maxLargo<50)
						widthTbl=20;
	if (blWidthT) widthTbl=inWidthT;
	var codeTbl = '<table align="center" width="'+widthTbl+'%" border=2>';
	codeTbl	+= code+'</table>';
	putDiv('frmTable',codeTbl);
}

function erase_tmp(img_str){
	doAjax_old(sUrl,encodeURI('opc=21&img='+img_str),'no_return','post',0);
}

function no_return(){}
