// Set character sets:
var numeric                = "0123456789";
var numericCalculate       = "0123456789+-*/= ";
var numericTelephone       = "0123456789+() ";
var numericTime            = "0123456789:";
var hexadecimalLower       = "abcdef0123456789";
var hexadecimalUpper       = "ABCDEF0123456789";
var hexadecimalBoth        = "abcdefABCDEF0123456789";
var alphanumericEmail      = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-!$%^&*+={}@~#|.?_/\'`";
var alphanumericLower      = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿ0123456789";
var alphanumericLowerSpace = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿ0123456789\n\r\t ";
var alphanumericUpper      = "ABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ0123456789";
var alphanumericUpperSpace = "ABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ0123456789\n\r\t ";
var alphanumericBoth       = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ0123456789";
var alphanumericBothSpace  = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ0123456789\n\r\t ";
var alphaLower             = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿ";
var alphaLowerSpace        = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿ\n\r\t ";
var alphaUpper             = "ABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ";
var alphaUpperSpace        = "ABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ\n\r\t ";
var alphaBoth              = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ";
var alphaBothSpace         = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ\n\r\t ";
var alphaNameSpace         = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ-\`\'\n\r\t ";
var fullSet                = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿABCDEFGHIJKLMONPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ0123456789-!£$%^&*()+={}[]:;@~#|<>,.?_/\\`\'\"";
var fullSetSpace           = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿABCDEFGHIJKLMONPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ0123456789-!£$%^&*()+={}[]:;@~#|<>,.?_/\\`\'\"\n\r\t ";
var fullSetSecure          = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿABCDEFGHIJKLMONPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ0123456789-!£$%^&*()+={}[]:;@~#|<>,.?_/\\`";
var fullSetSecureSpace     = "abcdefghijklmnopqrstuvwxyzƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿABCDEFGHIJKLMONPQRSTUVWXYZŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ0123456789-!£$%^&*()+={}[]:;@~#|<>,.?_/\\`\n\r\t ";


// abcdefghijklmnopqrstuvwxyz
// ƒšœžŞßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿ
// ABCDEFGHIJKLMONPQRSTUVWXYZ
// ŠŒŽŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİ
// 0123456789
// -!£$%^&*()+={}[]:;@~#|<>,.?_/\\
// \'\"
// \n\r\t


// Check if something was entered in the input field:
function validateTextNotEmpt(form,formField,formFieldDesc)
{
  if (document.forms[form].elements[formField].value == "")
  {
    alert('You must enter something into the \"' + formFieldDesc + '\" field!');
    document.forms[form].elements[formField].focus();
    return (false);
  }
  else
  {
    return (true);
  }
}


// Check if there are too few characters in the input field:
function validateTextMinimum(form,formField,formFieldDesc,formFieldMinChar)
{
  if (document.forms[form].elements[formField].value.length < formFieldMinChar)
  {
    alert('You must enter something into the \"' + formFieldDesc + '\" field, containing no less than ' + formFieldMinChar + ' characters!');
    document.forms[form].elements[formField].focus();
    return (false);
  }
  else
  {
    return (true);
  }
}


// Check if there are too many characters in the input field:
function validateTextMaximum(form,formField,formFieldDesc,formFieldMaxChar)
{
  if (document.forms[form].elements[formField].value.length > formFieldMaxChar)
  {
    alert('You must enter something into the \"' + formFieldDesc + '\" field, containing no more than ' + formFieldMaxChar + ' characters!');
    document.forms[form].elements[formField].focus();
    return (false);
  }
  else
  {
    return (true);
  }
}


// Check if there is an email address in the input field:
function validateTextIsEmail(form,formField,formFieldDesc)
{
  var textCheck = false;
  // Check if something was entered in the input field:
  if (document.forms[form].elements[formField].value != "")
  {
    with (document.forms[form].elements[formField])
    {
      // Check that the input field contains at least an @ sign and a dot (.).
      // The @ must not be the first character of the email address.
      // The last dot must at least be one character after the @ sign:
      var atpos = value.indexOf("@");
      var dotpos = value.lastIndexOf(".");
      if (atpos < 1 || dotpos - atpos < 2)
      {
        textCheck = true;
      }
    }
  }
  if (textCheck)
  {
    alert('You must enter something into the \"' + formFieldDesc + '\" field, in the form of a valid email address!\n\nExample: user@domain.com');
    document.forms[form].elements[formField].focus();
    return (false);
  }
  else
  {
    return (true);
  }
}


// Check if there are illegal characters in the input field:
function validateTextContain(form,formField,formFieldDesc,formChar)
{
  var textCheck = false;
  // Set the most common character sets:
  if      (formChar == "numeric")                { formChar = numeric; }
  else if (formChar == "numericCalculate")       { formChar = numericCalculate; }
  else if (formChar == "numericTelephone")       { formChar = numericTelephone; }
  else if (formChar == "numericTime")            { formChar = numericTime; }
  else if (formChar == "hexadecimalLower")       { formChar = hexadecimalLower; }
  else if (formChar == "hexadecimalUpper")       { formChar = hexadecimalUpper; }
  else if (formChar == "hexadecimalBoth")        { formChar = hexadecimalBoth; }
  else if (formChar == "alphanumericEmail")      { formChar = alphanumericEmail; }
  else if (formChar == "alphanumericLower")      { formChar = alphanumericLower; }
  else if (formChar == "alphanumericLowerSpace") { formChar = alphanumericLowerSpace; }
  else if (formChar == "alphanumericUpper")      { formChar = alphanumericUpper; }
  else if (formChar == "alphanumericUpperSpace") { formChar = alphanumericUpperSpace; }
  else if (formChar == "alphanumericBoth")       { formChar = alphanumericBoth; }
  else if (formChar == "alphanumericBothSpace")  { formChar = alphanumericBothSpace; }
  else if (formChar == "alphaLower")             { formChar = alphaLower; }
  else if (formChar == "alphaLowerSpace")        { formChar = alphaLowerSpace; }
  else if (formChar == "alphaUpper")             { formChar = alphaUpper; }
  else if (formChar == "alphaUpperSpace")        { formChar = alphaUpperSpace; }
  else if (formChar == "alphaBoth")              { formChar = alphaBoth; }
  else if (formChar == "alphaBothSpace")         { formChar = alphaBothSpace; }
  else if (formChar == "alphaNameSpace")         { formChar = alphaNameSpace; }
  else if (formChar == "fullSet")                { formChar = fullSet; }
  else if (formChar == "fullSetSpace")           { formChar = fullSetSpace; }
  else if (formChar == "fullSetSecure")          { formChar = fullSetSecure; }
  else if (formChar == "fullSetSecureSpace")     { formChar = fullSetSecureSpace; }
  else                                           { formChar = formChar; }
  // Check formField for illegal characters from formChar:
  for (increment = 0; increment < document.forms[form].elements[formField].value.length; increment ++)
  {
    var ch = document.forms[form].elements[formField].value.charAt(increment);
    var increment;
    var position;
    for (position = 0; position < formChar.length; position ++)
    {
      if (ch == formChar.charAt(position))
      {
        break;
      }
    }
    if (position == formChar.length)
    {
      textCheck = true;
      break;
    }
  }
  if (textCheck)
  {
    alert('You must enter something into the \"' + formFieldDesc + '\" field, using only valid characters!\n\nExample: ' + formChar);
    document.forms[form].elements[formField].focus();
    return (false);
  }
  else
  {
    return (true);
  }
}


// Check if a tick has been entered in the input field:
function validateCheckbox(form,formField,formFieldDesc)
{
  if (!document.forms[form].elements[formField].checked)
  {
    alert('You must check the \"' + formFieldDesc + '\" box!');
    document.forms[form].elements[formField].focus();
    return (false);
  }
  else
  {
    return (true);
  }
}


// Check if a radio button has been selected in the input field:
function validateRadio(form,formField,formFieldDesc)
{
  var radioSelected = false;
  var increment;
  for (increment = 0; increment < document.forms[form].elements[formField].length; increment ++)
  {
    if (document.forms[form].elements[formField][increment].checked)
    {
      radioSelected = true;
    }
  }
  if (!radioSelected)
  {
    alert('You must choose one of the \"' + formFieldDesc + '\" options!');
    return (false);
  }
  else
  {
    return (true);
  }
}


// Check if an option has been selected:
function validateSelectChoose(form,formField,formFieldDesc)
{
  if (document.forms[form].elements[formField].selectedIndex < 0)
  {
    alert('You must choose one of the \"' + formFieldDesc + '\" options!');
    document.forms[form].elements[formField].focus();
    return (false);
  }
  else
  {
    return (true);
  }
}


// Check if an option, other than the first one, has been selected:
function validateSelectSecond(form,formField,formFieldDesc)
{
  if (document.forms[form].elements[formField].selectedIndex == 0)
  {
    alert('You cannot choose the first of the \"' + formFieldDesc + '\" options!');
    document.forms[form].elements[formField].focus();
    return (false);
  }
  else
  {
    return (true);
  }
}


// Textarea character counter:
function characterCount(textEntered,maxLength,ID)
{
  // Can the browser handle DOM objects?
  if (document.getElementById)
  {
    // Yes, the browser can handle DOM objects, so continue:
    var length = new String(textEntered.value).length;
    // Has a maximium length been supplied?
    if (maxLength > 0)
    {
      // Has the maximum been exceded?
      if (maxLength < length)
      {
        document.getElementById(ID).innerHTML = '(<strong>Warning:</strong> You have exceded the maximum of ' + maxLength + ' characters!)';
      }
      else
      {
        document.getElementById(ID).innerHTML = '(' + length + ' characters entered, with a maximum of ' + maxLength + ' characters!)';
      }
    }
    else
    {
      document.getElementById(ID).innerHTML = '(' + length + ' characters entered!)';
    }
  }
}