$_ = 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;
		}
	},

  	postback: function(obj)
  	{
  		var uniqueID = $(obj).attr('name');
  		__doPostBack(uniqueID, '');
  	}
}

var htmlutils =
{
	table_insertrowend: function(tableid)
	{
		var nbrows = $_(tableid).rows.length;
		return $_(tableid).insertRow(nbrows);
	},
	table_insertcellend: function(row)
	{
		var nbcells = row.cells.length;
		return row.insertCell(nbcells);
	},
	table_deleterow: function(tableid, rowid)
	{
		var table = $_(tableid);
		var i = 0;
		for (; i < table.rows.length; i++)
		{
			if (table.rows[i].id != rowid) continue;
			else break;
		}
		if (i < table.rows.length)
			table.deleteRow(i);
	},
	table_clear: function(tableid, toindex)
	{
		while($_(tableid).rows.length - 1 >= toindex) 
			$_(tableid).deleteRow($_(tableid).rows.length - 1);
	}
}

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+$/, '');
}

String.prototype.replaceAll = function(from, to)
{
	var i = this.indexOf(from);
	var c = this;
	while (i > -1)
	{
		c = c.replace(from, to);
		i = c.indexOf(from);
	}
	return c;
}

if (!Array.indexOf)
{
	Array.prototype.indexOf = function(obj)
	{
		for (var i = 0; i < this.length; i++)
		{
			if (this[i] == obj)
				return i;
		}
		return -1;
	}
}

var modal =
{
	open: function(id, width, onClose)
	{
		$('#' + id).dialog(
		{
       		autoOpen: false,
			resizable: false,
       		draggable: false,
       		modal: false,
       		closeOnEscape: false,
       		width: width != undefined && width != null ? width : 'auto',
       		close: onClose,
       		show: 'drop',
       		hide: 'drop'
		});
		$('#' + id).dialog('open');
		return false;
	},
	close: function(id)
	{
		$('#' + id).dialog('close');
		return false;
	},
	autoclose: function(obj)
	{
		var parent = obj;
		while (parent.getAttribute('modalpopup') != '1')
			parent = parent.parentNode;
		if (parent != null)
			modal.close(parent.getAttribute('id'));
		return false;
	}
}

function accessdenied()
{
	modal.open(resources.get('Cafe_PopupDenied'), 480);
	return false;
}

var events =
{
	keyCode: function(e)
	{
		return e.charCode || e.keyCode || e.which || 0;
	},
	cancel: function(e)
	{
		e.preventDefault();
		e.stopImmediatePropagation();
	}
}

function getIframe(id)
{
	for (var i = 0; i < window.frames.length; i++)
	{
		try
		{
			if (window.frames[i].frameElement.id == id)
				return window.frames[i];
		}
		catch (e)
		{
			continue;
		}
	}
	return null;
}

var cookies =
{
	get: function(name)
	{
		if (document.cookie && document.cookie != '')
		{
			var list = document.cookie.split(';');
			for (var i = 0; i < list.length; i++)
			{
				var cookie = $.trim(list[i]);
				if (cookie.substring(0, name.length + 1) == (name + '='))
					return decodeURIComponent(cookie.substring(name.length + 1));
			}
		}
		return null;
	}
}

function preventEnter(id)
{
	$('#' + id).keydown(function(event)
	{
		if (events.keyCode(event) == 13)
			return false;
		return true;
	});
}
