/*function $(id) {
	if (typeof id == "string") {
		return document.getElementById(id);
	}
	else {
		return id;
	}
}*/

function hasClassName(element, className) {
    var elementClassName = element.className;
    return (elementClassName.length > 0 && (elementClassName == className ||
		new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
}

function addClassName(element, className) {
    if (!hasClassName(element, className))
    	element.className += (element.className ? ' ' : '') + className;
    return element;
}

function removeClassName(element, className) {
    element.className = element.className.replace(new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
    return element;
}

String.prototype.strip = function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
}

Function.prototype.thread = function (context) {
	var otherArguments = [];
	for (var i = 1; i < arguments.length; i++) {
		otherArguments[i-1] = arguments[i];
	}
	var fun = this;
	window.setTimeout(function () {fun.apply(context, otherArguments)}, 10);
}

Function.prototype.bind = function (context) {
	if (typeof context == 'undefined' || context === null) {
		throw "bind: context can't be empty";
	}
	
	var fun = this;
	return function () {
		return fun.apply(context, arguments);
	}
}