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

/*==========================================
  Class Manipulation
==========================================*/

function hasClassName( elem, className ) {
	if ( !elem.className ) return false;
	var pattern = new RegExp("(^|\\s)"+className+"(\\s|$)");
	return pattern.test(elem.className);
}

function removeClassName( elem, className ) {
	var pattern = new RegExp("(^|\\s)"+className+"(\\s|$)");
    elem.className = elem.className.replace( pattern, "" ).trim();
}

function addClassName( elem, className ) {
    removeClassName( elem, className );
    elem.className = ( elem.className + " " + className ).trim();
}

// http://www.dustindiaz.com/getelementsbyclass
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

/*==========================================
  Add event
==========================================*/
  
function addEvent(elm, evType, fn, useCapture)
// addEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla
// By Scott Andrew
{
  if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be added");
  }
}
