/*
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
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)
{
  val = allTrim(val);
  while (val.length > 0 && val != '0' && val.indexOf('0') == 0)
  {
  	val = val.substring(1, val.length);
  }

  var intVal = parseInt(val, 10);
  return (val == intVal.toString(10));
}

function checkPosInt(val)
{
  val = allTrim(val);
  return (checkInt(val) && val.search("[^0-9]") == -1);
}

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}$");
  var reEmail = new RegExp("^.+@.+\.[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;
}
