/**
 * EXT:mfarvatocore/res/js/flyout.js
 * @author Johan Prawiro <prawiro@medienfabrik.de>
 */

$(function() {
	
	var Navi = function($p_o){
		var o = {
			$o : $p_o
			,flyouts : []
			,timeout : 200
			,openingInProgress : false
			,opened : null
			,closeAll : function(p_leave){
				$.each(o.flyouts, function(i, flyout){
					flyout.close(p_leave);
				});
			}
		};
		
		(function(){
			o.$o.find('> ul > li').each(function(i){
				var flyout = Flyout($(this), o);
				o.flyouts.push(flyout);
			});
			
			o.$o.bind('mouseleave', function(){
				o.closeAll(true);
				o.opened = null;
				o.openingInProgress = false;
			});
		}());
		
		return o;
	};
	var Flyout = function($p_o, p_navi){
		var o = {
			$o : $p_o.find('> div')
			,$handler : $p_o
			,$link : $p_o.find('> a')
			,isClosing : false
			,open : function(){
				if(!p_navi.openingInProgress && p_navi.opened !== o){
					p_navi.openingInProgress = true;
					p_navi.opened = o;
					
					if(o.$o.length){
						p_navi.closeAll();
						o.$handler.addClass('flyout-handle-active');
						o.$o.css({
							'z-index' : 530
						});
						o.$o.slideDown(p_navi.timeout, function(){
							p_navi.openingInProgress = false;
						});
					} else {
						p_navi.closeAll(true);
						p_navi.opened = null;
						p_navi.openingInProgress = false;
					}
				}
			}
			,close : function(p_leave){
				o.$o.css({
					'z-index' : 520
				});
					
				if(!p_leave){
					o.$handler.removeClass('flyout-handle-active');
				}
					
				o.$o.slideUp(p_navi.timeout, function(){
					o.$handler.removeClass('flyout-handle-active');
				});
			}
		};
		
		(function(){
			o.$handler.hoverIntent({
				over : function(){
					o.open();
				}
				,out : function(){
				}
				,timeout : p_navi.timeout
			});
			
			if(o.$o.length){
				o.$link.bind('click', function(e){
					if(!o.$o.parent().parent().hasClass('clickable')) {
						e.preventDefault();
					}
				});
			}
		}());
		
		return o;
	};
	
	Navi($('.nav-main'));
	
	
	if($(".nav-main .flyout.tabfeature .flyout-content .content-tab").length > 1) {
		$(".nav-main .flyout.tabfeature .flyout-content").after(function() {
			var navigatorCode = '<div href="#" class="pane-control prev"></div><div href="#" class="pane-control next"></div><ul class="flyout-tab-navigator">';
			$(this).find('.content-tab').each(function(paneNumber) {
				if(paneNumber == 0) {
					navigatorCode += '<li><a href="#" class="current"></a></li>';
				} else {
					navigatorCode += '<li><a href="#"></a></li>';
				}
			});
			
			return navigatorCode;
		});
		
		// scrollable in flyout (scrollable panes have fixed height!)
		$(".nav-main .flyout.tabfeature .flyout-content").scrollable().navigator({
			navi: ".flyout-tab-navigator",
			naviItem: 'a',
			activeClass: 'current',
			history: true
		});	
	}
	
});
