/*
 * Copyright (c) 2008, Aleajecta
 * All rights reserved.
 * 
 * The Service and any necessary software used in connection with the 
 * Service ("Software") contain proprietary and confidential information 
 * that is protected by applicable intellectual property and other laws.
 * You agree not to modify, rent, lease, loan, sell, distribute or create
 * derivative works based on the Service or the Software, in whole or in part.
 */
/**
 * @author Greenseed
 */
function Mouse(){}(function()
{ 
	Mouse.coord = new Array();
	Mouse.coord['x'] = 0;
	Mouse.coord['y'] = 0;
	
	Mouse.onMouseMove = new Array();
	Mouse.onMouseDown = new Array();
	Mouse.onMouseUp = new Array();
	Mouse.onMouseClick = new Array();
    Mouse.onMouseDBLClick = new Array();
    
	Mouse.mouseDown = false;
	var changed = false;
	Mouse.mouseOverOwner = null;

	//Probleme cause when 2 function call it into the same loop... :(...
    Mouse.hasChanged = function()
	{
		var temp = changed;
		changed = false;
		return temp;
	};
	Mouse.update = function(event)
	{
        changed = true;
        Mouse.coord['x'] = event.clientX;
		Mouse.coord['y'] = event.clientY;
	};
	Mouse.offSetHeight = function(owner)
	{
        var _OffSetTop = owner.offsetTop;
        var _EleParent = owner.offsetParent;
        if(_EleParent)
        {
            do
            {
                _OffSetTop += _EleParent.offsetTop;
            }while(_EleParent = _EleParent.offsetParent) 
        }
        return Mouse.coord['y'] - _OffSetTop  > 0 ? (Mouse.coord['y'] - _OffSetTop)*100/owner.offsetHeight : 0;	
	};
	Mouse.out = function(owner,functionToCall,offset)
	{
		offset = offset ? offset : 10;
		if (Mouse.coord['x'] < owner.offsetLeft - offset || Mouse.coord['x'] > owner.offsetLeft + owner.offsetWidth + offset) 
		{
			eval(functionToCall);
			return true;
		}
		else if(Mouse.coord['y'] < owner.offsetTop - offset || Mouse.coord['y'] > owner.offsetTop + owner.offsetHeight + offset) 
		{
			eval(functionToCall);
			return true;
		}	
		return false;
	};
	Mouse.overBorder = function(owner,removeTrigger)
	{
		Mouse.mouseOverOwner = owner;
		if(Mouse.mouseOverOwner.className=='showcase')
			Mouse.mouseOverOwner.parentNode.style.padding = '16px 6px '+(moronIE ? '6px' : '2px')+' 16px';

		owner.style.border = '#0D860D outset 4px';
		switch(removeTrigger)
		{
			case 'onmouseout':
			{
				owner.onmouseout = function(value)
				{
					//alert(MouseOverOwner.id);
					if(Mouse.mouseOverOwner.className=='showcase')
						Mouse.mouseOverOwner.parentNode.style.padding = '20px 10px '+(moronIE ? '10px' : '6px')+' 20px';
					Mouse.mouseOverOwner.style.border = 'none 0px';
					Mouse.mouseOverOwner.onmouseout = null;
					Mouse.mouseOverOwner = null;
				}
			}break;
			case 'onmouseup':
			{
				owner.onmouseup = function(value)
				{
					//alert(MouseOverOwner.id);
					if(Mouse.mouseOverOwner.className=='showcase')
						Mouse.mouseOverOwner.parentNode.style.padding = '20px 10px 10px 20px';
					Mouse.mouseOverOwner.style.border = 'none 0px';
					Mouse.mouseOverOwner.onmouseup = null;
					Mouse.mouseOverOwner = null;
				}
			}break;
			case 'clear':
			{
				Mouse.mouseOverOwner.style.border = 'none 0px';
			}break;
		}
	};
	Mouse.overAlpha = function(owner,removeTrigger)
	{
		Mouse.mouseOverOwner = owner;
        if(!owner.alpha )
            owner.alpha = HTMLElement.prototype.alpha;
        alert(owner.alpha());
        
		switch(removeTrigger)
		{
			case 'onmouseout':
			{
				owner.onmouseout = function(value)
				{
;
				}
			}break;
			case 'onmouseup':
			{
				owner.onmouseup = function(value)
				{
;
				}
			}break;
			case 'clear':
			{

			}break;
		}
	
	}
	
})();
Mouse.onMouseMove.push
(
    Mouse.update
);
Mouse.onMouseDown.push
(
	function()
	{
		Mouse.mouseDown = true;
	}
);
Mouse.onMouseUp.push
(
	function()
	{
		Mouse.mouseDown = false;
	}
);
Mouse.onMouseClick.push
(
    function()
    {
        if(moronIE) 
        {
            if(event && event.button == 1)
                return false;
        }
        else 
        {
            if (this.which == 3) 
            {
                this.preventDefault();
                this.stopPropagation();
                return false;
            }
        }
    }
);
Mouse.onMouseDBLClick.push
(
    function()
    {
        if(moronIE) 
        {
            if(event && event.button == 1)
                return false;
        }
        else 
        {
            if (this.which == 3) 
            {
                this.preventDefault();
                this.stopPropagation();
                return false;
            }
        }
    }
);

Mouse.onmousemove = function(event)
{
    event = event || window.event;
    for(var itr in Mouse.onMouseMove) 
		Mouse.onMouseMove[itr](event);
  //return false;
};
commonInit.push
(
	function()
	{
		document.onmousemove  = Mouse.onmousemove;
		document.onmousedown = function()
		{
			for(var itr in Mouse.onMouseDown) 
				Mouse.onMouseDown[itr]();
          //return false;
		};
		document.onmouseup = function()
		{
			for(var itr in Mouse.onMouseUp) 
				Mouse.onMouseUp[itr](this);
		};
        if(moronIE)
            document.oncontextmenu=function(){return false};

		document.onclick = function()
		{
			for(var itr in Mouse.onMouseClick) 
				Mouse.onMouseClick[itr](this);
            //return false;
		};
		document.ondblclick = function()
		{
			for(var itr in Mouse.onMouseDBLClick) 
				Mouse.onMouseDBLClick[itr](this);
            //return false;
		};
        document.onselectstart = function()
        {
            return false;
        };
	}
);