/*
 *	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;
// @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
				}//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;
	}
	}
//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++;
}
 
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 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;
}
 
