// 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) 
{
  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("Argument " + i + " input text does not exist")
      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("Argument " + i + " input text does not exist")
      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);
}

// Función 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("Argument " + i + " input text does not exist")
      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;
}


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
  if (!reg1.test(str) && reg2.test(str)) 
  { // if syntax is valid
    return true;
  }
  if (focusEnabled) formField.focus();
  formField.select();
  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("Argument " + i + " input text does not exist")
      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 sólo números 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
  if (!reg1.test(str) && reg2.test(str)) 
  { // if syntax is valid
    return true;
  }
  if(focusEnabled)
  {
    formField.focus();
    formField.select();
  }
  return false;
}

function valCreditCard(pCardNum)
{
  var tError=""
  var cardVal = new String(pCardNum)
  if (cardVal.length < 15 || cardVal.length > 20)
  {
     tError = 'N\xFAmero de caracteres err\xF3neo'
  } 
  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 = 'Error en el n\xFAmero de tarjeta'
     }
  }
  if (tError == '') return true
  alert(tError)
  return false
}



