var defaultEmptyOK = false
var whitespace = " \t\n\r";
var decimalPointDelimiter = "."


function isDigit (c)
{   
  return ((c >= "0") && (c <= "9"))
}


function isEmail (s)
{   
  if (isEmpty(s)) 
    if (isEmail.arguments.length == 1) return defaultEmptyOK;
    else return (isEmail.arguments[1] == true);
   
    // is s whitespace?
    if (isWhitespace(s)) return false;
    
    // there must be >= 1 character before @, so we
    // start looking at character position 1 
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@"))
    { 
      i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}




function isEmpty(s)
{   
  return ((s == null) || (s.length == 0))
}


function isFloat (s)
{   
  var i;
  var seenDecimalPoint = false;

  if (isEmpty(s)) 
     if (isFloat.arguments.length == 1) return defaultEmptyOK;
     else return (isFloat.arguments[1] == true);

  if (s == decimalPointDelimiter) 
    return false;

  // Search through string's characters one by one
  // until we find a non-numeric character.
  // When we do, return false; if we don't, return true.

  for (i = 0; i < s.length; i++)
  {   
    // Check that current character is number.
    var c = s.charAt(i);

    if ((c == decimalPointDelimiter) && !seenDecimalPoint) 
      seenDecimalPoint = true;
    else if(i == 0 && c == '-')
      ;
    else if (!isDigit(c)) 
      return false;
  }

  // All characters are numbers.
  return true;
}


function isInteger (s)
{   
  var i;

  if (isEmpty(s)) 
     if (isInteger.arguments.length == 1) return defaultEmptyOK;
     else return (isInteger.arguments[1] == true);

  // Search through string's characters one by one
  // until we find a non-numeric character.
  // When we do, return false; if we don't, return true.

  for (i = 0; i < s.length; i++)
  {   
    // Check that current character is number.
    var c = s.charAt(i);

    if (!isDigit(c)) return false;
  }

  // All characters are numbers.
    return true;
}


function isWhitespace (s)
{   
  var i;

  // Is s empty?
  if (isEmpty(s)) return true;

  // Search through string's characters one by one
  // until we find a non-whitespace character.
  // When we do, return false; if we don't, return true.

  for (i = 0; i < s.length; i++)
  {   
      // Check that current character isn't whitespace.
      var c = s.charAt(i);

      if (whitespace.indexOf(c) == -1) return false;
  }

  // All characters are whitespace.
  return true;
}


function DaysInMonth(month, year)
{
  var date, i;

  date = new Date(year, month - 1, 28);
  i = 28;
  
  while(date.getDate() == i)
  {
    i++;
    date.setDate(i);
  }

  return i - 1;
}


function OnDigit(ok, digit, name)
{

  if(ok)
  {
    if(digit.value.length == 0)
    {
      digit.focus();
      alert('You must enter a value for the \'' + name + '\'!');
      ok = false;
    }
    else if(digit.value.search(/[^\+\d\s]/) != -1)
    {
      digit.focus();
      alert('You must enter only digits or spaces for the \'' + name + '\'!');
      ok = false;
    }
  }
  
  return ok;
}


function OnEmail(ok, element)
{
  if(ok)
  {
    if(!isEmail(element.value))
    {
      alert('You must enter a valid email address!');
      element.focus();
      ok = false;
    }
  }
  
  return ok;
}


function OnFile(ok, element, name)
{
  if(ok)
  {
    if(element.value.length == 0)
    {
      alert('You must select a file to upload for the \'' + name + '\'');
      element.focus();
      ok = false;
    }
  }
  
  return ok;
}


function OnRadio(ok, element, name)
{
  var i;
  
  if(ok)
  {
    for(i = 0; i < element.length; i++)
    {
      if(element[i].checked)
        break;
    }
    
    if(i == element.length)
    {
      ok = false;
      alert('You must select an option for \'' + name + '\'');
      element.focus();
    }
  }
  
  return ok;
}


function OnSelect(ok, element, name)
{
  if(ok)
  {
    if(element.selectedIndex == 0)
    {
      alert('You must enter a value for the \'' + name + '\'');
      element.focus();
      ok = false;
    }
  }
  
  return ok;
}


function OnTextBox(ok, element, name, min_length)
{
  if(ok)
  {
    if(element.value.length == 0)
    {
      alert('You must enter a value for the \'' + name + '\'');
      element.focus();
      ok = false;
    }
    
    if(ok && min_length && element.value.length < min_length)
    {
      alert('You must enter at least ' + parseInt(min_length) + ' characters for \'' + name + '\'');
      element.focus();
      ok = false;
    }
  }
  
  return ok;
}


function OnTextDigit(ok, element, name)
{
  var value
  
  value = element.value;
  value = value.replace(/\s+/, '');
  
  if(ok)
  {
    if(!isInteger(value))
    {
      element.focus();
      ok = false;

      if(value.length > 0)
      {
        alert('You can only enter digits for  \'' + name + '\'');
      }
      else if(value.length == 0)
      {
        alert('You must enter a value for the \'' + name + '\'');
      }
    }
  }
  
  return ok;
}


function OnTextInteger(ok, element, name)
{
  if(ok)
  {
    if(!isInteger(element.value))
    {
      element.focus();
      ok = false;

      if(element.value.length > 0)
      {
        alert('You can only enter digits for  \'' + name + '\'');
      }
      else if(element.value.length == 0)
      {
        alert('You must enter a value for the \'' + name + '\'');
      }
    }
  }
  
  return ok;
}