// <script type="text/javascript">
// Created for myYearbook by Matt Klucsarits
// Last updated 24 January 2006

/* How to use this class:
   (1) Instantiate new object of type AJAX. If 'xml' parameter is set to
       boolean true, response will be in XML document format. Otherwise
       response will be plain text format. Parameter 'func' is the name,
       given as a string, of the response function. See (3).
   (2) Use makeRequest(<URL>) to make a new background HTTP request.
   (3) Create a function to handle response (the page output) of your
       request. The default function ajaxResponse() is used if none is
       specifed. The single parameter of this function is the response text
       or XML. Proper DOM manipulation has to be used for XML format.
   (4) Create a function ajaxError(<HTTP_ERROR_NUMBER>) to handle HTTP errors
       which will result from 401, 404, et al responses.
*/

function AJAX(xml,func) {

	this.makeRequest = makeRequest;
	this.requestStateChange = requestStateChange;
	this.makeRequestPost = makeRequestPost;
	
	// makeRequest : Attempt to create and send XMLHTTPRequest, and return true if successful
	function makeRequest(url) {
		// For Mozilla, Safari, Opera, IE7+ etc.
		if (window.XMLHttpRequest) {
			req = new XMLHttpRequest();
			req.onreadystatechange = requestStateChange;
			req.open('GET', url, true);
			req.send('');
			return true;
		} 

		// For IE6-
		else if (window.ActiveXObject) {
			req = new ActiveXObject('Microsoft.XMLHTTP');
			if (req) {
				req.onreadystatechange = function (){ requestStateChange() };
				req.open('GET', url, true);
				req.send('');
				return true;
			}
			else { return false; }
		}

		// Else the browser doesn't support xmlhttprequest
		else { return false; }
	}
	
	function makeRequestPost( url, post ){

		// For Mozilla, Safari, Opera, IE7+ etc.
		if (window.XMLHttpRequest) {
			req = new XMLHttpRequest();
			req.onreadystatechange = requestStateChange;
			req.open('POST', url, true);
			req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			req.setRequestHeader("Content-length", post.length);
			req.setRequestHeader("Connection", "close");
			req.send(post);
			return true;
		} 

		// For IE6-
		else if (window.ActiveXObject) {
			req = new ActiveXObject('Microsoft.XMLHTTP');
			if (req) {
				req.onreadystatechange = function (){ requestStateChange() };
				req.open('POST', url, true);
				req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				req.setRequestHeader("Content-length", post.length);
				req.setRequestHeader("Connection", "close");
				req.send(post);
				return true;
			}
			else { return false; }
		}

		// Else the browser doesn't support xmlhttprequest
		else { return false; }		
	}

	// requestStateChange : Execute when readyState changes (callback function on "200 OK" status)
	function requestStateChange() {

		// If request is complete
		if (req.readyState == 4) {
			// If response is "OK"
		        if (req.status == 200) {
				
				if (xml == true) { temp = req.responseXML; }
				else { temp = req.responseText; }
				if (typeof func != 'undefined') {
					eval(func+'(temp)');
				}
				else {
					ajaxResponse(temp);
				}
			}
			// Else an error occurred
			else {
				ajaxError(req.status);
			}
		}
	}

}
