/*
 * Javascript Form Checks
 *
 * @author David Newman
 * @version 1.3.0
 * @copyright 2006 Codegate Ltd.
 *
*/

var normalColour = 'rgb(255,255,255)';
var highlightColour = 'rgb(217,233,255)';
var highlightErrorColour = 'rgb(255,225,175)';
var errorColour = 'rgb(255,170,170)';

function focusFirst(form)
{
  for (var i=0; i<form.length; i++)
  {
    var e = form.elements[i];
    if ((e.type=="text") || (e.type=="textarea"))
    {
      e.focus();
      break;
    }
  }
}

function highlightElementsOnFocus(form)
{
  for (var i=0; i<form.length; i++)
  {
    var e = form.elements[i];
    if ((e.type=="text") || (e.type=="password") || (e.type=="textarea") || (e.type=="file"))
    {
      e.onfocus = function()
      {
        if (this.style.backgroundColor.replace(/ /g, '') == errorColour)
          this.style.background = highlightErrorColour;
        else
          this.style.background = highlightColour;
      }
      e.onblur = function()
      {
        if (this.style.backgroundColor.replace(/ /g, '') == highlightErrorColour)
          this.style.background = errorColour;
        else
          this.style.background = normalColour;
      }
    }
  }
}

function displayError(alreadyShownMsg, formElement, errorMsg)
{
  if (!alreadyShownMsg) alert(errorMsg);
  formElement.style.background = errorColour;
  if (!alreadyShownMsg) formElement.focus();
}

function CheckEmail(foundError, form, elemName)
{
  var valid  = true;
  var element  = form.elements[elemName];
  var AtSym    = element.value.indexOf('@');
  var Period   = element.value.lastIndexOf('.');
  var Space    = element.value.indexOf(' ');
  var Length   = element.value.length - 1;  // Array is from 0 to length-1

  if ((AtSym < 1) ||                     // '@' cannot be in first position
      (Period <= AtSym+1) ||             // Must be atleast one valid char btwn '@' and '.'
      (Period == Length ) ||             // Must be atleast one valid char after '.'
      (Space  != -1))                    // No empty spaces permitted
  {  
    valid = false;
    displayError(foundError, element, 'Please enter a valid e-mail address');
  }
  else
    element.style.background = normalColour;
    
  return foundError || !valid;
}

function CheckPasswords(foundError, form, pass1, pass2)
{
  var pass1Element = form.elements[pass1];
  var pass2Element = form.elements[pass2];
  
  foundError = CheckLength(foundError, form, pass1, 'Password', 6);
  foundError = DoPasswordsMatch(foundError, pass1Element, pass2Element);
  if (foundError)
  {
    pass1Element.value = '';
    pass2Element.value = '';
    pass2Element.style.background = errorColour; // pass1 has already been highlighted as error so just highlight pass2
  }
  else
  {
    pass1Element.style.background = normalColour;
    pass2Element.style.background = normalColour;
  }
  return foundError;
}

function DoPasswordsMatch(foundError, pass1Element, pass2Element)
{
  var valid = true;
  if (pass1Element.value != pass2Element.value)
  {
    valid = false;
    displayError(foundError, pass1Element, 'The passwords do not match');
  }
  return foundError || !valid;
}

function CheckLength(foundError, form, elemName, niceElemName, minLength)
{
  var valid = true;
  var element  = form.elements[elemName];
  if (element.value.length < minLength)
  {
    if (minLength == 1)
      displayError(foundError, element, 'Please enter your '+niceElemName)
    else
      displayError(foundError, element, niceElemName+' must be at least '+minLength+' characters')
      
    valid = false;
  }
  else
    element.style.background = normalColour;
    
  return foundError || !valid;
}

function CheckNumber(foundError, form, elemName, niceElemName, minValue, maxValue)
{
  var valid = true;
  var element = form.elements[elemName];
  if (element.value.length == 0)
  {
    displayError(foundError, element, 'Please enter your '+niceElemName);
    valid = false;
  }
  else if (isNaN(Number(element.value)))
  {
    displayError(foundError, element, niceElemName+' is not a number');
    valid = false;
  }
  else if (Number(element.value) < minValue)
  {
    displayError(foundError, element, niceElemName+' must be at least '+minValue);
    valid = false;
  }
  else if ((maxValue != 0) && (Number(element.value) > maxValue))
  {
    displayError(foundError, element, niceElemName+' must be at most '+maxValue);
    valid = false;
  }
  else
    element.style.background = normalColour;

  return foundError || !valid;
}

function CheckConfirmed(foundError, form, elemName, errorMsg)
{
  var valid = true;
  var element  = form.elements[elemName];
  if (!element.checked)
  {
    valid = false;
    displayError(foundError, element, errorMsg);
  }
  else
    element.style.background = normalColour;
    
  return foundError || !valid;
}

function CheckOptions(foundError, form, elemName, niceElemName)
{
  var valid = false;
  for (var i=0; i < form.elements[elemName].length; i++)
  {
    var element  = form.elements[elemName][i];
    if (element.checked) valid = true;
  }
  if (!valid)
    displayError(foundError, element, 'Please select an option for '+niceElemName);
  else
    element.style.background = normalColour;
  
  return foundError || !valid;
}
