/*-------------- Funcions generiques de validació ------------------------------------------------------------

CalculaNIF(opcionError, oEvent) -> valida el format d'un nif
ValidaNIF(opcionError, oEvent) -> valida el format d'un nif
validaDecimal(opcionError, oEvent) -> valida un número decimal
validaNumero(opcionError, oEvent) -> valida un número enter
validaLetras(opcionError, oEvent) -> confirma que un texte estigui composat exclusivament per lletres
validaCaracters(opcionError, oEvent) -> confirma que un texte estigui composat exclusivament per lletres, números, '@' i '.'
validaTelf(opcionError, oEvent) -> valida el format de un número de telefon
validaCP(opcionError, oEvent) -> valida el format de un Codi Postal
validaCorreu(opcionError, oEvent) -> valida el format d'una adreça de correu
ValidarData(opcionError, oEvent) -> donada una data en format dd/mm/aaaa, indica si es vàlida
TransformarData(opcionError, oEvent) -> donada una data, la converteix en format dd/mm/aaaa
ValidarObligatori(opcionError, oEvent) -> indica si un parametre es obligatori
ValidaMes(opcionError, oEvent) --> Valida que un mes estigui entre 01 i 12

Opciones de salida de error
----------------------------
opcionError='rojo' 'Texto en rojo
opcionError='mensaje' 'mensaje de error
--------------------------------------------------------------------------------------------------------------*/


/*-------------- Funcions d'exemple ------------------------------------------------------------
recalcularCampos()->Mostra com interactuar amb els camps del formulari
textoEvento()->Mostra com interactuar amb els events
mostrarPopupTextoClick()->Mostra un exemple de funció associada a un tipus de control i a un tipus d'event
mostrarPopupTexto()->Mostra un exemple de funció associada a un tipus de control
CalculaImportNet() -> A partir d'un import i dos percentatges (Iva y descompte) calcula el import net
ValidaPercentatge(opcionError, oEvent) --> Valida que un string sigui un percentatge (numeric + que estigui entre 0 i 100)



--------------------------------------------------------------------------------------------------------------*/
// -------------------- CalculaNIF -------------------------------------
//
// Parametre: nif
// Retorna: 
//			false = format incorrecte
//			true = format correcte
//			DNI = Si la lletra es incorrecta es retorna el codi de DNI amb la lletra corregida.
//			DNI = Si el nif no té lletra de control es retorna el DNI amb la lletra afegida.
//	

var colorAvisoCampoVacio="white";
	
	
function CalculaNIF(opcionError, oEvent) {
	var dni;
	var lletra;
	var lletra_correcta;
	var bOk;

	var ocampo;
	

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 

	if (ocampo)
	{	
	    nif=ocampo.value;
    	nif=nif.toUpperCase( );
      bOk=true;
    	if (nif!='')
    	{
      	if (isNaN(nif)) //Conté lletra
      	{
      		if ((nif.length>2)&&(nif.length<10)) 
      		{	
      			dni=nif.substring(0,nif.length-1); 
				if (!isNumber(dni))
						{
							bOk=false;
						}	
				
      			lletra=nif.substring(nif.length-1,nif.length);
      			if (isNaN(dni)) 
      			{
      				ocampo.style.color='Red'; //Si hi ha un caracter en alguna posició que no es la ultima
      			} 
      			else 
      			{	
      				lletra_correcta=quina_lletra(dni); //Es consulta la lletra correcta del DNI
      				if (lletra!=lletra_correcta) 
      				{
      					dni.concat(lletra_correcta);
      					ocampo.value=dni;
      				}    				
      			}
      		}
      		else // Menys de 2 caracters o mes de 10
      		{
      			bOk=false
      		}
      	} 
      	else  //No conté la lletra
      	{
      		if ((nif.length>2)&&(nif.length<10)) 
      		{            	 
              	//SMP 14/04/2008 INI
				 //ocampo.value=nif.concat(quina_lletra(nif));
				 if(nif.length<9) ocampo.value=nif.concat(quina_lletra(nif));
			   else  bOk=false;
			   
			   
			    //SMP 14/04/2008 FIN
              
              }
          
          else 	
           {
            bOk=false;
          }
        }
       }
       devuelveResultado(ocampo,bOk,opcionError);
      }
      
}

// -------------------- validaNIF -------------------------------------
// Comprova que la lletra, en cas de ser editada, es correcta.
//
// Parametre: tipues error
// Retorna: 
//			false = No es correcte.
//			true = Es correcte.
//			

function ValidaNIF(opcionError, oEvent) {
	var dni;
	var lletra;
	var lletra_correcta;
	var bOk;
	var ocampo;
	
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }

	if ((ocampo.name=='WTXNUMDOC') || (ocampo.name=='WTXIPSTDO'))
	{
		ocampoLetra=document.getElementById('WTXLETDNI');
		ocampoTipo=document.getElementById('WTXIPSTDO');
		//ocampo=document.getElementById('WTXNUMDOC');		
	}
	else 
	{
		ocampoLetra=document.getElementById('WTXLDNIRE');
		ocampoTipo=document.getElementById('WTXREPTDO');	
		//ocampo=document.getElementById('WTXREPNDO');
	}
	
	if (ocampo){
	 
		switch (ocampoTipo.value)
		{
		case '1-DNI': 
		case '6-NIF':
			if (ocampo)
			{	
				numero=ocampo.value;
		    	numero=numero.toUpperCase( );
				bOk=true;
		    	if (numero!='')
		    	{
		      	if (isNumber(numero)) //Conté lletra
		      	{
		      		if ((numero.length==8)) 
		      		{	
		      			ocampoLetra.value = quina_lletra(numero);
						
		      		}
		      		else // Longitud diferenta de 8.
		      		{
		      			bOk=false;
		      		}
		      	} 
		      	else  //No conté la lletra
		      	{
		      		bOk=false;
		        	}
		       }		   
		      }
			break;
		case '2-Pasaporte':
			if (ocampo)
			{	
				numero=ocampo.value;
		    	numero=numero.toUpperCase( );
				bOk=true;
		    	if (numero!='')
		    	{
		      	if (isNumber(numero)) //No conté lletra
		      	{
		      		if ((numero.length==15)) 
		      		{	
		      			ocampoLetra.value=""
		      		}
		      		else // Longitud diferenta de 15.
		      		{
		      			bOk=false;
		      		}
		      	} 
		      	else  //Conté la lletra
		      	{
		      		bOk=false;
		        	}
		       }
		      }
			break;
		default:
			bOk = false;
			break;
		}
	}
	devuelveResultado(ocampo,bOk,opcionError);
   
}

function ValidaLetraNIF(opcionError, oEvent) //Recalcula la letra si la modifica el usuario por si se equivoca.
{
	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 bOk = true;
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	
	if (document.getElementById('WTXIPSTDO').value != '2-Pasaporte'){
		if (ocampo){
			numero=document.getElementById('WTXNUMDOC').value;
			letraIntroducida = document.getElementById('WTXLETDNI').value;
			
			if (letraIntroducida != quina_lletra(numero))
			{
				document.getElementById('WTXLETDNI').value = quina_lletra(numero);
			}
		}
	}
	else
	{
		document.getElementById('WTXLETDNI').value = '';
		
	}
	if (document.getElementById('WTXREPTDO').value == '2-Pasaporte'){
		document.getElementById('WTXLDNIRE').value = '';
	}
	devuelveResultado(ocampo,bOk,opcionError);
}



// -------------------- validaDecimal -------------------------------------
// Comprova que el format d'un decimal sigui correcte. El separador ha de ser '.'
//
// Parametre: decimal
// Retorna: 
//			false = No es correcte.
//			decimal = decimal correcte.
//			
function validaDecimal(opcionError, oEvent)
{	

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 

	bOk=true;
	if (ocampo)
	{
	  	decimal=ocampo.value;
	  	if(decimal.indexOf(',')>=0) bOk=false;
	  	if (bOk)
	  	{
	    	separador=decimal.indexOf('.');
	    	if (separador==-1)
	    	{   		
	    	  if (!(validaNumeroInterno(decimal))) bOk=false;
	    	  else	ocampo.value=decimal + ".0";
	    	}
			else
			{
		        if (separador==0)
		      	{
		      		partEntera="0"; partDecimal=decimal.substring(separador+1);;
		      	}
		      	else
		      	{
		      		if (separador==decimal.length-1)
		      		{
		      			partEntera=decimal.substring(0,separador); partDecimal="0";			
		      		}
		      		else
		      		{
		      			partEntera=decimal.substring(0,separador);
		      			partDecimal=decimal.substring(separador+1);
		      		}
		      	}
		      	if (!(validaNumeroInterno(partDecimal))) bOk=false;
		      	if (!(validaNumeroInterno(partEntera))) bOk=false;
		      	if (bOk)ocampo.value=partEntera + "." + partDecimal;
			}
	    }
	    devuelveResultado(ocampo,bOk,opcionError);
	}
}

// -------------------- validaNumero -------------------------------------
//
// Parametre: cadena
// Retorna: 
//			false = No es numero
//			true = Es un numero
//			

function validaNumero(opcionError, oEvent)
{


	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 

  bOk=true;
  if (ocampo)
  {
    num=ocampo.value;
    bOk=validaNumeroInterno(num);
	  
	  devuelveResultado(ocampo,bOk,opcionError);
	}
	
}




// -------------------- validaLetras -------------------------------------
// Comprova que cadena estigui composat per lletres exclusivament.

function validaLetras(opcionError, oEvent)
{

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 

  bOk=true;
  if (ocampo)
  {
    cadena=ocampo.value;  
    
  	for(i=0;i<cadena.length;i++){
  		if (((cadena.charAt(i)<'a') || (cadena.charAt(i)>'z')) && 
  			((cadena.charAt(i)<'A') || (cadena.charAt(i)>'Z')) ) bOk=false;
  	}
	devuelveResultado(ocampo,bOk,opcionError);
	}
}

// -------------------- validaCaracters -------------------------------------
// Comprova que cadena estigui composat per lletres o numeros. Permet '.' i '@' per adreces de correu.

function validaCaracters(opcionError, oEvent)
{

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 

  bOk=true;
  if (ocampo)
  {
    cadena=ocampo.value;  
    if (cadena!='')
    {
    	for(i=0;i<cadena.length;i++){
    		if (((cadena.charAt(i)<'a') || (cadena.charAt(i)>'z')) && 
    			((cadena.charAt(i)<'A') || (cadena.charAt(i)>'Z')) &&
    			((cadena.charAt(i)<'0') || (cadena.charAt(i)>'9')) &&
    			(cadena.charAt(i)!='.') && (cadena.charAt(i)!='@') ) bOk=false;
    	}
    	devuelveResultado(ocampo,bOk,opcionError);
    }
  }
}

// -------------------- validaTelf -------------------------------------
// Valida un número de telefon

function validaTelf(opcionError, oEvent){

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	   

  bOk=true;
  if (ocampo)
  {
    num=ocampo.value;  
    if(num!='')
    {
    	if (num.length!=9)
    	{
    		if ((num.charAt(0)!='0') || (num.charAt(1)!='0'))
    		{
    			bOk=false;
    		}
    		else
    		{
    			bOk=validaNumeroInterno(num);
    		}
    	}
    	else
    	{
    		bOk=validaNumeroInterno(num);
    	}
    	devuelveResultado(ocampo,bOk,opcionError);
    }
  }
}

// -------------------- validaCP -------------------------------------
// Valida un codi postal

function validaCP(opcionError, oEvent)
{

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 
  
  bOk=true;
  
  if (ocampo)
  {
    num=ocampo.value; 
    if (num!='')
    {
    	if (num.length==5)
    	{
    		bOk=validaNumeroInterno(num);
    	}
    	else
    	{
    		bOk=false;
    	}
      devuelveResultado(ocampo,bOk,opcionError);
  	}
  }
}

// -------------------- validaCorreu -------------------------------------
// Valida una adreça de correu electronic
// Parametre: adreça
// Retorna:
//			false: el format es incorrecte
//			true: format correcte

function validaCorreu(opcionError, oEvent)
{

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 

  bOk=true;
  
  if (ocampo)
  {
    adr=ocampo.value; 
    if (adr!='')
    {
    // Mirem que tingui una unica arroba i un punt, que estiguin en aquest ordre, 
    // que no començi per @ i que hi hagi caracters despres del punt
    	if ((adr.indexOf('@')>0) && (adr.indexOf('@')<adr.lastIndexOf('.')) && (adr.indexOf('.')!=adr.length-1) && (adr.indexOf('@')==adr.lastIndexOf('@')) && validaCaractersIntern(adr))
    	{
    		bOk=true;
    
    	}else
    	{
    		bOk=false;
    	}
    	devuelveResultado(ocampo,bOk,opcionError);
    }
   }
}

// -------------------- ValidarData -------------------------------------
//
// Parametre: data en format dd/mm/aaaa
// Retorna: 
//			false = format incorrecte o data inexistent
//			true = Data correcta
//			
function ValidarData(opcionError, oEvent){
  var bTraspas;


	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 
  
  bOk=true;
  
  if (ocampo)
  {
      sData=ocampo.value;   

    	sData = sData.split("/"); //0:Dia  1:Mes  2:Any
    	if(sData.length!=3) 	  //Comprovació del nombre de camps
    	{		bOk=false;	}
    	else
    	{ 
    		if((sData[0].length!=2)||(sData[1].length!=2)||(sData[2].length!=4)) 	//Comprovació de la longitud dels camps
    		{	bOk=false;;
    		}
    		else
    		{
    			if((sData[2]<1900)||(sData[2]>2100)) 		//Tractament d'any
    			{ bOk=false; }
    			else
    			{ 
    				if((sData[1]==1)||(sData[1]==3)||(sData[1]==5)||(sData[1]==7)||(sData[1]==8)||(sData[1]==10)||(sData[1]==12))		//Tractament de mes(amb 31 dies)
    				{
    					if((sData[0]<1)||(sData[0]> 31)) 
    					{ bOk=false; }
    				} 			//Tractament de mes (amb 30	dies) 
    				else 
    				{
    					if((sData[1]==4)||(sData[1]==6)||(sData[1]==9)||(sData[1]==11))
    					{
    						if((sData[0]<1)||(sData[0]>30)) bOk=false;
    					}
    					else //Tractament de Febrer (28 o 29 dies)
    					{
    						if(sData[1]==2)
    						{
    							bTraspas=Traspas(sData[2]);
    							if((bTraspas)&&((sData[0]<1)||(sData[0]>29))) 
    								bOk=false;
    							else if((!bTraspas)&&((sData[0]<1)||(sData[0]>28))) 
    								bOk=false;
    						}
    						else bOk=false; //mes incorrecte
    					}
    				}
    			}
    		}
    	}
    	devuelveResultado(ocampo,bOk,opcionError);
  }
  
}

// -------------------- TransformarData -------------------------------------
//
// Parametre: data
// Retorna: 
//			false = format incorrecte o data inexistent
//			Data = Data en format dd/mm/aaaa
//			
function TransformarData(opcionError, oEvent){
  var iDia;
  var iMes;
  var iAny;


	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 

  bOk=true;
  
  if (ocampo)
  {
      sData=ocampo.value;   
    	sData = sData.split("/"); //0:Dia  1:Mes  2:Any
    	//Comprovació del nombre de camps
    	if(sData.length!=3) bOk=false;
    	else{ 
    		//Tractament de dia
    		if(sData[0].length==1) iDia="0" + sData[0];
    		else iDia=sData[0];
    		
    		//Tractament de mes
    		if(sData[1].length==1) iMes="0" + sData[1];
    		else iMes=sData[1];
    		
    		//Tractament d'any
    		if(sData[2].length==2){
    			if(sData[2][0]>=6) iAny="19" + sData[2];
    			else iAny="20" + sData[2];
    		}
    		else iAny=sData[2];
    	}
    	if (!ValidarDataInterno(iDia + "/" + iMes + "/" + iAny))  bOk=false;
    	else
    	{
    		ocampo.value=(iDia + "/" + iMes + "/" + iAny);
    	}
      devuelveResultado(ocampo,bOk,opcionError); 
   }
}

// -------------------- ValidarObligatori -------------------------------------
// Retorna false si el parametre no te contingut

function ValidarObligatori(opcionError, oEvent)
{ 

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 

  bOk=true;
  
  if (ocampo)
  {
      s=ocampo.value;   
	    bOk=!((s == null) || (s.lenght == 0 )||s=='')  
	    devuelveResultado(ocampo,bOk,opcionError); 
	 }
}

// -------------------- ValidaMes -------------------------------------
// Retorna false si el parametre (pasat a enter) no esta entre 1 i 12

function ValidaMes(opcionError, oEvent)
{ 

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 

  bOk=false;
 
  if (ocampo)
  {
  	  if (validaNumeroInterno(ocampo.value))
  	  {
	      s=parseInt(ocampo.value, 10);
	      if (!isNaN(s))
		    bOk=((s > 0) && (s < 13))
	  }
	  devuelveResultado(ocampo,bOk,opcionError); 
  }
}

// -------------------- ValidarDocVisat -------------------------------------
// Valida el numero de documento utilizando una llamada externa

function ValidarDocVisat(oEvent)
{
	var bOk,oCampoDoc,aCampos,sURL,sIdCol,sAssumeix;

	bOk=true;
	if (NavegadorIE()) oCampoDoc=oEvent.srcElement;
	else oCampoDoc=oEvent.target;
	//Solo validamos si han informado el numero de documento
	if (oCampoDoc.value.length>0)
	{
		//Obtenemos el id del colegio
		aCampos=document.getElementsByName('WTXCAMPRO');
		sIdCol=aCampos.item(0).value;

		//Obtenemos el valor del parametro assumeix
		if (oCampoDoc.name=='WTXREFASS') sAssumeix='S';
		else sAssumeix='N';

		//Realizamos una llamada para validar el documento
		sURL='/ABSIS/eAD/MTM/Acciones/SrvAcciones.asmx/ValidarDocVisat?idCol=' + sIdCol + '&idDoc=' + oCampoDoc.value + '&assumeix=' + sAssumeix;
	  if (NavegadorIE()) xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
		else xmlHttpReq = new XMLHttpRequest();
	  xmlHttpReq.open("GET", sURL, false);
	  xmlHttpReq.send("");
		if (xmlHttpReq.responseXML!=null)
		{
			if (NavegadorIE()) bOk=(xmlHttpReq.responseXML.documentElement.nodeTypedValue=='S');
			else bOk=(xmlHttpReq.responseXML.documentElement.textContent=='S');
		}
		else bOk=false;
	}

	formateaCampoResult(oCampoDoc,bOk);
	if (!bOk) 
	{
		alert(strRefDocIncorrecta);
		oCampoDoc.focus();
	}
}

////////////////////////////////////////
////EJEMPLOS
/////////////////////////////////////////

//Esta función es un ejemplo de suma de los campos WTXNUMER1 y WTXNUMER2 del formulario.
//El campo WTXRESULT almacena el resultado de dicha suma. Esta función se ha asociado al
//evento que captura el cambio de los campos WTXNUMER1 y WTXNUMER2.
function recalcularCampos()
{
  var result=0;
  var num1=0;
  var num2=0;
  
  if (document.getElementById('WTXNUMER1').value)
  {
    num1=parseInt(document.getElementById('WTXNUMER1').value);
  }
   if (document.getElementById('WTXNUMER2').value)
  {
    num2=parseInt(document.getElementById('WTXNUMER2').value);
  }
  
  result= num1 + num2;
  document.getElementById('WTXRESULT').value=result;
}

//Aquesta funció es un exemple de calcul d'un camp a partir del valor d'altres.
//El camp WTXIMPNET emmagatzema el resultat d'aplicar un percentatge de Iva (WTXPORIVA)
//i un percentatge de descompte (WTXPORDTO) sobre un import brut (WTXIMPBRU).
//Aquesta funció s'ha associat a l'event onfocusout dels camps WTXIMPBRU,WTXPORIVA i WTXPORDTO.
function CalculaImportNet()
{
  var importeBrut=0;
  var percIva=0;
  var percDte=0;
  var importNet=0;
  var result=0;   

  if (document.getElementById('WTXIMPBRU').value)
  {
    if (ValidaDecimalIntern(document.getElementById('WTXIMPBRU').value))
      importeBrut=parseFloat(document.getElementById('WTXIMPBRU').value);
  }
  if (document.getElementById('WTXPORDTO').value)
  {
    if (ValidaPercentatgeIntern(document.getElementById('WTXPORDTO').value))
      percDte=parseInt(document.getElementById('WTXPORDTO').value);
  }
  if (document.getElementById('WTXPORIVA').value)
  {
    if (ValidaPercentatgeIntern(document.getElementById('WTXPORIVA').value))
      percIva=parseInt(document.getElementById('WTXPORIVA').value);
  }

  result = importeBrut - (importeBrut * percDte / 100);
  document.getElementById('WTXIMPNET').value = roundNumber(result + (result*percIva/100), 2);

}

//Aquesta funció es un exemple de validació. En aquest cas, valida que un string sigui un percentatge
//(numeric + que estigui entre 0 i 100)
function ValidaPercentatge(opcionError, oEvent)
{

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 

  var bOk=true;
  var num;

  if (ocampo)
  {
    num=ocampo.value;
    bOk=ValidaPercentatgeIntern(num); 
    devuelveResultado(ocampo,bOk,opcionError);
  }
}

//Retorna true si el string pasat es un percentatge (número sense decimals entre 0 i 100)
function ValidaPercentatgeIntern(num)
{
  if (validaNumeroInterno(num))
  {
	return ((num>=0) && (num<=100));
  }
  else return false;
}

// Comprova que el format d'un decimal sigui correcte. El separador ha de ser '.'
function ValidaDecimalIntern(decimal){	
  var bOk=true;
  var separador;
  var partEntera;
  var partDecimal;

  if(decimal.indexOf(',')>=0) bOk=false;
  if (bOk)
  {
    separador=decimal.indexOf('.');
    if (separador==-1)
    {   		
      if (!(validaNumeroInterno(decimal))) bOk=false;   		
    }
    else
    {

      if (separador==0)
      {
       partEntera="0"; 
       partDecimal=decimal.substring(separador+1);
      }
      else
      {
        if (separador==decimal.length-1)
      	{
      	  partEntera=decimal.substring(0,separador);
	  partDecimal="0";
      	}
      	else
      	{
      	  partEntera=decimal.substring(0,separador);
	  partDecimal=decimal.substring(separador+1);
      	}
      }

      if (!(validaNumeroInterno(partDecimal))) bOk=false;
      if (!(validaNumeroInterno(partEntera))) bOk=false;
    }
  }
  return bOk;
}


//Esta función muestra un mensaje que contiene información sobre evento provocado. 
//Se puede asociar a cualquier evento de cualquier campo del formulario.
function textoEvento(oEvent)
{

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 

  var sTexto;
  sTexto='Se ha provocado el evento ' + oEvent.type + ' sobre el campo ' + ocampo.name
  alert(sTexto); 
}

function mostrarPopupTextoClick()
{
  alert('Se ha provocado un click sobre un campo de texto'); 
}
function mostrarPopupTexto()
{
  alert('Se ha provocado un evento sobre un evento texto'); 
}

//FUNCIONS PRIVADES
//--------------------------------------------------
//	Mascara per saber si un any és de traspàs.
//	Només permet un enter de fins a 4 dígits.
//--------------------------------------------------
function Traspas(iAny){
	if((iAny % 4)==0){
			if((iAny % 100)==0){
					if((iAny % 400)==0) return(true);
					else return(false);
			}
			else return(true);
    }
	else return(false);
}
// -------------------- quina_lletra -------------------------------------
//
// Parametre: Dni sense lletra
// Retorna: 
//			false = format incorrecte
//			caracter = lletra corresponent al Dni.
//			
function quina_lletra (Dni){
	var lletra=new Array("T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E");
	if (isNaN(Dni)) return false;
  else  return (lletra[Dni%23]); 
}

// -------------------- validaCaractersIntern -------------------------------------
// Comprova que cadena estigui composat per lletres o numeros. Permet '.','@','_' i '-' per adreces de correu.
function validaCaractersIntern(cadena)
{
	bOk=true;
    	if (cadena!='')
    	{
    		for(i=0;i<cadena.length;i++){
    			if (((cadena.charAt(i)<'a') || (cadena.charAt(i)>'z')) && 
    					((cadena.charAt(i)<'A') || (cadena.charAt(i)>'Z')) &&
							((cadena.charAt(i)<'0') || (cadena.charAt(i)>'9')) &&
			    		(cadena.charAt(i)!='.') && (cadena.charAt(i)!='@') &&
			    		(cadena.charAt(i)!='Ç') && (cadena.charAt(i)!='Ñ') &&
			    		(cadena.charAt(i)!='ç') && (cadena.charAt(i)!='ñ') &&
    					(cadena.charAt(i)!='_') && (cadena.charAt(i)!='-') ) 
				
						bOk=false;
	    	}
	}
	return bOk;
}

function roundNumber(number, decimals) {
	return Math.round(number*Math.pow(10,decimals))/Math.pow(10,decimals);
}

function validaNumeroInterno(num)
{
	for(i=0;i<num.length;i++){
		if (num.charAt(i)<'0' || num.charAt(i)>'9')return false;
	}
	return true;
}

// -------------------- ValidarDataInterno -------------------------------------
//
// Parametre: data en format dd/mm/aaaa
// Retorna: 
//			false = format incorrecte o data inexistent
//			true = Data correcta
//			
function ValidarDataInterno(sData){
var bTraspas;

	sData = sData.split("/"); //0:Dia  1:Mes  2:Any
	if(sData.length!=3) 	  //Comprovació del nombre de camps
	{		return(false);	}
	else
	{ 
		if((sData[0].length!=2)||(sData[1].length!=2)||(sData[2].length!=4)) 	//Comprovació de la longitud dels camps
		{	return(false);
		}
		else
		{
			if((sData[2]<1900)||(sData[2]>2100)) 		//Tractament d'any
			{ return(false); }
			else
			{ 
				if((sData[1]==1)||(sData[1]==3)||(sData[1]==5)||(sData[1]==7)||(sData[1]==8)||(sData[1]==10)||(sData[1]==12))		//Tractament de mes(amb 31 dies)
				{
					if((sData[0]<1)||(sData[0]> 31)) 
					{ return false ; }
				} 			//Tractament de mes (amb 30	dies) 
				else 
				{
					if((sData[1]==4)||(sData[1]==6)||(sData[1]==9)||(sData[1]==11))
					{
						if((sData[0]<1)||(sData[0]>30)) return(false);
					}
					else //Tractament de Febrer (28 o 29 dies)
					{
						if(sData[1]==2)
						{
							bTraspas=Traspas(sData[2]);
							if((bTraspas)&&((sData[0]<1)||(sData[0]>29))) 
								return(false);
							else if((!bTraspas)&&((sData[0]<1)||(sData[0]>28))) 
								return(false);
						}
						else return false; //mes incorrecte
					}
				}
			}
		}
	}
	return(true);
}

function devuelveResultado(ocampo,resultado,opcionError,sMensaje)
{

    if (opcionError=='rojo')
    {
        formateaCampoResult(ocampo,resultado);
    }
    else if (opcionError=='mensaje' && !resultado)
    {
        if (!sMensaje) sMensaje="Campo no válido";
        alert(sMensaje);
    }

}

function formateaCampoResult(ocampo,resultado)
{
  if (resultado)
  {
      ocampo.style.color='Black';
      if (ocampo.style.backgroundColor=='Red' || ocampo.style.backgroundColor=='red')
      {
          ocampo.style.backgroundColor="";
      }  
  }
  else
   {
      if(ocampo.value.length==0)
      {
        //ocampo.style.color='White';  
        //ocampo.style.backgroundColor='Red';  
      }
      else
      {
        ocampo.style.color='Red';  
        ocampo.style.backgroundColor="";  
      }
   }
}

function CopiarEmail(oEvent)
{

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	 
	if (document.getElementById('WTGMAINOT') !=null){
		document.getElementById('WTGMAINOT').value=ocampo.value;
	}
  
}

// -------------------- Cerrar ventana -------------------------------------
/* 	Utilizado para insertar un enlace de cierre en un popup */
function CerrarVentana(){
	window.close();
}

// -------------------- AjaxAutoCompleter -------------------------------------
/* 	DESTINATARIO -GESTION DE LLAMADAS-
	Muestra una lista de datos obtenidos a partir de una consulta realizada 
	cada vez que se escribe un caracter utilizandolos como filtro de la consulta
*/

    function insertAutoCompleteDestinatario(){
    	//Lo ideal seria poder pasar como parametro el nombre del campo 'WTXNOMDES'
    	if (document.getElementById("WTXNOMDES")){
    	  var sNomCampo='WTXNOMDES';
    	}else{
    	  var sNomCampo='FIL_WUSNOMBRE';
      }
      //alert(sNomCampo);
    	var urlASP='../../forms_base/lstusu.asp'
    	var idtargetDIV='targetLst_' + sNomCampo;
    	var htmltargetDiv='<div id="'+idtargetDIV+'" class="auto_complete" ></div>';
    	
    	//método utilizado al seleccionar un item de la lista de resultados de la consulta
	    var getItemUpdate= function(resp){
	    		//Cargamos los datos del item seleccionado
	    		var oNode=document.getElementById(resp.id);
	    		var sNombre=oNode.getAttribute("WUSNOMBRE");
	    		var sApell1=oNode.getAttribute("WUSAPELL1");
	    		var sApell2=oNode.getAttribute("WUSAPELL2");
	    		if(oNode.getAttribute("WUSDIRMAI")){
	    			var sDirmail=oNode.getAttribute("WUSDIRMAI");
	        }
	    		//actualizamos los valores del formulario
	    		var oNombre, oApell1, oApell2, oDirmail;
	    		if (document.getElementById("WTXNOMDES")){
	    		  oNombre=document.getElementById("WTXNOMDES");
	    		  oNombre.value=sNombre;
	    		
	    		  oApell1=document.getElementById("WTXAP1DES");
	    		  oApell1.value=sApell1;
	    		
	    		  oApell2=document.getElementById("WTXAP2DES");
	    		  oApell2.value=sApell2;
	    		
	    		  if(document.getElementById("WTGMAINOT")){
	    		    oDirmail=document.getElementById("WTGMAINOT");
	    		    oDirmail.value=sDirmail;
	    		  }
	    		 }else{
	    		  oNombre=document.getElementById("FIL_WUSNOMBRE");
	    		  oNombre.value=sNombre;
	    		
	    		  oApell1=document.getElementById("FIL_WUSAPELL1");
	    		  oApell1.value=sApell1;
	    		
	    		  oApell2=document.getElementById("FIL_WUSAPELL2");
	    		  oApell2.value=sApell2;	    		  
	    		 }
	     }    	
    	
    	new Insertion.After(sNomCampo, htmltargetDiv);
    	new Ajax.Autocompleter( sNomCampo, 
    							idtargetDIV, 
    							urlASP, 
    							{updateElement: getItemUpdate});
    }




//SMP 10/04/2008

function	VisualizaSeccion(sIdRadioButton,sIdSeccion1,sIdSeccion2)
{
    var radio = document.getElementById(sIdRadioButton + '0');
    var seccion1= document.getElementsByClassName(sIdSeccion1)[0];
	var seccion2 = document.getElementsByClassName(sIdSeccion2)[0];

   if (!radio) //Si el radio no está informado...
    {     
	  return;
	}
	var b = radio.checked;
  	if (b) //Si el radio está o no checked...
	{
		seccion1.style.display="";
		seccion2.style.display="none";
		vaciarSeccionOculta(sIdSeccion2);
	}
	else
	{	
		seccion2.style.display="";
		seccion1.style.display="none";
		vaciarSeccionOculta(sIdSeccion1);
	}
}
function	VisualizaSeccionesOcultas(sIdSeccion1,sIdSeccion2)
{   var seccion1= document.getElementsByClassName(sIdSeccion1)[0];
	var seccion2 = document.getElementsByClassName(sIdSeccion2)[0];
  
seccion1.style.display="";
seccion2.style.display="";
}


//OMC 16/05/2008
function vaciarSeccionOculta(identificadorSeccion)
{
	var i;
	var seccionActual = document.getElementsByClassName(identificadorSeccion)[0];
	var totalHijos = seccionActual.childNodes.length;
	for (i=0; i<totalHijos; i++){
		if (seccionActual.childNodes[i].className != "campo_lista"){
			seccionActual.childNodes[i].children[1].value = " ";
		}else{
			//seccionActual.childNodes[i].value = " ";
			seccionActual.childNodes[i].childNodes[0].childNodes[2].selectedIndex=0;
		}
		
	}
}
//OMC FIN 16/05/2008

/////////////////////////////////////////////
//   OMC 13/03/2008
/////////////////////////////////////////////
/* 
PARA FORMULARIOS CON CAMPOS OBLIGATORIOS:
Al validar formulario marca el campo de color al que la vairable se inicializa.
La variable 'colorAvisoCampoVacio' se define a petición del cliente inicializandola con el nombre
o código del color elegido por este.
Si se comenta la declaración el funcionamiento se anula, es decir no se marcará el campo de ningún color
seguirá quedando blanco.
Si se descomenta deberá asignarse a la variable el color a marcar en el campo.
*/
//var colorAvisoCampoVacio = "red";
/////////////////////////////////////////////
//   OMC 13/03/2008 FIN.
/////////////////////////////////////////////


// Borra todos los campos no ocutos de un formulario y que no estan en modo solo lectura
function BorrarCampos(oInput){
	var oForm = document.getElementById(oInput.form.id);
	var aTipos = new Array ("input","textarea","select");
	var intALength = aTipos.length;
	if(confirm(strBorrarCampos)){
		for(var x=0;x<intALength;x++){
			var cItems = oForm.getElementsByTagName(aTipos[x]);
			var intCItemsLength = cItems.length;			
			for(var i=0;i<intCItemsLength;i++){
				if(!cItems.item(i).id == "" && cItems.item(i).type != "hidden" && !cItems.item(i).readOnly && cItems.item(i).type != "submit"){
					EstablecerValorCampo(window.document,cItems.item(i).id,'','=');		
					if(document.getElementById(cItems.item(i).id).selectedIndex)
						document.getElementById(cItems.item(i).id).selectedIndex= "-1";
					if(document.getElementById(cItems.item(i).id + "_parent"))
						tinyMCE.activeEditor.setContent("");
				}
			}
		}
	}	
}

//OMC 08/05/2008
function isNumber(s) // Para determinar que una string SOLAMENTE contiene numeros. Si es así retornará TRUE, en caso contrario retornará FALSE.
{
   var i;
    var dotAppeared;
    dotAppeared = false;
    if (isEmpty(s)) 
       if (isNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isNumber.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c)) return false;
        } else { 
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}

function isEmpty(s) //Comprueba que sea una cadena la cual no esté vacía.
{
   return ((s == null) || (s.length == 0))
}

function isDigit (c) // Comprueba que sea un numero del 0-9 si es así lo retorna a modo de char.
{
   return ((c >= "0") && (c <= "9"))
}
//OMC FIN  08/05/2008



function ValidaDNI(opcionError, oEvent) {
	var dni;
	var lletra;
	var lletra_correcta;
	var bOk;

	var ocampo;

	 //OMC 15/05/2008
	 // Validació per a compatibilitat de versións de les crides als mètodes: abans eren amb 1 paràmetre, ara incorporen un 2on paràmetre per a la compatibilitat amb Firefox.
	 // Aquesta validació no aporta compatibilitat sinó que evita que retorni un error d'script la pàgina si la crida no incorpora el 2on paràmetre.
	 if (oEvent == null) {
		ocampo=document.getElementById(event.srcElement.name);
	 }else{
		if (NavegadorIE()) ocampo=oEvent.srcElement;
			else ocampo=oEvent.target;
	 }
	 //OMC FIN  15/05/2008
	if ((ocampo.name=='WTXNUMDOC') || (ocampo.name=='WTXIPSTDO'))
	{
		ocampoTipo=document.getElementById('WTXIPSTDO');
		ocampo=document.getElementById('WTXNUMDOC');
	}
	else 
	{
		ocampoTipo=document.getElementById('WTXIPRTDO');	
		ocampo=document.getElementById('WTXIPRDNI');
	}
	
	if (ocampoTipo.value=='1-DNI')
	{
		if (ocampo)
		{	
		   dni=ocampo.value;
	    	dni=dni.toUpperCase( );
	      bOk=true;
	    	if (dni!='')
	    	{
	      	if (isNaN(dni)) //Conté lletra
	      	{
	      		if ((dni.length>2)&&(dni.length<10)) 
	      		{
	      			dni=dni.substring(0,dni.length-1); 
	      			lletra=dni.substring(dni.length-1,dni.length);
	      			if (isNaN(dni)) 
	      			{
	      				bOk=false;
	      			} 
	      			else 
	      			{	
	      				lletra_correcta=quina_lletra(dni); //Es consulta la lletra correcta del DNI
	      				if (lletra!=lletra_correcta) 
	      				{
	      					bOk=false;
	      				}    				
	      			}
	      		}
	      		else // Menys de 2 caracters o mes de 10
	      		{
	      			bOk=false;
	      		}
	      	} 
	      	else  //No conté la lletra
	      	{
	      		bOk=false;
	        	}
	       }
	      }			
	}
else //No han triat NIF
	{
		bOk=true;
	}
	devuelveResultado(ocampo,bOk,opcionError);
}



function ratonEncima()
{
 this.src = imgLocation ;
}

function ratonFuera()
{
 this.src = imgLocation ;
}