////// Validació de dates correctes //////
function chkdate(objName)
{
   //var strDatestyle = "US"; //United States date style
   var strDatestyle="EU";  //European date style
   var strDate;
   var strDateArray;
   var strDay;
   var strMonth;
   var strYear;
   var intday;
   var intMonth;
   var intYear;
   var booFound=false;
   var datefield=objName;
   var strSeparatorArray=new Array("-","/");
   var intElementNr;
   var err=0;
   var strMonthArray=new Array(12);
   strMonthArray[0]="Jan";
   strMonthArray[1]="Feb";
   strMonthArray[2]="Mar";
   strMonthArray[3]="Apr";
   strMonthArray[4]="May";
   strMonthArray[5]="Jun";
   strMonthArray[6]="Jul";
   strMonthArray[7]="Aug";
   strMonthArray[8]="Sep";
   strMonthArray[9]="Oct";
   strMonthArray[10]="Nov";
   strMonthArray[11]="Dec";
   strDate=datefield.value;
   if (strDate.length < 1)
   {
      return true;
   }

   for (intElementNr=0;intElementNr<strSeparatorArray.length;intElementNr++)
   {
      if (strDate.indexOf(strSeparatorArray[intElementNr])!=-1)
      {
         strDateArray=strDate.split(strSeparatorArray[intElementNr]);
         if (strDateArray.length!=3)
         {
            err=1;
            return false;
         }
         else
         {
            strDay = strDateArray[0];
            strMonth = strDateArray[1];
            strYear = strDateArray[2];
         }
         booFound = true;
      }
   }

   if (booFound == false)
   {
      return false;
   }
   if (strYear.length == 2)
   {
      strYear = '20' + strYear;
   }

   // US style
   if (strDatestyle == "US")
   {
      strTemp = strDay;
      strDay = strMonth;
      strMonth = strTemp;
   }
   intday = parseInt(strDay, 10);
   if (isNaN(intday))
   {
      err = 2;
      return false;
   }
   intMonth = parseInt(strMonth, 10);
   if (isNaN(intMonth))
   {
      for (i = 0;i<12;i++)
      {
         if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase())
         {
            intMonth = i+1;
            strMonth = strMonthArray[i];
            i = 12;
         }
      }
      if (isNaN(intMonth))
      {
         err = 3;
         return false;
      }
   }
   intYear = parseInt(strYear, 10);
   if (isNaN(intYear))
   {
      err = 4;
      return false;
   }
   if (intMonth>12 || intMonth<1)
   {
      err = 5;
      return false;
   }
   if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1))
   {
      err = 6;
      return false;
   }
   if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1))
   {
      err = 7;
      return false;
   }
   if (intMonth == 2)
   {
      if (intday < 1)
      {
         err = 8;
         return false;
      }
      if (LeapYear(intYear) == true)
      {
         if (intday > 29)
         {
            err = 9;
            return false;
         }
      }
      else
      {
         if (intday > 28)
         {
            err = 10;
            return false;
         }
      }
   }
   return true;
}

function LeapYear(intYear)
{
   if (intYear % 100 == 0)
   {
      if (intYear % 400 == 0)
      {
      	 return true;
      }
   }
   else
   {
      if ((intYear % 4) == 0)
      {
      	 return true;
      }
   }
   return false;
}

////// Validació de númerics correctes //////
function validarNumero(strNumero)
{
   var numero;
   var numeroFinal,numAccess;
   var k;

   numero=strNumero.value;

   // Permeto posar com a separador de decimal "," o "'" o "." pero ho traspaso a format JavaScript numèric "."
   numeroFinal="";
   for(k=0;k<numero.length;k++)
   {
      if(numero.charAt(k)=="," || numero.charAt(k)=="'")
         numeroFinal=numeroFinal+".";
      else
         numeroFinal=numeroFinal+numero.charAt(k);
   }

   if(isNaN(numeroFinal))
      return false;
   else
   {
      numAccess="";
      // Substitueixo el "." per "," en cas de decimals, ja que l'Access ho gurda en format "XX,XX"
      for(k=0;k<numeroFinal.length;k++)
      {
         if (numeroFinal.charAt(k)==".")
            numAccess=numAccess+",";
         else
            numAccess=numAccess+numeroFinal.charAt(k);
      }

      strNumero.value=numAccess;
      return true;
   }
}

////// Validació de NIF correcte //////
function ltrim(cadena)
{
   var i=0;
   while (cadena.charAt(i) == ' ')
   {
      i++;
   }
   return cadena.substring(i);
}

function rtrim(cadena)
{
   var i;
   i=cadena.length-1;
   while (cadena.charAt(i) == ' ')
   {
      i--;
   }
   return cadena.substring(0,i+1);
}


function validarLetras(cadena)
{
   var caracter;
   var caracteresValidos="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

   cadena=ltrim(cadena);
   cadena=rtrim(cadena);

   for(var i=0;i<cadena.length;i++)
   {
      caracter=cadena.charAt(i);
      if(caracteresValidos.indexOf(caracter)<0)
         return false;
   }
   return true;
}

function validarNumeros(cadena)
{
   var caracter;
   var caracteresValidos="0123456789";

   cadena=ltrim(cadena);
   cadena=rtrim(cadena);

   for(var i=0;i<cadena.length;i++)
   {
      caracter=cadena.charAt(i);
      if(caracteresValidos.indexOf(caracter)<0)
         return false;
   }
   return true;
}

function comprobarNif(cadena)
{
   var numero;
   var letra;
   var estrang;
   var letrasNif="TRWAGMYFPDXBNJZSQVHLCKE";

   cadena=ltrim(cadena);
   cadena=rtrim(cadena);

   numero=cadena.substr(0,8);
   letra=cadena.substr(8,1);
   estrang=cadena.substr(0,1);
	
	switch (estrang.toUpperCase()) {
		case "X":
			numero=cadena.substr(1,7);
			break;
		case "Y":
			numero="1"+cadena.substr(1,7);
			break;
		case "Z":
			numero="2"+cadena.substr(1,7);
			break;
	}

   if (validarNumeros(numero)==false)
      return false;
   if (validarLetras(letra)==false)
      return false;

   if(cadena.length!=9)
      return false;

   var posicionLetra=numero%23;
   var letraCorrecta=letrasNif.charAt(posicionLetra);

   if(letraCorrecta!=letra.toUpperCase())
      return false;

   return true;
}

function validaCif(cif)
{
   var temp=cif.toUpperCase();
   var v1=new Array(0,2,4,6,8,1,3,5,7,9);
   var temp_aux=0;
   var digit_final;

   if (cif=="N0021600B") {
		return true;
   }

   // Son 9 dígits?
   if (!/^[A-Za-z0-9]{9}$/.test(temp)) {
      return false;
   }
   else
   {
      // Es una llestra de les admeses en un Cif ?
      if (!/^[ABCDEFGHJKLMNPQRSUVW]/.test(temp)) {
         return false;
      }
   }

   for(i=2;i<=6;i+=2)
   {
      temp_aux=temp_aux+v1[parseInt(cif.substr(i-1,1))];
      temp_aux=temp_aux+parseInt(cif.substr(i,1));
   }

   temp_aux=temp_aux+v1[parseInt(cif.substr(7,1))];
   temp_aux=(10-(temp_aux%10));

   digit_final=cif.substr(8,1);
   digit_final=digit_final.toUpperCase();

   if (temp_aux!=digit_final)
   {
      if (temp_aux==1 && digit_final=='A')
         return true;
      if (temp_aux==2 && digit_final=='B')
         return true;
      if (temp_aux==3 && digit_final=='C')
         return true;
      if (temp_aux==4 && digit_final=='D')
         return true;
      if (temp_aux==5 && digit_final=='E')
         return true;
      if (temp_aux==6 && digit_final=='F')
         return true;
      if (temp_aux==7 && digit_final=='G')
         return true;
      if (temp_aux==8 && digit_final=='H')
         return true;
      if (temp_aux==9 && digit_final=='I')
         return true;
      if (temp_aux==10 && digit_final=='J')
         return true;
      if (temp_aux==10 && parseInt(digit_final)==0)
         return true;

      return false;
   }
   else
   {
      return true;
   }
}

// Sobre un camp de texte, no deixa entrar caràcters que no siguin números
// Ús: <input name="telefon" type="text" onKeyPress="vNum();">
function vNum()
{
   if (event.keyCode<48 || event.keyCode>57)
      event.returnValue=false;
}

