var MenuHandler = Class.create({
    initialize: function(triggerobj, displayobj) {
        this.triggerobj = $(triggerobj);
        this.displayobj = $(displayobj);
        this.timerid = null;
        this.visible = false;
        Event.observe(this.triggerobj, 'mouseover', this.open.bind(this));
    },

    open: function() {
        var that = this;
        if (this.timerid) { clearTimeout(this.timerid); }
        Event.stopObserving(this.triggerobj, 'mouseover');
        Effect.Appear(
            this.displayobj, 
            { afterFinish: function() {
                Event.observe(that.displayobj, 'mouseout', that.close.bind(that));
                Event.observe(that.displayobj, 'mouseover', that.stay.bind(that));
            }});
    },

    stay: function() {
        if (this.timerid) { clearTimeout(this.timerid); }
    },
        
    close: function() {
        if (this.timerid) { clearTimeout(this.timerid); }
        this.timerid = setTimeout(this.cease.bind(this), 100);
    },

    cease: function() {
        var that = this;
        if (this.timerid) { clearTimeout(this.timerid); }
        Event.stopObserving(this.displayobj, 'mouseout');
        Effect.Fade(
            this.displayobj, 
            { afterFinish: function() {
                Event.observe(that.triggerobj, 'mouseover', that.open.bind(that));
            }});
    },
});


var TabHandler = Class.create({
    initialize: function(tabcontainer) {
        var click = this.click.bind(this);
        this.tabs = Element.select($(tabcontainer), 'ul.tablist li.tab');
        this.boxes = Element.select($(tabcontainer), 'div.tabbox');
        $A(this.tabs).each(function(i) {
            Event.observe(i, 'click', click)
        });
    },

    click: function(e) {
        var t = e.target;
        if (t.tagName == 'A') {
            var c = 0;
            do { 
                c++; 
                t = t.parentNode ; 
            } while ((t.tagName != 'LI') && (c < 4));
        }
        var f = t.getAttribute('for');

        $A(this.tabs).each(function(i) {
            if ((i == t) && (! (Element.hasClassName(i, 'activetab')))) {
                Element.addClassName(i, 'activetab');
            }
            if ((i != t) && (Element.hasClassName(i, 'activetab'))) {
                Element.removeClassName(i, 'activetab');
            }
        });

        $A(this.boxes).each(function(i) {
            var id = i.getAttribute('id');
            if ((id == f) && (! (Element.hasClassName(i, 'activetab')))) {
                Element.addClassName(i, 'activetab');
            }
            if ((id != f) && (Element.hasClassName(i, 'activetab'))) {
                Element.removeClassName(i, 'activetab');
            }
        });
        Event.stop(e);
        return false;
    }
});

Event.observe(window, 'load', function() {
    var menu = new MenuHandler('rssbox', 'feedbox');
    var tabs = new TabHandler('cattabs');
});

