// Global variables

var whitespace = " \t\n\r";
// m is an abbreviation for "missing"

var mPrefix = "You did not enter a value into the "
var mSuffix = " field. This is a required field. Please enter it now."

var iEmail = "This field must be a valid email address (like you@domain.com). Please reenter it now."
var defaultEmptyOK = false;
var pEntryPrompt = "Please enter ";
var sName = "Your Name"
var sEmail = "Your Email"
var sAffiliation = "Your Affilition"
var sPosition = "Your Position"
var sQuestion = "Your Question -- The Most Important Part!"

// Removes all characters which appear in string bag from string s.

function stripCharsInBag (s, bag) {   
  var i;
  var returnString = "";

  // Search through string's characters one by one.
  // If character is not in bag, append to returnString.

  for (i = 0; i < s.length; i++) {
    // Check that current character isn't whitespace.
    var c = s.charAt(i);
    if (bag.indexOf(c) == -1) returnString += c;
  }
  return returnString;
}

// Removes all whitespace characters from s.
// Global variable whitespace (see above)
// defines which characters are considered whitespace.
function stripWhitespace (s) {   
  return stripCharsInBag (s, whitespace)
}

// Check whether string s is empty.
function isEmpty(s) {   
  return ((s == null) || (s.length == 0))
}

// Display data entry prompt string s in status bar.
function promptEntry (s) {   
  window.status = pEntryPrompt + s
}

// Notify user that required field theField is empty.
// String s describes expected contents of theField.value.
// Put focus in theField and return false.
function warnEmpty (theField, s) {   
  theField.focus()
  alert(mPrefix + s + mSuffix)
  return false
}

// Notify user that contents of field theField are invalid.
// String s describes expected contents of theField.value.
// Put select theField, pu focus in it, and return false.
function warnInvalid (theField, s) {   
  theField.focus()
  //theField.select()
  alert(s)
  return false
}

// isEmail (STRING s [, BOOLEAN emptyOK]) 
// Email address must be of form a@b.c -- in other words:
// * there must be at least one character before the @
// * there must be at least one character before and after the .
// * the characters @ and . are both required
// For explanation of optional argument emptyOK,
// see comments of function isInteger.

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;
    
  // does it contain whitespace?
    
  // 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;
}

// Returns true if string s is empty or 
// whitespace characters only.
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;
}

// checkString (TEXTFIELD theField, STRING s, [, BOOLEAN emptyOK==false])
//
// Check that string theField.value is not all whitespace.
//
// For explanation of optional argument emptyOK,
// see comments of function isInteger.

function checkString (theField, s, emptyOK)
{   // Next line is needed on NN3 to avoid "undefined is not a number" error
    // in equality comparison below.
    if (checkString.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) 
       return warnEmpty (theField, s);
    else return true;
}

// checkEmail (TEXTFIELD theField [, BOOLEAN emptyOK==false])
//
// Check that string theField.value is a valid Email.
//
// For explanation of optional argument emptyOK,
// see comments of function isInteger.

function checkEmail (theField, emptyOK)
{   if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
    theField.value = stripWhitespace ( theField.value );
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else if (!isEmail(theField.value, false)) 
       return warnInvalid (theField, iEmail);
    else return true;
}


function checkPosition(theSelect) {
    var sPosVal = theSelect.options[theSelect.selectedIndex].value;
    if ( sPosVal.indexOf("nil") > -1 ) {
      return warnInvalid(theSelect, "Please select a position from the list.");
    } else {
      return true;
    }
  }
  
  function checkQuestion(theQuestion) {
    var sQuestionVal = theQuestion.value;
    if ( isWhitespace(theQuestion.value) ) return warnEmpty (theQuestion,"question");
    if(theQuestion.value == "-- Enter your question here --")
        return warnInvalid(theQuestion, "Please ask a question!");
    else
        return true;
  }
  
  function validateInfo(form) {
    return (
      checkString(form.elements["name"],sName) &&
      checkEmail(form.elements["email"]) &&
      checkPosition(form.elements["position"]) &&
      checkQuestion(form.elements["question"])
    )
  }
  
// Get checked value from radio button.
function getRadioButtonValue (radio)
{   for (var i = 0; i < radio.length; i++)
    {   if (radio[i].checked) { break }
    }
    return radio[i].value
}