/************************************************************
 *      Biblioteca de Funciones de Manejo de Rut con        *
 *      parámetro principal como Objeto, Versión 2.0        *
 *      Autor:           Hernán Mallea Soto                 *
 *      Versión 2.0:     29 - Mar - 2006                    *
 *                       Incorpora validación de Rut en un  *
 *                       sólo campo de texto.               *
 *      Versión 1.1.1:   08 - Feb - 2001                    *
 *      Versión 1.1:     29 - Dic - 1999                    *
 *      Versión 1.0:     25 - Nov - 1999                    *
 ************************************************************/

/*	Verifica si un Rut con su Dígito Verificador es válido.
	Devuelve booleano	*/
function ChequearRutDigito(ObjRut, ObjDigito) {
	var dvr = '0'
	suma = 0
	mult = 2

	strObjRut = ObjRut.value;
	strObjDig = ObjDigito.value;
	for ( i = strObjRut.length - 1 ; i >= 0 ; i -- ) {
		suma = suma + strObjRut.charAt(i) * mult;
		if ( mult == 7 )
			mult = 2;
		else
			mult ++;
	}
	res = suma % 11;
	if ( res == 1 )
		dvr = 'k';
	else {
		if ( res == 0 )
			dvr = '0';
		else {
			dvi = 11 - res;
			dvr = dvi + '';
		}
	}
	if ( dvr != strObjDig.toLowerCase() )
		return false;
	return true;
}

/*	Verifica si un Rut es válido, usa un sólo campo de texto.
	Devuelve booleano	*/
function checkRutField(ObjRut) {
//	ObjRut:	Objeto que contiene texto para validarlo como Rut

	var tmpstr = '';
	var rut = ObjRut.value;

	for (i=0; i < rut.length ; i++ )
		if ( rut.charAt(i) != ' ' && rut.charAt(i) != '.' && rut.charAt(i) != '-')
			tmpstr = tmpstr + rut.charAt(i);

	rut = tmpstr;
	largo = rut.length;
// [VARM+]
	tmpstr = '';

	for (i=0; rut.charAt(i) == '0' ; i++);
		for (; i < rut.length ; i++ )
			tmpstr = tmpstr + rut.charAt(i);
	rut = tmpstr;
	largo = rut.length;
// [VARM-]

	if (largo < 2 ) {
		alert("Debe ingresar el RUT completo.");
		ObjRut.focus();
		ObjRut.select();
		return false;
	}

	for (i=0; i < largo ; i++ ) {
		if (rut.charAt(i) != "0" && rut.charAt(i) != "1" && rut.charAt(i) !="2" && rut.charAt(i) != "3" && 
			rut.charAt(i) != "4" && rut.charAt(i) !="5" && rut.charAt(i) != "6" && rut.charAt(i) != "7" && 
			rut.charAt(i) !="8" && rut.charAt(i) != "9" && rut.charAt(i) !="k" && rut.charAt(i) != "K" ) {
			alert("El valor ingresado no corresponde a un RUT válido.");
			ObjRut.focus();
			ObjRut.select();
			return false;
		}
	}

	var invertido = '';
	for (i=(largo-1),j=0; i>=0; i--,j++ )
		invertido = invertido + rut.charAt(i);

	var drut = '';
	drut = drut + invertido.charAt(0);
	drut = drut + '-';
	cnt = 0;
	for (i=1,j=2; i<largo; i++,j++ ) {
		if (cnt == 3) {
			drut = drut + '.';
			j++;
			drut = drut + invertido.charAt(i);
			cnt = 1;
		} else {
			drut = drut + invertido.charAt(i);
			cnt++;
		}
	}
	invertido = '';
	for (i=(drut.length-1),j=0; i>=0; i--,j++)
		invertido = invertido + drut.charAt(i);

	ObjRut.value = invertido;
	if ( checkDV(rut) )
		return true;
	else {
		ObjRut.focus();
		ObjRut.select();
	}
	return false;
}

function checkDV(strRut) {

	largo = strRut.length;
	if ( largo < 2 ) {
		alert("Debe ingresar el RUT completo.");
		return false;
	}

	if ( largo > 2 )
		rut = strRut.substring(0, largo - 1);
	else
		rut = strRut.charAt(0);
	dv = strRut.charAt(largo-1);
	if (!checkCDV(dv))
		return false;
	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.");
		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') {
		alert("Debe ingresar un dígito verificador válido.");
		return false;
	}
	return true;
}
