// -------- EVENT HANDLING -----------//

function addEvent(elm, evType, fn, useCapture){
	//cross-browser even handling for IE5+, NS6+ and Mozilla Gecko
	//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{
		elm['on'+evType]=fn;
	}
}

function removeEvent(elm, evType, fn, useCapture){
	//cross-browser remove event
	if(elm.removeEventListener){
		elm.removeEventListener(evType, fn, useCapture);
		return true;
	}else if(elm.detachEvent){
		var r=elm.detachEvent('on'+evType,fn);
		return r;
	}else{
		elm['on'+evType]=fn;
	}
}

function getEventTarget(e){
	// cross-browser event target getter
	var el;
	if(window.event && window.event.srcElement){
		el=window.event.srcElement;
	}
	if(e && e.target){
		el=e.target;
	}
	
	return el;
}

function getEventType(e){
	// cross-browser event type getter
	var el;
	if(window.event && window.event.srcElement){
		el=window.event.type;
	}
	if(e && e.target){
		el=e.type;
	}
	
	return el;
}

function stopBubble(e){
	//cross-browser stop event propagation
	if(window.event){
		window.event.cancleBubble = true;
	}
	if(e && e.stopPropagation && e.preventDefault){
		e.stopPropagation();
	}
}
	
function stopDefault(e){
	//cross-browser stop event default action
	if(window.event){
		window.event.returnValue = false;
	}
	if(e && e.stopPropagation && e.preventDefault){
		e.preventDefault();
	}
}

//get elements by class 
//TagStr == limit by tag or * for all elements
function getElementsByClass(baseElem, TagStr, ClassStr){
	var ElemArr = (TagStr == "*" && baseElem.all)? baseElem.all : baseElem.getElementsByTagName(TagStr);
	var FoundElems = new Array();
	ClassStr = ClassStr.replace(/\-/g, "\\-");
	var Exp = new RegExp("(^|\\s)" + ClassStr + "(\\s|$)");
	var curElem;
	for(var i=0; i<ElemArr.length; i++){
		curElem = ElemArr[i];
		if(Exp.test(curElem.className)){
			FoundElems.push(curElem);
		}
	}
	return (FoundElems)
}