function createRequest() {
  try {
    var request = new XMLHttpRequest();
  } catch(tryMS) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(otherMS) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(failed) {
        request = null;
      }
    }
  }
  return request;
}

function getActivatedObject(e) {
  var obj;
  if (!e) {
    // early version of IE
    obj = window.event.srcElement;
  } else if (e.srcElement) {
    // IE 7 or later
    obj = e.srcElement;
  } else {
    // DOM Level 2 browser
    obj = e.target;
  }
  return obj;
}

function addEventHandler(obj, eventName, handler) {
  if (document.attachEvent) {
    obj.attachEvent("on" + eventName, handler);
  } else if (document.addEventListener) {
    obj.addEventListener(eventName, handler, false);
  }
}

function isArray(arg) {
  if (typeof arg == 'object') {
    var criteria = arg.constructor.toString().match(/array/i);
    return (criteria != null);
  }
  return false;
}

function fieldIsFilled(e) {
  var me = getActivatedObject(e);
  if (me.value=="") {
    warn(me, "required");
  } else
    unwarn(me, "required");
}

function eMailIsProper(e) {
  var me = getActivatedObject(e);
  if (!/^[\w\.-_\+]+@[\w-]+(\.\w{2,4})+$/.test(me.value)) {
    warn(me, "format");
  } else
    unwarn(me, "format");
}

function warn(field, warningType) {
  var parentNode = field.parentNode;
  var warning = eval('warnings.' + field.id + '.' + warningType);
  if (parentNode.getElementsByTagName("p").length==0) {
    var p = document.createElement("p");
    field.parentNode.appendChild(p);
    var warningNode = document.createTextNode(warning);
    p.appendChild(warningNode);
  } else {
    var p = parentNode.getElementsByTagName("p")[0];
    p.childNodes[0].nodeValue = warning;
  }
  document.getElementById("submitBtn").disabled = true;
}

function unwarn(field, warningType) {
  if (field.parentNode.getElementsByTagName("p").length > 0) {
    var p = field.parentNode.getElementsByTagName("p")[0];
    var currentWarning = p.childNodes[0].nodeValue;
    var warning = eval('warnings.' + field.id + '.' + warningType);
    if (currentWarning == warning) {
      field.parentNode.removeChild(p);
    }
  }
  var fieldsets =
    document.getElementById("DefaultContent").getElementsByTagName("fieldset");
  for (var i=0; i<fieldsets.length; i++) {
    var fieldWarnings = fieldsets[i].getElementsByTagName("p").length;
    if (fieldWarnings > 0) {
      document.getElementById("submitBtn").disabled = true;
      return;
    }
  }
  document.getElementById("submitBtn").disabled = false;
}
