YAHOO.namespace('hhk.mainNav');


YAHOO.hhk.mainNav.Menu = (function() {
	var ROOT_LEVEL_INDEX = 1;
	
	var maxLevelDepth = $('#mainNav-menu-wrap td').length;
	var isHidden = false;
	
	// default opacity auf 0 setzen, damit das menu beim ersten mal smooth einfaded
	$('#mainNav-menu').css('opacity', '0');
	
	
	function linkRollover(eventObject) {
	    var eTarget = $(eventObject.currentTarget);

	    // level des aktivierten links 
	    var currentSubmenuId = eTarget.parents('ul').attr('id');
	    var currentLevel = eTarget.parents('td').attr('id').replace('level-', '');
	    
	    // link highlighten im aktuellen submenu
	    $('#' + currentSubmenuId + ' a').removeClass('active');
	    eTarget.addClass('active');
	    
	    //console.log('currentSubmenuId = ' + currentSubmenuId);
	    //console.log('currentLevel = ' + currentLevel);

	    // alle menus auf dieser ebene und auf allen darunter ausblenden
	    // außer das submenu in dem sich der gerade aktive Link befindet
	    for(var i = currentLevel; i <= maxLevelDepth; i++) {
		if(i == ROOT_LEVEL_INDEX) continue;
		
		$('#level-' + i + ' ul').each(function() {
		    var submenu = $(this);
		    
		    if(submenu.attr('id') == currentSubmenuId) {
			    return;
		    }	
		    
		    // aktive Links entfernen
		    submenu.find('a').removeClass('active');
		    submenu.removeClass('active');
		});
	    }
				    
	    var pageUid = eTarget.parents('li').attr('id');
	    
	    //console.log('opening submenu: #submenu-for-' + pageUid);
	    
	    var submenu = $('#submenu-for-' + pageUid);
	    if(submenu) {
		submenu.addClass('active');
		updateMenuContainerHeight(getCurrentHeight());
	    }
	}
	
	
	function moveMainNavTo(posY, animate) {		
	    if(animate) {
		$('#mainNav-menu').animate({
		    top: posY + 'px',
		    opacity: (posY == 0 ? 1 : 0),
		    easing: 'linear'
		}, 250);
	    }
	    else {
		$('#mainNav-menu').css('top', posY + 'px');
	    }
	}
	
	function resetAll() {
	    $('#mainNav-menu .active').removeClass('active');
	}
	
	function showDefaultActive() {
	    // Bugfix: TYPO3 fuegt den uls die defaultActive Klasse nicht hinzu, sondern nur den Links... wtf?!
	    $('#mainNav-menu a.defaultActive').parents('ul').addClass('defaultActive');
	    
	    $('#mainNav-menu .defaultActive').addClass('active');
	}
	
	function getMaxSubMenuItemCount() {
	    var maxMenuItemCount = 0;
	    
	    $('#mainNav-menu ul.active').each(function() {
		    var menuItemsCount = $(this).find('li').length;
		    
		    if(menuItemsCount > maxMenuItemCount) {
			    maxMenuItemCount = menuItemsCount;
		    }
	    });
	    
	    return maxMenuItemCount;
	}
	
	function getCurrentHeight() {
	    return getMaxSubMenuItemCount() * 30;
	}
	

	function updateMenuContainerHeight(newHeight) {
	    //$('#mainNav-menu-wrap').css('height', newHeight + 'px');
	    $('#mainNav-menu-wrap').animate({ height: newHeight + 'px' }, 250);
	}
	
	function insertSpanElements() {
	    $('#mainNav-menu-wrap a').each(function() {
		var anchor = this;
		var anchorText = anchor.innerHTML;
		
		var str = '';
		str += '<span class="no">' + anchorText + '</span>';
		str += '<span class="act">' + anchorText + '</span>';
		
		anchor.innerHTML = str;
	    });
	}
	
	
	
	function show(animate) {
	    if(!isHidden) return;
	    
	    isHidden = false;
	
	    showDefaultActive();

	    updateMenuContainerHeight(getCurrentHeight());
	    
	    moveMainNavTo(0, animate);
	}
	
	function hide(animate) {
	    if(isHidden) return;
	    
	    isHidden = true;
	    
	    moveMainNavTo(getCurrentHeight() * -1, animate);
	
	    // beim verstecken die höhe des containers wieder auf 0 setzen, sonst liegt das 
	    // ding ueberm content und links sind nicht clickbar
	    setTimeout(function() {
		updateMenuContainerHeight(0);
		resetAll();					
	    }, 250);
	}
	
	function draw() {
	    // Linktext duplizieren (fuer NO und ACT Status)
	    insertSpanElements();
	
	    // Schrift ersetzen
	    Cufon.replace('#mainNav-menu-wrap span', { fontFamily: 'Avenir-book' });
	    
	    // Events hinzufuegen, nur rollover, rollout wird nicht gebraucht
	    $('#mainNav-menu-wrap a').hover(linkRollover, function() {});
	}
	
	return {
	    draw: draw,
	    show: show,
	    hide: hide
	};
});


YAHOO.hhk.mainNav.Controller = (function() {
    var menu = null
    
    function triggerClick() {
	if($('#mainNav-trigger').hasClass('active')) {
	    hideMenu();
	}
	else {
	    showMenu();
	}
    }
    
    function hideMenu() {
	menu.hide(true);
	$('#mainNav-trigger').removeClass('active');
    }
    
    function showMenu() {
	menu.show(true);
	$('#mainNav-trigger').addClass('active');
    }
    
    function documentClick(eventObject) {
	var eTarget =$(eventObject.target);
	
	if(eTarget.attr('id') == 'mainNav-menu') {
		return;
	}
	
	if(eTarget.attr('id') == 'mainNav-trigger') {
		return;
	}
	
	if(eTarget.parents().index($('#mainNav-menu')) >= 0) {
		return;
	}
	
	if(eTarget.parents().index($('#mainNav-trigger')) >= 0) {
		return;
	}
	
	hideMenu();
    }
    
    $(document).ready(function() {
	menu = new YAHOO.hhk.mainNav.Menu();
	menu.draw();
	menu.hide(false);

	$(document).click(documentClick);
	$('#mainNav-trigger').click(triggerClick);
    });
})();