
function gebi(id){
	return document.getElementById(id);
}


function trim(strTxt)
{
		pos1 = 0;
		pos2 = strTxt.length-1;
		for (i=0; i<strTxt.length; i++)
		{
			if (strTxt.charAt(i) == ' ') pos1 = pos1 + 1;
			else break;
		}
		if (pos1 != (pos2+1))
		{
			for (i=strTxt.length-1; i>0; i--)
			{
				if (strTxt.charAt(i) == ' ') pos2 = pos2 - 1
				else break;
			}
		}
		return strTxt.substring(pos1,pos2+1);
}

function muestraOcultaDiv(id) {
  obj = document.getElementById(id);
  obj.style.display = (obj.style.display=='none') ? 'block' : 'none';
}


function isDv(argvalue) {

	argvalue = argvalue.toString();

	if (argvalue.length == 0)
		return false;

	for (var n = 0; n < argvalue.length; n++)	{
		if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9"){		
			if ((argvalue.substring(n, n+1)=="k") || (argvalue.substring(n, n+1)=="K")){
				return true
			}
			else {
				return false;
			}
		}
	}

	return true;
}

function isNum(argvalue) {

	argvalue = argvalue.toString();

	if (argvalue.length == 0)
		return false;

	for (var n = 0; n < argvalue.length; n++)
		if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
			return false;

	return true;
}

function ReplaceAll(palabra,buscar,reemplazar){

	var palabraNueva=''
	palabra=palabra.toString()
	
	if (palabra.length == 0)
		return palabra;

	for (var n = 0; n < palabra.length; n++)
	{
		if (palabra.substring(n, n+1)==buscar){
			palabraNueva=palabraNueva+reemplazar
		}
		else {
			palabraNueva=palabraNueva+palabra.substring(n, n+1)
		}
	}
		
	return palabraNueva;

}

function validaRut(obj_rut,obj_dv)
{
  texto = obj_rut.value + obj_dv.value
	 	   
  var tmpstr = "";
  
  if ( obj_rut.value==0 && obj_dv.value==0) 
	{
		alert("El RUT no es válido.");
		obj_rut.value="";
		obj_dv.value = "";
		obj_rut.focus();
		return false;
	}	  

  for ( i=0; i < texto.length ; i++ )
    if ( texto.charAt(i) != ' ' && texto.charAt(i) != '.' && texto.charAt(i) != '-' )
      tmpstr = tmpstr + texto.charAt(i);
  texto = tmpstr;
	  
  largo = texto.length;

  if ( largo < 2 )
  {
    alert("Debe ingresar el RUT completo.")
    obj_rut.select();
    obj_dv.value = "";
    obj_rut.focus();
    return false;
  }


  for (i=0; i < largo ; i++ )
  { 
    if ( texto.charAt(i) !="0" && texto.charAt(i) != "1" && texto.charAt(i) !="2" && texto.charAt(i) != "3" && texto.charAt(i) != "4" && texto.charAt(i) !="5" && texto.charAt(i) != "6" && texto.charAt(i) != "7" && texto.charAt(i) !="8" && texto.charAt(i) != "9" && texto.charAt(i) !="k" && texto.charAt(i) != "K" ) 
    {
      alert("El valor ingresado no corresponde a un RUT válido.");
		obj_rut.select();
		obj_rut.value = "";
		obj_dv.value = "";
		obj_rut.focus();
		return false;
    }
  }

	if (obj_dv.value == "k")
	{
		obj_dv.value="K"		
	}

	if ( checkDV(obj_rut,obj_dv) )
	  return true;
		  
	return false;
}

function checkDV( obj_rut,obj_dv )

{
  texto = obj_rut.value + obj_dv.value  
  var tmpstr = "";
  for ( i=0; i < texto.length ; i++ )
    if ( texto.charAt(i) != ' ' && texto.charAt(i) != '.' && texto.charAt(i) != '-' )
      tmpstr = tmpstr + texto.charAt(i);
  texto = tmpstr;
	  
  largo = texto.length;
  if ( largo < 2 )
  {
    alert("Debe ingresar el rut completo.")
    obj_rut.focus();
    obj_rut.select();
    return false;
  }

  if ( largo > 2 )
    rut = texto.substring(0, largo - 1);
  else
    rut = texto.charAt(0);
  dv = texto.charAt(largo-1);
  if (!checkCDV(dv))
  {
	alert("Debe ingresar un dígito verificador válido.");
    obj_dv.focus();
    obj_dv.select();
  }

  if ( rut == null || dv == null )
      return 0

  var dvr = '0'

  suma = 0
  mul  = 2

  for (i= rut.length -1 ; i >= 0; i--)
  {
    suma = suma + rut.charAt(i) * mul
    if (mul == 7)
      mul = 2
    else    
      mul++
  }


  res = suma % 11
  if (res==1)
    dvr = 'k'
  else if (res==0)
    dvr = '0'
  else
  {
    dvi = 11-res
    dvr = dvi + ""
  }

  if ( dvr != dv.toLowerCase() )
  {
    alert("EL RUT es incorrecto.");
    obj_rut.value = "";
    obj_dv.value = "";
    obj_rut.focus();
    return false
  }

      return true
}

function checkCDV( dvr ){
  dv = dvr + ""
  if ( dv != '0' && dv != '1' && dv != '2' && dv != '3' && dv != '4' && dv != '5' && dv != '6' && dv != '7' && dv != '8' && dv != '9' && dv != 'k'  && dv != 'K')
  { return false; } return true;
}


function EsAlfanumerico(valor){
	
	if (valor.length==0) 
			return false;
				
	for (i=0; i < valor.length; i++ )
		if ( !EsAlfa(valor.charAt(i))) 		
			return false;
	return true;
	
}

function EsTexto(valor)
	{
	if (valor.length==0) 
			return false;
				
	for (i=0; i < valor.length; i++ )
		if ( !EsLetra(valor.charAt(i))) 		
			return false;
	return true;
	}

function EsLetra(Char) {
     if(Char.length!=1) 
      return false;
     RefString="ABCDEFGHIJKLMNOPQRSTUVWXYZÑabcdefghijklmnopqrstuvwxyzñáéíóúÁÉÍÓÚ(). ";
     if (RefString.indexOf(Char, 0) == -1) 
      return false;
     return true;
}


function EsAlfa(Char) {
     if(Char.length!=1) 
      return false;
     RefString="ABCDEFGHIJKLMNOPQRSTUVWXYZÑabcdefghijklmnopqrstuvwxyzñáéíóúÁÉÍÓÚ0123456789(). ";
     if (RefString.indexOf(Char, 0) == -1) 
      return false;
     return true;
}


function EsFormatoFecha(valor){
	
	if (valor.length==0) 
			return false;
				
	for (i=0; i < valor.length; i++ )
		if ( !EsFecha(valor.charAt(i))) 		
			return false;
	return true;
	
}

function EsFecha(Char) {
     if(Char.length!=1) 
      return false;
     RefString="/0123456789";
     if (RefString.indexOf(Char, 0) == -1) 
      return false;
     return true;
}
  
    
    function anyoBisiesto(anyo)
    {
        /**
        * si el aqo introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925
        */
        if (anyo < 100)
            var fin = anyo + 1900;
        else
            var fin = anyo ;

        /*
        * primera condicion: si el resto de dividir el aqo entre 4 no es cero > el aqo no es bisiesto
        * es decir, obtenemos aqo modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
        */
        if (fin % 4 != 0)
            return false;
        else
        {
            if (fin % 100 == 0)
            {
                /**
                * si el aqo es divisible por 4 y por 100 y divisible por 400 > es bisiesto
                */
                if (fin % 400 == 0)
                {
                    return true;
                }
                /**
                * si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
                */
                else
                {
                    return false;
                }
            }
            /**
            * si es divisible por 4 y no es divisible por 100 > el aqo es bisiesto
            */
            else
            {
                return true;
            }
        }
    }
    
    /**
    * funcion principal de validacion de la fecha
    * argumento fecha > cadena de texto de la fecha introducida por el usuario
    */
    function validarFecha(objFecha)
    {
    
		  var a, mes, dia, anyo, febrero
    
       /**
       * obtenemos la fecha introducida y la separamos en dia, mes y aqo
       */
       a=objFecha.value;
       
       if ((a.split("/").length!=3) || (!EsFormatoFecha(a))){
		alert('El formato de la fecha no es válido.');
		objFecha.focus();
        objFecha.select();
        return false;
       }
       
       dia=a.split("/")[0];
       mes=a.split("/")[1];
       anyo=a.split("/")[2];
      
       if(anyoBisiesto(anyo))
           febrero=29;
       else
           febrero=28;
       /**
       * si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
       */
       if ((mes<1) || (mes>12))
       {
           alert("El mes introducido no es válido. Por favor, introduzca un mes correcto");
           objFecha.focus();
           objFecha.select();
           return false;
       }
       /**
       * si el mes introducido es febrero y el dia es mayor que el correspondiente 
       * al aqo introducido > alertamos y detenemos ejecucion
       */
       if ((mes==2) && ((dia<1) || (dia>febrero)))
       {
           alert("El dia introducido no es válido. Por favor, introduzca un dia correcto");
           objFecha.focus();
           objFecha.select();
           return false;
       }
       /**
       * si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
       */
       if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
       {
           alert("El dia introducido no es válido. Por favor, introduzca un dia correcto");
           objFecha.focus();
           objFecha.select();
           return false;
       }
       /**
       * si el mes introducido es de 30 dias y el dia introducido es mayor de 301 > alertamos y detenemos ejecucion
       */
       if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
       {
           alert("El dia introducido no es válido. Por favor, introduzca un dia correcto");
           objFecha.focus();
           objFecha.select();
           return false;
       }
       /**
       * si el mes aqo introducido es menor que 1900 o mayor que 2010 > alertamos y detenemos ejecucion
       * NOTA: estos valores son a eleccion vuestra, y no constituyen por si solos fecha erronea
       */
       if ((anyo<1900) || (anyo>2010))
       {
           alert("El año introducido no es válido. Por favor, introduzca un año entre 1900 y 2010");
           objFecha.focus();
           objFecha.select();
           return false;
       } 
       /**
       * en caso de que todo sea correcto > enviamos los datos del formulario
       * para ello debeis descomentar la ultima sentencia
       */
       else
			return true
  }    





function SoloMayusculas(Objeto)  // Se aplica en el onChange (javascript SoloMayusculas(this);)
{
	while(''+Objeto.value.charAt(0)==' ')Objeto.value=Objeto.value.substring(1,Objeto.value.length); // Saca Espacios a La Izquierda
	while(''+Objeto.value.charAt(Objeto.value.length-1)==' ')Objeto.value=Objeto.value.substring(0,Objeto.value.length-1); // Saca Espacios a La Derecha
	Objeto.value=Objeto.value.toUpperCase(); // De Minuscula a Mayuscula
}


function soloNumeros(Objeto, Evento) // Se aplica en el onKeyDown (javascript: return soloNumeros(this, event);)
{
 with(Evento){
	 
	if(navigator.appName.indexOf("Microsoft") != -1) {
		codCaracter=keyCode;
	}else {
		codCaracter=Evento.charCode;
	}
	
	if(codCaracter>95 && codCaracter<106){ // teclado numérico
		return true;
	}
	
	var strCaracteresAceptados = "1234567890 ";
	
	if (strCaracteresAceptados.indexOf(String.fromCharCode(codCaracter))==-1){
		if(codCaracter==0 || codCaracter==8 || codCaracter==46 || codCaracter==37 || codCaracter==39 || codCaracter==9){
				return true;
		}else{
			return false;
		}
	}else{
		return true;
	}
 }  
}


function soloFecha(Objeto, Evento) // Se aplica en el onkeypress (javascript: return soloFecha(this, event);)
{
 with(Evento){
	 
	if(navigator.appName.indexOf("Microsoft") != -1) {
		codCaracter=keyCode;
	}else {
		codCaracter=Evento.charCode;
	}	 
	 
	var strCaracteresAceptados = "/1234567890 "+String.fromCharCode(0);
	if (strCaracteresAceptados.indexOf(String.fromCharCode(codCaracter))==-1){
		return false;
	}else{
		return true;
	}
 }  
}

function omiteCaracteres(strCaracteresOmitidos, Objeto, Evento) // Se aplica en el onkeypress (javascript: return omiteCaracteres(this, event);)
{
 var strCaracteresO = strCaracteresOmitidos;
 with(Evento){
	 
	if(navigator.appName.indexOf("Microsoft") != -1) {
		codCaracter=keyCode;
	}else {
		codCaracter=Evento.charCode;
	}
	
	if (strCaracteresO.indexOf(String.fromCharCode(codCaracter))==-1){
		return true;
	}else{
		return false;
	}
 }  
}

function onEnter(Objeto, Evento, strFunctionGatillar){ // Se aplica en el onkeypress (javascript: return onEnter(this, event, 'function("param1")');)
	
	 with(Evento){
		 
		if(navigator.appName.indexOf("Microsoft") != -1) {
			codCaracter=keyCode;
		}else {
			codCaracter=Evento.charCode;
		}
		if(codCaracter==13){
			ret = eval(strFunctionGatillar + ";");
			return false;
		}
		 
	 }  


}


function autofocus(field, next, evt, conEnter) { // onkeyup="autofocus(this, '{nombre_proximo_control}', event)">&
	
    evt = (evt) ? evt : event;
    var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : 
        ((evt.which) ? evt.which : 0));
	
    if (charCode > 31 && field.value.length == field.maxLength) {
        field.form.elements[next].focus();
    }

	if(conEnter==undefined){conEnter=false;}
    if (conEnter && charCode == 13) {
        field.form.elements[next].focus();
    }
	
}


function emailCheck(emailStr) {
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);
	if (matchArray==null) {
		alert("La dirección de correo parece inválida (comprobar @ y .'s)");
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];

	if (user.match(userPat)==null) {
		alert("El usuario no parece ser válido.");
		return false;
	}
	
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		  for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				alert("IP de destino incorrecta.");
				return false;
			}
		}
		return true;
	}
	
	var domainArray=domain.match(domainPat);
	if (domainArray==null) {
		alert("El dominio no parece ser válido.");
		return false;
	}
	
	var atomPat=new RegExp(atom,"g");
	var domArr=domain.match(atomPat);
	var len=domArr.length;
	if (domArr[domArr.length-1].length<2 || 
		domArr[domArr.length-1].length>3) {
	   // the address must end in a two letter or three letter word.
	   alert("La dirección debe terminar con un dominio de 3 letras, o un nombre de país de dos letras.");
	   return false;
	}

	if (len<2) {
	   var errStr="¡A esta dirección le falta un nombre de host!";
	   alert(errStr);
	   return false;
	}	

	return true;
}

function validaCampoVacio(objObjeto, strMensajeError, conFocus){
	if(trim(objObjeto.value)==""){
		alert(strMensajeError);
		if(conFocus){
			objObjeto.focus();
		}
		return false;
	}else{
		return true;
	}
}

function getIndexRadioControl(valorCampo,objRadio){
	for (var i = 0; i < objRadio.length; i++) {
		if (objRadio[i].value==valorCampo) {
			return i;
		}
	}
}



function igualaValoresCheckCbo(objCkeck,objCbo,txtOtro){
	if(objCbo!=undefined){
		if(objCkeck.checked){ objCbo.disabled=""; }else{ objCbo.value="0"; objCbo.disabled="disabled"; }
	}
	if(txtOtro!=undefined){
		if(!objCkeck.checked){ txtOtro.value=""; }
	}
}

function getTextFromCombox(strId){
    var x=document.getElementById(strId)
    return x.options[x.selectedIndex].text;
}


function getNombreArchivo(controlFile){
	var strRuta=controlFile.value.replace("/","\\");		
	var pos=controlFile.value.lastIndexOf("\\");
	strNomArchivo=controlFile.value.substr(pos+1);
	return strNomArchivo;		
}


function styleRowOver(objTr, color){
	objTr.style.backgroundColor=color;
}

function styleRowOut(objTr, color){
	objTr.style.backgroundColor=color;
}

function clickControlCheck(idControl){
	if(document.getElementById(idControl).checked){
		document.getElementById(idControl).checked=false;
	}else{
		document.getElementById(idControl).checked=true;
	}
}



function ocultaDiv(idDiv){
	document.getElementById(idDiv).style.visibility = "hidden";
	document.getElementById(idDiv).style.position = "absolute";
}

function muestraDiv(idDiv){
	document.getElementById(idDiv).style.visibility = "visible";
	document.getElementById(idDiv).style.position = "static";
}



// Manejo posición de Mouse en ventana dejando las coordenadas
// En las variables posRatonY y posRatonX

var posRatonY;
var posRatonX;

function posCursor(ev){  // onMouseOver="posCursor(event);"

	if (!document.all){
		   posRatonY = ev.pageY; 
		   posRatonX = ev.pageX;
	}else{
		   posRatonY = ev.clientY +document.body.scrollTop; 
		   posRatonX = ev.clientX +document.body.scrollLeft;
	}
	
}




///////////////////////////////////////////////////////////////
// Funciones para utilizar AJAX
///////////////////////////////////////////////////////////////

var isIE = false;
var req;


function crearAjax() 
{ 
    var xmlhttp=false; 
     try 
    { 
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch (e) 
    { 
        try 
        { 
           xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
        catch (E) 
        { 
           xmlhttp = false; 
        } 
     } 

    if (!xmlhttp && typeof XMLHttpRequest!='undefined') 
    { 
          xmlhttp = new XMLHttpRequest(); 
    } 
    return xmlhttp; 
} 




function LoadByAjax(url, esAsincrono, ProcReqChange) {
	
	if(url==''){
		return;
	}
	
	if(ProcReqChange==null || ProcReqChange==undefined ){
		ProcReqChange = processReqChange;
	}
	
	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		req.onreadystatechange = ProcReqChange;
		req.open("GET", url, esAsincrono);
		req.send(null);
	} else if (window.ActiveXObject) {
		isIE = true;
		req = new ActiveXObject("Microsoft.XMLHTTP");
		if (req) {
			req.onreadystatechange = ProcReqChange;
			req.open("GET", url, esAsincrono);
			req.send();
		}
	}
}

//	Funcion que se llama cada vez que se dispara el evento onreadystatechange
//	del objeto XMLHttpRequest
function processReqChange(){
	var detalles = document.getElementById("detalles");
	if(req.readyState == 4){
		detalles.innerHTML = req.responseText;
	} else {
		detalles.innerHTML = '<img src="loading.gif" align="middle" /> Cargando...';
	}
}




function getUrlFromForm(objDocument){
	
	strResult = "";
	
	if( document.getElementsByTagName )	{
		var x = document.getElementsByTagName('input');
	}else if( document.all ){
		var x = document.all.tags('input');
	}	
	for( var i=0; i<x.length; i++ ){
		
		if(x[i].type=='text'||x[i].type=='hidden'){
			strResult += "&" + x[i].name + "=" + escape(x[i].value);
		}
		if(x[i].type=='checkbox'||x[i].type=='radiobutton'){
			if(x[i].checked){
				strResult += "&" + x[i].name + "=" + escape(x[i].value);
			}
		}		
	}


	if( document.getElementsByTagName )	{
		var x = document.getElementsByTagName('textarea');
	}else if( document.all ){
		var x = document.all.tags('textarea');
	}	
	for( var i=0; i<x.length; i++ ){		
		strResult += "&" + x[i].name + "=" + escape(x[i].innerText);		
	}


	if( document.getElementsByTagName )	{
		var x = document.getElementsByTagName('select');
	}else if( document.all ){
		var x = document.all.tags('select');
	}	
	for( var i=0; i<x.length; i++ ){		
		strResult += "&" + x[i].name + "=" + escape(x[i].value);		
	}



	if(trim(strResult)!=""){
		strResult = strResult.substring(1);
	}
	return strResult;


}


// Elimina filas(TR) de tablas
function eliminaFilaTablaById(idTr){	
	var obj = document.getElementById(idTr);
	obj.parentNode.removeChild(obj);
}


function precargaDeImagenes() { 
  var d=document; 
  if(d.images){ 
	if(!d.MM_p) d.MM_p=new Array();
	var i,j=d.MM_p.length;
	
	if( document.getElementsByTagName ){
		var x = document.getElementsByTagName('IMG');
	}else if( document.all ){
		var x = document.all.tags('IMG');
	}	
	
	for( var i=0; i<x.length; i++ ){	
		if(x[i].src.indexOf("#")!=0){
			d.MM_p[j]=new Image; d.MM_p[j++].src=x[i].src;					
		}
	}
  }	  	
}


// Manejo posición de Mouse en ventana dejando las coordenadas
// En las variables posRatonY y posRatonX

var posRatonY;
var posRatonX;

function posCursor(ev){  // onMouseOver="posCursor(event);"

	if (!document.all){
		   posRatonY = ev.pageY; 
		   posRatonX = ev.pageX;
	}else{
		   posRatonY = ev.clientY +document.body.scrollTop; 
		   posRatonX = ev.clientX +document.body.scrollLeft;
	}
	
}


