	function GetXmlHttpObject()
	{
	  var xmlHttp=null;
	  try
		 {
		 // Firefox, Opera 8.0+, Safari
		 xmlHttp=new XMLHttpRequest();
		 }
	  catch (e)
		 {
		 // Internet Explorer
		 try
			{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}
		 catch (e)
			{
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
		 }
	  return xmlHttp;
	}
	
	
	
	// elementID: target div element ID (where the new content will go)
	// HTMLsource: the asp script that will return the new content
	// async: set to false to wait for the server response before continuing (do this when lots of AJAX calls
   // are being made.  if single calls then set to true)
	function getNewHTMLContent(elementID,HTMLsource,async)
	{		
	 xmlHttp = GetXmlHttpObject();	
	 xmlHttp.onreadystatechange=function()
		{
		if(xmlHttp.readyState==4)
		  {
		  document.getElementById(elementID).innerHTML=xmlHttp.responseText;
		  //alert(xmlHttp.responseText);
		  }
		}
				
	 xmlHttp.open("GET",HTMLsource,async);
	 xmlHttp.send(null);	  
  }
  
	function submitFormByAjax(elementID,HTMLsource,async,theForm)
	{ var sendThis = getFormValues(theForm);
	  //alert(sendThis);
	 xmlHttp = GetXmlHttpObject();						
	 xmlHttp.onreadystatechange=function()
		{
		if(xmlHttp.readyState==4)
		  {
		  document.getElementById(elementID).innerHTML=xmlHttp.responseText;
		  //alert(xmlHttp.responseText);
		  }
		}
		
	 xmlHttp.open("POST",HTMLsource,async);
	 xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
	 xmlHttp.send(sendThis);	  
  }
  
  function getFormValues(fobj){ 
		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;
			default:
			  	  // alert(fobj.elements[i].name + " - " + fobj.elements[i].type);
					break;
			 } 
		} 
		str = str.substr(0,(str.length - 1)); 
		return str; 
	}
	
	function clearContents(elementID){
		document.getElementById(elementID).innerHTML='';
	}
	
	function setContents(elementID,content){
		document.getElementById(elementID).innerHTML= content;
	}	
	

  
	//if these generic functions become ineffective for the number of calls made then combining the two functions in a single
	// function for each required call (eg events, documents, newsfeeds, etc)