

	// allows the assignment of any number of LOAD event handlers
	function addLoadListener(fn)
	{		
		//alert(fn);
		if(typeof window.addEventListener != 'undefined')
		{
			window.addEventListener('load', fn, false);
		}
		else if(typeof document.addEventListener != 'undefined')
		{
			document.addEventListener('load', fn, false);
		}
		else if(typeof window.attachEvent != 'undefined')
		{
			window.attachEvent('onload', fn);
		}
		else
		{
			var oldfn = window.onload;
			if(typeof window.onload != 'function')
			{
				window.onload = fn;
			}
			else
			{
				window.onload = function()
				{
					oldfn();
					fn();
				};
			}
		}		
	}
		
	/* 
		attach a listener to an event
		ie. attachEventListener(table_cells[i], 'mouseover', hilight, false);
	*/
	function attachEventListener(target, eventType, functionRef, capture)
	{
		if(typeof target.addEventListener != "undefined")
		{
			target.addEventListener(eventType, functionRef, capture);
		}
		else if(typeof target.attachEvent != "undefined")
		{
			target.attachEvent("on" + eventType, functionRef);
		}
		else
		{
			eventType = "on" + eventType;
			
			if(typeof target[eventType] == "function")
			{
				var oldListener = target[eventType];
				
				target[eventType] = function()
				{
					oldListener();
					return functionRef();
				};
			}
			else
			{
				target[eventType] = functionRef;
			}
		}
	}	
	
	// determine the user's browser
	function identifyBrowser()
	{
		var agent = navigator.userAgent.toLowerCase();
		
		if(typeof navigator.vendor != "undefined" && navigator.vendor == "KDE" && typeof window.sidebar != "undefined")
		{
			return "kde";
		}
		else if(typeof window.opera != "undefined")
		{
			var version = parseFloat(agent.replace(/.*opera[\/ ]([^ $]+).*/, "$1"));
			if(version >= 7)
			{
				return "opera7";
			}
			else if(version >= 5)
			{
				return "opera5";
			}
			
			return false;
		}
		else if(typeof document.all != "undefined")
		{ 
			if(typeof document.getElementById != "undefined")
			{
				var browser = agent.replace(/.*ms(ie[\/ ][^ $]+).*/, "$1").replace(/ /, "");
				
				if(typeof document.uniqueID != "undefined")
				{
					if(browser.indexOf("5.5") != -1)
					{
						return browser.replace(/(.*5\.5).*/, "$1");
					}
					else
					{
						return browser.replace(/(.*)\..*/, "$1");
					}
				}
				else
				{
					return "ie5max";
				}
			}
			
			return false;
		}
		else if(typeof document.getElementById != "undefined")
		{
			if(navigator.vendor.indexOf("Apple Computer, Inc.") != -1)
			{
				if(typeof window.XMLHttpRequest != "undefined")
				{
					return "safari1.2";
				}
				
				return "safari1";
			}
			else if(agent.indexOf("gecko") != -1)
			{
				return "mozilla";
			}
		}
		
		return false;		
	}
	
	
	// determine the user's Operating System
	function identifyOS()
	{
		var agent = navigator.userAgent.toLowerCase();
		
		if(agent.indexOf("win") != -1)
		{
			return "win";
		}
		else if(agent.indexOf("mac"))
		{
			return "mac";
		}
		else
		{
			return "unix";
		}
		
		return false;
	}
	
	// function to get all values from a form (used with ajax)
	// obj = form object
	function getFormValues(obj) {
		var getstr='';
		var inputs = obj.getElementsByTagName('input');
		var selects = obj.getElementsByTagName('select');
		
		if(inputs.length == 0 && inputs.selects == 0) return;
		
		// grab values of text fields   
		for(var i=0; i<inputs.length; i++) {
			if(inputs[i].type == "text")
			{
				getstr += inputs[i].name + "=" + inputs[i].value + "&";
			}
			else if(inputs[i].type == "checkbox")
			{
				if(inputs[i].checked) {
					getstr += inputs[i].name + "=" + inputs[i].value + "&";
				} else {
					getstr += inputs[i].name + "=&";
				}	
			}		
			else if(inputs[i].type == 'radio')
			{
				if (inputs[i].checked) {
					getstr += inputs[i].name + "=" + inputs[i].value + "&";
				}
			}
			else if(inputs[i].type == 'password')
			{
				getstr += inputs[i].name + "=" + inputs[i].value + "&";
			}
		}
		
		for(var i=0; i<selects.length; i++) {
			getstr += selects[i].name + "=" + selects[i].options[selects[i].selectedIndex].value + "&";
		}
		
		if(getstr.substring(getstr.length-1) == '&') {
			getstr = getstr.substring(0, getstr.length-1);
		}
		
		return getstr;
	}