﻿/*
 *  Menu desplegable
 *  Scl Tools - Santiago Corredoira 03-07-2008
*/

if (typeof Scl == "undefined") 
{
    var Scl = {};
}

(function() 
{ 	      
    Scl.MenuItem = function(text, link)
    {
        this.text = text;
        this.link = link;
    }
    	
    /*
     *
     * @rightToLeft: indica que la coordenada x de posicion se refiere a la derecha
     */
	Scl.Menu = function(cssClass, itemsCssClass, rightToLeft, width)
	{
	    var instance = this;
	    var hideThread; // El hilo de espera para esconder el menu
	    var menuDiv;
	    var menuCssClass = cssClass;
	    var menuItemCssClass = itemsCssClass;
	    var menuItems = new Array();
		
		this.addItem = function(text, link)
		{
		    menuItems.push(new Scl.MenuItem(text, link));
		}
		
		this.show = function(item)
		{
		    alert("NotImplemented"); // No es necesario de momento...
	        //var position = findPosition(item);
	        //this.showAt(position.x, position.y + item.ofsetHeight);
		}
		
		this.showAt = function(x, y)
		{				
		    if(menuDiv == null)
		    {
		        createMenu(x, y);         
		    }
		    else
		    {
		        cancelHide();
		    }
	
		    menuDiv.style.display = 'block';
		}
		
		this.hide = function()
		{
		    hideThread = setTimeout(hideMenu, 100);
		}
		
		function createMenu(x, y)
	    {
            menuDiv = document.createElement('div');   
            menuDiv.id = 'spryMenu';   
            menuDiv.className = menuCssClass; 
            
            if(width)
            {
                menuDiv.style.width = width + 'px';
            }
            
	        addEvent(menuDiv, 'mouseover', cancelHide, false);
	        addEvent(menuDiv, 'mouseout', instance.hide, false); 
	                  		       		        
	        // Add items
	        for(var i=0; i< menuItems.length; i++)
	        {
	            var menuItem = menuItems[i];		            
	            var menuItemDiv = document.createElement('div');
                menuItemDiv.className = menuItemCssClass; 
                menuItemDiv.link = menuItem.link; // Crear la propiedad con el link para cada elemento
                menuItemDiv.onclick = function(){ window.location = this.link; };
	            var link = document.createElement('a');
	            link.setAttribute('href', menuItem.link);
                link.appendChild(document.createTextNode(menuItem.text));		            
                menuItemDiv.appendChild(link);
                menuDiv.appendChild(menuItemDiv);
	        }		    		      
	         
	        // Add to the document	
            document.body.appendChild(menuDiv);
            
	        if(rightToLeft)
	        {
	            x -= menuDiv.offsetWidth;
	        }
	        
	        menuDiv.style.left = x + 'px';
	        menuDiv.style.top = y + 'px';
		}
		
		function cancelHide()
		{
		    clearTimeout(hideThread);
		    hideThread = null;
		}
		
		function hideMenu()
		{
		    menuDiv.style.display = 'none';		
		}
	};
	
    function setText(element, text)
    {    
        if(typeof element.innerText !== 'undefined')
        {
	        element.innerText = text;
        }
        else
        {
	        element.textContent = text;
        }	
    }
    
    function findPosition(item) 
    {    	
	    var left = 0;
	    var top = 0;
    	
        while (item = item.offsetParent)
        {
		    left += item.offsetLeft;
		    top += item.offsetTop;
        }
            
        return {x:left, y:top};
    }
    
    function addEvent(element, evType, functionName, useCapture)
    {
        if(element.addEventListener)
        {
            element.addEventListener(evType, functionName, useCapture);
        }
        else if(element.attachEvent)
        {
            element.attachEvent('on' + evType , functionName);
        }
        else    
        {		
            element['on' + evType] = functionName;
        }
    }
        
})();


