// JavaScript Document

//Validan campos con regular expressions
//EMAIL
function esCorreo(s, tam) {
    //RFC 2822 token definitions for valid email - only used together to form a java Pattern object: 
    var sp = "!#$%&'*+-/=?^_`{|}~"; 
    var atext = "[a-zA-Z0-9" + sp + "]";
    var atom = atext + "+"; //one or more atext chars
    var dotAtom = "\\." + atom;
    var localPart = atom + "(" + dotAtom + ")*"; //one atom followed by 0 or more dotAtoms
    //RFC 1035 tokens for domain names: 
    var letter = "[a-zA-Z]";  
    var letDig = "[a-zA-Z0-9]"; 
    var letDigHyp = "[a-zA-Z0-9-]"; 
    var rfcLabel = letDig + letDigHyp + "{0,61}" + letDig;
    var domain = rfcLabel + "(\\." + rfcLabel + ")*\\." + letter + "{2,6}"; 
    //Combined together, these form the allowed email regexp allowed by RFC 2822: 
    var addrSpec = "^" + localPart + "@" + domain + "$"; 	
	
	//Validar que tenga el minimo
	
    var regexp = new RegExp(addrSpec);
    return regexp.test(s);
}

//NUMERICO
function esNumerico(s, tam) {
    expr="^[0-9]" + tam + "$";
    var regexp = new RegExp(expr);
    return regexp.test(s);
}


//ALFABETICO
function esAlfabetico(s,tam) {
    expr="^[.a-zA-ZÑñáéíóúÁÉÍÓÚü\\s]" + tam +"$";
    var regexp = new RegExp(expr);
    return regexp.test(s);
}

//ALFANUMERICO
function esAlfanumerico(s, tam) {
    guion="-";
    signos="_:}1!¡?¿" + guion;
    expr="^[.a-zA-ZÑñ0-9\\s" + signos +"]" + tam + "$";
    var regexp = new RegExp(expr);
    return regexp.test(s);
}

//ALFANUMERICO
function esFecha(s) {
	if(s.length==9){
		dia=s.substring(8,9);
		s=s.substring(0,8) + '0' + dia;
	}

	dia=s.substring(8,10);
	if(dia=='00') return false;

    signo="-";
	anio="(([1][9][0-9][0-9])|([2][0][0][0-6]))";
	mes_dia="(([0][2])" + signo + "([0-2][0-9]))|((([0][469])|([1][1]))" + signo +"(([0-2][0-9])|([3][0])))|((([0][13578])|([1][02]))" + signo + "(([0-2][0-9])|([3][01])))";
    expr="^" + anio + signo + mes_dia + "$";
    var regexp = new RegExp(expr);
    return regexp.test(s);
}

//////////////////////////////////////////////////////////////////////////////////////////////

//Funcion que elimina algun caracter (ej ', |, etc.) de algun campo del formulario
function eliminaCaracteresCampo(campo){
	var i;
            if(campo.type=="text" || campo.type=="textarea"){	
                campo.value=replace(campo.value,"'","");
                campo.value=replace(campo.value,"|","");
            }
	return;
}

//Funcion que devuelve true si algun caracter inválido existe en un formulario
function caracteresInvalidos(form){
	var e,i;
	e=form.elements;
	for(i=0;i<e.length; i++)
            if(e[i].type=="text" || e[i].type=="textarea"){
                if(e[i].value.indexOf("'")!=-1) return true;
                if(e[i].value.indexOf("|")!=-1) return true;
            }
	return false;
}

//////////////////////////////////////////////////////////////////////////////////////////////
//Elimina los espacios en blanco a la izquierda de una cadena y regresa la cadena resultante
function TrimLeft( str ) {
	var resultStr = ""; var i = len = 0;
	// Return immediately if an invalid value was passed in
	if (str+"" == "undefined" || str == null) return null;
	// Make sure the argument is a string
	str += "";
	if (str.length == 0) resultStr = "";
	else {	
  		// Loop through string starting at the beginning as long as there are spaces.
//	  	len = str.length - 1;
		len = str.length;
		
  		while ((i <= len) && (str.charAt(i) == " "))
			i++;
        // When the loop is done, we're sitting at the first non-space char, so return that char plus the remaining chars of the string.
  		resultStr = str.substring(i, len);
  	}
  	return resultStr;
}

function valida_campo(campo){
	var error='';
	var minimo='', maximo='', anexo='+';

	//saca de la cadena campo.id el minimo de caracteres
	if(campo.id.indexOf("{")!=-1){
		minimo=campo.id.substring(campo.id.indexOf("{")+1,campo.id.indexOf(","));
		maximo=campo.id.substring(campo.id.indexOf(",")+1,campo.id.length-1);
		anexo='{' + minimo + ',' + maximo + '}';
		minimo='al menos ' + minimo;
   	}

	if(campo.id.indexOf("ab")!=-1){ //Debe ser un campo alfabetico
		if(!esAlfabetico(campo.value,anexo)){
			error+='\n - El campo ' + campo.title + ' debe contener ' + minimo + ' letras';
		}
	}
	else if(campo.id.indexOf("an")!=-1){ //Debe ser un campo alfabetico
		if(!esAlfanumerico(campo.value,anexo)){
			error+='\n - El campo ' + campo.title + ' debe contener ' + minimo + ' letras y/o digitos';
		}
	}
	else if(campo.id.indexOf("nu")!=-1){ //Debe ser un campo alfabetico
		if(!esNumerico(campo.value,anexo)){
			error+='\n - El campo ' + campo.title + ' debe contener ' + minimo + ' digitos';
		}
	}
	else if(campo.id.indexOf("em")!=-1){ //Debe ser un campo email
		if(!esCorreo(campo.value,anexo)){
			error+='\n - El campo ' + campo.title + ' debe contener una direccion valida';
		}
	}

	else if(campo.id.indexOf("fe")!=-1){ //Debe ser un campo email
		if(!esFecha(campo.value,anexo)){
			error+='\n - La ' + campo.title + ' debe ser una fecha valida';
		}
	}

	return error;
}


function deshabilita_form(form){
	for(i=0;form.elements[i]; i++){ //Mientras tenga controles el formulario
		form.elements[i].disabled=true;
	}
}


function que_correo(correo){
	if(correo.indexOf('hotmail.')!=-1) return 'hotmail';
	else if(correo.indexOf('yahoo.')!=-1) return 'yahoo';
	else if(correo.indexOf('gmail.')!=-1) return 'gmail';
	else return '';
}

function valida_form(form, hacer_submit, texto_confirm){
var e,i;
	var errores='';
	for(i=0;form.elements[i]; i++){ //Mientras tenga controles el formulario
		if(form.elements[i].type=="text" || form.elements[i].type=="password" || form.elements[i].type=="hidden"){ //Si el control es alguna caja de texto
			form.elements[i].value=TrimLeft(form.elements[i].value);
			if(form.elements[i].value==''){ //Si está vacío
				if(form.elements[i].id.indexOf("ob")!=-1){ //Si el campo es obligatorio
					errores+='\n - El campo ' + form.elements[i].title + ' es obligatorio';				
				}
			}
			else{ //Si el campo no esta vacio
				var error='' + valida_campo(form.elements[i]);
				errores+= '' + error;
			}
		}

		if(form.elements[i].type=="textarea"){ //Si el control es alguna caja de texto
			//form.elements[i].value=TrimLeft(form.elements[i].value);
			if(form.elements[i].value==''){ //Si está vacío
				if(form.elements[i].id.indexOf("ob")!=-1){ //Si el campo es obligatorio
					errores+='\n - El campo ' + form.elements[i].title + ' es obligatorio';				
				}
			}
			else{ //Si el campo no esta vacio
				var error='' + valida_campo(form.elements[i]);
				errores+= '' + error;
			}
		}

		//if(form.elements[i].name.indexOf("sel_")!=-1){ //Si el control es una lista
		if(form.elements[i].type=="select-one"){ //Si el control es una lista
			if(form.elements[i].value==''){ //Si está vacío
				if(form.elements[i].id.indexOf("ob")!=-1){ //Si el campo es obligatorio
					errores+='\n - El campo ' + form.elements[i].title + ' es obligatorio';				
				}
			}

		}


	}
	
	if(errores!=''){
		if(hacer_submit) alert('Tienes los siguientes errores:' + errores);
		else return errores;
	}
	else{
		if(hacer_submit){ 
			if(texto_confirm!=''){
				if(confirm(texto_confirm)){
					form.submit(); 
					deshabilita_form(form);
				}
			}
			else{
				form.submit(); 
				deshabilita_form(form);
			}
		}
		else return errores;
	}
}