<script language="javascript">
//Script de verificacion de Krock
// ----------------------------------------------------------------------
// Rutinas para verificacion de formularios, basado en FormChek.js
// Parte del curso "TEJEDORES DEL WEB" http://www.TejedoresDelWeb.com/
// ---------------------------------------------------------------------- 

var defaultEmptyOK = false
var checkNiceness = true;
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzáéíóúñü"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"
var whitespace = " \t\n\r";
var phoneChars = "()-+ ";
var mMessage = "Error: no puede dejar este espacio vacio"
var pPrompt = "Error: ";
var pAlphanumeric = "ingrese un texto que contenga solo letras y/o numeros";
var pAlphabetic   = "ingrese un texto que contenga solo letras";
var pInteger = "ingrese un numero entero";
var pNumber = "ingrese un numero";
var pPhoneNumber = "ingrese un número de teléfono";
var pEmail = "ingrese una dirección de correo electrónico válida";
var pName = "ingrese un texto que contenga solo letras, numeros o espacios";
var pNice = "no puede utilizar comillas aqui";

function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isWhitespace (s)
{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        // si el caracter en que estoy no aparece en whitespace,
        // entonces retornar falso
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}


function stripCharsInBag (s, bag)
{   var i;
    var returnString = "";

    // Buscar por el string, si el caracter no esta en "bag", 
    // agregarlo a returnString
    
    for (i = 0; i < s.length; i++)
    {   var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}
function stripCharsNotInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }

    return returnString;
}


function stripWhitespace (s)
{   return stripCharsInBag (s, whitespace)
}

function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}

function stripInitialWhitespace (s)
{   var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;
    return s.substring (i, s.length);
}

function isLetter (c)
{
    return( ( uppercaseLetters.indexOf( c ) != -1 ) ||
            ( lowercaseLetters.indexOf( c ) != -1 ) )
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

function isInteger (s)
{   var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if (!isDigit(c)) return false;
        } else { 
            if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}


function isNumber (s)
{   var i;
    var dotAppeared;
    dotAppeared = false;
    if (isEmpty(s)) 
       if (isNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isNumber.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c)) return false;
        } else { 
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}

function isAlphabetic (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is letter.
        var c = s.charAt(i);

        if (!isLetter(c))
        return false;
    }
    return true;
}

function isAlphanumeric (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }

    return true;
}

function isName (s)
{
    if (isEmpty(s)) 
       if (isName.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    
    return( isAlphanumeric( stripCharsInBag( s, whitespace ) ) );
}

function isPhoneNumber (s)
{   var modString;
    if (isEmpty(s)) 
       if (isPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isPhoneNumber.arguments[1] == true);
    modString = stripCharsInBag( s, phoneChars );
    return (isInteger(modString))
}

function isEmail (s)
{
    if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function isNice(s)
{
        var i = 1;
        var sLength = s.length;
        var b = 1;
        while(i<sLength) {
                if( (s.charAt(i) == "\"") || (s.charAt(i) == "'" ) ) b = 0;
                i++;
        }
        return b;
}

function statBar (s)
{   window.status = s
}

function warnEmpty (theField)
{   theField.focus()
    alert(mMessage)
    statBar(mMessage)
    return false
}

function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    statBar(pPrompt + s)
    return false
}


function checkField (theField, theFunction, emptyOK, s)
{   
    var msg;
    if (checkField.arguments.length < 3) emptyOK = defaultEmptyOK;
    if (checkField.arguments.length == 4) {
        msg = s;
    } else {
        if( theFunction == isAlphabetic ) msg = pAlphabetic;
        if( theFunction == isAlphanumeric ) msg = pAlphanumeric;
        if( theFunction == isInteger ) msg = pInteger;
        if( theFunction == isNumber ) msg = pNumber;
        if( theFunction == isEmail ) msg = pEmail;
        if( theFunction == isPhoneNumber ) msg = pPhoneNumber;
        if( theFunction == isName ) msg = pName;
    }
    
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;

    if ((emptyOK == false) && (isEmpty(theField.value))) 
        return warnEmpty(theField);

    if ( checkNiceness && !isNice(theField.value))
        return warnInvalid(theField, pNice);

    if (theFunction(theField.value) == true) 
        return true;
    else
        return warnInvalid(theField,msg);

}
// Aqui empiezan las mias


function checkCDV( dvr,obj_rut )
{
  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')
  {
    alert("Debe ingresar un digito verificador valido.");
        obj_rut.value = "";
    obj_rut.focus();
    return false;
  }
  return true;
}


function checkDV(crut,obj_rut)
{  
  largo = crut.length;
  if ( largo < 2 )
  {
    alert("Debe ingresar el rut completo.");
        obj_rut.value = "";
    obj_rut.focus();
    return false;
  }

  if ( largo > 2 )
    rut = crut.substring(0, largo - 1);
  else
    rut = crut.charAt(0);
  dv = crut.charAt(largo-1);
  checkCDV(dv,obj_rut);

  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_rut.focus();    
    return false;
  }
      return true;
}

function veriano()
{
var ano;
ano=document.Register.ano_nac.value ;

if ((!isNumber(ano))||(ano<1900) || (ano>3000))
	{
	alert("Debe ingresar un año de nacimiento dentro del rango (1900-3000).");
        document.Register.ano_nac.value = "";
	document.Register.ano_nac.focus();
    	return false;

	}
}

function verimail()
{
var ano;
ano=document.calform.email.value ;

if (!isEmail(ano))
        {
        alert("Debe ingresar un Mail válido.");
        document.calform.email.value = "";
        document.calform.email.focus();
        return false;

        }
}


function verirut(obj_rut)
{

        var texto;
  texto = obj_rut.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.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 R.U.T valido.");
      obj_rut.focus();
          obj_rut.value = "";
      return false;
    }
  }

  var invertido = "";

  for ( i=(largo-1),j=0; i>=0; i--,j++ )
    invertido = invertido + texto.charAt(i);

  var dtexto = "";

  dtexto = dtexto + invertido.charAt(0);
  dtexto = dtexto + '-';
  cnt = 0;
  for ( i=1,j=2; i<largo; i++,j++ )
  {
    if ( cnt == 3 )
    {
      dtexto = dtexto + '.';
      j++;
      dtexto = dtexto + invertido.charAt(i);
      cnt = 1;
    }
    else
    { 
      dtexto = dtexto + invertido.charAt(i);
      cnt++;
    }
  }

  invertido = "";

  for ( i=(dtexto.length-1),j=0; i>=0; i--,j++ )
    invertido = invertido + dtexto.charAt(i);
    obj_rut.value = invertido;    

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

// Variable utilizadas en la validacion

// Arreglo con el maximo de dias de cada mes
var diasDeMes = new Array(12);
diasDeMes[1]  = 31;
diasDeMes[2]  = 29;
diasDeMes[3]  = 31;
diasDeMes[4]  = 30;
diasDeMes[5]  = 31;
diasDeMes[6]  = 30;
diasDeMes[7]  = 31;
diasDeMes[8]  = 31;
diasDeMes[9]  = 30;
diasDeMes[10] = 31;
diasDeMes[11] = 30;
diasDeMes[12] = 31;



// Retorna true si el valor es nulo o vacio.

function esVacio(pValor) {

  // Es nulo
  if(pValor == null)
    return true;

  // Es vacio
  if(pValor.length <= 0)
    return true;

  // Cualquier otro caso
  return false;
}



// Retorna true si el valor es vacio o consiste 
// solamente de espacios en blanco.

function esBlanco(pValor) {
  // Es nulo o vacio
  if(esVacio(pValor))
    return true;

  // Tiene algun caracter no blanco
  var i;
  for(i = 0; i < pValor.length; i++) {
    if(pValor.substring(i, i+1) != " ")
      return false;
  }

  // Tiene solamente blancos
  return true;
}



// Returna true si todos los caracteres son enteros
// y tiene el largo especificado

function esEntero(pTexto, pLargo) {
  // Revisa que tenga el largo adecuado
  if(pTexto.length != pLargo)
    return false;
  
  // Revisa que algun caracter no sea entero
  var i;
  for(i = 0; i < pLargo; i++) {
    var caracter = pTexto.substring(i, i+1);
    if(caracter < "0" || caracter > "9")
      return false;
  }

  // Todos sus caracteres son enteros
  return true;
}



// Retorna los dias que tiene febrero en el agno determinado

function diasDeFebrero(pAgno) {
  // Regla de agnos bisiestos
  return ( ((pAgno % 4 == 0) && ( (!(pAgno % 100 == 0)) || (pAgno % 400 == 0) ) ) ? 29 : 28 );
}



// Retorna true si la fecha es valida

function esFecha(pDia, pMes, pAgno) {
  // Revisa que sean campos numericos del largo adecuado
  if(! (esEntero(pDia, 2) && esEntero(pMes, 2) && esEntero(pAgno, 4)))
    return false;

  // Transformacion a enteros
  var intDia  = parseInt(pDia);
  var intMes  = parseInt(pMes);
  var intAgno = parseInt(pAgno);

  // Revisa que el mes sea valido
  if (intMes < 1 || intMes > 12)
    return false;

  // Revisa que el dia este en el rango que corresponde al mes
  if (intDia > diasDeMes[intMes])
    return false; 

  // Revisa el caso de agnos bisiestos
  if ((intMes == 2) && (intDia > diasDeFebrero(intAgno)))
    return false;

  return true;
}

function validaFecha(pValor) {
  // No tiene el largo necesario
  if(pValor.length != 10)
    return false;  

  // Revisa que sea una fecha valida
  return esFecha(pValor.substring(0,2), pValor.substring(3,5), pValor.substring(6));
}


function verifecha1()
{
var ano;
ano=document.calform.checkin.value ;    
if (!validaFecha(ano))
        {
        alert("Debe ingresar una fecha valida y en el formato dd/mm/aaaa.");
        document.calform.checkin.value = "";
        document.calform.checkin.focus();
        return false;
      
        }
}

function verifecha2()
{
var ano;
ano=document.calform.checkout.value ;    
if (!validaFecha(ano))
        {
        alert("Debe ingresar una fecha valida y en el formato dd/mm/aaaa.");
        document.calform.checkout.value = "";
        document.calform.checkout.focus();
        return false;
      
        }
}

</script>
