htmlClass = {
	getElementsByClassName: function(className, tag, elm){
		var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
		var tag = tag || "*";
		var elm = elm || document;
		var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
		var returnElements = [];
		var current;
		var length = elements.length;
		for(var i=0; i<length; i++){
			current = elements[i];
			if(testClass.test(current.className)){
				returnElements.push(current);
			}
		}
		return returnElements;
	},



	assignClassBehavior: function (myClass, myFunction, behaviorType, narrowTarget){
		// 	narrowTarget is the earliest common ancestor to all target elements.
		//	use NarrowTarget when possible - saves client side processor resources.
		var classMembers = htmlClass.getElementsByClassName(myClass, "*", document.getElementById(narrowTarget));
		for(var i = 0;i<classMembers.length;i++){
			ev.eventObserve(classMembers[i], behaviorType, myFunction, false);
		}
	},

	hideClass:function(className, narrowTarget){
		// 	narrowTarget is the earliest common ancestor to all target elements.
		//	use NarrowTarget when possible - saves client side processor resources.
		var classMembers = htmlClass.getElementsByClassName(className, "*", document.getElementById(narrowTarget));
		for(var i = 0;i<classMembers.length;i++){
			classMembers[i].style.display = "none";
		}
	}
}

var ev = {
	eventObserve: function (elm, evType, fn, useCapture) {
		//
		//	Cross-browser friendly means of registering event handlers
		//	based on the addEvent function by Scott Andrew
		//	with slight customization.
		//
		if((typeof elm == 'undefined') || (elm == null)){return false}
		
		if (elm.addEventListener) {
			elm.addEventListener(evType, fn, useCapture);
			return fn;
		}
		else if (elm.attachEvent) {
			try {
				elm['e'+evType+fn] = fn;
				elm[evType+fn] = function(){
                                    elm['e'+evType+fn](window.event);
                                };
				elm.attachEvent( 'on'+evType, elm[evType+fn] );
			} catch (e) {}
			return fn;
		}
		else {
			elm['on' + evType] = fn;
		}
	},
	eventStopObserving: function(elm, evType, fn, useCapture) {
		//
		//	Cross-browser friendly means of unregistering event handlers
		//	modified from prototype event.stopObserving, then formatted to cooperate with eventObserve
		//
		if (elm.removeEventListener) {
			elm.removeEventListener(evType, fn, useCapture);
		} else if (elm.detachEvent) {
		  try {
			elm.detachEvent( 'on'+evType, elm[evType+fn] );
			elm[evType+fn] = null;	  
			} 
		  catch (e) {}
		}
		return fn;
	}
};
