function $(id) {
	return document.getElementById(id);
}
function $$(c,o,t) {
	return HW.getElementsByClassName(c,o,t);
}
var HW = {
	loadedQueue:[],
	log:function(a) {
		if(window.console) {window.console.log(a);return true;}
		return false;
	},
	error:function(e) {
		if(window.console) {window.console.error(e);}
		else {alert(e);}
	},
	getElementsByClassName:function(cls,n,t)
	{
		var rtn = [];
		n=n===null?document:n;
		t=t===null?'*':t;
		var els = n.getElementsByTagName?n.getElementsByTagName(t):document.all;
		els = (!els||!els.length) && document.all?document.all:els;
		if(cls==null){return els;}
		for (var i=0,j=0; i<els.length;i++) {
			if(this.hasClass(els[i],cls)) {
				rtn[j++] = els[i];
			}
		}
		return rtn;
	},
	attachEvent:function(obj,evt,fnc)
	{
		if(window.addEventListener) {obj.addEventListener(evt, fnc, false);}
		else if(window.attachEvent) {obj.attachEvent('on'+evt, fnc);}
		else if (obj.getElementById && evt=='load') {obj.onload = fnc;}
	},
	preventDefault:function(e) {
		e=e||window.event;
		if(e.preventDefault) {e.preventDefault();}
		else {e.returnValue = false;}
	},
	cancelBubble:function(e) {
		e=e||window.event;
		if(e.stopPropogation) {e.stopPropogation();}
		else {e.cancelBubble = true;}
	},
	extendObject:function(d,s)
	{
		d=d===null?new Object():d;
		for (p in s) {d[p] = s[p];}
		return d;
	},
	addClass:function(o,c)
	{
		if (!this.hasClass(o,c)){
			if (o.className == "") {o.className = c;}
			else {o.className += " " + c;}
		}
	},
	hasClass:function(o,c)
	{
		var p = new RegExp("(^| )" + c + "( |$)");
		if (p.test(o.className)) {return true;}
		return false;
	},
	removeClass:function(o,c)
	{
		var p = new RegExp("(^| )" + c + "( |$)");
		o.className = o.className.replace(p, "$1");
		o.className = o.className.replace(/ $/, "");
	},
	setFade:function(o,n)
	{
		var agt = navigator.userAgent.toLowerCase();
		if((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1)) {
			if (n == 100) o.style.filter = "";
			else if (n < 0) o.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=0);";
			else o.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity="+ Math.round(n) + ");";
		}
		else {			
			o.style.MozOpacity = (Math.round(n) / 100);
			o.style.opacity = (Math.round(n) / 100);
		}
		o.alpha = n;
	},
	fadeTo:function(elm,to,time,c) {
		if(elm.alpha === undefined) {elm.alpha = 100;}
		var df = to - elm.alpha;
		for(var i=1;i<=20;i++) {
			(function(){
				var al = elm.alpha;
				var j=i;
				setTimeout(function(){
					HW.setFade(elm,al + j*df/20);
				},j*time/20);
			})()
		}
		if(c) {
			setTimeout(function(){
				c();
			},time);
		}
	},
	getPosition:function(e) {
		var p = {x:0,y:0}
		while(e) {
			p.x += e.offsetLeft;
			p.y += e.offsetTop;
			e = e.offsetParent;
		}
		return p;
	},
	setStyle:function(o,s) {
		for(i in s) {
			o.style[i] = s[i];
		}
	},
	getStyle:function(o) {
		if(o.currentStyle) {return o.currentStyle;}
		else if(window.getComputedStyle) {return window.getComputedStyle(o,null);}
	},
	setCookie:function(n,v,d) {
		if (d) {
			var date = new Date();
			date.setTime(date.getTime()+(d*24*60*60*1000));
			var ex = "; expires="+date.toGMTString();
		}
		else {var ex = "";}
		document.cookie = n+"="+v+ex+"; path=/";
	},
	getCookie:function(name) {
		var n = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(n) == 0) return c.substring(n.length,c.length);
		}
		return null;
	},
	clearCookie:function(name) {
		this.setCookie(name,"",-1);
	},
	fixIE6flicker:function() {
		var m = document.uniqueID && document.compatMode && !window.XMLHttpRequest && document.execCommand ; 
		try { 
			if(!!m) { 
				m("BackgroundImageCache", false, true);
			} 
		}
		catch(e) {};
	},
	onLoad:function() {
		var userAgent = navigator.userAgent.toLowerCase();
		HW.isIE  = (navigator.appVersion.indexOf("MSIE") != -1)?true:false;
		HW.isMacFF  = (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1)?true:false;
		if(HW.Modules.check() && document.body) {
			for(var i=0;i<HW.Modules.req.length;i++) {
				if(HW[HW.Modules.req[i]].init) {HW[HW.Modules.req[i]].init();}
			}
			HW.onLoadedCall();
		}
		else {
			setTimeout(HW.onLoad,50);
		}
	},
	onLoaded:function(f) {
		this.loadedQueue.push(f);
	},
	onLoadedCall:function() {
		for(var i=0;i<this.loadedQueue.length;i++) {
			this.loadedQueue[i]();
		}
		this.fixIE6flicker();
	}
}
HW.Modules = {
	path:'/js/modules/',
	req:[],
	Ajax:{
		jsurl:'ajax',
		added:false
	},
	ShowHide:{
		jsurl:'showhide',
		added:false
	},
	Accordion:{
		jsurl:'accordion',
		added:false
	},
	Flash:{
		jsurl:'flash_loader',
		added:false
	},
	LightBox:{
		jsurl:'lightbox',
		added:false
	},
	DropDown:{
		jsurl:'dropdown',
		added:false
	},
	Animate:{
		jsurl:'animate',
		added:false
	},
	DragAndDrop:{
		jsurl:'draganddrop',
		added:false
	},
	Portals:{
		jsurl:'portals',
		added:false
	},
	Slider:{
		jsurl:'slider',
		added:false
	},
	FormInputs:{
		jsurl:'forminputs',
		added:false
	},
	Table:{
		jsurl:'table',
		added:false
	},
	load:function(comp) {
		var c = this[comp];
		if(c && c.added === false){
			var js = document.createElement('script');
			js.setAttribute('type', 'text/javascript');
			js.setAttribute('src',this.path+c.jsurl+'.js');
			document.getElementsByTagName('head')[0].appendChild(js);
			this.req.push(comp);
			c.added = true;
		}
	},
	loaded:function(c) {
		this[c].loaded = true;
	},
	check:function() {
		var c = true;
		for(var i=0;i<this.req.length;i++) {
			c = c&&this[this.req[i]].loaded;
		}
		return c;
	}
}

HW.attachEvent(window,'load',HW.onLoad);
