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;
}


/* Client-side access to querystring name=value pairs
	Version 1.2.3
	22 Jun 2005
	Adam Vandenberg
*/
function Querystring(qs) { // optionally pass a querystring to parse
	this.params = new Object()
	this.get=Querystring_get
	
	if (qs == null)
		qs=location.search.substring(1,location.search.length)

	if (qs.length == 0) return

// Turn <plus> back to <space>
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
	qs = qs.replace(/\+/g, ' ')
	var args = qs.split('&') // parse out name/value pairs separated via &
	
// split out each name=value pair
	for (var i=0;i<args.length;i++) {
		var value;
		var pair = args[i].split('=')
		var name = unescape(pair[0])

		if (pair.length == 2)
			value = unescape(pair[1])
		else
			value = name
		
		this.params[name] = value
	}
}

function Querystring_get(key, default_) {
	// This silly looking line changes UNDEFINED to NULL
	if (default_ == null) default_ = null;
	
	var value=this.params[key]
	if (value==null) value=default_;
	
	return value
}



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(checkbox.length)
    ok = OnCheckboxMultiple(ok, checkbox, message);
  else
    ok = OnCheckboxSingle(ok, checkbox, message);
    
  return ok;
}


function OnCheckboxMultiple(ok, checkbox, message)
{
  var checked, i;
  checked = false;
  
  if(ok)
  {
  
    for(i = 0; i < checkbox.length; i++)
    {
      if(checkbox[i].checked)
      {
        checked = true;
        break;
      }
    }
    
    if(!checked)
    {
      ok = false;
      alert('An option for \'' + message + '\' must be selected');
    }
    
  }
  
  return ok;
}


function OnCheckboxSingle(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 only enter 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 OnImageOK(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.image_types[2] = 'gif';
            
      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[0].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 no more than ' + 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;
}


