/**
 * Define a namespace hierarchy for our JavaScript
 */
var EsccWebTeam = 
{
    Dom : null,
    UI : { Navigation : null }
}

/**
 * Define essential DOM functions
 */
EsccWebTeam.Dom = {

    // AddEvent and EventCache from http://www.dustindiaz.com/rock-solid-addevent/
    // Names changed to prevent potential conflicts, but otherwise unaltered.
    AddEvent : function( obj, type, fn ) 
    {
	    if (obj.addEventListener) {
		    obj.addEventListener( type, fn, false );
		    EsccWebTeam.Dom.EventCache.add(obj, type, fn);
	    }
	    else if (obj.attachEvent) {
		    obj["e"+type+fn] = fn;
		    obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		    obj.attachEvent( "on"+type, obj[type+fn] );
		    EsccWebTeam.Dom.EventCache.add(obj, type, fn);
	    }
	    else {
		    obj["on"+type] = obj["e"+type+fn];
	    }
    },

    EventCache : function(){
	    var listEvents = [];
	    return {
		    listEvents : listEvents,
		    add : function(node, sEventName, fHandler){
			    listEvents.push(arguments);
		    },
		    Flush : function(){
			    var i, item;
			    for(i = listEvents.length - 1; i >= 0; i = i - 1){
				    item = listEvents[i];
				    if(item[0].removeEventListener){
					    item[0].removeEventListener(item[1], item[2], item[3]);
				    };
				    if(item[1].substring(0, 2) != "on"){
					    item[1] = "on" + item[1];
				    };
				    if(item[0].detachEvent){
					    item[0].detachEvent(item[1], item[2]);
				    };
				    item[0][item[1]] = null;
			    };
		    }
	    };
    }(),

	// Get the text content of an element and its child elements
    ElementText : function(element)
    {
        var text = '';
        for (var i = 0; i < element.childNodes.length; i++)
        {
            if (element.childNodes[i].nodeType == 1) // element node
            {
                text += EsccWebTeam.Dom.ElementText(element.childNodes[i]);
            }
            else if (element.childNodes[i].nodeType == 3) // text node
            {
                text += element.childNodes[i].data;
            }
        }
        return text;
    }
}
EsccWebTeam.Dom.AddEvent(window,'unload',EsccWebTeam.Dom.EventCache.Flush);