//Funció que obté tots aquells elements del DOM que tenen el name = ANameValue
function getElementsByNom(ANameValue){
    var salida = [];
    var todos=document.getElementsByTagName("*");
    for(var i=0,t=todos.length;i<t;i++){
        if(todos[i].name==ANameValue){
            salida[salida.length]=todos[i];
        }
    }
    return salida;
} 

function DispararValidacion(Afire_postback_code)
{
	if (ValidarFormulari() == true)
	{
		eval(Afire_postback_code);
	}	
}

function IsEmailValid(email, Nom){

	   if ((email == '') || (email == 'undefined')) return true;	
	   var lPatron=/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	   var lValid = (String(email).search(lPatron) != -1);
	   if (lValid == false) {
			alert('Adreça de correu del camp ' + Nom + ' és invàlida');
	   }
	   return lValid;
	}
	
function IsNumColValid(numcol){
	//alert('IsNumColValid');
	if ((numcol == '') || (numcol == 'undefined')) {return true;}	
	var lValid = true;
	if (isNaN(numcol)) {
		alert('El nº de col·legiat ha de ser numèric');
		lValid = false;
	}
	
	return lValid;
}

//Valida que el valor sigui numèric i més gran o igual que 0
function NumAcompanyantsCorrecte(NumAcompanyants){
	if ((NumAcompanyants == '') || (NumAcompanyants == 'undefined')) return true;	
	if ((NumAcompanyants != "") && (NumAcompanyants != null)){
		if (isNaN(NumAcompanyants)) 
		{
			alert('El nº d\'acompanyants ha de ser un valor numèric');
			return false;
		}
		else
			if (NumAcompanyants<0) {
				alert('El nº d\'acompanyants ha de ser més gran o igual que 0');
				return false;
			}
			else
				return true;
	}
	else return true;
}

//Funció que només té sentit per activar/desactivar la caixa de text que serveix per introduir el nº de places a reservar d'una sessió d'un servei.
//Param ObjSource: és el Id de la caixa de text.
function ToggleNumPlacesEnable(objSource, objId){
	var lObj;
	lObj = window.document.getElementById(objId);
	if (lObj != null)
	{		
		lObj.disabled = (!objSource.checked);
		if (lObj.disabled==true){
			lObj.value = '';
		}
	}
}

function ToggleComboEnabling(objId){
	var lObj;
	lObj = window.document.getElementById(objId);
	if (lObj != null)
	{		
	    if (lObj.disabled == true){
		    lObj.disabled = false;
	    }
	    else
	    {
		    lObj.selectedIndex = 0;
		    lObj.disabled = true;
	    }
	}
}

//Aquesta funció serveix per mostrar/amagar les preguntes condicionades.
// Les preguntes condicionades sota la mateixa pregunta condicionadora estan renderitzades dins de SPANS, 
// TD's, ... els quals tenen el mateix valor en l'atribut name. A més a més aquests elements tenen 
// un custom attrbute anomenat 'respostavisible' el valor del qual determina si aquell element s'ha
// de fer visible o invisible.
// Aquest funció obté tots els elements del DOM que tenen el valor sectionName en el seu atribut name.
// Un cop té la llista d'aquests elements consulta el valor del seu atribut 'respostavisible' i si coincideix
// amb el valor del paràmetre value, fa que l'elemtn sigui visible. en cas contrari fa que l'element sigui invisible.
function ToggleSectionVisibility(sectionName, value){
	var lArrayObj, i, lObj;
	lArrayObj = getElementsByNom(sectionName);
	for (i=0; i<lArrayObj.length; i++)
	{
		
		lObj = lArrayObj[i];
		var attrMax = lObj.attributes.length;

		for(var j = 0; j < attrMax; j++)
		{
			if(lObj.attributes.item(j).nodeName == 'respostavisible')
			{
				if (lObj.attributes.item(j).nodeValue == value){
					lObj.style.display = 'inline';
				}
				else
				{
					lObj.style.display = 'none';
				}
			}
		}
	} 
}

//Retorna true si l'bjecte identificat per objIdCondicio és visible o no.
//Amb aquesta funció evitem validar preguntes condicionades que no estan visibles
function CondicioActiva(objIdCondicio){
	if ((objIdCondicio != "") && (objIdCondicio != null))
	{
		//alert('condicioactiva: ' + objIdCondicio);
		lObjCond= window.document.getElementById("condicion" + objIdCondicio)
		if (lObjCond != null) 
		{
			return (!(lObjCond.style.display == 'none'));
		}
		else
		{
			return true;
		}
	}
	else
		return false;
}

//Valida que el valor del INPUT identificat per objId sigui un valor numèric.
//Si no hi ha valor informat es considera com una valor correcte.
function ValidarFormatNumeric(objId /*id del objeto a validar*/, 
                              Nom /*nombre descriptivo para el mensaje de alerta*/)
{
	var lDataOk = true;
	var lObj = window.document.getElementById(objId);
	if (!(lObj)) return false; 
	if ((lObj.value == '') || (lObj.value == 'undefined')) return true;		
		
	lDataOk = isNaN(lObj.value);
	if (lDataOk == true)
	{
		alert('El camp ' + Nom + ' ha de ser numèric.');
		return false;
	}
	else
		return true;
}
		
//Valida que el valor del INPUT identificat per objId sigui una data correcta.
//Si no hi ha valor informat es considera com una data correcta.
function ValidarFormatData(objId /*id del objeto a validar*/, Nom /*nombre descriptivo para el mensaje de alerta*/, objIdCondicio /*id del objecto que se invisibiliza o no*/){
	//alert('Validar format data ' + Nom);
	
	var lObj = window.document.getElementById(objId);
	
	if ((lObj.value == '') || (lObj.value == 'undefined')){
		 return true;		
	}
	
	var lDataOk = true;
	var lObjCond, lStr, lValidar;

	//alert(lObj.value);

	if ((objIdCondicio != "") && (objIdCondicio != null)){
		lValidar = CondicioActiva(objIdCondicio);
	}
	else
		lValidar = true;

	if (lValidar){
		//alert('Validant data...'+ objId);
		lDataOk = chkdate(lObj);
	}
	else
		lDataOk = true;

	if (lDataOk == false) {
		alert('Format incorrecte de la data en el camp ' + Nom);
	}
	return lDataOk;
}
//Funció que validar que l'INPUT identificat per objId tingui un valor informat.
function ValidarCampTextObligatori(objId /*id del objeto a validar*/, 
                                   Nom /*nombre descriptivo para el mensaje de alerta*/, 
                                   objIdCondicio /*id del objecto que se invisibiliza o no*/){
	
	//alert('Validarcamptextobligatori' + objId + ' '+ Nom);
	var lObjCond, lStr, lValidar;
	var lObj = window.document.getElementById(objId);
	lStr = String(lObj.value);
	
	//alert('Valor camp text = ' + lStr);

	if ((objIdCondicio != "") && (objIdCondicio != null)){
		lValidar = CondicioActiva(objIdCondicio);
	}
	else
		lValidar = true;

	if (lValidar) {
		if (lStr == "")
		{
			alert('El camp ' + Nom + ' és obligatori.');
			return false;
		}
		else
			return true;
	}
	else
		return true;
}
//Funció que valida que en una agrupació de radiobuttons hi hagi un que estigui xequejat.
function ValidarCampRadioButtonObligatori(objName /*id del objeto a validar*/, 
                                          Nom /*nombre descriptivo para el mensaje de alerta*/, 
                                          objIdCondicio/*id del objecto que se invisibiliza o no*/,
                                          esSessioCurs/*Variable per mostrar un missatge específic per sessions de curs*/)
{
	var lArrayObj, i, lObj, lChecked, lObjCond, lValidar;
	
	lChecked = false;
	
	eval('lArrayObj = window.document.forms[0].' + objName);
	if (lArrayObj.length != null)
	{
	    for (i=0; i<lArrayObj.length; i++)
	    {
		    lObj = lArrayObj[i];
		    lChecked = (lChecked || (lObj.checked==true));
	    } 

	    if ((objIdCondicio != "") && (objIdCondicio != null)){
		    lValidar = CondicioActiva(objIdCondicio);
	    }
	    else
		    lValidar = true;		    
	}	
	else
	{
	    lChecked = (lArrayObj.checked == true);
	    lValidar = true;
	}	    
		
    if (lValidar)
    {
        if (lChecked == false)
        {
            if (esSessioCurs == '1')
            {
                alert('Cal indicar la sessió a inscriure\'s');
            }
            else
            {
	            alert('El camp ' + Nom + ' és obligatori.');
	        }
        }
    }	
	
	return lChecked;
}


function ValidarInscripcioSessioObligatori(objId /*id del objeto a validar*/, 
                                           Nom /*nombre descriptivo para el mensaje de alerta*/, 
                                           objIdCondicio /*id del objecto que debe estar marcado para validar la obligatoriedad de objId*/)
{

	var lObjCond, lStr, lValidar, lObj;

	var lObj = window.document.getElementById(objId);
	if (lObj != null){
		lStr = String(lObj.value);
	}
	lValidar = false;
	if ((objIdCondicio != "") && (objIdCondicio != null)){
		var lObjCond = window.document.getElementById(objIdCondicio);
		if (lObjCond != null){
			if (lObjCond.disabled == false){
				lValidar = (lObjCond.checked);
			}
		}
	}
	else
		lValidar = true;

	if (lValidar) {
		if (lStr == "")
		{
			alert('El camp ' + Nom + ' és obligatori.');
			return false;
		}
		else
		{
			return ValidarFormatNumeric(objId, Nom);
		}
	}
	else
		return true;
}

//Funció que valida que el nº de checkboxes marcats en un grup de checkboxes estigui dins els limits desitjats.
function ValidarCheckBoxSessio(objName /*id del objeto a validar*/, 
                               Nom/*nombre descriptivo para el mensaje de alerta*/, 
                               objIdCondicio/*id del objecto que se invisibiliza o no*/, 
                               numHits /*nº minimo de seleccionados */, 
                               comparador/*nº máximo de seleccionados */, 
                               llistaCheckboxes /*llista de ids dels checkboxes separats per '|'*/){
	var lArrayObj, i, lObj, lChecked, lObjCond, lNumHits
	var lNumChecked = 0;
	lArrayObj = llistaCheckboxes.split('|');
	lChecked = false;
	
	for (i=0; i<lArrayObj.length-1; i++) //-1 por el elemento fantasma
	{
		lObj = window.document.getElementById(lArrayObj[i]);

		if ((lObj != null) && (lObj != 'undefined'))
		{
			if (lObj.disabled == false)
			{
				if (lObj.checked == true) {
					lNumChecked = lNumChecked + 1;
				}
			}
		}
	} 
	if (comparador == '=') {
		comparador = '==';
	}

	eval('lChecked = (lNumChecked' + comparador + 'numHits)');

	if ((objIdCondicio != "") && (objIdCondicio != null)){
		lValidar = CondicioActiva(objIdCondicio);
	}
	else
		lValidar = true;

	if (lValidar){
		if (lChecked == false){
			if (comparador == '==') {
				comparador = '=';
			}
			alert('El nº d\'opcions marcades a '+ Nom + ' ha de ser ' + comparador + String(numHits));
		}
	}
	else
		lChecked = true;
	
	return lChecked;
}	
	
//Funció que valida que un checkbox estigui marcat. Aquesta funció serveix per resoldre casos com: He leido las condiciones del contrato.
function ValidarCampCheckBoxObligatori(objName /*id del objeto a validar*/, Nom/*nombre descriptivo para el mensaje de alerta*/, objIdCondicio/*id del objecto que se invisibiliza o no*/){
	var lObj, lValidar;
	
	if ((objIdCondicio != "") && (objIdCondicio != null)){
		lValidar = CondicioActiva(objIdCondicio);
	}
	else
		lValidar = true;

	if (lValidar){
		lObj = window.document.getElementById(objName);
		if ((lObj != null) && (lObj != 'undefined'))
		{
			if (lObj.checked){
				return true;
			}
			else{
				alert('Cal marcar la casella '+ Nom);
				return false;
			}
		}
	}
	else
		return true;
}

//Funció que valida que el combobox d'una població té un valor si el checkbox de població corresponent identificat per checkboxId està xequejat.
function ValidarTransport(objId /*id del objeto a validar*/, 
                          Nom /*nombre descriptivo para el mensaje de alerta*/, 
                          checkboxIdCondicio /*id del objecto que se invisibiliza o no*/){
	var lObjCond, lStr, lValidar;
      
	var lObj = window.document.getElementById(objId);
	var lObjCheckbox = window.document.getElementById(checkboxIdCondicio);
	lStr = String(lObj.value);
	
    lValidar = lObjCheckbox.checked;

	if (lValidar) {
		if (lStr == "")
		{
			alert('Cal selecccionar una població per a la pregunta ' + Nom + '.');
			return false;
		}
		else
			return true;
	}
	else
		return true;
}

//Funció que valida que el combobox d'import té un valor seleccionat
function ValidarImportSeleccionat(ObjId /*id del objeto a validar*/, 
                                  Nom /*nombre descriptivo para el mensaje de alerta*/)
{		
    if (ObjId != null) 
    {
		if (ObjId.value == '')
		{
			alert('Cal selecccionar una import de la llista "' + Nom + '".');
			ObjId.Focus();
			return false;
		}
		else
			return true;
	}
	else
		return true;
}


// Comprova que la longitud del valor d'un element sigui vàlida.
function ValidarLongitud(camp, //Camp del que en volem comprovar la longitud
                         nom,  //Nom del camp, per temes de resposta en cas d'error
                         longitud) //Longitud que ha de tindre el camp
{
   var lValid = false;
   
   if ((Number(camp.value.length) == Number(longitud)) || (Number(camp.value.length) == 0))
   {
        lValid = true;
   }    
   else
   {
        if ( ! camp.disabled)
        {
            camp.focus();
        }      
        alert('La longidtud del camp "' + nom + '" és invàlida');              
   }
   return lValid;
}

//Funcions per validar que el conte bancari estigui ben escrit
function ObtenirDigit(valor)
{
    valors = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
    
    control = 0;
    for (i=0; i<=9; i++)
        control += parseInt(valor.charAt(i)) * valors[i];
    
    control = 11 - (control % 11);
    if (control == 11) control = 0;
    else if (control == 10) control = 1;
    return control;
}

//Funció per saber si els valors que ens han introduit son numèrics, previ a fer la comprovació de la conta
function ValorNumeric(valor)
{
  cad = valor.toString();
  for (var i=0; i<cad.length; i++) 
  {
    var caracter = cad.charAt(i);
	if (caracter<"0" || caracter>"9")
	  return false;
  }
  return true;
}

//Funció per la validació de la conta bancaria a partir dels quatre paràmetres lògics
function ValidarContaBancaria(aBanc, aOficina, aDC, aConta) 
{
    var lBanc = window.document.getElementById(aBanc);
    var lOficina = window.document.getElementById(aOficina);
    var lDC = window.document.getElementById(aDC);
    var lConta = window.document.getElementById(aConta);
    
    if (lBanc.value == ""  && lOficina.value == "" && lDC.value == "" && lConta.value == "")
    {
      return true;
    }
    else
    {    
        /*Fem la comprovació de les longituds dels camps de la conta bancària*/
        if (lBanc.value.length != 4)
        {
            alert('La informació de l\'entitat no és correcta.');
            return false;
        }
        if (lOficina.value.length != 4) 
        {
            alert('La informació de l\'oficina no és correcta.');
            return false;            
        }
        if (lDC.value.length != 2)
        {
            alert('La informació dels dígits de control no és correcta.');
            return false;
        }
        if (lConta.value.length != 10)
        {
            alert('La informació del compte bancari no és correcte.');
            return false;            
        }
        
        /*En fem la revisió numérica, tot i que per JS no es permet introduïr cap valor que no sigui numèric*/
        if (!ValorNumeric(lBanc.value) || !ValorNumeric(lOficina.value) || !ValorNumeric(lDC.value) || !ValorNumeric(lConta.value))
        {
            alert('Les dades introduïdes no són numèriques.');
        }
        else 
        {     
            if (!(ObtenirDigit("00" + lBanc.value + lOficina.value) == parseInt(lDC.value.charAt(0))) || 
                !(ObtenirDigit(lConta.value) == parseInt(lDC.value.charAt(1))))
            {
                alert('El compte bancari introduit és incorrecte.');
                return false;
            }
	        else
	        {
	            return true;
	        }
            
        }
    }
}

//Funció que farem servir en el ONCHANGE del control de tipus d'import de cursos
function InformarCampImportCurs(aTipusImport, aImport)
{
//    var lTipusImport = window.document.getElementById(aTipusImport);
  //  var lImport = window.document.getElementById(aImport);
          
//    alert(lTipusImport.Value);
  //  alert(lImport.Value);
    
    //Abans de res, mirem si volen mostrar el valor de l'import que hagin seleccionat
    if (aImport != null) 
    {        
        if (aTipusImport.value == '')
        {
            aImport.value = ''
        }
        else
        {
            aImport.value = TaulaImports['_' + aTipusImport.value];
        }
    }
}
