
//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

/* GETELEMENTBYCLASSNAME FUNCTION */
document.getElementsByClassName = function(cl) {
var retnode = [];
var myclass = new RegExp('\\b'+cl+'\\b');
var elem = this.getElementsByTagName('*');
for (var i = 0; i < elem.length; i++) {
var classes = elem[i].className;
if (myclass.test(classes)) retnode.push(elem[i]);
}
return retnode;
};	

/* 3. object namespace */
var jawInternetMin2009 = {
/* add components defining file names with this components object */
	components :{	
		getnavcells:{
			url:'http://uninetnews.com/include/getnavcells.js',
			loaded:false
		},	
		urhere:{
			url:'http://uninetnews.com/include/urhere.js',
			loaded:false
		},
		styleswitcher:{
			url:'http://uninetnews.com/include/styleswitcher.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 */
jawInternetMin2009.listener = function(component){
if(component === 'getnavcells'){
	   jawEventListener.addLoadListener(getnavcells);
}
if(component === 'urhere'){
		jawEventListener.addLoadListener(urhere_init.addYouAreHere);
}
if(component === 'styleswitcher'){
		jawEventListener.addLoadListener(switchmystyle);
}
};


/* example of using attachEventListener function */
//if(!jawInternetMin2009.components.gettables.loaded){jawInternetMin2009.addComponent('gettables');};

/* 7 adding the component */
if(!jawInternetMin2009.components.getnavcells.loaded){jawInternetMin2009.addComponent('getnavcells');};
if(!jawInternetMin2009.components.urhere.loaded){jawInternetMin2009.addComponent('urhere');};
if(!jawInternetMin2009.components.styleswitcher.loaded){jawInternetMin2009.addComponent('styleswitcher');};

