/* 
 * $Id: ajax.js,v 1.4 2007/05/01 07:27:35 stacy Exp $ 
 *
 * Author: Stacy Horton
 * Adapted from source found in a simple AJAX tutorial
 *
 */
 



 
function ajax_request ( url, return_xml_obj, callback, callback_arg ) {

	var http_request = false;

	//alert('Entered ajax_request()');
	
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		try {
			netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
		} catch (e) {
			//alert("Permission UniversalBrowserRead denied.");
		}
   		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}

	if (!http_request) {
		alert('Unfortunately you browser doesn\'t support this feature.');
		return false;
	}
	
	var callback_arg_string = '';
	var args = [];
	if ( arguments.length > 3 ) {
		for ( i=3; i < arguments.length; i++ ) {
			if ( callback_arg_string ) {
				callback_arg_string = callback_arg_string + ', ';
			}
			callback_arg_string = callback_arg_string + 'args[' + i + ']';
			args[i] = arguments[i];
		}
	}

	http_request.onreadystatechange = function() {
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				if (return_xml_obj) {
					if ( callback_arg_string ) {
						eval(callback + '(http_request.responseXML, ' + callback_arg_string + ')');
					} else {
						eval(callback + '(http_request.responseXML)');
					}
				} else {
					if ( callback_arg_string ) {
						eval(callback + '(http_request.responseText, ' + callback_arg_string + ')');
					} else {
						eval(callback + '(http_request.responseXML)');
					}
				}
			} else {
				alert('There was a problem with the request.(Code: ' + http_request.status + ')');
				return false;
			}
		}
	}
	//alert('Opening http_request');
	try {
		http_request.open('GET', url, true);
	} catch (e) {
		alert('Your browser must allow AJAX requests to use this feature');
	}
	http_request.send(null);
}


function ajax_result_fill_listbox ( response, listbox, sourceTag, sourceKey, sourceValue, placeholdertext ) {
	if ( response ) {
		listbox.options.length = 0;
		listbox.selectedIndex = -1;
		if ( placeholdertext ) {
			listbox.options[0] = new Option(placeholdertext, 0);
			var startat=1;
		} else {
			var startat=0;
		}
		var keys = response.getElementsByTagName(sourceKey);
		var values = response.getElementsByTagName(sourceValue);
		for ( var i=0; i < keys.length; i++ ) {
			listbox.options[i+startat] = new Option(values[i].firstChild.data, keys[i].firstChild.data);
		}
	} else {
		alert('ajax_request() failed!');
	}
	return false;
}


function ajax_fill_listbox ( listbox, url, sourceTag, sourceKey, sourceValue, placeholdertext ) {
	ajax_request(url, true, 'ajax_result_fill_listbox', listbox, sourceTag, sourceKey, sourceValue, placeholdertext);
}


