// <!--

// VARIABLE DECLARATIONS

var digits = "0123456789";

var specialChar = "-()[]{},.!¡?¿@&$#%/|=+_*Ç:;><ªº"

var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzñáéíóúàèìòù"

var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÑÁÉÍÓÚÀÈÌÒÙ"

var defaultEmptyOK = false

// whitespace characters
var whitespace = " \t\n\r";

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isWhitespace(s)
{   var i;

    // Is s empty?
    if (isEmpty(s)) return true;

    // Search through string's characters one by one
    // until we find a non-whitespace character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);

        if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}

function isDigit (c)
{
	return ((c >= "0") && (c <= "9"))
}

function isLetter (c)
{
	return ( !(lowercaseLetters.indexOf(c) == -1) || !(uppercaseLetters.indexOf(c) == -1))
}

function isSpecialChar (c)
{
	return ( !(specialChar.indexOf(c) == -1))
}

function checkstring (s)
{   var i;
    if (isEmpty(s)) 
       if (checkstring.arguments.length == 1) return defaultEmptyOK;
       else return (checkstring.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-alphanumeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number or letter.
        var c = s.charAt(i);
        if (! (isWhitespace(c) || isLetter(c) || isDigit(c) || isSpecialChar(c) ) )
        return false;
    }
    // All characters are numbers or letters.
    return true;
}


function alineaizquierda(texto)
// Funcion que alinea el texto a la izquierda
// Retorna: el string alineado a la izquierda.
{
	var tmpstr = "";
	for (i=0; i < texto.length && texto.charAt(i) == ' '; i++);
	for (; i < texto.length; i++){
			tmpstr = tmpstr + texto.charAt(i);
	}
	return tmpstr;
}

// INICIO DE FUNCIONES PARA LA VALIDACION DEL RUT

function checkTipoDV(dv)
//Funcion que verifica la utilizacion de un digito verificador valido
//Retorna:
//	false: El caracter del digito verificador no es valido.
//	true : El caracter del digito verificador es valido.
{
	dv = dv + ""
	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; // No puede ser un digito verificador valido
	}
	return true; // El caracter del digito verificador es valido
}

function checkDV(rut)
//Funcion que comprueba el RUT con el digito verificador
//Retorna:
//	false: El DV no concuerda con el RUT.
//	true : El DV concuerda con el RUT.
{
	largo = rut.length;
	if (largo < 2)
	{
		return false; //No puede ser un RUT tan corto
	}

	dv = rut.charAt(largo-1);
	//Separar el rut del digito verificador
	if ( largo > 2 ){
		rut = rut.substring(0, largo - 1);
	}else{
		rut = rut.charAt(0);
	}

	if (!checkTipoDV(dv)) return false;

	if (rut == null || dv == null){
		return false;	//Los parametros entregados no eran correctos
	}

	//Iniciar la comprobacion propiamente tal
	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.charAt(0).toLowerCase())
	{
		return false //El DV no concordo con el RUT.
	}
	return true //EL DV concordo con el RUT.
}


function checkObjRut(objrut,objdv)
{
// Funcion que realiza una verificacion basica de un rut
// Ingresado en dos objetos tipo text
// Retorna:
//	  false: El RUT no es valido.
//	  true: RUT valido
  var rut,dv,i;
  if (objrut==null || objdv==null) {
  	 alert('Objeto rut no corresponde');
	 return false;
  }
  // chequear que el tipo de objeto sea text
  if (objrut.type != 'text' && objdv != 'text') {
  	 alert('Objetos Rut y digito verificador deben ser text');
	 return false;
  }
  // copiar el de los objetos a variables
  rut = objrut.value;
  dv = objdv.value;
  // limpiar los string de espacios,'.' y '-'
  var tmpstr = "";
  for ( i=0; i < rut.length ; i++ ){
    if ( rut.charAt(i) != ' ' && rut.charAt(i) != '.' && rut.charAt(i) != '-' ){
      tmpstr = tmpstr + rut.charAt(i);
    }
  }
  rut = tmpstr;
  var tmpstr = "";
  for ( i=0; i < dv.length ; i++ ) {
    if ( dv.charAt(i) != ' ' && dv.charAt(i) != '.' && dv.charAt(i) != '-' ) {
      tmpstr = tmpstr + dv.charAt(i);
    }
  }
  dv = tmpstr;
  objrut.value = rut;
  objdv.value = dv;
  // validar el largo de los string
  largo = rut.length;
  if (largo < 1) {
    alert("RUT inválido");
    objrut.focus();
    objrut.select();
    return false; //No puede ser un RUT tan corto
  }
  if (dv.length < 1) {
    alert("RUT inválido");
    objdv.focus();
    objdv.select();
    return false; //No puede ser un RUT tan corto
  }
  // Comprobar que solo queden caracteres validos
  for (i=0; i < rut.length; i++) {	
    c = rut.charAt(i);
    if ( c < '0' || '9' < c ) {
      alert("RUT inválido");
      objrut.focus();
      objrut.select();
      return false; //Quedaban algunos caracteres invalidos
    }
  }
  c = dv.charAt(0);  /* largo-1); */
  if (( c < '0' || '9' < c ) && (c != 'k') && (c != 'K') ) {
    alert("RUT inválido");
    objdv.focus();
    objdv.select();
    return false; //Quedaban algunos caracteres invalidos
  }
  // calcular el dígito verificador
  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 + "";
	}
  // verificar que el digito verificador corresponde
	if (dvr != dv.charAt(0).toLowerCase()) {
      alert("RUT inválido");
      objrut.focus();
      objrut.select();
		return false; //El DV no concordo con el RUT.
	}
	return true; //EL DV concordo con el RUT.
}

function checkRUT(texto)
{
	//Verificar si es un RUT vacio
	if (texto == "") {
		alert("RUT inválido");
		return false; //Oops, se entrego un RUT vacio.
	}

	//Sacarle al RUT los caracteres " ", "." y "-"
	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;

	//Comprobar que solo queden caracteres validos
	for (i=0; i < largo-1; i++)
	{	
      c = texto.charAt(i);
      if ( c < '0' || '9' < c )
		{
			alert("RUT inválido");
			return false; //Quedaban algunos caracteres invalidos
		}
	}

	c = texto.charAt(largo-1);
	if (( c < '0' || '9' < c ) && (c != 'k') && (c != 'K') ) {
		alert("RUT inválido");
		return false; //Quedaban algunos caracteres invalidos
	}

	//Verificar que el RUT no es menor a 999.999 o mayor a 999.999.999
	var dtexto = "";
	for (i=0; i<largo-1; i++){
		dtexto = dtexto + texto.charAt(i);
	}

	if (dtexto <= 99999 || 999999999 < dtexto)
	{
		alert("RUT inválido");
		return false; //El RUT no estaba entre el rango 999.999 y 999.999.999
	}
	
	//Colocar el RUT en un formato xxx.xxx.xxx-x
	invertido = "";
	for ( i=(largo-1),j=0; i>=0; i--,j++ ){
		invertido = invertido + texto.charAt(i);
	}

	dtexto = "";
	dtexto = dtexto + invertido.charAt(0);
	dtexto = dtexto + '-';
	cnt = 0;
	for ( i=1,j=2; i < largo; i++,j++ )
	{
		if ( cnt == 3 )
		{
			// dtexto = dtexto + '.'; //Si desea reformatear con puntos ,descomente
			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);
	}

	//Comprobar el digito verificador
	if(!checkDV(texto)) {
		alert("RUT inválido");
		return false; // No era un DV correcto
	}
	
	return true; //EL RUT parecia estar bien
}

//

function isNumber(s)
{
var i;

    if (isEmpty(s)) return true;

    // Search through string's characters one by one
    // until we find a non-alphanumeric character.
    // When we do, return false; if we don't, return true.

    else{

    for (i = 0; i < s.value.length; i++){   
        // Check that current character is number.
        var c = s.value.charAt(i);
        if (! (isWhitespace(c) || isDigit(c) ) )
        return false;
	}
    }
    // All characters are numbers .
    return true;
}

//-->

