function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	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;
}

function getOp(el){
	el = $(el);
	if(document.compatMode && document.all){
		return (el.filters.alpha) ? el.filters.alpha.opacity : 100;
	}else{
		return getElementStyle(el, 'opacity', 'opacity') * 100;
	}
}

function setOp(el, op){
	el = $(el);
	if(document.compatMode && document.all){
		el.style.filter = "alpha(opacity=0)";
		el.filters.alpha.opacity = ( op )
	}else{
		el.style.opacity = (op/100);
	}
}

function opFadeTick(el, step, op, cb){
	step*=1;
	op*=1;
	el = $(el);
	var t = getOp(el) + step;
	setOp(el, getOp(el) + step);
	if (step > 0 && t > op) {
		setOp(el, op);
		Timer.remInt('opFade' + el.id);
		cb(el);
	}
	if (step < 0 && t < op) {
		setOp(el, op);
		Timer.remInt('opFade' + el.id);
		cb(el);
	}
}

function opFade(el, op, mil, cb){
	cb = typeof(cb) != 'undefined' ? cb : function(){};
	el = $(el);
	var deltaOp = (op * 1) - getOp(el);
	var opStep = deltaOp / (mil / 25);
	Timer.addInt('opFade' + el.id, function() {opFadeTick(el, opStep, op, cb)}, 25);
}

function centerEl(el) {
	var browserwidth;
	var browserheight;
	el = $(el);
	if (self.innerWidth)
	{
		browserwidth = self.innerWidth;
		browserheight = self.innerHeight;
	}	
	else if (document.documentElement && document.documentElement.clientWidth)
	{
		browserwidth = document.documentElement.clientWidth;
		browserheight = document.documentElement.clientHeight;
	}
	else if (document.body)
	{
		browserwidth = document.body.clientWidth;
		browserheight = document.body.clientHeight;
	}
	else return;	
	var width = (browserwidth - el.offsetWidth)/2;
	var height = (browserheight - el.offsetHeight)/2;
	el.style.left=width+'px';
	el.style.top=height+'px';
}

function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}document.getElementById("")
	
var toggle = {
	show : function() {
		for ( i=0; i < arguments.length; i++ ) {
			$(arguments[i]).style.display = '';
		}
	},
	hide : function() {
		for ( i=0; i < arguments.length; i++ ) {
			$(arguments[i]).style.display = 'none';
		}
	}
};

var Dom = {
	add: function(el, dest) {
		var el = $(el);
		var dest = $(dest);
		dest.appendChild(el);
	},
	remove: function(el) {
		var el = $(el);
		el.parentNode.removeChild(el);
	}
};

function getElementStyle(el, IE, CSS) {
  	el = $(el);
    if (el.currentStyle) {
        return el.currentStyle[IE];
    } else {
        return window.getComputedStyle(el, "").getPropertyValue(CSS);
    }
}

var Timer = {
	addTimeout:	function(name, code, time) {
				this.list[name] = setTimeout(code,time);
			},
	remTimeout: function(name){
				clearTimeout(this.list[name]);
				this.list.splice(name, 1);
			},
	addInt: function(name, code, time) {
				this.list[name] = setInterval(code,time);
			},
	remInt: function(name){
				clearInterval(this.list[name]);
				this.list.splice(name, 1);
			},
	list:	function() {
				return new Array();
			}()
};
		

var Event = {
	add: function() {
		if (window.addEventListener) {
			return function(el, type, fn) {
				$(el).addEventListener(type, fn, false);
			};
		} else if (window.attachEvent) {
			return function(el, type, fn) {
				var f = function() {
					fn.call($(el), window.event);
				};
				$(el).attachEvent('on' + type, f);
			};
		}
	}()
};