// Funcions generals de la web de Formació de Cecot

////// 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ó d'hores correctes //////
function validarHora(strHora)
{
   var numSeparadors;
   var hores,minuts;
   var j;
   var hora;

   hora=strHora.value;

   if (hora=="" || hora==null)
      return true;

   numSeparadors=0;
   hores="";
   minuts="";

   // Obtinc hores i minuts, tenint en compte el separador.
   for(j=0;j<hora.length;j++)
   {
      if(hora.charAt(j)==":" || hora.charAt(j)==".")
         numSeparadors++;
      else
      {
         if(numSeparadors==0)
            hores=hores + hora.charAt(j);
         if(numSeparadors==1)
            minuts=minuts + hora.charAt(j);
      }
   }

   if(numSeparadors!=1 || hores=="" || minuts=="")
   {
      return false;
   }
   else
   {
      if (parseInt(hores,10)>=0 && parseInt(hores,10)<24 && parseInt(minuts,10)>=0 && parseInt(minuts,10)<60)
         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 trim(cadena)
{
   return rtrim(ltrim(cadena));
}


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);

   if (estrang=="X" || estrang=="x")
      numero=cadena.substr(1,7);

   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;

   // 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 (!/^[ABCDEFGHKLMNPQS]/.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;
   }
}

// Validació nº Seguretat Social Persona Física
function validaNissPf(niss)
{
   var digits;
   var numNiss;

   if (niss.length!=12)
      return false;

   if (niss.charAt(2)=='0')
      numNiss=niss.substr(0,2)+niss.substr(3,7);
   else
      numNiss=niss.substr(0,10);

   digits=numNiss%97;
   digits=digits.toString();

   if (digits.length<2)
      digits='0'+digits;

   if (niss.substr(10,2)!=digits)
      return false;

   return true;
}

// Validació nº Seguretat Social Persona Jurídica (Empresa)
function validaNissPj(niss)
{
   var digits;
   var numNiss;

   if (niss.length!=11)
      return false;

   numNiss=niss.substr(0,9);

   digits=numNiss%97;
   digits=digits.toString();

   if (digits.length<2)
      digits='0'+digits;

   if (niss.substr(9,2)!=digits)
      return false;

   return true;
}

// Validació dels dígits de control d'un compte corrent
function validaCC(num)
{
   var part1,part2,res1,res2,i;
   var multiplicador;

   if (num.length!=20)
      return false;

   part1=num.substr(0,8);
   part2=num.substr(10,10);
   res1=0;
   res2=0;

   // 1er Dígit de Control
   for(i=1;i<=8;i++)
   {
      switch (i)
      {
         case 1:
            multiplicador=4;
            break;
         case 2:
            multiplicador=8;
            break;
         case 3:
            multiplicador=5;
            break;
         case 4:
            multiplicador=10;
            break;
         case 5:
            multiplicador=9;
            break;
         case 6:
            multiplicador=7;
            break;
         case 7:
            multiplicador=3;
            break;
         case 8:
            multiplicador=6;
            break;
      }
      res1+=parseInt(part1.substr(i-1,1),10)*multiplicador;
   }

   res1=11-(res1%11);
   if (res1==10)
   {
      res1=1;
   }
   else
   {
      if (res1==11)
         res1=0;
   }

   // 2on Dígit de Control
   for(i=1;i<=10;i++)
   {
      switch (i)
      {
         case 1:
            multiplicador=1;
            break;
         case 2:
            multiplicador=2;
            break;
         case 3:
            multiplicador=4;
            break;
         case 4:
            multiplicador=8;
            break;
         case 5:
            multiplicador=5;
            break;
         case 6:
            multiplicador=10;
            break;
         case 7:
            multiplicador=9;
            break;
         case 8:
            multiplicador=7;
            break;
         case 9:
            multiplicador=3;
            break;
         case 10:
            multiplicador=6;
            break;
      }
      res2+=parseInt(part2.substr(i-1,1),10)*multiplicador;
   }

   res2=11-(res2%11);
   if (res2==10)
   {
      res2=1;
   }
   else
   {
      if (res2==11)
         res2=0;
   }

   if (res1==parseInt(num.substr(8,1),10) && res2==parseInt(num.substr(9,1),10))
      return true;
   else
      return false;
}

// Neteja una cadena de caràcters extranys, deixant nomès lletres i números
function netejaCadena(txt)
{
   var i,strTxt,digit;

   strTxt="";
   for(i=0;i<txt.length;i++)
   {
      digit=txt.charAt(i);
      digit=digit.toUpperCase();
      digit=digit.charCodeAt(0);
      if ((digit>64 && digit<91) || (digit>47 && digit<58))
         strTxt=strTxt+txt.charAt(i).toUpperCase();
   }
   return strTxt;
}

// 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;
}

function converteixAHexa(num)
{
    var hexadecimal=new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
    var hexaDec=Math.floor(num/16);
    var hexaUni=num-(hexaDec*16);
    return hexadecimal[hexaDec]+hexadecimal[hexaUni];
}
function comprovar_email(s){

   var i;
   var c;
   for(i = 0; i < s.length; i++){
      c = s.charAt(i);
      if (c == '@') return true;

   }
   return false;
}

