// Validaciones de campos.
// by Bernat Comerma
focusEnabled = true; // for validations

// Validates a date with the format dd/mm/aaaa
// - Accepts an optional separator, default: "/"
// - Leading zeros for day or month are accepted
function valDate(pDate, pSep) {
 pSep = pSep || "/";
 var aD = pDate.split(pSep);
 aD[0] = parseInt(aD[0],10);   // Gets rid of leading zeroes
 aD[1] = parseInt(aD[1],10)-1; 
 var d = new Date(aD[2],aD[1],aD[0]);
 return (d.getFullYear() == aD[2]
      && d.getMonth()    == aD[1]
      && d.getDate()     == aD[0]);
}

// Checks a valid name (like a variable name)

function isAlphanumeric(s) {
  var reAlphanumeric = /^[a-zA-Z0-9]+$/
  return reAlphanumeric.test(s)
}

function valInputDate(pObjForm, pSep) {
  if (! valDate(pObjForm.value, pSep)){
     if (focusEnabled) pObjForm.focus();
     return false;
  }
  return true;
}

// Eliminates leading & trailing blanks

function trim(pStr) {
  if (! pStr)
  {return "";}
  var ini, fin, len = pStr.length
  if (0 == len) return pStr
  for (ini = 0; ini < len; ini++)
    if (pStr.charAt(ini) != ' ') break
  for (fin = len - 1; fin > ini; fin--)
    if (pStr.charAt(fin) != ' ') break
  return pStr.substring(ini, fin+1)
}

function valEmptyOrFull(paObjText) {
  var tTxt = "", args = arguments, tEmpty = 0, tFull = 0
  for (var i = 0; i < args.length; i++)
  {
    if (null == args[i]) 
    {
      alert(oRPMultilang.translate("js.validations.arg_not_exists",i))
      return false
    }
    tTxt = args[i].value
    if (null == tTxt) tTxt = ""
    else tTxt = trim(tTxt)
    if ("" == tTxt) tEmpty++
    else tFull++
  }
  if (tEmpty == args.length || tFull == args.length) return true
  else return valInputNotEmpty(paObjText)
}

function valAnyFull(paObjText) {
  var tTxt = "", args = arguments
  for (var i = 0; i < args.length; i++)
  {
    if (null == args[i]) 
    {
      alert(oRPMultilang.translate("js.validations.arg_not_exists",i))
      return false
    }
    tTxt = args[i].value
    if (null == tTxt) tTxt = ""
    else tTxt = trim(tTxt)
    if ("" != tTxt)
    {
       return true
    }
  }
  return false
}

function valInputInt(pObjText, pMin, pMax) {
  return valInputNumber(pObjText, parseInt(pObjText.value, 10), pMin, pMax);
}

function valInputFloat(pObjText, pMin, pMax) {
  return valInputNumber(pObjText, parseFloat(pObjText.value, 10), pMin, pMax);
}

// Funcion auxiliar para valInputInt() y valInputFloat()

function valInputNumber(pObjText, tNum, pMin, pMax) {
  if (! pMin) pMin = Number.MIN_VALUE;
  if (! pMax) pMax = Number.MAX_VALUE;
  if (isNaN(tNum) || tNum < pMin || tNum > pMax)
  {
    if (focusEnabled) pObjText.focus()
    return false
 }
  pObjText.value = tNum
  return true
}



function isInputInt(pInputNum)

{

  var strNum = new String(trim(pInputNum.value))

  var intNum = parseInt(strNum)

  if (isNaN(intNum)) return false

  for (var i=0; i<strNum.length; i++)

  {

    if ("0123456789".indexOf(strNum.charAt(i)) == -1) 

    {

      pInputNum.focus()

    	return false

    }

  }

  return true

}



// Receives form text fields as parameters to check emptiness

// Returns -1 if none empty or the first not empty field

function valInputNotEmpty(paObjText)

{

  var tTxt = "", args = arguments

  for (var i = 0; i < args.length; i++)

  {

    if (null == args[i]) 

    {

      alert(oRPMultilang.translate("js.validations.arg_not_exists",i))

      return false

    }

    tTxt = args[i].value

    if (null == tTxt) tTxt = ""

    else tTxt = trim(tTxt)

    if ("" == tTxt)

    {

      args[i].focus()

      return args[i]

    }

    args[i].value = tTxt

  }

  return false;

}

// Validates required fields

// -n arguments accepted

function valInputNotEmpty(paObjText)

{

  var tTxt = "", args = arguments

  for (var i = 0; i < args.length; i++)

  {

    if (null == args[i]) 

    {

      alert(oRPMultilang.translate("js.validations.arg_not_exists",i))

      return false

    }

    tTxt = args[i].value

    if (null == tTxt) tTxt = ""

    else tTxt = trim(tTxt)

    if ("" == tTxt)

    {

      if (focusEnabled) args[i].focus()

      return false

    }

    args[i].value = tTxt

  }

  return true

}



//Valida que un string contenga solo numeros consecutivos

function valNumber(pNum, pMinLength, pMaxLength)

{

 numVal = new String(pNum)

 if (numVal.length < pMinLength || numVal.length > pMaxLength)

 {

     return false

 } 

  else 

 {

   for (var i=0, tSpaceFound=false, ok=true; i < numVal.length; i++)

   {

     numChar = numVal.charAt(i)

     if (numChar == ' ')

     {

       tSpaceFound = true

     } 

     else 

     {

        if (tSpaceFound) 

        {

          return false

        } 

        else 

        {

          if ("0123456789".indexOf(numChar) == -1) 

          {

            return false

          }

        }

     }

   }

 }

 return true

}



function valIP(pIP)

{

  var num, ipFinal =""

  if (pIP == "") return ""

  var ip = new String(pIP)

  ip = ip.split(".")

  if (ip.length < 2 || ip.length > 4) return ""

  for (var i = 0; i < ip.length; i++)

  {

     if (ip[i].length == 0) return ""

     num = parseInt(ip[i])

     if (isNaN(num)) return ""

     if (num < 0 || num > 255) return ""

     ipFinal += num

     if (i < (ip.length - 1)) ipFinal += "."

  }

  return ipFinal

}





function valEmail(formField) 

{

  var str = formField.value; // email string

  var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid

  //var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid Tecsidel
  var reg2 = /^[a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,4}$/; //v�lid

  if (!reg1.test(str) && reg2.test(str)) 

  { // if syntax is valid

    return true;

  }

  formField.focus();

  formField.select();

  return false;

}


function valUsername(formFieldUser)
{
  var strUser = formFieldUser.value; // username string
  // Es comprova si el nom d'usuari nomes te caracters A-Z, a-z i 0-9
  //var reg = /^[a-z0-9@._-]*$/; // valid
  var reg = /^[A-Za-z0-9]*$/; // valid
  if(reg.test(strUser)) return true;
  else return false;
}

function valPassword(formFieldPassword)
{
  var strPass = formFieldPassword.value; // password string
  // Es comprova si el password no t� accents o car�ctrs estranys �s v�lid
  var reg = /^[A-Za-z0-9@._-]*$/; // v�lid
  if(reg.test(strPass)) return true;
  else return false;
}

function valCreditCard(pCardNum)

{

  var tError=""

  var cardVal = new String(pCardNum)

  if (cardVal.length < 15 || cardVal.length > 20)

  {

     tError = oRPMultilang.translate("js.validations.bad_num_char")

  } 

  else 

  {

     for (var i=0, tSpaceFound=false, ok=true; i < 21; i++)

     {

       cardChar = cardVal.charAt(i)

       if (cardChar == ' ')

       {

         tSpaceFound = true

       } 

       else 

       {

          if (tSpaceFound) 

          {

            ok=false

            break

          } 

          else 

          {

            if ("0123456789".indexOf(cardChar) == -1) 

            {

              ok=false

              break

            }

          }

       }

     }

     if (! ok)

     {

        tError = oRPMultilang.translate("js.validations.bad_target_number")

     }

  }

  if (tError == '') return true

  alert(tError)

  return false

}
function valCodiActivacio(formFieldUser) {
  var strUser = trim(formFieldUser.value); // codi d'activacio string
  // Es comprova si el nom d'usuari �s v�lid
  var reg = /^[a-z0-9.]*$/; // v�lid
  if(reg.test(strUser)) {
  	return true;
  }
  return false;
}

