
function jGH() {
	var s = null; 	try { s = new ActiveXObject('Msxml2.XMLHTTP'); return s; } catch (e) {}	try { s = new ActiveXObject('Microsoft.XMLHTTP'); return s; } catch (e) {}	try { s = new XMLHttpRequest(); return s; } catch (e) {}
	return s; 
} 

function jAjaxRequest( u, p){	
	var f = p.onComplete||null; 	var pp = p.parameters||''; 
	var h = jGH(); 	
		h.onreadystatechange = 	function(){	  if (h.readyState==4 || h.readyState=="complete"){  f( h); } };
		h.open( "get", u +"?"+ pp, true);	
		h.send(null );
		return h;
}
function jAjaxUpdater(c, u, p ){

	var pp = p.parameters||''; 	
	var h = jGH(); 	
	h.onreadystatechange = 	function(){  if (h.readyState==4 || h.readyState=="complete"){ document.getElementById( c ).innerHTML = h.responseText; }	} ; 
	h.open( "get", u +"?"+ pp, true);	
	h.send(null);
	return h; 
}
//-----------------------------------------------------
 
//---------------------------------------

var Form = {
  serialize: function(form) {
	if( typeof( form ) == "string" ) form = document.getElementById(form); 	
    var elements = Form.getElements(form );
    var queryComponents = new Array();

    for (var i = 0; i < elements.length; i++) {
		// This IF statement added by Blair Connolly so that disabled form elements would not be submitted,
		//	which is how standard HTML forms function
		if (!elements[i].disabled) {
			  var queryComponent = Form.Element.serialize(elements[i]);
			  if (queryComponent)
				queryComponents.push(queryComponent);
		}
    }

    return queryComponents.join('&');
  },

  getElements: function(form) {
  
    var elements = new Array();

    for (tagName in Form.Element.Serializers) {
      var tagElements = form.getElementsByTagName(tagName);
      for (var j = 0; j < tagElements.length; j++)
        elements.push(tagElements[j]);
    }
    return elements;
  },

  getInputs: function(form, typeName, name) {
    form = document.getElementById(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name)
      return inputs;

    var matchingInputs = new Array();
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) ||
          (name && input.name != name))
        continue;
      matchingInputs.push(input);
    }

    return matchingInputs;
  },

  disable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.blur();
      element.disabled = 'true';
    }
  },

  enable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.disabled = '';
    }
  },

  findFirstElement: function(form) {
    return Form.getElements(form).find(function(element) {
      return element.type != 'hidden' && !element.disabled &&
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    Field.activate(Form.findFirstElement(form));
  },

  reset: function(form) {
    document.getElementById(form).reset();
  }
}

Form.Element = {
  serialize: function(element) {
 			
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter) {
      var key = encodeURIComponent(parameter[0]);
      if (key.length == 0) return;

      if (parameter[1].constructor != Array)
        parameter[1] = [parameter[1]];
		for(var i = 0; i <  parameter[1].length; i ++){
			 parameter[1][i] = key + '=' + encodeURIComponent( parameter[1][i] );	
		}
   		return parameter[1].join('&');
    }
  },

  getValue: function(element) {
    if( typeof( element ) == "string" ) element = document.getElementById(element); 
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter)
      return parameter[1];
  }
}

Form.Element.Serializers = {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'submit':
      case 'hidden':
      case 'password':
      case 'text':
        return Form.Element.Serializers.textarea(element);
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
    }
    return false;
  },

  inputSelector: function(element) {
    if (element.checked)
      return [element.name, element.value];
  },

  textarea: function(element) {
    return [element.name, element.value];
  },

  select: function(element) {
    return Form.Element.Serializers[element.type == 'select-one' ?
      'selectOne' : 'selectMany'](element);
  },

  selectOne: function(element) {
    var value = '', opt, index = element.selectedIndex;
    if (index >= 0) {
      opt = element.options[index];
      value = opt.value;
      if (!value && !('value' in opt))
        value = opt.text;
    }
    return [element.name, value];
  },

  selectMany: function(element) {
    var value = new Array();
    for (var i = 0; i < element.length; i++) {
      var opt = element.options[i];
      if (opt.selected) {
        var optValue = opt.value;
        if (!optValue && !('value' in opt))
          optValue = opt.text;
        value.push(optValue);
      }
    }
    return [element.name, value];
  }
}

//--------------------------------------

