/*
	---------------------------------------------------------------------------
	Empresa			: Proconsi S.L.
	Fecha creación	: 01-03-2010
	Fecha ult.modif.: 14-12-2010 - David González
	Módulo			: Validación anterior al submit de un formulario
	----------------------------------------------------------------------------
    Historial de modificaciones:
	[1] - 28-04-2010 - David González
	Nueva función TestValorPorDefectoOVacio
	[2] - 20-10-2010 - Jose
	Nueva funcionalidad para añadir captcha a los formularios 
	[3] - 14-12-2010 - David González
	Modificada validación NIE para que admita los que empiezan por Y y dejarlo
	preparado para cuando entre la Z
	----------------------------------------------------------------------------
*/
//
// variable global para realizar el envío del formulario en el callback
var cNameForm = '';
//
// Especificamos cual es el color de fondo de los campo erróneos
var colorErrorEnForm = '#FA8072';
//
// Bandera para que no se pueda enviar el formulario varias veces
var lEnviandoFormulario = false;
///
/// Gestiona el contenido de las cajas del formulario si tienen el texto por defecto
///
function ValorContenido( elemento , etiqueta )
{
	if( elemento.value == '' )
		elemento.value = 'Introduzca ' + etiqueta;
}
///
/// Comprueba que el valor pasado es el de por defecto
///
function TestValorPorDefecto( cValor )
{
	var cNoValido = 'INTRODUZCA'; 
	if( cValor.substring( 0 , 10 ).toUpperCase() == cNoValido )
		return true;
	return false;
}
///
/// Comprueba que el valor pasado es el de por defecto o vacío
/// [1]
///
function TestValorPorDefectoOVacio( cValor )
{
	var cNoValido = 'INTRODUZCA'; 
	if( cValor == '' || cValor.substring( 0 , 10 ).toUpperCase() == cNoValido )
		return true;
	return false;
}
///
/// Elimina el valor de un control si tiene el valor por defecto
///
function VaciaValorPorDefecto( cIdItem )
{
	var cValor = document.getElementById( cIdItem ).value;
	if( TestValorPorDefecto( cValor ) )
		document.getElementById( cIdItem ).value = '';
}
///
/// Testea la 'posibilidad' de que la dirección e-mail pasada sea válida
///
function checkEmail( cEmail ) 
{
	var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
	if ( !filter.test( cEmail ) ) 
		return false;
	return true;
}
///
/// Testeamos que alguna de las opciones del radiobutton esté marcada
///
function checkRadio( radio_group )
{
	for( var ctr = 0 ; ctr < radio_group.length; ctr++ )
	{
		if(radio_group[ctr].checked) // Si hay uno selecionado
			return true;
	}
	return false; // Si no hay ninguno seleccionado
}
///
/// Devuelve el valor del radiobutton seleccionado
///
function getRadioButtonSelectedValue( ctrl )
{
    for(i=0;i<ctrl.length;i++)
        if(ctrl[i].checked) return ctrl[i].value;
}
///
/// Validamos si se pasa un NIF correcto
/// cTipo = NIF / NIE
/// NIF = 12345678X 
//  NIE = [XY]1234567X. Preparado para cuando sea necesario utilizar Z
///
function checkNIF( cNif , cTipo )
{
	if( !cNif ) 
		return false;
    var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
    if( cNif.length != 9 ) 
    	return false;
    else if( cTipo == 'NIF' )
    {
        cLetra = cNif.substr(8, 1); 
        cLetra = cLetra.toUpperCase();
        cDni = cNif.substr(0, 8);
        cDni = cDni.toUpperCase(); 
        //cDni = cDni.replace('X','0');
        cDni -= parseInt( cDni/23 ) * 23;
        if( letras.charAt( cDni ) != cLetra ) 
        	return false;
        else 
        	return true;
    }
    else if( cTipo == 'NIE' ) //[3]
    {
    	cLetra1 = cNif.substr(0, 1); 
        cLetra1 = cLetra1.toUpperCase();
        cLetra2 = cNif.substr(8, 1); 
        cLetra2 = cLetra2.toUpperCase();
        //
        if( cLetra1 != "X" && cLetra1 != "Y" /*&& cLetra1 != "Z"*/ )
        	return false;
        //
        cDni = cNif.substr(1, 7);
        //
        if( cLetra1 == "Y" )
        	cDni = "1" + cDni;
        /*
        else if( cLetra1 == "Z" )
        	cDni = "2" + cDni;
        */
        //
        cDni = cDni.toUpperCase(); 
        //cDni = cDni.replace('X','0');
        cDni -= parseInt( cDni/23 ) * 23;
        if( letras.charAt( cDni ) != cLetra2 ) 
        	return false;
        else 
        	return true;
    }
}
///
/// Volvemos blanco el fondo del elemento 
///
function limpiaFondo( elemento )
{
	elemento.style.backgroundColor = '#FFFFFF'; 
}
///
/// Comprueba que los datos introducidos en el formulario son correctos
/// recibe formulario = document.nombreformulario
///
function TestearDatos( nameForm )
{ 
	//
	// asignamos en nombre del formulario a la variable global 
	cNameForm = nameForm;
	//
	if( lEnviandoFormulario )
		return false;
	//
	var formulario = eval( 'document.' + nameForm );
	//
	// variable que nos indicará si en el formulario actual existe un captcha
	lExisteCaptcha = false;
	//
	for ( i=0; i < formulario.elements.length ; i++ )
	{
		// Saltamos el fieldset contenedor del formulario, los botones de acción, los campos hidden y los campos obligatorios (validación a parte)
		if( formulario.elements[i] != '[object HTMLFieldSetElement]' && 
			formulario.elements[i].type != 'submit' &&
			formulario.elements[i].type != 'button' && 
			formulario.elements[i].type != 'reset' && 
			formulario.elements[i].type != 'hidden' &&
			formulario.elements[i].name != 'chkPorLey' &&
			formulario.elements[i].name != 'Nombre' &&
			formulario.elements[i].name != 'Email' ) 
		{
			var orden = formulario.elements[i].name.split( '_' );
			orden = orden[1];
			var nombreLabel = 'contenidolabel_' + orden;
			var valorLabel = eval( 'document.' + nameForm + '.' + nombreLabel + '.value' );
			//
			// Evaluamos si es campo obligatorio
			var obligatorio = ( valorLabel.indexOf( '*' ) != -1 ) ? true : false;
			var valor = formulario.elements[i].value;
			//			
			if( ( formulario.elements[i].type == "checkbox" && formulario.elements[i].checked == false && obligatorio ) ||
				( formulario.elements[i].type == "text" && ( valor.replace(/^\s*|\s*$/g , '') == '' || TestValorPorDefecto( valor ) ) && obligatorio ) ||
				( formulario.elements[i].type == "textarea" && ( valor.replace(/^\s*|\s*$/g , '') == '' || TestValorPorDefecto( valor ) ) && obligatorio ) )
			{
				alert( 'Por favor, rellene los campos obligatorios' );
				if( formulario.elements[i].type == "checkbox" )
				{
					document.getElementById( 'chk_' + orden ).style.backgroundColor = colorErrorEnForm;
					document.getElementById( 'chk_' + orden ).focus();
				}
				else if ( formulario.elements[i].name.indexOf( "captcha" ) >= 0 )
				{
					document.getElementById( 'captcha_' + orden ).style.backgroundColor = colorErrorEnForm;
					document.getElementById( 'captcha_' + orden ).focus();
				}
				else
				{
					document.getElementById( 'elemento_' + orden ).style.backgroundColor = colorErrorEnForm;
					document.getElementById( 'elemento_' + orden ).focus();
				}
				return false;
			}
			else if ( formulario.elements[i].name == 'captcha_' + orden )
			{
				//
				// existe captcha
				lExisteCaptcha = true;
			}
			else if( formulario.elements[i].type == "file" && ( valor.replace(/^\s*|\s*$/g , '') == '' || TestValorPorDefecto( valor ) ) && obligatorio )
			{
				//
				// Validamos el envió de ficheros adjuntos
				alert( 'Por favor, adjunte los archivos obligatorios' );
				document.getElementById( 'elementoFile_' + orden ).style.backgroundColor = colorErrorEnForm;
				document.getElementById( 'elementoFile_' + orden ).focus();
				return false;
			}
			else if( formulario.elements[i].type == "radio" && checkRadio( eval( 'document.' + nameForm + '.' + formulario.elements[i].name ) ) == false && obligatorio )
			{
				alert( 'Por favor, rellene los campos obligatorios' );
				document.getElementById( 'label_' + orden ).style.backgroundColor = colorErrorEnForm;
				document.getElementById( 'label_' + orden ).focus();
			}
			//
			// Evaluamos si el campo mail es correcto
			if( formulario.elements[i].type == "text" && formulario.elements[i].name.indexOf( 'email_' ) == 0 )
			{
				var mailOK = checkEmail( formulario.elements[i].value );
				if( mailOK == false )
				{
					alert( 'Campo e-mail incorrecto. Por favor, revíselo.' );
					document.getElementById( 'email_' + orden ).style.backgroundColor = colorErrorEnForm;
					document.getElementById( 'email_' + orden ).focus();
					return false;
				}
			}
		}
		//
		// Evaluamos el checkbox obligatorio de Política de Privacidad
		else if( formulario.elements[i].name == 'chkPorLey' && formulario.elements[i].checked == false )
		{
			alert( 'Para enviar el formulario es necesario aceptar la política de privacidad' );
			document.getElementById( 'chkPorLey' ).focus();
			return false;
		}
		//
		// Evaluamos que los campos obligatorios Nombre y Email no estén vacios
		else if( ( formulario.elements[i].name == 'Nombre' || formulario.elements[i].name == 'Email' ) && ( formulario.elements[i].value.replace(/^\s*|\s*$/g , '') == '' || TestValorPorDefecto( formulario.elements[i].value ) ) )
		{
			alert( 'Por favor, rellene los campos obligatorios' );
			document.getElementById( formulario.elements[i].name ).focus();
			return false;
		}
		//
		// Evaluamos que el campo Email tenga formato email
		else if( formulario.elements[i].name == 'Email' && checkEmail( formulario.elements[i].value ) == false )
		{
			alert( 'Campo e-mail incorrecto. Por favor, revíselo.' );
			document.getElementById( 'Email' ).focus();
			return false;
		}
	} // fin for()
	
	//
	// Activar la bandera (para que no se pueda enviar el formulario varias veces)
//	lEnviandoFormulario = true;
	//
	// Vaciamos (antes de enviar el formulario) los campos no obligatorios que aún contienen el texto por defecto
	for ( i=0; i < formulario.elements.length ; i++ )
	{
		// Saltamos el fieldset contenedor del formulario, los botones de acción y los campos hidden
		if( formulario.elements[i] != '[object HTMLFieldSetElement]' && 
			formulario.elements[i].type != 'submit' && formulario.elements[i].type != 'reset' && 
			formulario.elements[i].type != 'hidden' &&
			formulario.elements[i].name != 'chkPorLey' &&
			formulario.elements[i].name != 'Nombre' && 
			formulario.elements[i].name != 'Email' &&
			formulario.elements[i].type != "radio" ) 
		{
			VaciaValorPorDefecto( formulario.elements[i].name );
		}
	}
	// 
	// comprobamos que existe captcha en el frm 
	if ( lExisteCaptcha )
	{
		//
		// Comprobar que el Captcha es correcto
		cParametros = "captcha=" + document.getElementById( 'captcha_' + orden ).value;
		AjaxRequest( '../Modulos/_recursos/testCaptcha.php' , cParametros , CallBackComprobacionCaptcha );
		//
		// Activar la bandera (para que no se pueda enviar el formulario varias veces)
		lEnviandoFormulario = true;
	}
	else
	{
		lEnviandoFormulario = true;
		return lEnviandoFormulario;
	}
	//
//	return lEnviandoFormulario;
} // fin function()
///
/// Callback comprobación de captcha
///
function CallBackComprobacionCaptcha( xmlhttp )
{	
	if( xmlhttp.readyState == 4 && xmlhttp.status == 200 )
	{
		//
		// Si el captcha es correcto, enviar el formulario
		if( xmlhttp.responseText.substr( 0 , 2 ) == 'OK' )
		{
			document.getElementById( cNameForm ).submit();
		}
		else
		{
			alert( 'Error en captcha' );
		}
	}
}	
