	
	
	
	/**
	 * Append a function to the document's load event.
	 * This is unobtrusive, and allows other events on the same element.
	 *
	 * @author      Tom McQuarrie <tom@webxpress.com.au>
	 * @access		Private
	 * @copyright   WebXpress 2009
	 * @param		Function func The function to append.
	 */
	function addLoadEvent( func ) 
	{
		addDOMLoadEvent( func );
	}
	
	
	/**
	 * Append a function to a dom element's mouseover event.
	 * This is unobtrusive, and allows other mouseover events on the same element.
	 *
	 * @author      Tom McQuarrie <tom@webxpress.com.au>
	 * @access		Private
	 * @copyright   WebXpress 2009
	 * @param		Object obj The dom element to append the mouseover event to.
	 * @param		Function func The function to append.
	 */
	function addOnMouseOver( obj, func )
	{
		var oldmouseover = obj.onmouseover;
		if( typeof obj.onmouseover != 'function' )
		{
			obj.onmouseover = func;
		}
		else
		{
			obj.onmouseover = function()
			{
				oldmouseover();
				func();
			}
		}
	}
	
	
	/**
	 * Append a function to a dom element's mouseout event.
	 * This is unobtrusive, and allows other mouseout events on the same element.
	 *
	 * @author      Tom McQuarrie <tom@webxpress.com.au>
	 * @access		Private
	 * @copyright   WebXpress 2009
	 * @param		Object obj The dom element to append the mouseout event to.
	 * @param		Function func The function to append.
	 */
	function addOnMouseOut(obj, func)
	{
		var oldmouseout = obj.onmouseout;
		if(typeof obj.onmouseout != 'function')
		{
			obj.onmouseout = func;
		}
		else{
			obj.onmouseover = function()
			{
				oldmouseout();
				func();
			}
		}
	}
	
	
	/**
	 * Append a function to a dom element's click event.
	 * This is unobtrusive, and allows other click events on the same element.
	 *
	 * @author      Tom McQuarrie <tom@webxpress.com.au>
	 * @access		Private
	 * @copyright   WebXpress 2009
	 * @param		Object obj The dom element to append the click event to.
	 * @param		Function func The function to append.
	 */
	function addOnClick(obj, func)
	{
		var oldclick = obj.onclick;
		if( typeof obj.onclick != 'function' )
		{
			obj.onclick = func;
		}
		else
		{
			obj.onclick = function()
			{
				oldclick();
				func();
			}
		}
	}
	
	
	/**
	 * Append a function to the document's load event.
	 * This is unobtrusive, and allows other load events on the document.
	 *
	 * @author      Tom McQuarrie <tom@webxpress.com.au>
	 * @access		Private
	 * @copyright   WebXpress 2009
	 * @param		Function func The function to append.
	 */
	addDOMLoadEvent = (function(){
	    // create event function stack
	    var load_events = [],
	        load_timer,
	        script,
	        done,
	        exec,
	        old_onload,
	        init = function () {
	            done = true;
	
	            // kill the timer
	            clearInterval(load_timer);
	
	            // execute each function in the stack in the order they were added
	            while (exec = load_events.shift())
	                exec();
	
	            if (script) script.onreadystatechange = '';
	        };
	
	    return function (func) {
	        // if the init function was already ran, just run this function now and stop
	        if (done) return func();
	
	        if (!load_events[0]) {
	            // for Mozilla/Opera9
	            if (document.addEventListener)
	                document.addEventListener("DOMContentLoaded", init, false);
	
	            // for Internet Explorer
	            /*@cc_on @*/
	            /*@if (@_win32)
	                document.write("<script id=__ie_onload defer src=//0><\/scr"+"ipt>");
	                script = document.getElementById("__ie_onload");
	                script.onreadystatechange = function() {
	                    if (this.readyState == "complete")
	                        init(); // call the onload handler
	                };
	            /*@end @*/
	
	            // for Safari
	            if (/WebKit/i.test(navigator.userAgent)) { // sniff
	                load_timer = setInterval(function() {
	                    if (/loaded|complete/.test(document.readyState))
	                        init(); // call the onload handler
	                }, 10);
	            }
	
	            // for other browsers set the window.onload, but also execute the old window.onload
	            old_onload = window.onload;
	            window.onload = function() {
	                init();
	                if (old_onload) old_onload();
	            };
	        }
	
	        load_events.push(func);
	    }
	})();