var defaultEmptyOK = false
var whitespace = " \t\n\r";
var decimalPointDelimiter = "."


function ElementCompleteFileType(file, type)
{
  var valid;
  
  valid = false;
  
  if(file.file_types.length == 0)
    valid = true;
  else
  {
    for(i = 0; i < file.file_types.length; i++)
    {
      if(file.file_types[i].toLowerCase() == type.toLowerCase())
      {
        valid = true;
        break;
      }
    }
  }
  
  return valid;
}


function FileType(filename)
{
  var pattern = /\./g;
  var pos, result, type;
  
  pos = -1;
  
  while((result = pattern.exec(filename)) != null)
  {
    pos = result.index;
  }
  
  if(pos != -1)
    type = filename.substr(pos + 1);
  else
    type = "";
    
  return type;
}


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 OnCheckbox(ok, checkbox, message)
{
  if(ok)
  {
    if(!checkbox.checked)
    {
      ok = false;
      checkbox.focus();
      alert(message);
    }
  }
  
  return ok;
}


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 OnImageJPEG(ok, image, name)
{
  var i, image_type, ok;
  
  if(ok)
  {
    if(image.value.length == 0)
    {
      alert('You must select an image to upload for the \'' + name + '\'');
      image.focus();
      ok = false;
    }
    
    if(ok)
    {
      image.image_types = new Array();
      image.image_types[0] = 'jpg';
      image.image_types[1] = 'jpeg';
            
      image_type = FileType(image.value);
      ok = false;
      
      for(i = 0; i < image.image_types.length && !ok; i++)
      {
        if(image.image_types[i].toLowerCase() == image_type.toLowerCase())
        {
          ok = true;
          break;
        }
      }
      
      if(!ok)
      {
        image.focus();
        alert('You must select either a jpg, jpeg file to upload for the \'' + name + '\'');
      }
    }  
  }
  
  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.type == 'select-multiple')
    {
      if(element.selectedIndex < 0)
      {
        alert('You must enter a value for the \'' + name + '\'');
        element.focus();
        ok = false;
      }
    }
    else
    {
      if(element.selectedIndex <= 0)
      {
        alert('You must enter a value for the \'' + name + '\'');
        element.focus();
        ok = false;
      }
    }
  }
  
  return ok;
}


function OnTextBox(ok, element, name, max_length, not_mandatory)
{
  if(ok)
  {
    if(element.value.length == 0 && !not_mandatory)
    {
      alert('You must enter a value for the \'' + name + '\'');
      element.focus();
      ok = false;
    }
    
    if(ok && max_length && element.value.length > max_length)
    {
      alert('You must enter at least ' + parseInt(max_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 OnTextFloat(ok, element, name)
{
  if(ok)
  {
    if(!isFloat(element.value))
    {
      element.focus();
      ok = false;

      if(element.value.length > 0)
      {
        alert('You can only enter numbers for  \'' + name + '\'');
      }
      else if(element.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;
}



