
Array.prototype.contains = function(element) {
	for(var i=0; i<this.length; i++) {
		if(this[i] == element) return true;
	}
	return false;
}

Array.prototype.remove = function(element) {
	for(var i=0;i<this.length; i++) {
		if(element == this[i]) this.splice(i, 1);
	}
}

function $(name) {
	return document.getElementById(name);
}

function _(name) {
	return getElementsByClassName(name);
}

function getElementsByClassName(classname, node) {
	if(!node) node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
	if(re.test(els[i].className))a.push(els[i]);
	return a;
}

function findParentWithClass(classname, node) {
	if(!node) return;
	while(node && node.tagName != 'body') {
		if(elementHasClass(node, classname)) return node;
		node = node.parentNode;
	}
	return;
}

function elementHasClass(elm, classname) {
	if(!elm.className) return false;
	var classes = elm.className.split(" ");
	return classes.contains(classname);
}

function addClass(elm, classname) {
	if(elm == undefined) return;

	var classes = elm.className.split(" ");
	if(!classes.contains(classname)) {
		classes.push(classname);
	}
	elm.className = classes.join(" ");
}

function removeClass(elm, classname) {
	if(elm == undefined) return;
	if(elm.className == undefined) return;

	var classes = elm.className.split(" ");
	if(classes.contains(classname)) {
		classes.remove(classname);
	}
	elm.className = classes.join(" ");
}

function getLeft(ll) {
	if(ll.offsetParent)
		return (ll.offsetLeft + getLeft(ll.offsetParent));
	else
		return ll.offsetLeft;
}

function getTop(ll) {
	if(ll.offsetParent)
		return (ll.offsetTop + getTop(ll.offsetParent));
	else
		return ll.offsetTop;
}

function mouseY(evt) {
	if (evt.pageY) return evt.pageY;
	else if (evt.clientY)
	   return evt.clientY + (document.documentElement.scrollTop ?
	   document.documentElement.scrollTop :
	   document.body.scrollTop);
	else return null;
}

function getChildNodesWithClass(elm, classname) {
	var ret = Array();
	for(var i=0; i<elm.childNodes.length; i++) {
		if(elementHasClass(elm.childNodes[i], classname)) ret.push(elm.childNodes[i]);
	}
	return ret;
}

