function byId() {return document.getElementById(arguments[0])}
function byTag(elem, tag) {
	try
	{
	if (!tag) {tag = elem; elem = document}return elem.getElementsByTagName(tag);
	}catch(e){}
}
function byClass(classname, type) {
	var r = [];if (!type) type = "*";var arr = byTag(type);
	for (var i=0; i<arr.length; i++) {var m = arr[i];if (m.className == classname) {r.push(m);}}
	return r;
}

function domReady(fun) {
	if (domReady.done) {fun();return;}
	if (domReady.fs) {domReady.fs.push(fun);
	}else{domReady.fs = new Array(fun);addEvent(window, "load", isDomReady);domReady.interval = setInterval(isDomReady, 13);}
}
function isDomReady() {
	if (domReady.done) return false;
	if (document && document.getElementById && document.getElementsByTagName && document.body) {
		clearInterval(domReady.interval);domReady.done = true;
		for (var i=0; i<domReady.fs.length; i++) {domReady.fs[i]();}domReady.fs = null;
	}
}
function addEvent(elem, type, handler) {
	if (!addEvent.guid) addEvent.guid = 1;if (!handler._guid) handler._guid = addEvent.guid++;
	if (!elem.events) elem.events = {};var handlers = elem.events[type];
	if (!handlers) {handlers = {};if (elem["on" + type])  handlers[0] = elem["on" + type];}
	handlers[handler._guid] = handler;elem.events[type] = handlers;elem["on" + type] = handEvent;
}
function removeEvent(elem, type, handler) {if (elem.events && elem.events[type]) delete elem.events[type][handler._guid];}
function handEvent(ev) {
	var r = true;ev = ev || fixEvent(window.event);var hs = this.events[ev.type];
	for (var h in hs) {this._handevent = hs[h];if (this._handevent(ev) == false) r = false;}
	return r;
}
function fixEvent(event) {
	event.preventDefault = function() {this.returnValue = false;};
	event.stopPropagation = function() {this.cancelBubble = true};
	return event;
}


