/**------------------------------------------------------------------------
 * Set of function and classes which deal with meta navigation selectors
 *
 * @version $Id: metaNavigation.js,v 1.3 2009/11/12 08:58:49 grb Exp $
 *
 *-----------------------------------------------------------------------*/



/**
 * metaNavSelector class
 *
 * @param button - td node, button to show dropdown menu when onmouseover
 * @param dropdown - div node, containing selector dropdown menu
 *
 */
 function metaNavSelector(button, dropdown) {
    var button = button;
    var dropdown = dropdown;
    var buttonPosX = 0;
    var buttonPosY = 0;
    var dropdownPosX = 0;
    var dropdownPosY = 0;
    this.init = init;
    this.mouseOutOfButtonAndDropdown = mouseOutOfButtonAndDropdown;
    this.hideDropdown = hideDropdown;
    
    function init() {
      /* get button position and set buttonPosX and buttonPosY */
      var posX = 0;
      var posY = 0;
      var currentNode = button;
      if(currentNode.offsetParent) {
        while(currentNode.offsetParent) {
          posX += currentNode.offsetLeft;
          posY += currentNode.offsetTop;
          currentNode = currentNode.offsetParent;
        }
      }
      else if (currentNode.x) {
        posX = currentNode.x;
        posY = currentNode.y;
      }
        
      buttonPosX = posX;
      buttonPosY = posY;
      
      /* init dropdown menu position */
      dropdownPosX = buttonPosX + button.offsetWidth - 105;
      dropdownPosY = buttonPosY + button.offsetHeight;
      
      /* set styles for dropdown menu */
      dropdown.style.left = dropdownPosX;
      dropdown.style.top = dropdownPosY;
    }
  
    /**
     * Checks if mouse moves out of the button and dropdown menu, 
     * fired by mouseOut events on the button and the dropdown menu
     * 
     */
     function mouseOutOfButtonAndDropdown(event) {
       var mouseX = event.clientX; 
       var mouseY = event.clientY;
       var offset = getScrollXY();
       var offX = offset[0];
       var offY = offset[1];
       
       var mouseOnButton = buttonPosX - offX < mouseX && mouseX < (buttonPosX - offX + button.offsetWidth) 
                           && buttonPosY - offY < mouseY && mouseY <= (buttonPosY - offY + button.offsetHeight); 
       var mouseOnDropdown = dropdownPosX - offX < mouseX && mouseX < (dropdownPosX - offX + dropdown.offsetWidth) 
                             && dropdownPosY - offY <= mouseY && mouseY < (dropdownPosY - offY + dropdown.offsetHeight);
       return !(mouseOnButton || mouseOnDropdown);
     }
          
    /**
     * Change button style and hide dropdown menu
     * when mouse moves out of button and dropdown menu
     * 
     */        
    function hideDropdown() {
      dropdown.style.display = 'none';
      button.className = 'meta-nav meta-nav-button';
      /* set class for button arrow */
      button.getElementsByTagName('div')[0].className = 'meta-nav-arrow';
    }
		
	function getScrollXY() {
	  var scrOfX = 0, scrOfY = 0;
	  if( typeof( window.pageYOffset ) == 'number' ) {
	    //Netscape compliant
	    scrOfY = window.pageYOffset;
	    scrOfX = window.pageXOffset;
	  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
	    //DOM compliant
	    scrOfY = document.body.scrollTop;
	    scrOfX = document.body.scrollLeft;
	  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
	    //IE6 standards compliant mode
	    scrOfY = document.documentElement.scrollTop;
	    scrOfX = document.documentElement.scrollLeft;
	  }
	  return [ scrOfX, scrOfY ];
	}
}  