YAHOO.namespace('gp');
YAHOO.namespace('gp.event');

/* -- Custom Events -- */
YAHOO.gp.event.OnMainNavMouseOver = new YAHOO.util.CustomEvent('OnMainNavMouseOver');
YAHOO.gp.event.OnMainNavMouseOut = new YAHOO.util.CustomEvent('OnMainNavMouseOut');



/* -- Branches Navigation -- */
YAHOO.gp.BranchesNav = (function() {
	var container = document.getElementById('branchesNav');
	var links = container.getElementsByTagName('a');
	var lis = container.getElementsByTagName('li');

    function documentMouseHandler(e) {
    	var eTarget = YAHOO.util.Event.getTarget(e);

    	var ancestor = YAHOO.util.Dom.getAncestorBy(eTarget, function(el) {
    		return YAHOO.util.Dom.hasClass(el, 'branchesNav-link');
    	});

		if(YAHOO.util.Dom.hasClass(eTarget, 'branchesNav-link') || ancestor != null) {
			handleLinkMouseOver(YAHOO.util.Dom.hasClass(eTarget, 'branchesNav-link') ? eTarget : ancestor);
		}
		else {
			handleLinkMouseOut();
		}
    }

	function removeActiveState() {
		for(var i = 0; i < lis.length; i++) {
			var curEl = lis[i];
			setInActive(curEl);
		}
	}

    function handleLinkMouseOver(link) {
    	removeActiveState();
    	setActive(link.parentNode);
    }

    function handleLinkMouseOut() {
    	resetState();
    }

	function setActive(el) {
		YAHOO.util.Dom.addClass(el, 'active');
	}

	function setInActive(el) {
		YAHOO.util.Dom.removeClass(el, 'active');
	}

	function resetState() {
		for(var i = 0; i < lis.length; i++) {
			var curEl = lis[i];

			if(YAHOO.util.Dom.hasClass(curEl, 'defaultActive')) {
				setActive(curEl);
			}
			else {
				setInActive(curEl);
			}
		}
	}

	YAHOO.util.Event.addListener(document.documentElement, "mouseover", documentMouseHandler);

	return {};
});

YAHOO.util.Event.onContentReady("branchesNav", function () {
	var branchesNav = new YAHOO.gp.BranchesNav();
});


/* -- Content Overlay -- */
YAHOO.gp.ContentOverlay = (function() {
	var overlayElement = createOverlayElement();
	var isVisible = false;

	function createOverlayElement() {
		var imgSrc = gp_baseUrl + 'typo3conf/ext/gp/res/img/bg-overlay.png';

		var content = '';

		if(YAHOO.env.ua.ie) {
			content += '<span style="width:930px;height:410px;display:inline-block;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + imgSrc + '\');">';
			content += '<img style="filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" src="' + imgSrc + '" width="930" height="410" border="0" alt=""></span>';
		}
		else {
			content += '<img src="' + imgSrc + '" alt="" style="width:930px;height:410px;" />';
		}

		var div = document.createElement('div');
		div.id = 'contentOverlay';
		div.innerHTML =content;

		document.getElementById('mainWrapper').appendChild(div);

		return div;
	}

	function show() {
		if(isVisible) {
			return;
		}

		//YAHOO.util.Dom.setStyle(overlayElement, 'display', 'block');


		YAHOO.util.Dom.addClass(document.body, 'overlayInAction');

		isVisible = true;

 		var myAnim = new YAHOO.util.Anim(overlayElement, { opacity: { to: 1, from: 0 } }, 0.5, YAHOO.util.Easing.easeOut);
 		myAnim.onStart.subscribe(function() {
 			YAHOO.util.Dom.setStyle(this.getEl(), 'opacity', 0);
 			YAHOO.util.Dom.setStyle(this.getEl(), 'display', 'block');
 		});
		myAnim.animate();

	}

	function hide() {
 		if(!isVisible) {
			return;
		}

		YAHOO.util.Dom.removeClass(document.body, 'overlayInAction');

		//YAHOO.util.Dom.setStyle(overlayElement, 'display', 'none');

 		var myAnim = new YAHOO.util.Anim(overlayElement, { opacity: { to: 0 } }, 0.5, YAHOO.util.Easing.easeOut);
 		myAnim.onComplete.subscribe(function() {
 			YAHOO.util.Dom.setStyle(this.getEl(), 'display', 'none');
 			isVisible = false;
 		});
		myAnim.animate();

	}

	YAHOO.gp.event.OnMainNavMouseOver.subscribe(show);
	YAHOO.gp.event.OnMainNavMouseOut.subscribe(hide);

	return {};
});

YAHOO.util.Event.onDOMReady(function () {
	var contentOverlay = new YAHOO.gp.ContentOverlay();
});



/* -- Hauptnavigation -- */
YAHOO.gp.MainNav = (function() {
    var navBar = new YAHOO.widget.MenuBar("mainNav", {
        autosubmenudisplay: true,
        hidedelay: 700,
        lazyload: false,
		shadow: true
	});

    navBar.render();

    var timeout = null;

    function handleMainNavMouseOver() {
    	resetTimeout();
    	YAHOO.gp.event.OnMainNavMouseOver.fire();
    }

    function handleMainNavMouseOut() {
		resetTimeout();
		renewTimeout();
    }

    function resetTimeout() {
		if(timeout != null) {
			timeout.cancel();
		}
    }

	function renewTimeout() {
		timeout = YAHOO.lang.later(150, null, function() {
	    	YAHOO.gp.event.OnMainNavMouseOut.fire();
	    });
	}

	function triggerEvents(eTarget) {
    	var ancestor = YAHOO.util.Dom.getAncestorBy(eTarget, function(el) {
    		return YAHOO.util.Dom.hasClass(el, 'yuimenu');
    	});

		if(ancestor == null) {
			handleMainNavMouseOut();
		}
		else {
			handleMainNavMouseOver();
		}
	}

    function documentMouseHandler(e) {
    	var eTarget = YAHOO.util.Event.getTarget(e);
		triggerEvents(eTarget);
    }

	YAHOO.util.Event.addListener(document.documentElement, "mousemove", documentMouseHandler);
	YAHOO.lang.later(150, null, function() {
		var activeSubNavElements = YAHOO.util.Dom.getElementsByClassName('yuimenuitem-selected', 'li', 'mainNav');

		if(activeSubNavElements.length == 1) {
			triggerEvents(activeSubNavElements[0]);
		}
	}, null, true);

	return {};
});


YAHOO.util.Event.onContentReady("mainNav", function () {
	var mainNav = new YAHOO.gp.MainNav();
});







