/*
Librería de validación
Versión: 2.0
Autor: GEEKBOX
URL: http://www.geekbox.cl
*/


/*
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 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);
	if(ultimoDigito.toLowerCase()=="k"){ var terminaEnK=1; }
	else{ var terminaEnK=0; }
	rut=rut.replace(/\D/g,"");
	rutSinFormato=rut;
	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 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 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 mostrarErrores(error){
	txt="Se han encontrado los siguientes errores:\n\n";
	for(i=0;i<error.length;i++){
		txt=txt+"- "+error[i]+"\n";
	}
	alert(txt);
}