// charset=utf-8
// $Id: ProductsNavi.js 193 2010-01-13 16:35:38Z dierker $
// +----------------------------------------------------------------------+
// | ProductsNavi                                                         |
// | (c) 2010 monsun media (http://www.monsun-media.com)                  |
// +----------------------------------------------------------------------+


/**
* ProductsNavi
*
* @author	md
*/
var ProductsNavi = {
	/**
	* @var	DomNode
	*/
	activeSubmenu : null
	,
	/**
	* @var	DomNode
	*/
	activeLink : null
	,
	/**
	* @var	DomNode
	*/
	activeInfoLayer : null
	,
	/**
	* @var	Timeout
	*/
	hideSubnaviTimeout : null
	,
	/**
	* timeout until the navi is hidden again
	* @var	int
	*/
	timeoutMSec : 1250
	,
	/**
	* show a subnavi
	*
	* @param	Event	evt
	* @param	int		naviId
	* @return	void
	*/
	productNaviOver : function(evt,naviId){
		var target = evt.target ? evt.target : evt.srcElement;
		var offsetTop = parseInt(target.offsetTop);

		// IE6-hack: the offsetTop is stored in the parent-element (the li)
		// and the link itself!
		if( offsetTop==0 ){
			offsetTop = parseInt(target.parentNode.offsetTop)
		}

		var id = 'ProductsNavi-sn' + naviId;
		
		ProductsNavi.hideSubnavi();
		var subMenu = document.getElementById(id);
		if( !subMenu ){
			return;
		};
		subMenu.style.top = offsetTop+'px';
		subMenu.style.display='block';
		ProductsNavi.activeSubmenu = subMenu;

		mcm.cancelEvent(evt);
	}
	,
	/**
	* handle the mouseout-event on a subnavi-entry
	*
	* @param	Event	evt
	* @param	int		mainId
	*/
	productNaviOut: function(evt,mainId){
		var exec = 'ProductsNavi.hideSubnavi()';
		ProductsNavi.hideSubnaviTimeout = setTimeout(exec,ProductsNavi.timeoutMSec);
	}
	,
	/**
	* hide the subnavi
	*
	* @return	void
	*/
	hideSubnavi : function(){
		// hide the active-subnavi
		if( ProductsNavi.activeSubmenu!=null ){
			ProductsNavi.activeSubmenu.style.display='none';
			ProductsNavi.activeSubmenu = null;
		};
		// hide the active info-layer
		if( ProductsNavi.hideSubnaviTimeout!=null ){
			clearTimeout(ProductsNavi.hideSubnaviTimeout);
			ProductsNavi.hideSubnaviTimeout = null;
		};
		ProductsNavi.hideInfoLayer();
	}
	,
	/**
	* hide the product-info-layer
	*
	* @return	void
	*/
	hideInfoLayer : function(){
		if( ProductsNavi.activeInfoLayer==null ){
			return;
		};
		ProductsNavi.activeInfoLayer.style.visibility='hidden';
		ProductsNavi.activeInfoLayer = null;
	}
	,
	/**
	* handle the mouse-over event on a subnavi-link
	*
	* @param	Event	evt
	* @param	DomNode	lnk
	* @param	string	id
	* @return	void
	*/
	subnaviOver : function(evt,lnk,id){
		if( ProductsNavi.hideSubnaviTimeout!==null ){
			clearTimeout(ProductsNavi.hideSubnaviTimeout);
		} 
		ProductsNavi.hideInfoLayer();
		if( ProductsNavi.activeLink!==null ){
			mcm.removeCssClass(ProductsNavi.activeLink.parentNode,'active');
		};

		var layer = document.getElementById('ProductsNaviInfoLayer-'+id);
		if( layer===null ){
			return;
		};
		layer.style.visibility = 'visible';
		ProductsNavi.activeInfoLayer = layer;
		ProductsNavi.activeLink = lnk;
		mcm.addCssClass(lnk.parentNode,'active');
	}
	,
	/**
	* handle the mouse-out event on a subnavi-link
	*
	* @param	Event	evt
	* @param	DomNode	lnk
	* @param	string	id
	* @return	void
	*/
	subnaviOut : function(evt,lnk,id){
		var exec = 'ProductsNavi.hideSubnavi()';
		ProductsNavi.hideSubnaviTimeout = setTimeout(exec,ProductsNavi.timeoutMSec);
	}
	,
	/**
	* handle a onmouse-over over the product-info-layer
	*
	* @param	Event	evt
	* @return	void
	*/
	infoLayerOver : function(evt){
		if( ProductsNavi.hideSubnaviTimeout!==null ){
			clearTimeout(ProductsNavi.hideSubnaviTimeout);
		}
	}
	,
	/**
	* handle a onmouse-out-event on the product-info-layer
	*
	* @param	Event	evt
	* @return	void
	*/
	infoLayerOut : function(evt){
		var exec = 'ProductsNavi.hideSubnavi()';
		ProductsNavi.hideSubnaviTimeout = setTimeout(exec,250);
	}
	,
	/**
	* cancel a click on a link
	*
	* @param	Event	evt
	* @param	DomNode	lnk
	* @param	int		mainId
	* @param	int		subId
	* @return	void
	*/
	handleClick : function(evt,lnk,mainId,subId){
		if( subId==0 ){
			mcm.cancelEvent(evt);
		}else{
			return true;
		};
	}
}
