//Maybe this could be done shorter, but I hope checking IE too makes it more reliable
Object.extend(Prototype.Browser, {
    IE6: Prototype.Browser.IE && (typeof window.XMLHttpRequest == "undefined"),
    IE7: Prototype.Browser.IE && (typeof window.XMLHttpRequest == "object")
});

// JavaScript Document
var Observer = Class.create({

    initialize: function(){
        this.observer();
        
        if (Prototype.Browser.IE6) {
            this.ie6fix();
        }
    },
    /**
     * @projectDescription IE6 Hover-Navigation Fix!
     */
    ie6fix: function(){
    
        function rollOver(e){
            var element = Event.element(e);
            
            var elsub = (element.up('.submenu') == null) ? element.up('.submenu') : element.up('.submenu');
            var el = (element.up('li.menu') == null) ? element.up('li.active') : element.up('li.menu');
            if (elsub != null) {
                /* alert(element.up('.submenu').inspect());
                 alert(element.up('.submenu').up('li.menu').inspect());*/
                if (elsub.id != null && $(elsub.id + "_child")) {
                    if ($(elsub.id + "_child").visible() == false) {
                        $(elsub.id + "_child").show();
                    }
                }
            }
            else 
                if (el != null) {
                    
                    $("navigation").select("li").each(function(pair){
                        if ($(pair.id + "_child")) {
                            if ($(pair.id + "_child").visible()) {
                                $(pair.id + "_child").hide();
                            }
                        }
                    });
                    if (el.id != null && $(el.id + "_child")) {
                        //alert(el.inspect());
                        if ($(el.id + "_child").visible() == false) {
                            $(el.id + "_child").show();
                        }
                    //	new Event.observe(el, 'mouseover',rollOver.bindAsEventListener(this));
                    //	new Event.observe(el, 'mouseout', rollOff.bindAsEventListener(this));
                    }
                }
        }
        $("navigation").select("li").each(function(pair){
            if ($(pair.id + "_child")) {
                if ($(pair.id + "_child").visible()) {
                    $(pair.id + "_child").hide();
                }
            }
        });
        new Event.observe($("navigation"), 'mouseover', rollOver.bindAsEventListener(this));
    },
    observer: function(){
        // allgemeiner Observer
        function handle(e){
        
            var parent = Event.element(e).parentNode.nodeName.toLowerCase();
            var parentId = Event.element(e).parentNode.id.toLowerCase();
            
            var element = Event.element(e).tagName.toLowerCase();
            var elementId = Event.element(e).id.toLowerCase();
            
            if (parentId.search('opener') != -1 && elementId.search('opener') == -1) {
                element = 'li';
                elementId = parentId;
                
            }
            if (elementId.search('opener') != -1) {
                this.setElementActive(elementId);
                
            }
            //alert(parent + '\nClick on a ' + element+elementId);
        }
        new Event.observe(document.body, 'click', handle.bindAsEventListener(this));
        
    },
    setElementActive: function(elementId){
    
        var noeffect = false;
        
        var child = elementId.sub('opener', 'child');
        var effect = 'blind'
        
        if (elementId.search('opener') != -1) {
            if ($(child).readAttribute('effect') == "appear") {
                effect = 'appear';
            }
            else 
                if ($(child).readAttribute('effect') == "slide") {
                    effect = 'slide';
                }
                else 
                    if ($(child).readAttribute('effect') == "no") {
                        noeffect = true;
                    }
            if ($(elementId).tagName.toLowerCase().search('li') != -1) {
                var childId = $(elementId).parentNode.id.toLowerCase();
                
                var parentChildId = $(childId).parentNode.id.toLowerCase();
                if ($(parentChildId).visible() == false) {
                    var parentParentId = parentChildId.sub('child', 'opener');
                    alert(parentParentId + ':' + parentChildId);
                    Effect.toggle(parentChildId, effect, {
                        duration: 0.5
                    });
                    changeImage(parentChildId, parentParentId);
                }
                if ($(childId).visible() == false) {
                    var parentId = childId.sub('child', 'opener');
                    //alert (parentId+':'+childId);
                    Effect.toggle(childId, effect, {
                        duration: 0.5,
                        delay: 0.4
                    });
                }
                $$('li.active').each(function(s){
                    $(s).removeClassName('active')
                });
                /*alert (parentParentId+':'+parentChildId+'\n'+
                 parentId+':'+childId+'\n'+
                 elementId+':'+$(elementId).tagName.toLowerCase());*/
                $(elementId).addClassName('active');
            }
            if (noeffect == false) {
                //alert('Click on a ' + elementId+$(elementId).tagName);
                Effect.toggle(child, effect, {
                    duration: 0.5
                });
            }
        }
    }
});
new Observer();
