var sErrDay   = "Day is invalid.";
var sErrMonth = "Month is invalid.";
var sErrYear  = "Year is invalid.";

function RestrictToFilled( anInput, aMessage ) {
  anInput.xml_not_empty           = "1";
  anInput.xml_not_empty_message   = aMessage;
}

function setEmptyRestriction( anInput, restricted) {
  if (restricted)
    anInput.xml_not_empty = "1";
  else
    anInput.xml_not_empty = "0";
}

function RestrictToDate( anInput, aMessage) {
  anInput.xml_date         = "1";
  anInput.xml_date_message = aMessage;
}

function RestrictToEMail( anInput, aMessage) {
  anInput.xml_email         = "1";
  anInput.xml_email_message = aMessage;
}

function RestrictToPostCode(anInput, aMessage){
  anInput.xml_postcode         = "1";
  anInput.xml_postcode_message = aMessage;  
}

function RestrictToChar(anInput, aMessage){
  anInput.xml_char         = "1";
  anInput.xml_char_message = aMessage;  
}

function RestrictToCharEx(anInput, aMessage){
  anInput.xml_charex         = "1";
  anInput.xml_charex_message = aMessage;  
}

function RestrictToPhone(anInput, aMessage){
  anInput.xml_phone         = "1";
  anInput.xml_phone_message = aMessage;  
}

function setDateRestriction( anInput, restricted) {
  if (restricted)
    anInput.xml_date = "1";
  else
    anInput.xml_date = "0";
}

function getTagsArray() {

  var result;

  if (document.all) {
    result = document.all;
  }
  else {
    result            = new Array();
    var element_index = 0;
    
    for (var i = 0; i < document.forms.length; i++)
      for (var j = 0; j < document.forms[i].elements.length; j++)
        result[element_index++] = document.forms[i].elements[j];
  }
  return result;
}

function ValidateInputs() {
  var _szvalue;
  coll = getTagsArray();
  for (var i = 0; i < coll.length; i++)
    
    if (typeof(coll[i].value) != "undefined") {

      if (coll[i].xml_not_empty == "1" && coll[i].value == "") {
        alert(coll[i].xml_not_empty_message);
        coll[i].focus();
        return false;
      };

      if (coll[i].xml_date == "1" && (!checkDate(coll[i].value, true, true))) {
        alert(coll[i].xml_date_message);
        coll[i].focus();
        return false;
      }

      if (coll[i].xml_email == "1" && (!MatchEMail(coll[i].value))){
        alert(coll[i].xml_email_message);
        coll[i].focus();
        return false;
      }

      if (coll[i].xml_postcode == "1" && (!MatchPostCode(coll[i].value))){
        alert(coll[i].xml_postcode_message);
        coll[i].focus();
        return false;
      }

      if (coll[i].xml_char == "1" && (!MatchChar(coll[i].value))){
        alert(coll[i].xml_char_message);
        coll[i].focus();
        return false;
      }

      if (coll[i].xml_charex == "1" && (!MatchCharEx(coll[i].value))){
        alert(coll[i].xml_charex_message);
        coll[i].focus();
        return false;
      }

      if (coll[i].xml_phone == "1" && (!MatchPhone(coll[i].value))){
        alert(coll[i].xml_phone_message);
        coll[i].focus();
        return false;
      }

    }
  return true;
}

function clearForm(){
  coll = getTagsArray();
  for (var i = 0; i < coll.length; i++)
    if ( (coll[i].type != "button")&&(coll[i].type != "submit") ) coll[i].value = '';
}

function MatchEMail(anEMail)
{
  re = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
  return anEMail.match(re);
}

function MatchPostCode(anPostCode)
{
  re = /(^[a-zA-Z0-9]{2,4}\s+[a-zA-Z0-9]{3,3}$|^\d{5,5}$)/;
  return anPostCode.match(re);
}

function MatchChar(anChar)
{
  re = /^[a-zA-Z ]+$/;
  return anChar.match(re);
}

function MatchCharEx(anChar)
{
  re = /^[-a-zA-Z0-9_ \-]+$/;
  return anChar.match(re);
}

function MatchPhone(anPhone)
{
  re = /^[0-9-() +]+$/;
  return anPhone.match(re);
}

function MatchNumber(anNumber)
{
  re = /(^\s*$|^\s*-?\s*\d+\s*$)/ /* /^\s*-?\s*\d+\s*$/;*/
  return anNumber.match(re);
}


function RemoveWhitechars(aString)
{
  var re = /\s+/g;
  return aString.replace(re, "");
}

function checkDate(psDate, isRequired, isSilence)  {  
  var lsDay   = psDate.substr(0, 2);
  var lsMonth = psDate.substr(3, 2);
  var lsYear  = psDate.substr(6, 4);
  
  if ( (!isRequired) && (psDate == "") ) return true;


  if ( (checkNum(lsDay, 1, 31, sErrDay, 2, isSilence)) &&
       (checkNum(lsMonth, 1, 12, sErrMonth, 2, isSilence)) &&
       (checkNum(lsYear, 1, 4000, sErrYear, 4, isSilence)) ){

    if (lsMonth == 2){
      var isLeapYear = (
                        ( ((lsYear%4) == 0) && ((lsYear%100) != 0)  ) ||
                        ( ((lsYear%4) == 0) && ((lsYear%100) == 0) && ((lsYear%400) == 0) )
                       );
      if ( (lsDay > 29) || ( (lsDay == 29) && (!isLeapYear) ) ){
        if (!isSilence) alert(sErrDay);
        return false;
      }
    }
    else{
      var is30Days = ( (!(lsMonth - 4)*1) + (!(lsMonth - 6)*1) + 
                       (!(lsMonth - 9)*1) + (!(lsMonth - 11)*1) );
      if ( (is30Days) && (lsDay == 31) ){
        if (!isSilence) alert(sErrDay);
        return false;
      }
    }
  }
  else
    return false;

  return true;
}

