/* 
	CORE FUNCTIONS
*/

var addEvent;
if (document.addEventListener) {
	addEvent = function(element, type, handler) {
		element.addEventListener(type, handler, null);
		if (element.href) element.href="javascript:void('')" ;
	}
}
else if (document.attachEvent) {
	addEvent = function(element, type, handler) {
		element.attachEvent("on" + type, handler);
		try {
			if (element.href) element.href="javascript:void('')" ;
		}
		catch(err) {}
	}
}
else {
	addEvent = new Function; // not supported
}
 
function getTarget(e) {
	if (window.event && window.event.srcElement)
		return window.event.srcElement ;
	if (e && e.target)
		return e.target ;
	if (!e)
		return false ;
}

function climbDom(e, tagType, containsClass) {
	if (containsClass) {
		while (
			(
				e.nodeName.toLowerCase() != tagType
				|| !classContains(e, containsClass)
			)
			&& e.nodeName.toLowerCase() != 'html'
		) e = e.parentNode ;
	}
	else {
		while (e.nodeName.toLowerCase() != tagType && e.nodeName.toLowerCase() != 'html') e = e.parentNode ;
	}
	return (e.nodeName.toLowerCase() == 'html') ? false : e ;
}

function classContains(myObject,myClassName) {
	if (!myObject.className) return false ;
	else return (myObject.className.indexOf(myClassName) == -1) ? false : true ;
}

function stripClass(myObject, classToStrip) {
	if (!myObject || !myObject.className) return false ;
	var cnPos = myObject.className.indexOf(classToStrip) ;
	if (cnPos != -1) {
		var newCN = myObject.className.replace(classToStrip, "") ;
		myObject.className = newCN ;
	}
}

function addClass(myObject, myClassName) {
	var cnPos = myObject.className.indexOf(myClassName) ;
	if (cnPos == -1) {
		myObject.className += " " + myClassName ;
	}
}

function toggleClass(el, myClassName) {
	if (classContains(el, myClassName)) {
		stripClass(el, myClassName) ;
	}
	else {
		addClass(el, myClassName) ;
	}
}

function getElementsByClassName(oElm, strTagName, strClassName) {
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName) ;
    var arrReturnElements = new Array() ;
    strClassName = strClassName.replace(/\-/g, "\\-") ;
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)") ;
    var oElement ;
    for (var i=0; i<arrElements.length; i++) {
        oElement = arrElements[i] ; 
        if(oRegExp.test(oElement.className)) {
            arrReturnElements.push(oElement) ;
        }   
    }
    return (arrReturnElements) ;
}


function cancelBubble(e) {
	if (window.event) {
		window.event.cancelBubble = true ;
	}
	else {
		e.stopPropagation();
	}
}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

/* 
	END
	CORE FUNCTIONS
*/
