function TrimRut(in_str)
{ //Trim de espacios, Trim de puntos, Trim de guion y 0 a la Izq.
var i = 0;
var out = "";

  //Trim ' '
  for(i = 0, out = ''; i <= in_str.length-1; i++)
     if(in_str.charAt(i) != ' ') out = out + in_str.charAt(i);

  //Trim '.'
  in_str = out;
  for(i = 0, out = ''; i <= in_str.length-1; i++)
     if(in_str.charAt(i) != '.') out = out + in_str.charAt(i);

  //Trim '-'
  in_str = out;
  for(i = 0, out = ''; i <= in_str.length-1; i++)
     if(in_str.charAt(i) != '-') out = out + in_str.charAt(i);

  //LeftTrim 0
  in_str = out;
  for(i = 0; i <= in_str.length-1 && in_str.charAt(i) == '0'; i++);
  for(out = ''; i <= in_str.length-1; i++) out = out + in_str.charAt(i);

  //UpperCase K
  out.toUpperCase();

  return out;
}

function OutDV(in_str)
{  //Sin ultimo Caracter DV
var out = "";
  out = in_str.substring(0, in_str.length-1);
  return out;
}

function tmpRutConvert(in_str)
{ // El Objetivo en esta funcion es
  // dejar la entrada sin 0 (ceros)
  // a la Izq. y sin espacios en blanco
  // ademas quitar el Dig. Verificador
  // (ultimo caracter).

var out = in_str;
out = TrimRut(out);
out = OutDV(out);
return out;
}


function getFormRut(rutvalues)
{
	var i;
	
  // format the rut

  rut = "" + rutvalues;
  //rutvalues = tmpRutConvert(rutvalues);
  
  formRut = getVeriDigit(rutvalues);
  formRut = '-' + formRut;

  for(i = rut.length -1; i >= 0; i --)
    {
      if(((rut.length-1-i)%3) == 0 && i != rut.length-1)
		formRut = '.' + formRut;

      formRut = rut.charAt(i) + formRut;
    }

  return formRut;
}

//si la entrada es "" devuelve ""
function getFormRutBlanco(rutvalues)
{
	var i;
	
  if (rutvalues == "")
		return rutvalues;
  else {	
	// format the rut
	rut = "" + rutvalues;
	formRut = getVeriDigit(rutvalues);
	formRut = '-' + formRut;

	for(i = rut.length -1; i >= 0; i --)
	  {
	    if(((rut.length-1-i)%3) == 0 && i != rut.length-1)
			formRut = '.' + formRut;

	    formRut = rut.charAt(i) + formRut;
	  }

	return formRut;
  }	
}	

function getVeriDigit(rutvalues)
{
	var i;
	rutvalues = (""+rutvalues)
   sum = 0;
   cd = 0;
   mv = 0;

   for(i = rutvalues.length-1; i >= 0; i --)
   {
      mv = (rutvalues.length-1) - i;
      cd = rutvalues.charAt(i); 
      sum += (cd) * ((mv%6) + 2);
   }
   vd = 11 - sum % 11;
   vd = (vd == 11) ? 0 : vd;

   if( vd == 10)
	return "K";
   else
	return vd;
}


function checkVeriDigit(rutvalues, digit)
{
	var i;
   sum = 0;
   cd = 0;
   mv = 0;
   ivd = 0;
   ivd = (digit == "k" || digit == "K") ? 10 : digit;
   

   for(i = rutvalues.length-1; i >= 0; i --)
   {
      mv = (rutvalues.length-1) - i;
      cd = rutvalues.charAt(i); 
      sum += (cd) * ((mv%6) + 2);
   }
   vd = 11 - sum % 11;
   vd = (vd == 11) ? 0 : vd;

   if( vd == ivd)
	return true;
   else
	return false;
}


/*function checkRut( input_field )
{
	var rut;
	return checkRut(input_field, rut);
}
¨*/
var rut_numbre_formater_pure_rut;


function checkRut( input_field )
{
	var i;
	var rut = "";
	var veridigit = ""; 


	rut_numbre_formater_pure_rut = rut;

  crudeRut = input_field.value;

  // allow spaces in rut
  inRut = "";
  for(i = 0; i < crudeRut.length; i ++)
    {
      if(crudeRut.charAt(i) != ' ')
	inRut = inRut + crudeRut.charAt(i);
    }
    
      

  for (i = 0; i < inRut.length && inRut.charAt(i) != '-'; i ++)
    {
      currentc = inRut.charAt(i);
      if(currentc >= '0' && currentc <= '9')
	{
	  // its digit add to rut
	  rut = rut + currentc;
	}
      else if(i == inRut.length-1 && (currentc == "k" || currentc == "K"))
	{
	  // the last digit is allowed to be a 'k'
	  rut = rut + currentc;
	}
      else if(currentc != '.' )
	{
	  // not allowed!
	  rut_numbre_formater_pure_rut = rut;
	  return false;
	}
    }

  if(inRut.charAt(i) != '-')
    {
      // take last rut digit as veridigit
      if(rut.length >= 2)
	{
	  veridigit = rut.charAt(rut.length-1);
	  rut = rut.substr(0, rut.length - 1);
	}
    }
  else
    {
      i ++;
      if(i == inRut.length-1)
		veridigit = inRut.charAt(i);
      else
      {
		rut_numbre_formater_pure_rut = rut;
		return false;
	  }
    }


  if(checkVeriDigit(rut, veridigit) == false)
  {
	rut_numbre_formater_pure_rut = rut;
	return false;
  }


  // format the rut
  formRut = veridigit;
  formRut = '-' + formRut;
  for(i = rut.length -1; i >= 0; i --)
    {
      if(((rut.length-1-i)%3) == 0 && i != rut.length-1)
	formRut = '.' + formRut;

      formRut = rut.charAt(i) + formRut;
    }
  input_field.value = formRut;
  rut_numbre_formater_pure_rut = rut;
  return true;
}
 	

function format(value, input)
{
	
  if(checkRut(input) == false)
    {
    // llamamos la atención solo si el rut no fue borrado
    if(input.value != "")
		alert("El rut ingresado no es válido.");
	input.focus();
	value.value = ""
	return false;
    }
  else
   {
    // the checkRut function has left the pure rut value in the global var rut
	value.value = rut_numbre_formater_pure_rut;
	return true;
   }
}

//si entra "" no valida y asigna ""
function formato_rut(value, input)
{
  if (input.value == "")
	value.value = "";
  else	
	if(checkRut(input) == false)
		{
		// llamamos la atención solo si el rut no fue borrado
		if(input.value != "")
		alert("El rut ingresado no es válido.");
		input.focus();
		value.value = ""
		return false;
		}
	 else
		{
		// the checkRut function has left the pure rut value in the global var rut
		value.value = rut_numbre_formater_pure_rut;
		return true;
		}
}
