  var CharNumerico
  var CharOperacion
  var CharLetras
  var CharPuntuacion
  var CharAcentuacion
  var CharEspeciales
  var CharParentesis
  var CharAlfaNumericos
  var CharFono
  var CharEmail
  var CharFecha
  var CharHorario
  var CharNumerico2
  var CharClave
  var CharDireccion
  var CharParametros
  var CharDecimal
  var CharPasaporte

    CharIP = "0123456789.";//Z
    CharNumerico = "0123456789";
    CharOperacion = "+-*/";
    CharCodigo = "QWERTYUIOPASDFGHJKLÑZXCVBNMqwertyuiopñlkjhgfdsazxcvbnm -_" + CharNumerico;//Y
    CharLetras = "QWERTYUIOPASDFGHJKLÑZXCVBNMqwertyuiopñlkjhgfdsazxcvbnmüöáéíóúÁÉÍÓÚÜÖ.' ";//A
    CharPuntuacion = ".,:";
    CharAcentuacion = "´`^¨";
    CharEspeciales = "_-ºª!¡·#$%&¬=¿?çÇ@";
    CharParentesis = "()[]{}";
    CharTodos  = CharNumerico + CharOperacion + CharLetras + CharPuntuacion + CharAcentuacion + CharEspeciales + CharParentesis;
    CharFono   = CharNumerico + CharParentesis + '-';//T
    CharEmail  = CharNumerico + "qwertyuioplkjhgfdsazxcvbnm.@_-";//M
    CharUsuario= CharNumerico + "qwertyuioplkjhgfdsazxcvbnm._-";//M	
    CharFecha  = "0123456789/";
    CharRut    = "0123456789-Kk";
    CharRutDig = "0123456789Kk";
    CharHorario= "0123456789:";
	CharClave  = CharNumerico + "qwertyuiopñlkjhgfdsazxcvbnm-_";//C
	CharDireccion=CharLetras + CharNumerico + "°";//G
	CharParametros=" /\\.;-QWERTYUIOPASDFGHJKLÑZXCVBNMqwertyuiopñlkjhgfdsazxcvbnmáéíóúÁÉÍÓÚ" + CharNumerico
	CharDecimal=CharNumerico + ",."
	CharEncuesta=CharLetras+CharNumerico+ CharParentesis + CharEspeciales + CharOperacion + String.fromCharCode(13)
	CharPasaporte="QWERTYUIOPASDFGHJKLÑZXCVBNMqwertyuiopñlkjhgfdsazxcvbnmüöáéíóúÁÉÍÓÚÜÖ" + CharNumerico

function ObjIniciarVal(Obj){
  if(Obj){
	var cadenaF,posF;
    //Declara la Funcion al presionar Teclas
    Obj.onkeypress = new Function("ObjKeyPress(this);");
    //Declara la Funcion al perder el focus
    
    cadenaF = Obj.onblur + "";
    posF = cadenaF.indexOf("{");
    if(posF != -1){
		cadenaF = cadenaF.substring(posF + 1,cadenaF.length - 1);
    }else{
		cadenaF = "";
    }
    Obj.onblur = new Function("ObjValidar(this);" + cadenaF);
    
    if(Obj.Mascara){
      if(Obj.value == Obj.Mascara)
        Obj.select();
    }
  }
}

function ObjKeyPress(Obj){
  var Cod = event.keyCode;
  var Tec = String.fromCharCode(event.keyCode);
  var Tipo,Largo,TipoDato;
  
  
  TipoDato = Obj.Formato;  
  if(TipoDato == "D"){   //Tipo de Dato Fecha
    TipoDato = "10D";
  }
  
  Tipo = TipoDato.substring(TipoDato.length - 1,TipoDato.length);
  Largo = TipoDato.substring(0,TipoDato.length - 1);
  /*
  if("AXNDRV".indexOf(Tipo) == -1 || isNaN(Largo) == true){
    event.returnValue = "";
    return false;
  }  
  */
  switch(Tipo.toUpperCase()){
    case "X":
        //pasaporte
        Largo = parseFloat(Largo);
        CharValidos = CharPasaporte;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;
    case "Z":
        //Tipo IP
        Largo = parseFloat(Largo);
        CharValidos = CharIP;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;
    case "Y":
        //Tipo codigo
        Largo = parseFloat(Largo);
        CharValidos = CharCodigo;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;
     case "E":
        //Tipo Alfabético
        Largo = parseFloat(Largo);
        CharValidos = CharEncuesta;
        if (Cod==13){
			return true;
			break;
		}	
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;    
    case "A":
        //Tipo Alfabético
        Largo = parseFloat(Largo);
        CharValidos = CharLetras;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;
     case "D":
        //Tipo Alfabético
        Largo = parseFloat(Largo);
        CharValidos = CharDecimal;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;
     case "G":
        //Tipo Dirección
        Largo = parseFloat(Largo);
        CharValidos = CharDireccion;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;  
     case "P":
        //Tipo Parametros
        Largo = parseFloat(Largo);
        CharValidos = CharParametros;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;      
     case "M":
        //Tipo Email(sin espacios ni signos solo @)
        Largo = parseFloat(Largo);
        CharValidos = CharEmail;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;
	case "U":
        //Tipo Email(sin espacios ni signos solo @)
        Largo = parseFloat(Largo);
        CharValidos = CharUsuario;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;
     case "C":
        //Tipo Clave solo minusculas y números
        Largo = parseFloat(Largo);
        CharValidos = CharClave;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;    
    case "N":
        //Tipo de Dato Numérico
        if(TipoDato.substring(0,1) == "+"){
          Largo = Largo.substring(1);
          CharValidos = CharNumerico.substring(0,CharNumerico.length - 1); //Menos el -
        }else{
          CharValidos = CharNumerico;   //Con el signo -
        }        
        //Signo Númerico
          Sig = 0;
          if(TipoDato.substring(0,1) == "-"){
            Largo = Largo.substring(1);
            Sig = 1;
          }
        
        if(TipoDato.substring(0,1) != "+"){
            Sig = 1;
        }
        
        //Tecla No Valida
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        
        //Largo del Número
        Aux = parseInt(Largo) + "";
        Largo += "";
        if(Largo.indexOf(".") != -1){
          Aux = parseInt(Aux) + parseInt(Largo.substring(Largo.indexOf(".") + 1));
        }else{
          //alert(parseInt(Aux) + parseInt(Sig));          
        }
        if(Obj.value.length == parseInt(Aux) + parseInt(Sig)){
          event.returnValue = "";
          return false;
        }
        
        break;
    /*case "D":
        //Tipo Fecha = dd/mm/aaaa
        CharValidos = CharFecha;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }        
        if(Largo <= Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;*/
    case "T":
    
		//Tipo telefono 
        CharValidos = CharFono;   
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }        
        if(Largo <= Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;
 
 case "H":
		//Tipo Hora
		
        CharValidos = CharHorario; 
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        } 
        if(Largo <= Obj.value.length){
          event.returnValue = "";
          return false;
        }
        break;
        
    case "R":
		//Rut Continuado (Ingresado en un solo Text: 99999999-k)
		CharValidos = CharRut;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
		break;
    case "V":
		//Digito Verificador del Rut
		CharValidos = CharRutDig;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }
        if(Obj.value.length >= 1){
          event.returnValue = "";
          return false;
        }
		break;
    default:
        //Tipo AlfaNumérico
        CharValidos = CharTodos;
        if(CharValidos.indexOf(Tec) == -1){
          event.returnValue = "";
          return false;
        }        
        if(--Largo < Obj.value.length){
          event.returnValue = "";
          return false;
        }
  }
}

function ObjValidar(Obj){
  var Tipo,Largo;
  var newText = "";
  
  TipoDato = Obj.Formato;
  if(TipoDato == "D"){
    TipoDato = "10D";
  }
    
  Tipo = TipoDato.substring(TipoDato.length - 1,TipoDato.length);
  Largo = TipoDato.substring(0,TipoDato.length - 1);
  
  switch(Tipo.toUpperCase()){
    case "X":
        //Tipo Pasaporte
        for(i=0;(i < Obj.value.length);i++){
		  if(CharPasaporte.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,parseInt(Largo));
        break; 
    case "Z":
        //Tipo IP
        for(i=0;(i < Obj.value.length);i++){
		  if(CharIP.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,parseInt(Largo));
        break;
    case "Y":
        //Tipo Codigo 
        for(i=0;(i < Obj.value.length);i++){
		  if(CharCodigo.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,parseInt(Largo));
        break;
     case "E":
        //Tipo Alfabético
        for(i=0;(i < Obj.value.length);i++){
		  if(CharEncuesta.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,parseInt(Largo));
        break;    
    case "A":
        //Tipo Alfabético
        for(i=0;(i < Obj.value.length);i++){
		  if(CharLetras.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,parseInt(Largo));
        break;
     case "D":
        //Tipo Alfabético
        for(i=0;(i < Obj.value.length);i++){
		  if(CharDecimal.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,parseInt(Largo));
        break;   
     case "G":
        //Tipo Dirección
        for(i=0;(i < Obj.value.length);i++){
		  if(CharDireccion.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,parseInt(Largo));
        break;  
      case "P":
        //Tipo Parametros
        for(i=0;(i < Obj.value.length);i++){
		  if(CharParametros.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,parseInt(Largo));
        break;      
     case "M":
        //Tipo Email
        for(i=0;(i < Obj.value.length);i++){
		  if(CharEmail.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,parseInt(Largo));
        break;   
     case "U":
        //Tipo Email
        for(i=0;(i < Obj.value.length);i++){
		  if(CharUsuario.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,parseInt(Largo));
        break;   
     case "C":
        //Tipo clave
        for(i=0;(i < Obj.value.length);i++){
		  if(CharClave.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        Obj.value = newText.substring(0,parseInt(Largo));
        break;        
    case "N":
        //Tipo Numérico
        Decimal = 0;
        
        //==== Encuentra el Largo del Numero
        if(TipoDato.substring(0,1) == "-" || TipoDato.substring(0,1) == "+"){
          Largo = parseFloat(Largo.substring(1));}
        Largo += "";
        Entero = parseInt(Largo);
        
        if(Largo.indexOf(".") != -1){
          Decimal = Largo.substring(Largo.indexOf(".") + 1);
        }
        
        AuxNum = FormatoNumero2(transforma(Obj.value),Entero,Decimal);
        if(TipoDato.substring(0,1) == "-"){
          if(AuxNum > 0){
            AuxNum = AuxNum * -1;
          }
        }else{
		  if(TipoDato.substring(0,1) == "+" && AuxNum < 0){
		    AuxNum = AuxNum * -1;
		  }
        }
        
        Obj.value = AuxNum;
        break;
        
    /*case "D":
        //Tipo Fecha = dd/mm/aaaa
        var Array;
        
        //==== Quita Caracteres no Válidos
        for(i=0;(i < Obj.value.length);i++){
		  if(CharFecha.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = Array = newText;
        if(Array == ""){
          break;
        }
        
        Array = Array.split("/")
        
        if(Array.length != 3){
          alert("Fecha no válida");
          Obj.value = "";
          return false;
        }
        
        if(Array[0] < 1 || Array[0] > 31){
          alert("El dia no es válido");
          Obj.value = "";
	      return false;
        }
        if(Array[1] < 1 || Array[1] > 12){
          alert("El mes no es válido");
          Obj.value = "";
	      return false;
        }
        if(Array[2] < 1000 || Array[2] > 3000){
          alert("El año no es válido");
          Obj.value = "";
	      return false;
        }
        
        if ((Array[1]==4 || Array[1]==6 || Array[1]==9 || Array[1]==11 || Array[1]==2) && Array[0]==31) {
          //Mes de dias inferiores
	      alert("el mes no tiene 31 días");
	      Obj.value = "";
	      return false;
        }

        if (Array[1] == 2) { 
	      var isleap = (Array[2] % 4 == 0 && (Array[2] % 100 != 0 || Array[2] % 400 == 0));
	      if (Array[0]>29 || (Array[0]==29 && !isleap)) {
	        //Febrero de dias inferior (Año visiesto)
	        if (!isleap){
		      alert("febrero no tiene 29 días");
		      Obj.value = "";
	          return false;
	        }else{
	          alert("febrero no tiene 30 días");
		      Obj.value = "";
	          return false;
	        }
	      }
        }       
        break;*/
    case "R":
		//Rut Continuado (Ingresado en un solo Text: 99999999-k)
        for(i=0;(i < Obj.value.length);i++){
		  if(CharRut.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        if(newText == ""){
          Obj.value = newText;
          break;
        }
        
        //==== Valida el Rut
        var rut="";var dig="";
		largo = newText.length;
		
		if(newText.indexOf("-") != -1){
		  //Ingreso el Digito Verificador
		  rut = newText.substring(0,newText.indexOf("-")) + "";
		  dig = newText.substring(newText.indexOf("-")+1) + "";
		}else{
		  rut = newText;
		  dig = "";
		}
		
		//====Valida qie sean Numero
		rut = parseInt(rut);
		  if(isNaN(rut)){
			alert("El Rut ingresado no es Válido");
			Obj.value = "";
			Obj.focus();
		    break;
		  }else
		    rut = rut + "";
		if(dig.toLowerCase() != "k" && dig != ""){
		  dig = parseInt(dig);
		  if(isNaN(dig)){
				alert("El Dígito Verificador no es Válido");
				Obj.value = "";
			    Obj.focus();
				break;
		  }else
		    dig = dig + "";
		}
		
		suma = 0;
		mul  = 2;
		dvr = "";

		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{
		    dvr = eval(11-res) + "";
		  }
		
		if(dig == ""){
		  dig = dvr;
		}
		
		//====Compara el Digito Verificador ingresado por el User con el calculado
		if (dig != dvr){
		  alert("EL Rut no tiene válido su Dígito Verificador.");
		  Obj.value = rut + "-";
		  Obj.focus();
		  return false;
        }
        Obj.value = rut + "-" + dig;
		break;
    case "V":
		//Digito Verificador del Rut
        for(i=0;(i < Obj.value.length);i++){
		  if(CharRutDig.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,1);
		break;
    case "T":		
	 for(i=0;(i < Obj.value.length);i++){
		  if(CharFono.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
      	Obj.value = newText.substring(0,parseInt(Largo));
		break;
	
	case "H":		
	 for(i=0;(i < Obj.value.length);i++){
		  if(CharHorario.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
		Obj.value = newText.substring(0,parseInt(Largo));
		break;
    default:
		
        //Tipo AlfaNumérico
        for(i=0;(i < Obj.value.length);i++){
		  if(CharTodos.indexOf(Obj.value.substring(i,i+1)) != -1){
		    newText += Obj.value.substring(i,i+1);
		  }
        }
        
        Obj.value = newText.substring(0,parseInt(Largo));
  }
  
  var cadenaF,posF;
  
  cadenaF = Obj.onblur + "";
  posF = cadenaF.indexOf(";");
  cadenaF = cadenaF.substring(posF + 1,cadenaF.length - 1);
  
  Obj.onblur = new Function(cadenaF);
  Obj.onkeypress = "";
  
  if(Obj.Mascara){
    if(Obj.value == "")
      Obj.value = Obj.Mascara;
  }
}

function FormatoNumero2(Numero,CantEntero,CantDecimal){
   var Enteros,Decimales,Sig=0;
   Num = Numero + "";
   Enteros = Decimales = "";
   
   if(Num.length == 0){
     return "";
   }
   if(Numero.indexOf("-") == 0){
     Sig = 1;
   }
   
   //Recorre los Diguitos Enteros
   for(i=0;(i < CantEntero + Sig && i != Num.length);i++){
     if(Num.substring(i,i+1) == ".")
       break;
     Enteros = Enteros + Num.substring(i,i+1);
   }
   //Recorre los Numeros decimales
   if(Num.indexOf(".") != -1){
     Num = Num.substring(Num.indexOf(".")+1);
     for(i=0;(i < CantDecimal && i != Num.length);i++){
       if(Num.substring(i,i+1) != ".")
         Decimales = Decimales + Num.substring(i,i+1);
     }
     Decimales = "." + Decimales
   }
   Total = parseFloat(Enteros + Decimales);
   if(isNaN(Total)){
     Total = "";
   }   
   return transforma2(Total);
 }
 function transforma(valor)
 { 
 var cadena2= new String(valor);
 var temp="";j=0;
 for (j=0;j<cadena2.length;j++)
 {
	if (cadena2.charAt(j)==",")
		{
		temp+=".";
		}
	else
		{
		temp+=cadena2.charAt(j);
		}
 } 
 return (temp);
 }
 function transforma2(valor)
 { 
 var cadena2= new String(valor);
 var temp="";j=0;
 for (j=0;j<cadena2.length;j++)
 {
	if (cadena2.charAt(j)==".")
		{
		temp+=",";
		}
	else
		{
		temp+=cadena2.charAt(j);
		}
 } 
 return (temp);
 }  
