function checkForm(frm) {
  var required = "";
  var message = "";
  var result = true;
  var val;
  try {
  for(i=0;i<frm.elements.length;i++) {
    var rel = frm.elements[i].getAttribute("rel");
    var element = frm.elements[i];
    if(element.name=='customcountry') {
      if(document.getElementById('country').value == 'Other' && element.value == '') {
        required += "Other country\n";
        result = false;
      }
    }
    if(element.name=='customstate') {
      if(document.getElementById('state').value == 'Other' && element.value == '') {
        message += "Other state\n";
        result = false;
      }
    }
    if(rel!=null) { 
      if(rel.indexOf("email")!=-1) {
        if(element.value!=="") {
        var res = emailCheck(element.value);
          if(!res) {
            message += "- Incomplete email address\n";
            result = false;
          }
        }
      }
      if(rel.indexOf("zip")!=-1) {
        if(element.value!=="") {
          val=element.value;
          var ctry = frm.country.selectedIndex;
          if(ctry == 1) {
            var reZip = new RegExp(/(^\d{5}$)/);
            if (!val.match(reZip)) {
              message += "- Zip code is not valid\n";
              result = false;
            }
          }
        }
      }
      if(rel.indexOf("phone")!=-1) {
        if(element.value!=="") {
          val=element.value;
          var re = new RegExp(/^([0-9]{0,5}( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4})$/);
          if (!val.match(re)) {
            message += "- Phone number is not valid\n";
            result = false;
          }
        }
      }
      if(rel.indexOf("http")!=-1) {
        if(element.value!=="") {
          val=element.value;
          if(val.indexOf("http://") == 0) {
            element.value = val.substring("http://".length);
          }
        }
      }
      if(rel.indexOf("state")!=-1) {
          val=element.value;
          var ctry = frm.country.selectedIndex;
          switch(ctry) {
          case 1: // US
            if(element.selectedIndex > 59 || element.selectedIndex == 0) {
              message += "- State is not valid\n";
              result = false;
            }
            break;
          case 2: // Canada
            if(element.selectedIndex < 60 || element.selectedIndex == 0) {
              message += "- State is not valid\n";
              result = false;
            }
            break;
          case 3: // Other
            if(element.value != 'Other') {
              message += "- State is not valid\n";
              result = false;
            }
            break;
          }
      }
      if(rel.indexOf("required")!=-1) {
        if(rel.indexOf("state")!=-1) {
          var ctry = frm.country.selectedIndex;
          if(ctry==3) continue;
        }
        if(element.value=="" || element.value=="selected") {
          required += "     "+element.getAttribute("title") + "\n";
          result = false;
        }
      }
    }
  }
  } catch(ex) {alert(ex.message);}
  if(!result)
    alert((required!==""? ("The following fields are required:\n"+required):"")+message);
  if(result) {
    cookieForms('save', frm.getAttribute("name"));
    // get(frm);
  }
  return result;
}

function emailCheck (emailStr) {
try {
var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + specialChars + "\]"
var quotedUser="(\"[^\"]*\")"
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars + '+'
var word="(" + atom + "|" + quotedUser + ")"
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
    return false
}
var user=matchArray[1]
var domain=matchArray[2]
if (user.match(userPat)==null) {
  return false
}
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
      for (var i=1;i<=4;i++) {
        if (IPArray[i]>255) {
          return false
        }
    }
    return true
}
var domainArray=domain.match(domainPat)
if (domainArray==null) {
    return false
}
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 ||
    domArr[domArr.length-1].length>4) {
    return false
}
if (len<2) {
   return false
}
return true
} catch(e){ return false}
}

var expDays = 3650;
var exp = new Date(); 
exp.setTime(exp.getTime() + (expDays*24*60*60*1000));

function getCookieVal (offset) {  
  var endstr = document.cookie.indexOf (";", offset);  
  if (endstr == -1) { endstr = document.cookie.length; }
  return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name) {  
  var arg = name + "=";  
  var alen = arg.length;  
  var clen = document.cookie.length;  
  var i = 0;  
  while (i < clen) {    
    var j = i + alen;    
    if (document.cookie.substring(i, j) == arg) return getCookieVal (j);    
    i = document.cookie.indexOf(" ", i) + 1;    
    if (i == 0) break;   
  }  
  return null;
}

function SetCookie (name, value) {  
  var argv = SetCookie.arguments;  
  var argc = SetCookie.arguments.length;  
  var expires = (argc > 2) ? argv[2] : null;  
  var path = (argc > 3) ? argv[3] : null;  
  var domain = (argc > 4) ? argv[4] : null;  
  var secure = (argc > 5) ? argv[5] : false;  
  document.cookie = name + "=" + escape (value) + 
  ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
  ((path == null) ? "; path=/" : ("; path=" + path)) +  
  ((domain == null) ? "" : ("; domain=" + domain)) +    
  ((secure == true) ? "; secure" : "");
}

// cookieForms saves form content of a page.
// use the following code to call it:
//  <body onLoad="cookieForms('open', 'form_1', 'form_2', 'form_n')" onUnLoad="cookieForms('save', 'form_1', 'form_2', 'form_n')">
// It works on text fields and dropdowns in IE 5+
// It only works on text fields in Netscape 4.5


function cookieForms() {  
try {
  var mode = cookieForms.arguments[0];
  for(f=1; f<cookieForms.arguments.length; f++) {
    var formName = cookieForms.arguments[f];
    if(mode == 'open') {    
      var cookieValue = GetCookie('saved_'+formName);
      if(cookieValue != null && document[formName] != null) {
        var cookieArray = cookieValue.split('#cf#');
        
          for(i=0; i<cookieArray.length; i++) {
            var valueName = cookieArray[i].split('#=#');
            var elem = document[formName].elements[valueName[0]];
            if(valueName.length == 2 && elem != null) {
            if(elem.type == 'select-one') { elem.value = valueName[1]; if(elem.selectedIndex == -1) elem.selectedIndex = 0;}
            else if((valueName[1] == 'cbtrue') || (valueName[1] == 'rbtrue')) { elem.checked = true; }
            else if((valueName[1] == 'cbfalse') || (valueName[1] == 'rbfalse')) { elem.checked = false; }
            else if(fieldType != 'hidden' && fieldType != 'submit' && fieldType != 'reset') { elem.value = valueName[1]; }
          }
        }
      }
      if(document.getElementById('customcountry')!=null && document.getElementById('country')!=null)
        document.getElementById('customcountry').style.display=document.getElementById('country').selectedIndex==3? 'inline': 'none';
      if(document.getElementById('customstate')!=null && document.getElementById('state')!=null)
        document.getElementById('customstate').style.display=document.getElementById('state').value=='Other'? 'inline': 'none';
    }
    if(mode == 'save') {    
      var cookieValue = '';
//      var passValue = "";
      for(i=0; i<document[formName].elements.length; i++) {
        var passValue = "";
        var fieldType = document[formName].elements[i].type;
        if(fieldType == 'password') { passValue = ''; }
        else if(fieldType == 'checkbox') { passValue = 'cb'+document[formName].elements[i].checked; }
        else if(fieldType == 'radio') { passValue = 'rb'+document[formName].elements[i].checked; }
//        else if(fieldType == 'select-one') { passValue = document[formName].elements[i].options.selectedIndex; }
        else if(fieldType != 'hidden' && fieldType != 'submit' && fieldType != 'reset') { passValue = document[formName].elements[i].value; }
        if(passValue !== '')
          cookieValue = cookieValue + document[formName].elements[i].name + "#=#" +  passValue + '#cf#';
      }
      cookieValue = cookieValue.substring(0, cookieValue.length-4); // Remove last delimiter
      SetCookie('saved_'+formName, cookieValue, exp);   
    }       
  }
} catch(e) {alert(e.message);}
}
//  End -->


function makeRequest(url, parameters) {
  try {
  var http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
            // set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
      http_request.open('GET', url + parameters, true);
      http_request.send(null);
    } catch(e) {alert(e.message);}
}

function get(obj) {
try {
var getstr = "?";
  for (var i=0; i<obj.elements.length; i++) {
    var name = obj.elements[i].name;
    switch(obj.elements[i].type) {
      case 'select-multiple': 
        for(var x=0; x < obj.elements[i].length; x++) 
          if(obj.elements[i][x].selected == true) 
            getstr += name + "=" + obj.elements[i][x].value + "&"; 
        break;
      case 'checkbox':
        if (obj.elements[i].checked) {
          getstr += name + "=" + obj.elements[i].value + "&";
        } else {
          getstr += name + "=&";
        }
      break;
      case "submit":
        break;
      case "reset":
        break;
      default: getstr += name + "=" + obj.elements[i].value + "&";
    }
  }
  makeRequest('/email/send.asp', getstr);
  } catch(e) { alert(e.message);}
}

function makeGETRequest(url, parameters, callback) {
      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
                // set type accordingly to anticipated content type
            // http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         return false;
      }
      
      http_request.onreadystatechange = function() { eval(callback)(http_request) };
      http_request.open('GET', url+parameters, true);
      http_request.send(null);
      return true;
   }

function makePlainGETRequest(url, parameters, callback) {
      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
                // set type accordingly to anticipated content type
             http_request.overrideMimeType('text/xml');
            //http_request.overrideMimeType('text/plain');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         return false;
      }
      
      http_request.onreadystatechange = function() { eval(callback)(http_request) };
      http_request.open('GET', url+parameters, true);
      http_request.send(null);
      return true;
   }
