var Common = function() {
	//accommodate earlier browsers like ie5.01 and lower which don't support Array.push and Array.shift
	//this we do to allow such browsers to use addDOMLoadEvent
	if (typeof Array.prototype.shift == "undefined") {
		Array.prototype.shift = function () {
			var A_s = 0;
			var response = this[0];
			for (A_s = 0; A_s < this.length-1; A_s++) {
				this[A_s] = this[A_s + 1];
			}
			this.length--;
			return response;
		};
	}
	if (typeof Array.prototype.push == "undefined") {
		Array.prototype.push = function () {
			var A_p = 0;
			for (A_p = 0; A_p < arguments.length; A_p++) {
				this[this.length] = arguments[A_p];
			}
			return this.length;
		};
	}
	return {
		//addEvent, sligthly modified version of the old one from scott andrew, http://www.scottandrew.com/weblog/articles/cbs-events
		addEvent: function(obj, evType, fn, useCapture){
			if (obj.addEventListener){
				obj.addEventListener(evType, fn, useCapture);
				return true;
			} else if (obj.attachEvent){
				var r = obj.attachEvent("on"+evType, fn);
				return r;
			} else {//try the old way--mod added by re/touch, june 2008
				obj["on"+evType]=fn;
				return true;
			}
			return false;
		},

		/*(c)2006 Jesse Skinner/Dean Edwards/Matthias Miller/John Resig
		* Special thanks to Dan Webb's domready.js Prototype extension
		* and Simon Willison's addLoadEvent*/
		//the if(!document.getElementById) {return;} check below added by retouch (july 2008) to addDOMLoadEvent return function to avoid errors in ie4 and others
		addDOMLoadEvent: (function(){var e=[],t,s,n,i,o,d=document,w=window,r='readyState',c='onreadystatechange',x=function(){n=1;clearInterval(t);while(i=e.shift())i();if(s)s[c]=''};return function(f){if(!document.getElementById) {return;} if(n)return f();if(!e[0]){d.addEventListener&&d.addEventListener("DOMContentLoaded",x,false);/*@cc_on@*//*@if(@_win32)d.write("<script id=__ie_onload defer src=//0><\/scr"+"ipt>");s=d.getElementById("__ie_onload");s[c]=function(){s[r]=="complete"&&x()};/*@end@*/if(/WebKit/i.test(navigator.userAgent))t=setInterval(function(){/loaded|complete/.test(d[r])&&x()},10);o=w.onload;w.onload=function(){x();o&&o()}}e.push(f)}})(),

		//COOKIE FUNCTIONS ADAPTED FROM PPK, HTTP://WWW.QUIRKSMODE.ORG/JS/COOKIES.HTML
		cookies: {
			create: function(name,value,days,path) {
				if (!path) {path="/";}//optional path argument added by re/touch, june 2008
				var expires;
				if (days) {
					var date = new Date();
					date.setTime(date.getTime()+(days*24*60*60*1000));
					expires = "; expires="+date.toGMTString();
				} else {
					expires = "";
				}
				document.cookie = name+"="+value+expires+"; path="+path;
			},
			read: function (name) {
				var nameEQ = 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(nameEQ) === 0) {return c.substring(nameEQ.length,c.length);}
				}
				return null;
			},
			erase: function (name) {
				cookies.create(name,"",-1);
			}
		},

		//CROSS-BROWSER event.target...BASICALLY DEAL WITH IE
		getEventTarget: function (event) {
			if (!event) {event = window.event;}//darn that ie
			var target = event.target ? event.target : event.srcElement;
			while (target.nodeType != 1) {//konqueror and safari will return the contained text node if it exists...
				target = target.parentNode;
			}
			return target;
		}
	};
}();
