$ = function(id)
{
	return document.getElementById(id);
}

var framework =
{
	event:
	{
		addEventListener: function(obj, event, listener)
		{
			if (window.addEventListener)
				obj.addEventListener(event, listener, false);
			else if (window.attachEvent)
				obj.attachEvent('on' + event, listener);
		},
		removeEventListener: function(obj, event, listener)
		{
			if (window.removeEventListener)
				obj.removeEventListener(event, listener, false);
			else if (window.detachEvent)
				obj.detachEvent('on' + event, listener);
		},
		eventKeyCode: function(event)
		{
			var e = event.keyCode;
			if (!e)
				e = event.which;
			return e;
		},
		cancelEvent: function(event)
		{
			var e = event || window.event;
			e.cancelBubble = true;
			e.returnValue = false;
			if (e.stopPropagation)
				e.stopPropagation();
			if (e.preventDefault)
				e.preventDefault();
			return false; 
		}
	},

	shared:
	{
		getElementLeft: function(obj)
		{
			var elem = $(obj.id);
			var xPos = elem.offsetLeft;
			var tempEl = elem.offsetParent;
			while (tempEl != null)
			{
				xPos += tempEl.offsetLeft;
				tempEl = tempEl.offsetParent;
			}
			return xPos;
		},
		getElementTop: function(obj)
		{
			var elem = $(obj.id);
			var yPos = elem.offsetTop;
			var tempEl = elem.offsetParent;
			while (tempEl != null)
			{
				yPos += tempEl.offsetTop;
				tempEl = tempEl.offsetParent;
			}
			return yPos;
		}
	},

	json:
	{
		toObject: function(json)
		{
			var obj = eval('var ret = ' + json);
			return ret;
		}
	}
}

String.format = function()
{
	for (var i = 1; i < arguments.length; i++)
	{
		var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
		arguments[0] = arguments[0].replace(re, arguments[i]);
	}
	return arguments[0];
}

String.prototype.trim = function()
{
	return this.replace(/^\s+/, '').replace(/\s+$/, '');
}

if(!Array.indexOf)
{
	Array.prototype.indexOf = function(obj)
	{
		for (var i = 0; i < this.length; i++)
		{
			if(this[i] == obj)
				return i;
		}
		return -1;
	}
}
