/*  
Description: Funciones de validación de formularios.
Author: I2B Technologies
Author URI: http://www.i2b.cl
Owner: Entel PCS
Owner URI: http://www.entelpcs.cl
Version: 1.4
*/


/* funciones *************************************************/
/*
Descripción: Funcion para validar el rut, cuando existen dos casillas: rut y dígito verificador.
Requisitos: Se le deben enviar los ID de las casillas de rut y la del dígito verificador.
Devuelve: 1, si está correcto. 0 si existe algún error.
*/
function validarRutSeparado(rut,dv){
	var ok=0;
	var rut=document.getElementById(rut).value;
	var dv=document.getElementById(dv).value;

	var largo=rut.length;
	var suma=0;
	var mult=2;
	largo--;
	
	while(largo>=0) {
		suma=suma+(rut.charAt(largo)*mult);
		if(mult>6) { mult=2; }
		else { mult++; }
		largo--;
	}

	var resto=suma%11;
	var digito=11-resto;
	
	if(digito==10) { digito="k"; }
	if(digito==11) { digito=0; }
	
	if(!rut || !dv) { ok=0; }
	else if(digito!=dv) { ok=0; }
	else { ok=1; }
	
	return ok;
}


/*
Descripción: Funcion para validar el rut, cuando existen una sola casilla que contiene el rut y dígito verificador.
Requisitos: Se le debe enviar el ID de la casilla  que contiene el rut.
Devuelve: 1, si está correcto. 0 si existe algún error.
*/
function validarRutCompleto(rut){
	var ok=0;
	var rut=document.getElementById(rut).value;
	if(rut.substr(rut.length-1,1)!="K"){
		var dv=rut.substr(rut.length-1,1);
		rut=rut.substr(0,rut.length-1);
	}
	else{ dv="K"; }
	rut=rut=rut.replace(/\D/g,"");

	var largo=rut.length;
	var suma=0;
	var mult=2;
	largo--;
	
	while(largo>=0) {
		suma=suma+(rut.charAt(largo)*mult);
		if(mult>6) { mult=2; }
		else { mult++; }
		largo--;
	}

	var resto=suma%11;
	var digito=11-resto;
	
	if(digito==10) { digito="K"; }
	if(digito==11) { digito=0; }
	
	if(!rut || !dv) { ok=0; }
	else if(digito!=dv) { ok=0; }
	else { ok=1; }
	
	return ok;
}


/*
Descripción: Funcion para formatear el rut, cuando existen una sola casilla que contiene el rut y dígito verificador.
Requisitos: Se le debe enviar el ID de la casilla.
Devuelve: Retorna el rut formateado a la casilla.
*/
function formatearRut(casilla){
	var casillaRut=document.getElementById(casilla);
	
	var rut=casillaRut.value;
	var ultimoDigito=rut.substr(rut.length-1,1);
	var terminaEnK = (ultimoDigito.toLowerCase()=="k");
	rutSinFormato=rut.replace(/\W/g,"");
	rut=rut.replace(/\D/g,"");
	var dv=rut.substr(rut.length-1,1);
	if(!terminaEnK){ rut=rut.substr(0,rut.length-1); }
	else{ dv="K"; }
	if(rut && dv) {
		casillaRut.value=formatearMillones(rut)+"-"+dv;
		//document.getElementById('buic_rutdv').value=rutSinFormato;
	}
}


/*
Descripción: Funcion para formatear millones.
Requisitos: Se le debe enviar el número a formatear.
Devuelve: Retorna el número formateado.
*/
function formatearMillones(nNmb){
	var sRes = "";
	for (var j, i = nNmb.length - 1, j = 0; i >= 0; i--, j++)
	 sRes = nNmb.charAt(i) + ((j > 0) && (j % 3 == 0)? ".": "") + sRes;
	return sRes;
}


/*
Descripción: Funcion para validar que una casilla tenga un mínimo de dígitos.
Requisitos: Se le debe enviar el ID de la casilla a verificar, y el mínimo de dígitos que se necesitan.
Devuelve: 1, si está correcto. 0 si existe algún error.
*/
function validacionSimple(id,min_digitos){
	var ok=1;
	casilla=document.getElementById(id);
	
	if(min_digitos!=""){
		if(casilla.value.length<min_digitos) { ok=0; }
	}
	else{
		if(casilla.value.length<1) { ok=0; }
	}
	
	return ok;
}


/*
Descripción: Funcion para validar que una casilla contenga sólo numeros.
Requisitos: Se le debe enviar el ID de la casilla a verificar, y el mínimo de dígitos que se necesitan.
Devuelve: 1, si está correcto. 0 si existe algún error.
*/
function validacionNumerica(id,min_digitos){
	var ok=1;
	var patron=/\D/;
	casilla=document.getElementById(id);
	
	if(min_digitos!=""){
		if(casilla.value.length<min_digitos) { ok=0; }
	}
	if(casilla.value.length<1) { ok=0; }
	if(patron.test(casilla.value)) { ok=0; }
	
	return ok;
}

/*
Descripción: Funcion para validar que una casilla contenga sólo letras.
Requisitos: Se le debe enviar el ID de la casilla a verificar, y el mínimo de dígitos que se necesitan.
Devuelve: 1, si está correcto. 0 si existe algún error.
*/
function validacionAlfabetica(id,min_digitos){
	var ok=1;
	var patron=/[^a-zA-Z \-áéíóúÁÉÍÓÚñÑ]/;
	casilla=document.getElementById(id);
	txt=casilla.value;
	
	if(min_digitos!=""){
		if(casilla.value.length<min_digitos) { ok=0; }
	}
	if(casilla.value.length<1) { ok=0; }
	if(patron.test(txt)) { ok=0; }
	return ok;
}


/*
Descripción: Funcion para validar que una casilla contenga sólo letras y números.
Requisitos: Se le debe enviar el ID de la casilla a verificar, y el mínimo de caracteres que se necesitan.
Devuelve: 1, si está correcto. 0 si existe algún error.
*/
function validacionAlfanumerica(id,min_digitos){
	var ok=1;
	var patron=/[^0-9a-zA-Z \-áéíóúÁÉÍÓÚñÑ]/;
	casilla=document.getElementById(id);
	txt=casilla.value;
	
	if(min_digitos!=""){
		if(casilla.value.length<min_digitos) { ok=0; }
	}
	if(casilla.value.length<1) { ok=0; }
	if(patron.test(txt)) { ok=0; }
	return ok;
}


/*
Descripción: Funcion para validar que un combo box tenga alguna opción seleccionada.
Requisitos: Se le debe enviar el ID del combo box y el valor que correspondería a no seleccionar ninguna opción.
Devuelve: 1, si está correcto. 0 si existe algún error.
*/
function validarCombo(id,valor){
	var ok=1;
	casilla=document.getElementById(id);

	if(casilla.value==valor) { ok=0; }
	
	return ok;
}


/*
Descripción: Funcion para validar que una checkbox esté tickeado.
Requisitos: Se le debe enviar el ID del checkbox.
Devuelve: 1, si está tickeado. 0 si no está tickeado.
*/
function validarCheckbox(id){
	var ok=1;
	casilla=document.getElementById(id);
	
	if(casilla.checked==false){ ok=0; }

	return ok;
}


/*
Descripción: Funcion para validar que una dirección de e-mail sea real.
Requisitos: Se le debe enviar el ID de la casilla a verificar.
Devuelve: 1, si está correcto. 0 si existe algún error.
*/
function validarMail(id){
	casilla=document.getElementById(id);
	var ok=1;
	var es_email=/^(.+\@.+\..+)$/;
	if(!es_email.test(casilla.value)) { ok=0; }
	
	return ok;
}


/*
Descripción: Funcion para completar un combo box con un rango de números.
Requisitos: Se le debe enviar el id del combo box, el valor mínimo y el máximo.
Devuelve: Rellena el combo box especificado.
*/
function completarCombo(id,desde,hasta){
	casilla=document.getElementById(id);
	for (i=desde;i<=hasta;i++){
		var opcion = new Option(i,i);
		casilla.options[casilla.options.length] = opcion;	
	}
}


/*
Descripción: Funcion para mostrar una alerta con todos los errores encontrados.
Requisitos: Se le debe enviar el arreglo con los errores.
Devuelve: Muestra en pantalla una ventana de alerta con los errores encontrados.
*/
function mostrarErrores(error){
	casilla=document.getElementById(error[0][0]);
	casilla.focus();
	casilla.className="input_cuenta error";
	document.getElementById('alerta_error').innerHTML=error[0][1];
	$('alerta_error').fade(1); //requiere mootools
}


/*
Descripción: Funcion para mostrar un alert con todos los errores encontrados.
Requisitos: Se le debe enviar el arreglo con los errores.
Devuelve: Muestra en pantalla una ventana de alerta con los errores encontrados.
*/
function alertarErrores(error){
	casilla=document.getElementById(error[0][0]);
	casilla.focus();
	casilla.className="error";
	alert(error[0][1]);
}
/*************************************************************/