// written by Dean Edwards, 2005// with input from Tino Zijdel, Matthias Miller, Diego Perini// http://dean.edwards.name/weblog/2005/10/add-event/function addEvent(element, type, handler) {	if (element.addEventListener) {		element.addEventListener(type, handler, false);	} else {		// assign each event handler a unique ID		if (!handler.$$guid) handler.$$guid = addEvent.guid++;		// create a hash table of event types for the element		if (!element.events) element.events = {};		// create a hash table of event handlers for each element/event pair		var handlers = element.events[type];		if (!handlers) {			handlers = element.events[type] = {};			// store the existing event handler (if there is one)			if (element["on" + type]) {				handlers[0] = element["on" + type];			}		}		// store the event handler in the hash table		handlers[handler.$$guid] = handler;		// assign a global event handler to do all the work		element["on" + type] = handleEvent;	}};// a counter used to create unique IDsaddEvent.guid = 1;function removeEvent(element, type, handler) {	if (element.removeEventListener) {		element.removeEventListener(type, handler, false);	} else {		// delete the event handler from the hash table		if (element.events && element.events[type]) {			delete element.events[type][handler.$$guid];		}	}};function handleEvent(event) {	var returnValue = true;	// grab the event object (IE uses a global event object)	event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);	// get a reference to the hash table of event handlers	var handlers = this.events[event.type];	// execute each event handler	for (var i in handlers) {		this.$$handleEvent = handlers[i];		if (this.$$handleEvent(event) === false) {			returnValue = false;		}	}	return returnValue;};function fixEvent(event) {	// add W3C standard event methods	event.preventDefault = fixEvent.preventDefault;	event.stopPropagation = fixEvent.stopPropagation;	return event;};fixEvent.preventDefault = function() {	this.returnValue = false;};fixEvent.stopPropagation = function() {	this.cancelBubble = true;};//hiding loggin from non-compliant browsersvar console;if (console == undefined)console = new function(){	this.debug = function(src) {  };	//this.debug = function(src) { alert("Debug ---\n\n" + src); };	this.info = function(src) {  };	//this.info = function(src) { alert("Info ---\n\n" + src); };	this.warn = function(src) {  };	//this.warn = function(src) { alert("Warning ---\n\n" + src); };	this.error = function(src) {  };	//this.error = function(src) { alert("Error ---\n\n" + src); };}/*    Written by Jonathan Snook, http://www.snook.ca/jonathan    Add-ons by Robert Nyman, http://www.robertnyman.com*/function getElementsByClassName(oElm, strTagName, strClassName){    var arrElements = (strTagName == "*" && document.all)? document.all :     oElm.getElementsByTagName(strTagName);    var arrReturnElements = new Array();    strClassName = strClassName.replace(/\-/g, "\\-");    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");    var oElement;    for(var i=0; i<arrElements.length; i++){        oElement = arrElements[i];              if(oRegExp.test(oElement.className)){            arrReturnElements.push(oElement);        }       }    return (arrReturnElements)}