function GetXmlHttpObject()
{
  var xmlhttp, bComplete = false;
  //try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  //catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  //catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  //    catch (e) { xmlhttp = false; } 
  //}


  if (window.XMLHttpRequest) {
      xmlhttp = new XMLHttpRequest();
  }
  else if (window.ActiveXObject) {
      try {
          xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e) {
          try {
              xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
          }
          catch (e) { }
      }
  }




  if (!xmlhttp) {
      return null;
  }
  
  
  this.connect = function(sURL, sMethod, sVars, fnDone,async)
  {
    if (!xmlhttp) return false;
    bComplete = false;
    sMethod = sMethod.toUpperCase();
    try {
      if (sMethod == "GET")
      {
        xmlhttp.open(sMethod, sURL+"?"+sVars, async);
        sVars = "";
      }
      else
      {
        xmlhttp.open(sMethod, sURL, async);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type",
          "application/x-www-form-urlencoded");
      }
      xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4 && !bComplete)
        {
          bComplete = true;
          fnDone(xmlhttp);
        }};
      xmlhttp.send(sVars);
		if (xmlhttp.onreadystatechange == null){ /*Firefox does not trigger xmlhttp.onreadystatechange  when async=false*/
        if (xmlhttp.readyState == 4 && !bComplete)
        {
          bComplete = true;
          fnDone(xmlhttp);
        }};
    }
    catch(z) { return false; }
    return true;
  };
  return this;
}


// doAJAXCall : Generic AJAX Handler, used with GetXmlHttpObject
// Author : Bryce Christensen (www.esonica.com)
// PageURL : the server side page we are calling
// ReqType : either POST or GET, typically POST
// PostStr : parameter passed in a query string format 'param1=foośm2=bar'
// FunctionName : the JS function that will handle the response

var doAJAXCall = function (PageURL, ReqType, PostStr, FunctionName,async) {
	// create the new object for doing the XMLHTTP Request
	var myConn = new GetXmlHttpObject();
	PostStr = addAntiCacheToParams(PostStr,true);
	// check if the browser supports it
	if (myConn)	{
	    myConn.connect('' + PageURL + '', '' + ReqType + '', '' + PostStr + '', FunctionName, async);    
	} 
	else {
	    // Not support by this browser, alert the user
	    alert("XMLHTTP not available. Try a newer/better browser, this application will not work!");   
	}
}


  function getFormValues(fobj){
		/*	convert form params to string for ajax [JH]*/
		var str = ""; 
		var valueArr = null; 
		var val = ""; 
		var cmd = ""; 
		for(var i = 0;i < fobj.elements.length;i++){ 
			 switch(fobj.elements[i].type) 
			 { 
			 case "text": 
					str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&"; 
					break; 
			case "textarea": 
					str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&"; 
					break;
		   case "select-one": 
					str += fobj.elements[i].name + "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&"; 
					break;
			case "hidden": 
					str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&"; 
					break;
			case "checkbox":
			case "radio":
				if(fobj.elements[i].checked) str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value)+ "&";
			default:
			  	  // alert(fobj.elements[i].name + " - " + fobj.elements[i].type);
					break;
			 } 
		} 
		str = str.substr(0,(str.length - 1)); 
		return str; 
	}
	
	
	function addAntiCache(theURL,antiCache){
		/*addAntiCache(string, boolean)*/
		/* function to add a timestamp to the end of a url [JH] */
		var outputURL;
		if (antiCache){
			var theDate = new Date();
			var dummyData = String(theDate.getTime());
			if (theURL.indexOf("?") > -1){
				outputURL = theURL+'&nc=' + dummyData;
			}else{
				outputURL = theURL+'?nc=' + dummyData ;
			}
		}				
		else{
			outputURL = theURL;
		}

		return outputURL;
	}	
	
	function addAntiCacheToParams(theParamString,antiCache){
		/*addAntiCache(string, boolean)*/
		/* function to add a timestamp to the end of a url [JH] */
		var outputString;
		if (antiCache){
			var theDate = new Date();
			var dummyData = String(theDate.getTime());
			if (theParamString.length>1){
				outputString = theParamString+'&nc=' + dummyData;
			}else{
				outputString = 'nc=' + dummyData ;
			}
		}				
		else{
			outputString = theParamString;
		}
		return outputString;
	}		

	
	function clearContents(elementID){
		document.getElementById(elementID).innerHTML='';
	}

	function setContents(elementID, content) {
	    //alert(elementID);
		document.getElementById(elementID).innerHTML= content;
	}
