/*
 *	Script para la validacion de formularios CMS
 *
 */

// @array con los mensajes en el idioma concreto
// Caldrà eliminar aquesta declaracio despres de modificar en tots els moduls la pagina de idioma de missatges de error
var arrMsg=new Array();
//	@variable con el mensaje final de validacion
var msg='';
// @contador de errores
var errN=0;
// @Array con comparaciones
var arrCmp=new Array();
// @indice de la matriz de comparaciones
var cmpIndex=0;
// @Array para comprobar NifCif caso pais España
var arrCompNifCif = new Array();
arrCompNifCif = new Array();
// @indice de la matriz de comprobaciones NifCif
var compIndex=0;
// @variable con el color de los campos en los que hay error
var colorTxtError="#F8B5B5";
// @variable con el color de retorno en los campos en los que ha habido error
var colorTxtRetorno="#FFFFFF";
 
var arrContr = new Array();

/*		Parametros
 *		@formulario: document.form[x]q contiene los campos q se van a validar
 *      @idcomponente : identificador del componente para poder validar solo los campos de ese componente.
 *                     si no se especifica se validarán todos los elementos del formulario		
 */
function _validarCMSForm(formulario,idcomponente)
{
for(i=0;i<formulario.elements.length;i++)
{
	if(!formulario.elements[i].type=='text' && !formulario.elements[i].type=='textarea' &&
		!formulario.elements[i].type=='password' && !formulario.elements[i].type=='checkbox' &&
		!formulario.elements[i].type=='select-one' && !formulario.elements[i].type=='select-multiple' &&
		!formulario.elements[i].type=='radio')
		continue;
		
	if((idcomponente!=undefined && formulario.elements[i].name.indexOf(idcomponente)!=-1) || idcomponente==undefined)
	{
	var nArray = formulario.elements[i].name.split('-');
	if(nArray.length>0){
		valor = formulario.elements[i].value;
		for(z=0;z<nArray.length;z++){
			switch(nArray[z]){
				//OBLIGATORIO
				case('O'):{
					validarObligatorio(valor, formulario.elements[i], formulario);
					break;
					}//f case
					//EMAIL
				case('E'):{
					validarEmail(valor, formulario.elements[i]);
					break;
					}//f case
				//NUMERICO
				case('N'):{
					validarNumero(valor, formulario.elements[i]);
					break;
					}//f case
				//PASWORD
				case('P'):{
					validarPassword(valor, formulario.elements[i], formulario);
					break;
					}//f case
				}//f switch
			}//f for
			}//f if
	}
}//f for
//Validamos las comparaciones
if(arrCmp.length>0){
	//si no existe error
	if(errN==0){
		for(i=0;i<arrCmp.length;i++){
			var campos = arrCmp[i];
			validarComparacion(campos[0],campos[1],campos[2])
		}	
		arrCmp = new Array();
		cmpIndex = 0;
	}
	}
//Validamos las comprobaciones NIFCIF
if(arrCompNifCif.length>0){
	//si no existe error
	if(errN==0){	
		for(i=0;i<arrCompNifCif.length;i++){			
			var campos2 = arrCompNifCif[i];			
			var idPais = campos2[0].value;
			//---- Si se trata de pais espana
			if(idPais=="255") {
				validarNifCif(campos2[1].value,campos2[1]);
			};			
		}	
		arrCompNifCif = new Array();
		compIndex = 0;
	}
	}
//si existe algun error
if(errN>0){
	alert(arrMsg['errMsg']+msg);
	//resetear la variable de mensaje y el contador de errores
	msg='';
	errN=0;
	return false;
}	
else return true;
}//f function
 
//inserta una validacion por comparacion de campos
function insertarComparacion(campo,campo2,operador){
	arrCmp[cmpIndex]=new Array(campo,campo2,operador);
	cmpIndex++;
}

//inserta una validacion por comprobacion NIF_cif
function insertarComproNifCif(campo,campo2){
	arrCompNifCif[compIndex]=new Array(campo,campo2);
	compIndex++;			
}
 
function validarObligatorio(v, campo, form)
{
	switch(campo.type)
	{
		case 'textarea':
		case 'password':
		case 'text':
		{
			if(v == '' || v == undefined )
			{
				marcarError(campo,arrMsg['obligatorio']);
				return false;
			}//f if
			else
			{
				desmarcarError(campo);
				return true;
			}
			break;
		}
		case 'checkbox':
		{
			if(!campo.checked)
			{
				marcarError(campo,arrMsg['obligatorio']);
				return false;
			}
			else
			{
				desmarcarError(campo);
				return true;
			}
			break;
		}
		case 'select-one':
		{
			if(v.substring(0,1) == "@")
			{
				marcarError(campo,arrMsg['obligatorio']);
				return false;
			}
			else
			{
				desmarcarError(campo);
				return true;
			}
			break;
		}
		case 'select-multiple':
		{
			var c = 0;
			var selected = new Array();
			for(var i=0;i<campo.options.length;i++)
			{
				if(campo.options[i].selected)
					selected.push(i);
			}
			if(selected<=0)
			{
				marcarError(campo,arrMsg['obligatorio']);
				return false;
			}
			else
			{
				desmarcarError(campo);
				return true;
			}
			break;
		}
		case 'radio':
		{
			var group = form.elements[campo.name];
			var ok = false;
			for(var i=0;i<group.length;i++)
			{
				if(group[i].checked)
				{
					ok=true;
					break;
				}	
			}
			if(!ok)
			{
				marcarError(campo,arrMsg['obligatorio']);
				return false;
			}
			else
			{
				desmarcarError(campo);
				return true;
			}
			break;
		}
	}		
}//f function
 
function validarEmail(v,campo)
{
	switch(campo.type)
	{
		case 'textarea':
		case 'password':
		case 'text':
		{
			if(v != '' && v != undefined)
			{
				var reg_exp=/^([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))$/
				if(!reg_exp.test(v))
				{
					marcarError(campo,arrMsg['emailErroneo']);
					return false;
				}//f if
				else 
				{
					desmarcarError(campo);
					return true;
				}
			}
		}
	}
}//f function
 
function validarNumero(v,campo)
{
	switch(campo.type)
	{
		case 'textarea':
		case 'password':
		case 'text':
		{
			if(v!='' && v != undefined && isNaN(v))
			{
				marcarError(campo,arrMsg['noNumero']);
				return false;
			}//f if
			/*else if(valor.replace(/^\s*|\s*$/g,"") == ""){
				campo.style.background=colorTxtError;	
				str=arrMsg['noNumero'];
				if(msg.indexOf(str)==-1){			
					anyadirMensaje(str);
					}//f if
				errN++;
				return false;
			}*/
			else 
			{
				desmarcarError(campo);
				return true;
			}
			break;
		}
	}
}//f function
 
function validarComparacion(campo,campo2,operador)
{
	var v = campo.value;
	var v2 = campo2.value;	
	//--- Segun el tipo de operador
	switch(operador)
	{
		case "Igual":
			if(v!=v2){
				campo.style.background=colorTxtError;
				campo2.style.background=colorTxtError;
				str=arrMsg['comparacionIgual'];
				if(msg.indexOf(str)==-1){
					anyadirMensaje(str);
					}//f if
				errN++;
				return false;
			}//f if
			else if(v!="" && v2!="")
			{
				campo.style.background=colorTxtRetorno;
				campo2.style.background=colorTxtRetorno;
			}
			break;
		case "Diferente":
			break;
		case "MayorQue":
			break;
		case "MayorOIgual":
			if(v!="" && v2!="")
			{
				if(v>v2){
					campo.style.background=colorTxtError;
					campo2.style.background=colorTxtError;
					str=arrMsg['comparacionMayorOIgual'];				
					if(msg.indexOf(str)==-1){
						anyadirMensaje(str);
						}//f if
					errN++;
					return false;
				}//f if
				else if((v!="" && v2!="") && (v<=v2))
				{					
					campo.style.background=colorTxtRetorno;
					campo2.style.background=colorTxtRetorno;
				}
			}
			break;
		case "MenorQue":
			break;
		case "MenorOIgual":
			break;
	}
	return true;
 }//f function
 
 function validarNifCif(v,campo)
{
	switch(campo.type)
	{
		case 'textarea':
		case 'password':
		case 'text':
		{
			if(v != '' && v != undefined)
			{				
				var reg_exp = /\d{8}[A-Z]/
				var reg_exp2 = /[A-Z]\d{8}/		
				var reg_exp3 = /[ABCDEFGHKLMNPQS]\d{7}[0-9,A-J]/	
				
				if ( ( ((reg_exp.test(v)) == false) && ((reg_exp2.test(v)) == false) && ((reg_exp3.test(v)) == false) && (v.substring(0,1)!='X') )){
					marcarError(campo,arrMsg['nifCifErroneo']);
					return false;
				};//f if
							
				if ( ( ((reg_exp.test(v)) == true) || ((reg_exp2.test(v)) == true) || ((reg_exp3.test(v)) == true) || (v.substring(0,1)=='X') )) {																								
					//--- D.N.I normal o si X al principo se trata de N.I.E (D.N.I extranjero)
					if ((reg_exp.test(v)) == true || v.substring(0,1)=='X') {
						var valor = v;
						//--- Si se trata de D.N.I extranjero (N.I.E), reemplazar el primer caracter por 0 para calcular N.I.F
						if(valor.substring(0,1)=='X') {
							valor = "0" + valor.substring(1,9);
						};//f if																		
						num1 = valor.substring(0,8);																		
						num1 = num1 % 23;								
						num2 = num1 + 1;								
						var cadena = "TRWAGMYFPDXBNJZSQVHLCKE";
						var dni = cadena.substring(num1,num2);								
						var letra = valor.substring(8,9);									
						if ( dni != letra ){
							marcarError(campo,arrMsg['nifCifErroneo']);
							return false;								
						};//f if
					} 								
					//--- C.I.F
					else if ((reg_exp2.test(v)) == true || (reg_exp3.test(v)) == true) {
						//A58818501
						// A=Sociedad Anonima	B=Sociedad de responsabilidad limitada	C=Sociedad colectiva	D=Sociedad comanditaria
						// E=Comunidad de bienes	F=Sociedad cooperativa	G=Asociaciones y otros tipos no definidos	H=Comunidad de propietarios
						// K=Formato antiguo	L=Formato antiguo	M=Formato antiguo	N=Formato antiguo	P=Corporación local
						// Q=Organismo autónomo	S=Organo de la administración X=Extranjeros, que en lugar del D.N.I. tienen el N.I.E.
						var pares = 0; 
						var impares = 0; 
						var suma; 
						var ultima; 
						var unumero; 
						var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I"); 
						var xxx; 
									 
						texto = v.toUpperCase(); 
									 
						var regular = new RegExp(/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g); 
						 if (!regular.exec(texto)) return false; 
										  
						 ultima = texto.substr(8,1); 
							
						for (var cont = 1 ; cont < 7 ; cont ++){ 
							 xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + "0"; 
							 impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1)); 
							 pares += parseInt(texto.substr(cont,1)); 
						} 									 
						xxx = (2 * parseInt(texto.substr(cont,1))).toString() + "0"; 
						impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1)); 
								  
						suma = (pares + impares).toString(); 
						unumero = parseInt(suma.substr(suma.length - 1, 1)); 
						unumero = (10 - unumero).toString(); 
						if(unumero == 10) unumero = 0; 
																	 									  
						if ((ultima == unumero) || (ultima == uletra[unumero])) {
							 desmarcarError(campo);
							return true;										 
					        }//f if
						else {
							marcarError(campo,arrMsg['nifCifErroneo']);
							return false;
						}
					};
				};																							
			}
		}
	}
}//f function
 
function validarPassword(v, campo, form){
	if(v!=null && v.length>0){
		var id = campo.id.replace(/P-usuario/i, 'password');
		var element = document.getElementById(id);
		var valor = element.value;
		validarObligatorio(valor, element, form);
	}
}

function marcarError(campo, mensaje)
{
	if(campo.type=='checkbox')
	{
		//do something that works
		campo.style.borderColor = colorTxtError;
	}
	else
	{
	/*	document.write('<div id="divtest" style="visibility:hidden">'+mensaje+'</div>');
		document.element['divtest'].style.visibility='visible';
		document.element['divtest'].style.top = campo.style.top + 10;
		document.element['divtest'].style.right = campo.style.right + 10;
	*/	campo.style.background=colorTxtError;
	}
	if(msg.indexOf(mensaje)==-1)
		anyadirMensaje(mensaje);
	errN++;
}
function desmarcarError(campo)
{
	if(campo.type=='checkbox')
	{
		//do something that works
		campo.style.borderColor=colorTxtRetorno;
	}
	else
		campo.style.background=colorTxtRetorno;
}

function anyadirMensaje(m)
{
	msg+="\n"+m;
}
 
