/**
* Archivo js de validacion de formularios
* @Author Miguel Angel Torres Rodriguez
* Todos los derechos reservados - 2005
*/

/*
    Valida la forma de un e-mail
*/
function validarEmail(email){
	if(
	email.indexOf("@")==-1 || email.indexOf(".")==-1 || email.length<6	/*validacion basica de todo email, la @ el punto y la longitud minima */
	|| email.indexOf(".con.co")==email.length-7 || email.indexOf(".con")==email.length-4 /*validacion de errores frecuentes*/
	) {
    	alert("Introduce un email valido");
        return false;
	}else{
        return true;
	}
}

/**
 Valida el valor de un formulario. El campo debe tener al menos un caracter y no ser igual al valor de error
 @param control Un componente que posea el atributo "value"
 @param mensajeError El mensaje que acompaņa el alert cuando no se cumple con lo establecido.
        El mensaje es de la forma "Debe ingresar un valor para "+mensajeError.
 @param valorError El valor que NO puede tomar el control o null si no se especifica. Parametro opcional
 @param longMin La longitud minima que debe tomar o null si no se desea tener en cuenta
 @param longMax La longitud maxima que debe tomar o null si no se desea tener en cuenta
 @return Si es correcto el formato (true) o no.
 @author Miguel Angel Torres Rodriguez
*/
function validar(control,mensajeError,valorError,longMin,longMax){
    texto=control.value;
    if(texto==null || texto.length==0){
        alert('debe ingresar un valor para '+mensajeError);
        control.focus();
        return false;
    }
    if(valorError!=null && texto==valorError){
        alert('debe ingresar un valor distinto a '+valorError);
        control.focus();
        return false;
    }
    if(longMin!=null && texto.length<longMin){
        alert('debe ingresar un valor con mas de '+longMin+' caracteres');
        control.focus();
        return false;
    }
    if(longMax!=null && longMax<=texto.length){
        alert('debe ingresar un valor con menos de '+longMax+' caracteres');
        control.focus();
        return false;
    }
    return true;        
}

/**
 Verifica si se ha introducido una contraseņa y si es igual en ambos
 @param contra1,contra2 Dos controles tipo input, type=password
*/
function verificarContra(contra1,contra2,obligatorio){
    if(obligatorio && (contra1.value==null || contra1.value.length==0)){
        alert("Debe ingresar una clave");/*No utilice con Internet Explorer*/
        contra1.focus();
        return false;
    }
    if(contra1.value.length>0 && contra1.value!=contra2.value){
        alert("Las contraseņas ingresadas no coinciden");
        contra1.focus();
        return false;
    }
    return true;
}

/**
@param el valor a poner el cerito antes
@return 0n si n<10, n en otro caso
*/
function dig2(n){
	return n<10 ? "0"+n:n;
}

/**
* Verifica que una fecha se encuentre en formato Dia[sep]mes[sep]aņo,
* Dia: numero de 0-31
* Mes: numero de 1-12
* Aņo: numero de 2 o 4 digitos
* @author Miguel Angel Torres Rodriguez
* @param control el control a validar
* @param obligatorio define si es o no obligatorio (por defecto lo es)
* @param separador el separador a utilizar, por defecto es "/"
* @return si estuvo bien validado o no
*/
function validarFechaDMA(control,obligatorio,separador){
	if(obligatorio==null) obligatorio=true;
	if(separador==null) separador="/";	
	y=false;
	if(control.value==" "){
		control.value="";
	}
	if(control.value.length>0){
		//validamos
		partes=control.value.split(separador);
		if(partes.length!=3){
			alert("La fecha ingresada no cumple con el estandar dia"+separador+"mes"+separador+"aņo");
			control.focus();
		}else{
			dia=parseInt(partes[0],10);
			mes=parseInt(partes[1],10);
			anno=parseInt(partes[2],10);
			if(anno<=10) anno=2000+anno;
			fecha=new Date(anno,mes-1,dia,1,1,1);			
			if(isNaN(fecha)){
				alert("La fecha ingresada no es una fecha valida");				
				control.focus();
			}else{
				control.value=dig2(fecha.getDate())+separador+dig2(fecha.getMonth()+1)+separador+fecha.getFullYear();
				y=true;
			}
		}
	}else if(obligatorio){
		alert("Debe ingresar una fecha");
		control.focus();
	}else{
		y=true;
	}
	return y;
}

/**
 Valida el valor de un formulario como un entero.
* @param control el control a validar
* @param obligatorio define si es o no obligatorio (por defecto lo es)
* @param mensajeError El mensaje que acompaņa el alert cuando no se cumple con lo establecido.
*        El mensaje es de la forma "Debe ingresar un valor para "+mensajeError.
* @param minval el valor minimo que puede tomar (null si no hay tal limitacion)
* @param maxval el valor maximo que puede tomar (null si no hay tal limitacion)
* @return Si es correcto el formato (true) o no.
* @author Miguel Angel Torres Rodriguez
*/
function validarEntero(control,obligatorio,mensajeError,minval,maxval){
	var y=true;
	var complemento=null;
	if(obligatorio==true || obligatorio==null)
		y=validar(control,mensajeError);		
	if(y && control.value.length>0){
		control.value=control.value.replace(/[ ]/g,"");
		signo=1;
		if(control.value.substring(0,1)=="-")
			signo=-1;
		control.value=control.value.replace(/[-]/g,"").replace(/[+]/g,"").replace(/[']/g,"");
		n=signo*parseInt(control.value);
		if(isNaN(n)){
			complemento="no es valido";
		}else{
			if(minval!=null && n<minval){
				complemento="debe ser mayor que "+minval;
			}else if(maxval!=null && n>maxval){
				complemento="debe ser menor que "+maxval
			}
			control.value=n;
		}
	}
	if(complemento!=null){
		alert("El valor ingresado para "+mensajeError+" "+complemento);
		control.focus();
		y=false;
	}
	return y;
}

/**
 Valida el valor de un formulario como un entero.
* @param control el control a validar
* @param obligatorio define si es o no obligatorio (por defecto lo es)
* @param mensajeError El mensaje que acompaņa el alert cuando no se cumple con lo establecido.
*        El mensaje es de la forma "Debe ingresar un valor para "+mensajeError.
* @param separadorComa el separador de decimales (por defecto es punto)
* @param minval el valor minimo que puede tomar (null si no hay tal limitacion)
* @param maxval el valor maximo que puede tomar (null si no hay tal limitacion)
* @param maxPrecision El numero maximo de decimales a tomar (null si no hay tal limitacion)
* @return Si es correcto el formato (true) o no.
* @author Miguel Angel Torres Rodriguez
*/
function validarReal(control,obligatorio,mensajeError,separadorComa,minval,maxval,maxPrecision){
	var y=true;
	var complemento=null;
	if(separadorComa==null)	separadorComa=".";
	if(obligatorio==true || obligatorio==null)
		y=validar(control,mensajeError);				
	if(y && control.value.length>0){
		n=parseFloat(control.value);
		if(isNaN(n)){
			complemento="no es valido";
		}else{
			if(minval!=null && n<minval){
				complemento="debe ser mayor que "+minval;
			}else if(maxval!=null && n>maxval){
				complemento="debe ser menor que "+maxval
			}
			var nuevoValor=new String(n);
			if(maxPrecision!=null){
				var posComa=nuevoValor.lastIndexOf(".");
				if(nuevoValor.length-posComa>maxPrecision)
					complemento="no es valido, El maximo valor de precision es de "+maxPrecision+" digitos";
			}
			if(complemento==null &&  ".".equal!=separadorComa)
				nuevoValor=nuevoValor.replace(".",separadorComa);
			control.value=nuevoValor;
		}
	}
	if(complemento!=null){
		alert("El valor ingresado para "+mensajeError+" "+complemento);
		control.focus();
		y=false;
	}
	return y;
}

/**
 Valida el valor de un formulario como una cedula NUMERICA
* @param control el control a validar
* @author Miguel Angel Torres Rodriguez
*/
function validarCedula(control){
	var y=true;
	y=validar(control,"la cedula");
	if(y){
		var valor=control.value.replace(/[.]/g,"").replace(/[']/g,"").replace(/[-]/g,"").replace(/[ ]/g,"");
		n=parseInt(valor,10);
		if(isNaN(n)){
			alert("El valor ingresado para la cedula no es valido");
			control.focus();
			y=false;
		}else{
			control.value=n;
		}
	}
	return y;
}

/**
* Valida que en una lista multiple se hayan seleccionado los elementos
* @param control el control a validar (select-multiple)
* @param mensajeError El mensaje que acompaņa el alert cuando no se cumple con lo establecido.
* @param minSeleccionados el minimo de seleccionados. Valor por defecto=1
* @param maxSeleccionados el maximo posible de seleccionados. Valor por defecto=999
*/
function validarListaMultiple(control,mensajeError,minSeleccionados,maxSeleccionados){
	var iteradorVLM137=0;
	var nSeleccionadosVLM137=0;
	if(minSeleccionados==null)		minSeleccionados=1;
	if(maxSeleccionados==null)		maxSeleccionados=999;
	for(iteradorVLM137=0;iteradorVLM137<control.options.length;iteradorVLM137++){
		if(control[iteradorVLM137].selected)
			nSeleccionadosVLM137++;
	}
	var mensajeVLM137=null;
	if(nSeleccionadosVLM137<minSeleccionados){
		mensajeVLM137="Debe seleccionar minimo "+minSeleccionados+" para "+mensajeError;
	}else if(nSeleccionadosVLM137>maxSeleccionados){
		mensajeVLM137="Puede seleccionar maximo "+minSeleccionados+" para "+mensajeError;
	}
	if(mensajeVLM137!=null){
		alert(mensajeVLM137);
		control.focus();
	}
	return mensajeVLM137==null;
}

/**
* Valida que en una lista se haya seleccionado algun elemento distinto al primer elemento
* @param control el control a validar (select)
* @param mensajeError El mensaje que acompaņa el alert cuando no se cumple con lo establecido.
*/
function validarListaNoPrimerElemento(control,mensajeError){
	if(control.selectedIndex==0){
		alert("Debe seleccionar un valor para "+mensajeError);
		control.focus();
		return false;
	}
	return true;
}

/**
* Valida un conjunto de botones de radio o de seleccion (radio/checkbox)
* @param el conjunto de controles. se debe obtener directamente desde la forma y NO desde document.getElementById
* @param mensajeError El mensaje que acompaņa el mensaje cuando no se cumple con lo establecido
* @param nSelMin, opcional. defecto:1 determina cuantos se deben seleccionar minimo
* @param nSelMax, opcional. defecto:1 determina cuantos se deben seleccionar maximo
*/
function validarCB(control,mensajeError,nSelMin,nSelMax){
	if(nSelMin==null) nSelMin=1;
	if(nSelMax==null) nSelMax=1;
	var tmpVCB_170708_nSel=0;
	for(var tmpVCB_170708_i=0;tmpVCB_170708_i<control.length;tmpVCB_170708_i++){
		if(control[tmpVCB_170708_i].checked)
			tmpVCB_170708_nSel++;
	}
	if(tmpVCB_170708_nSel<nSelMin){
		if(nSelMin==1)
			alert("Debe seleccionar por lo menos una opcion para "+mensajeError);
		else
			alert("Debe seleccionar por lo menos "+nSelMin+" opciones para "+mensajeError);
		control[0].focus();
		return false;
	}else if(tmpVCB_170708_nSel>nSelMax){
		if(nSelMax==1)
			alert("Debe seleccionar unicamente una opcion para "+mensajeError);
		else
			alert("Debe seleccionar unicamente "+nSelMax+" opciones para "+mensajeError);
		control[0].focus();
		return false;
	}
	return true;
}
