/*-------------- Funcions generiques de validació ------------------------------------------------------------

CalculaNIF(opcionError) -> valida el format d'un nif
ValidaNIF(opcionError) -> valida el format d'un nif
validaDecimal(opcionError) -> valida un número decimal
validaNumero(opcionError) -> valida un número enter
validaLetras(opcionError) -> confirma que un texte estigui composat exclusivament per lletres
validaCaracters(opcionError) -> confirma que un texte estigui composat exclusivament per lletres, números, '@' i '.'
validaTelf(opcionError) -> valida el format de un número de telefon
validaCP(opcionError) -> valida el format de un Codi Postal
validaCorreu(opcionError) -> valida el format d'una adreça de correu
ValidarData(opcionError) -> donada una data en format dd/mm/aaaa, indica si es vàlida
TransformarData(opcionError) -> donada una data, la converteix en format dd/mm/aaaa
ValidarObligatori(opcionError) -> indica si un parametre es obligatori
ValidaMes(opcionError) --> 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) --> Valida que un string sigui un percentatge (numeric + que estigui entre 0 i 100)



--------------------------------------------------------------------------------------------------------------*/

//OMC 05/05/2009
//
//Validaciones de documentos de identificación
//
//Para validar el campo de los números de documento tendremos que poner como función que se llame desde el evento asociado al 
//campo el ValidaNIF(opcionError, oEvent)
		
function CalculaNIE(opcionError, oEvent){
//estaaaaa
	var dni;
	var lletra;
	var lletra_correcta;
	var bOk;
	var ocampo;
	var auxiliar, letrainicial;
	var NumIntermedio;
	
	//Detectamos el navegador que estamos usando.
	if (NavegadorIE()){ 
		ocampo=oEvent.srcElement;
	}else{
		ocampo=oEvent.target;
	}
	//Obtenemos los campos y los tratamos.
	if (ocampo){	
		auxiliar=ocampo.value;
		auxiliar=auxiliar.toUpperCase();
		letrainicial=auxiliar.substring(0,1);
    	//if ((letrainicial<'A')||(letrainicial>'Z')){
		if ((letrainicial != 'X') && (letrainicial != 'Y')){
			//El primer caracter no es una letra por lo que saltamos el resto de validación.
			bOk=false;
			alert("El formato correcto es: \n [X/Y]+[0]+[7 Dígitos]+[Caracter de Control] \nEj.: X01234567L");
		}else{
			NumIntermedio=auxiliar.substring(1,2);
			//El segundo caracter debe ser un 0
			if (NumIntermedio!='0'){	
				bOk=false;
				alert("El formato correcto es: \n [X/Y]+[0]+[7 Dígitos]+[Caracter de Control] \nEj.: X01234567L");
			}else{
			//El primer caracter es una letra(x ó y), el resto de validación es la misma que la de un DNI.
			nif=auxiliar.substring(2,auxiliar.length);
			nif=nif.toUpperCase();
			bOk=true;
			if (nif!=''){
				if (isNaN(nif)) //Conté lletra
				{
					if ((nif.length = 8)) 
					{	
						dni=nif.substring(0,nif.length-1); 
						if (!isNumber(dni)){
							bOk=false;
						}
						
						//Obtenemos el caracter de control.
						lletra=nif.substring(nif.length-1,nif.length);
						
						//Comprobamos que sea una letra y no un número.
						if ((lletra<'A')||(lletra>'Z')){
							bOk=false;
							ocampo.style.color='Red';
						}
						
						//Miramos que en el resto de NIE sin letra inicial ni caracter de control no hayan más letras.
						//if (isNaN(dni)&&!bOk){
						//	ocampo.style.color='Red'; //Si hi ha un caracter en alguna posició que no es la ultima
						//}else{	
						//	//Consultamos la letra que correspondería al número de NIE pasado.
						//	lletra_correcta=quina_lletra(dni); 
						//	//Si la letra escrita no coindide con la correcta,  directamente la reemplazamos.
						//	if (lletra!=lletra_correcta) 
						//	{
						//		dni.concat(lletra_correcta);
						//		ocampo.value=letrainicial+dni;
						//	}    				
						//}
					}else // Menys de 2 caracters o mes de 10
					{
						bOk=false
					}
				} 
				else  //No conté la lletra
				{
					if ((nif.length>5)&&(nif.length<7)){    
							ocampo.value=letrainicial+nif+quina_lletra(nif);
					}else{
						alert("El formato correcto es: \n [X/Y]+[0]+[7 Dígitos]+[Caracter de Control] \nEj.: X01234567L");
						bOk=false;
					}
				}
			}else{
				bOk=false;
				alert("El formato correcto es: \n [X/Y]+[0]+[7 Dígitos]+[Caracter de Control] \nEj.: X01234567L");
			}
		}
		}
    }
	return bOk;
}
function CalculaCIF(opcionError, oEvent){
	var ocampo, cif,letraIniAux, i, cadNumeros, numAux, numAux2, letraDigito, caracterFinal;
	var acumPar = 0
	var acumImpar = 0;
	var bOk=false;
	var letraTipoOrg=new Array('A','B','C','D','E','F','G','H','K','L','M','N','P','Q','S');
	//A - Sociedad Anónima.	//B - Sociedad de responsabilidad limitada.	//C - Sociedad colectiva.	//D - Sociedad comanditaria.
	//E - Comunidad de bienes.	//F - Sociedad cooperativa.	//G - Asociación.	//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 - Órgano de la administración.
	
	//Detectamos el navegador que estamos usando.
	if (NavegadorIE()){ 
		ocampo=oEvent.srcElement;
	}else{
		ocampo=oEvent.target;
	}
	
	//Validamos el CIF introducido.
	if(ocampo){
		cif=ocampo.value.toUpperCase();
		letraIniAux=cif.substring(0,1);
		if(cif.length==9){
			//Validamos que la letra inicial sea una de las válidas de las que constan en el array.
			for (i=0;i<letraTipoOrg.length;i++){
				if (letraIniAux.match(letraTipoOrg[i])!=null){
					bOk=true;
					break;
				}
			}
			//Calculos con la secuencia de los 7 dígitos para verificar el número/letra de control.
			if(bOk){
				cadNumeros=cif.substring(1,cif.length-1);
				for (i=0;i<cadNumeros.length;i++){
					numAux=parseInt(cadNumeros.substring(i, i+1));
					if(i%2!=0){ //Si el número ocupa una posición par.
						//acumPar --> variable para acumular los números que ocupan las posiciones pares de los 7 dígitos.
						acumPar=acumPar+numAux;
					}else{ //Si el número ocupa una posición impar.
						numAux=numAux*2;
						if (numAux>9){ // Si el número tiene más de 1 dígito, los sumamos entre ellos.
							numAux2=numAux-10;
							numAux=numAux2+1;
						}
						//acumImpar --> variable para acumular los números que ocupan las posiciones impares de los 7 dígitos.
						acumImpar=acumImpar+numAux;
					}
				}
				//Resultado de la suma de los calculos.
				sumaTotal=acumPar+acumImpar;
				while(sumaTotal>9){
					sumaTotal=sumaTotal-10;
				}
				letraDigito=10-sumaTotal;
				
				//Letra/Número final.				
				caracterFinal=cif.substring(cif.length-1.,cif.length);
				switch(letraDigito){
					case 1:
						if ((caracterFinal!='1')&&(caracterFinal!='A')){cif=cif.substring(0,cif.length-1)+letraDigito;}
						break;
					case 2:
						if ((caracterFinal!='2')&&(caracterFinal!='B')){cif=cif.substring(0,cif.length-1)+letraDigito;}
						break;
					case 3:
						if ((caracterFinal!='3')&&(caracterFinal!='C')){cif=cif.substring(0,cif.length-1)+letraDigito;}						
						break;
					case 4:
						if ((caracterFinal!='4')&&(caracterFinal!='D')){cif=cif.substring(0,cif.length-1)+letraDigito;}						
						break;
					case 5:
						if ((caracterFinal!='5')&&(caracterFinal!='E')){cif=cif.substring(0,cif.length-1)+letraDigito;}						
						break;
					case 6:
						if ((caracterFinal!='6')&&(caracterFinal!='F')){cif=cif.substring(0,cif.length-1)+letraDigito;}
						break;
					case 7:
						if ((caracterFinal!='7')&&(caracterFinal!='G')){cif=cif.substring(0,cif.length-1)+letraDigito;}						
						break;
					case 8:
						if ((caracterFinal!='8')&&(caracterFinal!='H')){cif=cif.substring(0,cif.length-1)+letraDigito;}						
						break;
					case 9:
						if ((caracterFinal!='9')&&(caracterFinal!='I')){cif=cif.substring(0,cif.length-1)+letraDigito;}						
						break;
					case 0:
						if ((caracterFinal!='0')&&(caracterFinal!='J')){cif=cif.substring(0,cif.length-1)+letraDigito;}						
						break;
				}
				
				//Reemplazamos el dígito/letra de control del campo por el válido.
				ocampo.value=cif;
				bOk=true;
			}else{
				bOk=false;
				alert("El tipo de Organización: "+letraIniAux+" no existe.");
			}
		}else{
			alert("El formato correcto es: \n"+"[Caracter Tipo Organización] + [7 dígitos] + [Carácter/Letra de control]");
			bOk=false;
		}
	}
	return bOk;	
}
function CalculaNIF(opcionError, oEvent){
	var dni;
	var lletra;
	var lletra_correcta;
	var bOk;
	var ocampo;
	
  if (NavegadorIE()){ 
	ocampo=oEvent.srcElement;
  }else{
	ocampo=oEvent.target;
  }
	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)){
					ocampo.style.color='Red';
					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
					bOk=false;
      			}else{	
      				lletra_correcta=quina_lletra(dni); //Es consulta la lletra correcta del DNI
      				if (lletra!=lletra_correcta) 
      				{
      					//dni.concat(lletra_correcta);
						nif=nif.substring(0,nif.length-1)+lletra_correcta;
      					ocampo.value=nif;
      				}    				
      			}
      		}else
      		{
      			bOk=false
      		}
      	} 
      	else  //No conté la lletra
      	{
      		if ((nif.length>2)&&(nif.length<10)) 
      		{
				if(nif.length<9){
					ocampo.value=nif.concat(quina_lletra(nif));
				}else{
					bOk=false;
				}
			}
          else
           {
            bOk=false;
          }
        }
       }
    }
	return bOk;
}
function CalculaPasaporte(opcionError, oEvent){
	//De momento no ponemos validación debido a que tiene un formato distinto en cada país.
	//Por tanto hasta que se defina, dejamos que cualquier valor entrado sea válido.
	return true;	
}
function ValidaNIF(opcionError, oEvent) {
	var dni;
	var lletra;
	var lletra_correcta;
	var bOk;
	var ocampo;
	//Detectamos el explorador desde donde estamos navegando la web.
	if (NavegadorIE()){ocampo=oEvent.srcElement;}else{ocampo=oEvent.target;}
	
	//Capturamos el valor de los campos de 'Tipo de Documento' y de 'Número de Documento'.
	if ((ocampo.name=='WTXNUMDOC') || (ocampo.name=='WTGNUMDOC') || (ocampo.name=='WTXIPSTDO'))
	{
		ocampoTipo=document.getElementById('WTXIPSTDO');
		
		ocampo=document.getElementById('WTXNUMDOC');
		if (ocampo==null){
			ocampo=document.getElementById('WTGNUMDOC');
		}
	}else{
		ocampoTipo=document.getElementById('WTXIPRTDO');	
		ocampo=document.getElementById('WTXIPRDNI');
	}
	
	//Obtenemos el código de la option seleccionada en el campo 'Tipo de Documento'.
	var numOpcion=ocampoTipo.value.split("-")[0];
	
	//Tratamos la opción seleccionada de la combo de 'Tipo de Documento' para decidir que validación aplicaremos sobre el campo de 'Número de Documento'.
	switch(numOpcion){
		case "0":   //Opción 0 ---> DNI / CIF.
			if (CalculaNIF(opcionError, oEvent)){		
				bOk=true;
				break;
			}else{
				if (CalculaCIF(opcionError, oEvent)){
					bOk=true;
					break;
				}else{
					bOk=false;
					break;
				}
			}			
			break;
		case "1":   //Opción 1 ---> Pasaporte.
			if (CalculaPasaporte(opcionError, oEvent)){		
				bOk=true;
				break;
			}else{
					bOk=false;
					break;
				}			
			break;
		case "2":   //Opción 2 ---> NIE / Tarjeta de Residencia.
			if (CalculaNIE(opcionError, oEvent)){		
				bOk=true;
				break;
			}else{
					bOk=false;
					break;
				}			
			break;
		case "3":   //Opción 3 ---> Sin Documento.
			bOk=true;
			break;
		default:
			bOk=true;
			break;
	}
	devuelveResultado(ocampo,bOk,opcionError);   
}
	
//OMC FIN 05/05/2009
	
function validaDecimal(opcionError, oEvent)
{	
  if (NavegadorIE()) ocampo=oEvent.srcElement;
  else ocampo=oEvent.target;

  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)
{

  if (NavegadorIE()) ocampo=oEvent.srcElement;
  else ocampo=oEvent.target;

  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)
{
  if (NavegadorIE()) ocampo=oEvent.srcElement;
  else ocampo=oEvent.target;

  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)
{
  ocampo=(NavegadorIE())?oEvent.srcElement:ocampo=oEvent.target;

  bOk=true;
  if (ocampo)
  {
    cadena=ocampo.value;
	validaCaractersIntern(cadena);
    devuelveResultado(ocampo,bOk,opcionError);
  }
}

// -------------------- validaTelf -------------------------------------
// Valida un número de telefon
function validaTelf(opcionError, oEvent){

   if (NavegadorIE()) ocampo=oEvent.srcElement;
   else ocampo=oEvent.target;

  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)
{
   if (NavegadorIE()) ocampo=oEvent.srcElement;
   else ocampo=oEvent.target;
  
  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)
{
   if (NavegadorIE()) ocampo=oEvent.srcElement;
   else ocampo=oEvent.target;

  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;

   if (NavegadorIE()) ocampo=oEvent.srcElement;
   else ocampo=oEvent.target;
  
  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;

  if (NavegadorIE()) ocampo=oEvent.srcElement;
  else ocampo=oEvent.target;

  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)
{ 
  if (NavegadorIE()) ocampo=oEvent.srcElement;
  else ocampo=oEvent.target;

  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)
{ 
  if (NavegadorIE()) ocampo=oEvent.srcElement;
  else ocampo=oEvent.target;

  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)
{
  if (NavegadorIE()) ocampo=oEvent.srcElement;
  else ocampo=oEvent.target;

  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)
{
  if (NavegadorIE()) ocampo=oEvent.srcElement;
  else ocampo=oEvent.target;

  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)
{
	var bOk=true;
	var otros='.@ÇçÑñ_-';
	var c;
	for(i=0;i<cadena.length && bOk;i++){
		c=cadena.charAt(i)
		bOk=(entre(c,'a','z') || entre(c,'A','Z') || entre(c,'0','9') || (otros.lastIndexOf(c)>-1));
	}
	return bOk;
}

function entre(caracter,car1,car2)
{
 if ((caracter<car1)||(caracter>car2)) { return false; } else {return true;}
}

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(opcionError, oEvent)
{
  if (NavegadorIE()) ocampo=oEvent.srcElement;
  else ocampo=oEvent.target;

  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});
    }



/////////////////////////////////////////////
//   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

//ECA >> 13/02/2009 Borra todos los campos no ocutos de un formulario y que no estan en modo solo lectura
function BorrarCamposTramiteAdministracion(oForm)
{

	var aTipos = new Array ("input","textarea","select");
	var intALength = aTipos.length;
	
		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("");
				}
			}
		}	
}
