/**
	These are the ajax functions I modified and use the most.
*/

//---------------------------------- method 1

/*	AJAX:: with callback function
	Example:
	// Just a stub function we'll tell ajaxObject to call when it's done
	// callback functions get responseText, and responseStat respectively
	// in their arguments.
	function fin(responseTxt,responseStat) {  
		alert(responseStat+' - '+responseTxt);
	}
	
	// create a new ajaxObject, give it a url it will be calling and
	// tell it to call the function "fin" when its got data back from the server.
	var test1 = new ajaxObject('http://someurl.com/server.cgi',fin);    test1.update();                
	// create a new ajaxObject, give it a url and tell it to call fin when it
	// gets data back from the server.  When we initiate the ajax call we'll
	// be passing 'id=user4379' to the server.              
	var test2 = new ajaxObject('http://someurl.com/program.php',fin);    
	test2.update('id=user4379');                
	// create a new ajaxObject but we'll overwrite the callback function inside
	// the object to more tightly bind the object with the response hanlder.
	var test3 = new ajaxObject('http://someurl.com/prog.py', fin);    
	test3.callback = function (responseTxt, responseStat) {      
		// we'll do something to process the data here.      
		document.getElementById('someDiv').innerHTML=responseTxt;    
	}    
	test3.update('coolData=47&userId=user49&log=true');                 
	// create a new ajaxObject and pass the data to the server (in update) as
	// a POST method instead of a GET method.
	var test4 = new ajaxObject('http://someurl.com/postit.cgi', fin);    
	test4.update('coolData=47&userId=user49&log=true','POST'); 
*/
	function ajaxObject(url, callbackFunction) {  
		var that=this;        
		this.updating = false;  
		this.abort = function() {    
			if (that.updating) {      
				that.updating=false;      
				that.AJAX.abort();      
				that.AJAX=null;    
			}  
		}  
		this.update = function(passData,postMethod) {     
			if (that.updating) { 
				return false; 
			}    
			that.AJAX = null;                              
			if (window.XMLHttpRequest) {                    
				that.AJAX=new XMLHttpRequest();                  
			} else {                                        
				that.AJAX=new ActiveXObject("Microsoft.XMLHTTP");    
			}                                                 
			if (that.AJAX==null) {                                   
				return false;                                   
			} else {      
				that.AJAX.onreadystatechange = function() {          
					if (that.AJAX.readyState==4) {                       
						that.updating=false;                          
						that.callback(that.AJAX.responseText,that.AJAX.status,that.AJAX.responseXML);                  
						that.AJAX=null;                                                 
					}                                                            
				}                                                              
				that.updating = new Date();                                    
				if (/post/i.test(postMethod)) {        
					var uri=urlCall+'?'+that.updating.getTime();        
					that.AJAX.open("POST", uri, true);        
					that.AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");        
					that.AJAX.send(passData);      
				} else {        
					var uri=urlCall+'?'+passData+'&timestamp='+(that.updating.getTime());         
					that.AJAX.open("GET", uri, true);                                     
					that.AJAX.send(null);                                               
				}                    
				return true;                                                 
			}                                                                             
		}  
		var urlCall = url;          
		this.callback = callbackFunction || function () { };
	}

//---------------------------------------  method 2 

/* ajax method
    @param:  url - server script name
					method - POST or GET
					asyn - true for asynchronize
					data - null for nothing, or any data to pass to the server script.  If the method
					outputObj - DOM object for data to be returned.
	Example:
	var temp = "userid=" + "12345";
	ajaxFunction("myserver.php", "GET", true, temp, document.getElementById("showdiv"), "html");
	ajaxFunction("myserver.php", "GET", true, temp, document.getElementById("textfield01"), "value");
*/
	function ajaxFunction(url, method, asyn, data, outputObj, fieldType)
	{
		var xmlHttp;
		xmlHttp=GetXmlHttpObject();
		if (xmlHttp==null)
		{
			alert ("Your browser does not support AJAX!");
			return;
		}
		
		if( method.toUpperCase() == "POST")
		{
			xmlHttp.onreadystatechange= function ()
			{
				stateChanged(xmlHttp, outputObj, fieldType);
			}
			xmlHttp.open("POST", url ,asyn);
			xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			xmlHttp.setRequestHeader("Content-length", data.length);
			xmlHttp.setRequestHeader("Connection", "close");
			xmlHttp.send(data);  
	
		} else if (method.toUpperCase() == "GET")
		{
			if (data==null) data = "";
			url = url + "?" + data;
			xmlHttp.onreadystatechange= function()
			{
				stateChanged(xmlHttp, outputObj, fieldType);
			}
			xmlHttp.open("GET", url ,asyn);
			xmlHttp.send(null);  
		} else
		{
			// do nothing.
		}
		
		
	}
	
	function GetXmlHttpObject()
	{
		try
		{
			// Firefox, Opera 8.0+, Safari
			xmlHttp=new XMLHttpRequest();
			if (xmlHttp.overrideMimeType) 
			{
				// set type accordingly to anticipated content type
				//http_request.overrideMimeType('text/xml');
				xmlHttp.overrideMimeType('text/html');
			 }
	
		}catch (e)
		{
			// Internet Explorer
			try
			{
				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}catch (e)
			{
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
		}	
		return xmlHttp;
	}
	
	function stateChanged(xmlHttp, obj, fieldType) 
	{ 
		if (xmlHttp.readyState==4)
		{ 
			if (xmlHttp.status == 200 || xmlHttp.status == 304)
			{
				
				if (obj != null)
				{				
					obj[fieldType] = xmlHttp.responseText;
				}
			} else
			{
				alert ("Error.");
			}
		}
	}
