
function setFlashBanner(banner) {
    Event.observe(window, 'load', function() {
        var w = $('banner').clientWidth;
        var h = $('banner').clientHeight;
        swfobject.embedSWF(banner, 'banner-background', w, h, '9.0.0', null, null, { wmode: 'opaque' });
        Event.observe(window, 'resize', function() {
            var w = $('banner').clientWidth;
            var h = $('banner').clientHeight;
            $('banner-background').setAttribute('width', w);
            $('banner-background').setAttribute('height', h);
        });
    });
}

function showExtLinkTooltip(link) {
    //console.log('link-tooltip: showing tooltip');

    if (!link.linkTooltip) {
        var url = link.getAttribute('href');
        var tooltip = new Element('div', {
                style: 'display: none; position: absolute; top: 0px; left: 0px; z-index: 5000'
            });
        tooltip.addClassName('link-tooltip');
        tooltip.handlerInstalled = false;
        tooltip.isVisible = false;
        tooltip.appendChild(new Element('a', { href: url, target: '_blank' }).update('Link in neuem Fenster öffnen'));
        document.body.appendChild(tooltip);
        link.linkTooltip = tooltip;
    }

    var tooltip = link.linkTooltip;

    tooltip.myLink = link;

    var pos = link.cumulativeOffset();
    var y = pos['top']-tooltip.getHeight();
    var x = pos['left'];

    if (Prototype.Browser.Opera) {
        // correct some opera quirk related to padding on html element
        x -= 10;
    }

    var contentPos = $('content').cumulativeOffset();
    var right = contentPos['left']+$('content').getWidth()-10;

    var tw = tooltip.getWidth();
    if (x+tw > right) x = right-tw;
    //var tw = tooltip.getWidth();
    //var lw = link.getWidth();
    //
    //x += ((tw <= lw) ? (lw-tw) : (lw/2));

    tooltip.setStyle({
            top: y.toString()+'px',
            left: x.toString()+'px'
        });

    if (tooltip.hideEffect) {
        tooltip.hideEffect.cancel();
        tooltip.hideEffect = false;
    }

    if (!tooltip.isVisible) {
        Effect.Appear(tooltip, { from: 0.0, to: 0.8, duration: 0.2 });
        tooltip.isVisible = true;
    }
    else {
        tooltip.show();
        tooltip.setOpacity(0.8);
    }

    link.addClassName('hover');

    if (!tooltip.handlerInstalled) {
        Event.observe(tooltip, 'mouseover', onExtLinkTooltipMouseOver);
        Event.observe(tooltip, 'mouseout', onExtLinkTooltipMouseOut);
        tooltip.handlerInstalled = true;
    }
}

function hideExtLinkTooltip(link) {
    if (!link.linkTooltip) return;

    //console.log('link-tooltip: hiding tooltip');

    var tooltip = link.linkTooltip;

    if (!tooltip.myLink) return; // tooltip not visible

    if (tooltip.hideEffect) {
        tooltip.hideEffect.cancel();
        tooltip.setOpacity(0.8);
    }

    tooltip.hideEffect = Effect.Fade(tooltip, {
            from: 0.8,
            to: 0.0,
            delay: 0.3,
            duration: 0.2,
            afterFinish: function() {
                    if (tooltip.handlerInstalled) {
                        Event.stopObserving(tooltip, 'mouseover', onExtLinkTooltipMouseOver);
                        Event.stopObserving(tooltip, 'mouseout', onExtLinkTooltipMouseOut);
                        tooltip.handlerInstalled = false;
                    }
                    tooltip.hide();
                    tooltip.hideEffect = false;
                    tooltip.myLink = false;
                }
        });

    /*
    if (Prototype.Browser.IE) {
        Event.stopObserving(tooltip.childNodes[0], 'mouseout', onExtLinkTooltipMouseOut);
    }
    */

    link.removeClassName('hover');
}

function onExtLinkMouseOver(ev) {
    var target = Event.element(ev);
    showExtLinkTooltip(target);
}

function onExtLinkMouseOut(ev) {
    var target = Event.element(ev);
    var toEl = ev.relatedTarget || ev.toElement;

    //console.log('link-tooltip: mouseout from link (toEl='+toEl+')');

    while (toEl && toEl.className != 'link-tooltip') {
        toEl = toEl.parentNode;
    }

    if (toEl && (toEl == target.linkTooltip)) {
        //console.log('link-tooltip: skipping (mouse moved to tooltip)');
        return;
    }

    hideExtLinkTooltip(target);
}

function onExtLinkTooltipMouseOver(ev) {
    var target = Event.element(ev);

    //console.log('link-tooltip: mouseover from tooltip');

    while (target && target.className != 'link-tooltip') {
        target = target.parentNode;
    }

    if (!target || !target.myLink) return false;

    showExtLinkTooltip(target.myLink);
}

function onExtLinkTooltipMouseOut(ev) {
    var target = Event.element(ev);
    var toEl = ev.relatedTarget || ev.toElement;

    //console.log('link-tooltip: mouseout from tooltip (toEl='+toEl+')');

    while (target && target.className != 'link-tooltip') {
        target = target.parentNode;
    }

    if (!target || !target.myLink) return false;

    if (toEl && (toEl == target || toEl.descendantOf(target))) {
        //console.log('link-tooltip: skipping (mouse moved to child)');
        return;
    }

    if (toEl && (toEl == target.myLink || toEl.descendantOf(target.myLink))) {
        //console.log('link-tooltip: skipping (mouse moved to link)');
        return;
    }

    hideExtLinkTooltip(target.myLink);
}

function showSearchHint(item) {
    item.setStyle({ color: '#5a5a5a' });
    item.value = 'Suchen nach...';
}

function hideSearchHint(item) {
    item.setStyle({ color: '#000' });
    item.value = '';
}

Event.observe(window, 'load', function() {
    $$('#nav-about ul li ul').each(function(item) { Element.setOpacity(item, 0.8); });

    $$('a[rel="external"]').each(function(item) {
        Event.observe(item, 'mouseover', onExtLinkMouseOver);
        Event.observe(item, 'mouseout', onExtLinkMouseOut);
    });

    var sword = $('searchbox-sword');
    if (sword) {
        showSearchHint(sword);
        sword.mHintShown = true;
        Event.observe(sword, 'focus', function() {
            if (this.mHintShown) {
                this.mHintShown = false;
                hideSearchHint(this);
            }
        });
        Event.observe(sword, 'blur', function() {
            if (this.value == '') {
                this.mHintShown = true;
                showSearchHint(this);
            }
        });
    }

    /*
    if (typeof getPageScroll == 'function') { // override internal lightbox function
        var orig_getPageScroll = getPageScroll;
        var offset = parseInt($('page').getStyle('margin-top')) + parseInt($('page').getStyle('padding-top'));
        offset += 100;
        getPageScroll = function() {
            var xScroll, yScroll;

            if (self.pageYOffset) {
                yScroll = self.pageYOffset;
                xScroll = self.pageXOffset;
            }
            else if (document.documentElement && document.documentElement.scrollTop) {
                yScroll = document.documentElement.scrollTop;
                xScroll = document.documentElement.scrollLeft;
            }
            else if (document.body) {
                yScroll = document.body.scrollTop;
                xScroll = document.body.scrollLeft;
            }

            //console.log('x: '+xScroll+' y: '+yScroll);

            yScroll -= offset;

            return new Array(xScroll, yScroll);
        };
    }
    */
});
