function pntAppendToInit(appendFunc)
{
	var orgFunc;
	orgFunc = pntExtraInitFunctions;
	var anomFunction = function()
	{		
		orgFunc.call();
		appendFunc.call();		
	};
	pntExtraInitFunctions = anomFunction;
}

function pntExtraInitFunctions() {
	// attach additional functions by using: pntAppendToInit(funcName); in your scripts.
}

function pntAddToClassName(elem, strClassName)
{
	if (!elem) return;
	var classNames = elem.className.split(' ');
	classNames[classNames.length] = strClassName;
	elem.className = classNames.join(' ');	
}

function pntRemoveFromClassName(elem, strClassName)
{
	if (!elem) return;
	var classNames = elem.className.split(' ');
	var newClassNames = new Array();
	for (var i in classNames)
	{
		var className = classNames[i];
		if (className!=strClassName) newClassNames[newClassNames.length] = className;
	}	
	elem.className = newClassNames.join(' ');	
}

function pntAppendElementEventHandler(elem,eventName,eventHandler)
{	
	var thisScope = arguments[3];
	var currentEventHandler = elem[eventName];
	if (!currentEventHandler) {
		elem[eventName] = eventHandler;
		return;
	}
	var anomFunction = function()
	{		
		currentEventHandler.call(elem);
		if (!pntIsDefined(thisScope)) thisScope = elem;
		eventHandler.call(thisScope);
	}
	elem[eventName] = anomFunction;
}




document.getElementsByClassName = function (needle) 
{ 
    if (typeof(needle)!='string') return new Array();    
    var s = [document.documentElement || document.body], i = 0, r = [], l = 0, e; 
    var re = new RegExp('(^|\\s)' + needle + '(\\s|$)'); 

    do 
    { 
        e = s[i]; 

        while (e) 
        { 
            if (e.nodeType == 1) 
            { 
                if (e.className && re.test(e.className)) r[l++] = e; 

                s[i++] = e.firstChild; 
            } 

            e = e.nextSibling; 
        } 
    } 
    while (i--); 
		r.reverse();
    return r; 
}





function pntAddStyleSheetToHead(strUrl)
{

		var pntCssLink;
		pntCssLink = document.createElement('link');
		pntCssLink.type = "text/css";
		pntCssLink.rel = "stylesheet";		
		pntCssLink.href=strUrl;
		pntCssLink.media = "screen";		
		
		var firstHeadElem = document.getElementsByTagName("head")[0];
		if (!pntIsDefined(firstHeadElem)) return;	
		
		firstHeadElem.appendChild(pntCssLink);
		
	
}

function pntAddScriptToHead(strUrl)
{
	
	var pntScriptSrc;
	pntScriptSrc = document.createElement('script');
	pntScriptSrc.type = "text/javascript";
	pntScriptSrc.src= strUrl;
	
	var firstHeadElem = document.getElementsByTagName("head")[0];
	if (!pntIsDefined(firstHeadElem)) return;	
	firstHeadElem.appendChild(pntScriptSrc);
}

function pntIsDefined(elem)
{
	if ((!elem) || (typeof(elem)=="undefined")) return false;
	return true;
}



function init() {		
	mojoFixExternalLinks();
	pntExtraInitFunctions();
}

if (document.addEventListener) {
	document.addEventListener("DOMContentLoaded", init, false);
} else {
	 document.onreadystatechange = function() {
  if (this.readyState == "complete") {
		init();
  }
 }
}

function mojoFixExternalLinks()
{
	var elems = document.getElementsByClassName('mojo-extern-link');
	for (var i in elems)
	{
		var elem = elems[i];			
		if ((typeof(elem)=='object') && (elem.tagName) && (elem.tagName.toLowerCase() == 'a')) 	elem.onclick = mojoOpenHrefInNewWindow;
	}
}

function mojoOpenHrefInNewWindow()
{
		window.open(this.href);
		return false;
}
