// logging

var debugCont = null;

function _log(txt)
{
	return;
	if(window.console)
	{
		window.console.log(txt);
	}
	else
	{
		if(!debugCont)
		{
			var els = document.getElementsByTagName('body');
			debugCont = document.createElement('div');
			debugCont.style.width = '100%';
			debugCont.style.height = '200px';
			debugCont.style.border = 'red 1px solid';
			els[0].appendChild(debugCont);
		}
		debugCont.innerHTML += txt + '<br />';	
	}
}


Number.prototype.NaN0=function(){return isNaN(this)?0:this;}

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
};

Function.prototype.bind = function() {
  var __method = this, args = [], object = arguments[0];
  for (var i = 1; i < arguments.length; i++)
    args.push(arguments[i]);
  return function(moreargs) {
  	args = []; 
    for (var i = 0; i < arguments.length; i++)
      args.push(arguments[i]);
    return __method.apply(object, args);
  }
};

Function.prototype.bindAsEventListener = function(object) {
  var __method = this;
  return function(event) {
    return __method.call(object, event || window.event);
  }
};

function getPosition(e){
		var left = 0;
		var top  = 0;
		
		while (e.offsetParent){
			left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
			top  += e.offsetTop  + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
			e     = e.offsetParent;
		}

		left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
		top  += e.offsetTop  + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);

		return {x:left, y:top};
	}

var Mouse = {
	initialize : function()	{},
	
	getCoords : function(ev){
		if(ev.pageX || ev.pageY){
			return {x:ev.pageX, y:ev.pageY};
		}
		return {
			x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
			y:ev.clientY + document.body.scrollTop  - document.body.clientTop
		};
	},
	
	getOffset : function(target, ev){
		ev = ev || window.event;

		var docPos    = getPosition(target);
		var mousePos  = this.getCoords(ev);
		return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
	}
	
};