
//1. browser detection using objects
var modern = (window.addEventListener)? true:false;
var old = (window.attachEvent)? true:false;
var doclistener = (document.addEventListener)? true:false;
var DOM = (document.implementation && document.implementation.hasFeature('HTML','1.0'))? true:false;

//if(modern) alert("modern");
//if(old) alert("old");
//if(doclistener) alert("doclistener");

var jawEventListener = {
addLoadListener:function(fn) 
{
	if (modern)
	{
		window.addEventListener('load', fn, false);
	}
	else if (doclistener)
	{
		document.addEventListener('load', fn, false);
	}
	else if (old)
	{
		window.attachEvent('onload', fn);
	}
	else
	{
		return false;
	}
	
	return true;
},
attachEventListener:function(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
    {
        return false;
    }
    return true;
},
detachEventListener:function(target, eventType, functionRef,
   capture)
{
 if (typeof target.removeEventListener != "undefined")
 {
   target.removeEventListener(eventType, functionRef, capture);
 }
 else if (typeof target.detachEvent != "undefined")
 {
   target.detachEvent("on" + eventType, functionRef);
 }
 else
 {
   target["on" + eventType] = null;
 }
},
stopEvent:function(event)
{
 if (typeof event.stopPropagation != "undefined")
 {
   event.stopPropagation();
 }
 else
 {
   event.cancelBubble = true;
 }
}//end last function
}//end jawEventListener class

/* 3. object namespace */
var jawInternetMin2008 = {
/* add components defining file names with this components object */
	components :{	
		gettables:{
			url:'/include/wjc/gettables.js',
			loaded:false
		},
		appendsearch:{
			url:'/include/wjc/appendsearch.js',
			loaded:false
		},
		appendfooter:{
			url:'/include/wjc/appendfooter.js',
			loaded:false
		},		
		horizontalnav:{
			url:'/include/wjc/dropdown_horizontal_nav.js',
			loaded:false
		}		
	},
	/* 4 load components on demand by adding a new script element to the head of the document */
	addComponent:function(component){
	if(!(document.getElementById || document.createTextNode)){return;}
		var c = this.components[component];
		if(c && c.loaded === false){
			var s = document.createElement('script');
			s.setAttribute('type', 'text/javascript');
			s.setAttribute('src',c.url);
			document.getElementsByTagName('head')[0].appendChild(s);
		}
	},
	/* 5 verify that components have been loaded */
	componentAvailable:function(component){
		this.components[component].loaded = true;
		if(this.listener){
			this.listener(component);
		};
	}
};

/* 6 main listener (load event) function acts when components are loaded */
jawInternetMin2008.listener = function(component){
if(component === 'gettables'){
	   jawEventListener.addLoadListener(gettables);
}
if(component === 'appendsearch'){
	   jawEventListener.addLoadListener(appendsearch);
}
if(component === 'appendfooter'){
	   jawEventListener.addLoadListener(appendfooter);
}
if(component === 'horizontalnav'){
		jawEventListener.addLoadListener(startList);
}
};


/* example of using attachEventListener function */
//if(!jawInternetMin2008.components.gettables.loaded){jawInternetMin2008.addComponent('gettables');};

/* 7 adding the component */
if(!jawInternetMin2008.components.gettables.loaded){jawInternetMin2008.addComponent('gettables');};
if(!jawInternetMin2008.components.appendsearch.loaded){jawInternetMin2008.addComponent('appendsearch');};
if(!jawInternetMin2008.components.appendfooter.loaded){jawInternetMin2008.addComponent('appendfooter');};
if(!jawInternetMin2008.components.horizontalnav.loaded){jawInternetMin2008.addComponent('horizontalnav');};
