/*
 *  Copyright (c) 2009
 *  Kieran Menor
 *
 *  Do not use without permission.
 */

var $ = {
	cookies: {},
	images: [],
	onCookieInitList: [],
	byId: function(id) {
		return document.getElementById(id);
	},
	runPreloader: function() {
		var images = [];
		for(var i = 0; i < this.images.length; i++) {
			images[i] = new Image();
			images[i].src = this.images[i];
		}
		this.images = [];
	},
	preloadImages: function(images) {
		this.images = this.images.concat(images);
	},
	addEvent: function(element, event, method) {
		if(element.addEventListener) {
			element.addEventListener(event, method, false);
		}
		else {
			try {
				element.attachEvent('on'+event, method);
			}
			catch(e) {}
		}
	},
	removeEvent: function(element, event, method) {
		if(element.removeEventListener) {
			element.removeEventListener(event, method, false);
		}
		else {
			try {
				element.detachEvent('on'+event, method);
			}
			catch(e) {}
		}
	},
	initCookies: function() {
		var i;
		var cookies = document.cookie.split('; ');
		for(i = 0; i < cookies.length; i++) {
			var cookie = cookies[i].split('=');
			if(typeof cookie[1] == 'undefined') {
				cookie[1] = '';
			}
			this.cookies[cookie[0]] = decodeURIComponent(cookie[1]);
		}
		for(i = 0; i < this.onCookieInitList.length; i++) {
			this.onCookieInitList[i]();
		}
	},
	setCookie: function(name, value, expire) {
		if(expire) {
			var date = new Date();
			date.setTime(date.getTime()+expire);
			var expires = '; expires='+date.toGMTString();
		}
		else {
			var expires = '';
		}
		document.cookie = name+'='+encodeURIComponent(value)+expires+'; path=/';
		this.cookies[name] = value;
	},
	clearCookie: function(name) {
		this.set(name, '', -1);
		delete(this.cookies[name]);
	},
	onCookieInit: function(method) {
		this.onCookieInitList[this.onCookieInitList.length] = method;
	},
	hasClass: function(element, cls) {
		var regex = new RegExp('\\b'+cls+'\\b');
		return regex.test(element.className);
	},
	addClass: function(element, cls) {
		if(!this.hasClass(element, cls)) {
			element.className += ' '+cls;
		}
	},
	removeClass: function(element, cls) {
		if(this.hasClass(element, cls)) {
			var regex = new RegExp('\\b'+cls+'\\b');
			element.className = element.className.replace(regex, '');
		}
	}
}
$.addEvent(window, "load", function() { $.initCookies(); });
$.addEvent(window, "load", function() { $.runPreloader(); });