/*
lTrim(val) - left trim
rTrim(val) - right trim
allTrim(val) - trim

checkEmpty(val) - check for empty value (returns true for empty)
checkEmptyGroup(arrID, msg) - calls checkEmpty for arrID array of object IDs, msg - empty alert
checkEmptyGroupORLogic(arrID, msg) - true if all is empty ONLY

checkInt(val) - check int val
checkFloat(val,msg) - check float val
checkPosInt(val) - check positive int
checkIntRange(val, minVal, maxVal) - check integer range from minVal to maxVal including both of htem

checkEmail(val) - check email
checkAlphaNum(val) - checks alphas, digits and underscore

checkDate(val, lang) - check date for language
checkTime(val, lang) - check time for language
*/

function lTrim(val)
{
  while (val.length > 0 && val.indexOf(' ') == 0)
  {
    val = val.substring(1, val.length);
  }
  return val;
}

function rTrim(val)
{
  while (val.substring(val.length-1, val.length) == ' ')
  {
    val = val.substring(0, val.length-1);
  }
  return val;
}

function allTrim(val)
{
  return rTrim(lTrim(val));
}


function checkEmpty(val)
{
  return (allTrim(val) == '');
}

function checkEmptyGroup(arrID, msg)
{
  var obj;
  var i;
  for (i = 0; i < arrID.length; i++)
  {               
    obj = document.getElementById(arrID[i]);
    if (obj && checkEmpty(obj.value))
    {
      alert(msg);
      obj.focus();
      return false;
    }
  }
  return true;
}

function checkEmptyGroupORLogic(arrID, msg)
{
  var obj;
  var i;
  for (i = 0; i < arrID.length; i++)
  {
    obj = document.getElementById(arrID[i]);
    if (obj && !checkEmpty(obj.value))
    {
      return true;
    }
  }
  alert(msg);
  return false;
}

function noOneChecked(arrID)
{
  var obj;
  var i;
  for (i = 0; i < arrID.length; i++)
  {
    obj = document.getElementById(arrID[i]);
    if (obj && obj.checked)
    {
      return false;
    }
  }
  return true;
}

function checkInt(val)
{
  var re = new RegExp('^-?[1-9][0-9]*$');
  return re.test(allTrim(val));
}

function checkFloat(val, msg)
{
  val = allTrim(val);

  var floatVal = parseFloat(val);
  if(val == floatVal)
  {
    return true;
  }
  else
  {
    alert(msg);
    return false;
  }
}


function isFloat(val, isPositiveOnly)
{
  var re = (isPositiveOnly) ? new RegExp('^[0-9]+(\.[0-9]+)?$') : new RegExp('^-?[0-9]+(\.[0-9]+)?$');
  return re.test(allTrim(val));
}

function checkPosInt(val)
{
  var re = new RegExp('^[1-9][0-9]*$');
  return re.test(allTrim(val));
}

function checkIntRange(val, minVal, maxVal)
{
  if (!checkInt(val)) return false;
  var intVal = parseInt(allTrim(val), 10);
  return (intVal >= minVal && intVal <= maxVal);
}

function checkEmail(val)
{
  var reEmail = new RegExp("^[A-Za-z0-9._-]+@.+\.[A-Za-z]{2,4}$");
  return reEmail.test(allTrim(val));
}

function checkAlphaNum(val)
{
  var reEmail = new RegExp("^[A-Za-z0-9_]+$");
  return reEmail.test(allTrim(val));
}

function checkDate(val, lang)
{
  val = allTrim(val);
  var day, month, year, maxDay;

  if (val.length != 10) return false;

  switch (lang)
  {
    case "en":
      day = val.substring(3, 5);
      month = val.substring(0, 2);
      year = val.substring(6, 10);
    break;
    // ru, ua
    default:
      day = val.substring(0, 2);
      month = val.substring(3, 5);
      year = val.substring(6, 10);
    break;
  }
  if (!checkPosInt(day) || !checkPosInt(month) || !checkPosInt(year)) return false;
  if (!checkIntRange(day, 1, 31) || !checkIntRange(month, 1, 12) || !checkIntRange(year, 1900, 9999)) return false;

  day = parseInt(day, 10);
  month = parseInt(month, 10);
  year = parseInt(year, 10);
  //31,28,31,30,31,30,31,31,30,31,30,31
  if (month == 4 || month == 6 || month == 9 || month == 11)
    maxDay = 30;
  else
    if (month == 2)
      if (year % 4 == 0)
        maxDay = 29;
      else
        maxDay = 28;
    else
      maxDay = 31;
  if (!checkIntRange(day.toString(10), 1, maxDay)) return false;

  return true;
}

function checkTime(val, lang)
{
  val = allTrim(val);
  var arrParts, hour, minute, second;
  var maxHour;

  if (val.length < 3) return false;

  switch (lang)
  {
    case 'ru':
      maxHour = 23;
    break;
    default:
      maxHour = 12;
    break;
  }

  arrParts = val.split(':');
  if (arrParts.length < 2) return false;
  hour = arrParts[0];
  minute = arrParts[1];
  second = arrParts[2];

  if ((hour == null) || (minute == null)) return false;

  if (!checkIntRange(hour, 0, maxHour) || !checkIntRange(minute, 0, 59) ||
    (second != null && !checkIntRange(second, 0, 59))) return false;

  return true;
}
