/**
 * @author jeanj
 */
var mootabs = new Class({

    initialize: function(element, titles, panels, options){
        this.options = Object.extend({
            duration: 1000,
            mouseOverClass: 'selected',
            activateOnLoad: 'none'
        }, options ||
        {});
        
        this.el = $(element);
        
        this.titles = $$(titles);
        this.panels = $$(panels);
               
        this.titles.each(function(item){
            item.addEvent('mouseover', function(){
                item.removeClass(this.options.mouseOverClass);
                this.activate(item);
            }
.bind(this));
            
            item.addEvent('mouseover', function(){
                if (item != this.activeTitle) {
                    item.addClass(this.options.mouseOverClass);
                }
            }
.bind(this));
            
            item.addEvent('mouseout', function(){
                if (item != this.activeTitle) {
                    item.removeClass(this.options.mouseOverClass);
                }
            }
.bind(this));
        }
.bind(this));
      
        if (this.options.activateOnLoad != 'none') {
            if (this.options.activateOnLoad == 'first') {
                this.activate(this.titles[0], true);
            }
            else {
                this.activate(this.options.activateOnLoad, true);
            }
        }
    },
    
    activate: function(tab, skipAnim){
        if (!$defined(skipAnim)) {
            skipAnim = false;
        }
        if ($type(tab) == 'element') {
            var newTab = tab.getProperty('title');
            this.panels.setStyle('display', 'none');
            this.activePanel = $(newTab);
            this.activePanel.setStyle('display', 'block');
            
            if (this.options.changeTransition != 'none' && skipAnim == false) {
                $(newTab).tween('opacity', 0, 1);                
            }
            this.titles.removeClass('selected');
            this.titles.getParent().removeClass('selected');  
			          
            tab.addClass('selected');            
            this.activeTitle = tab;
			
			if (tab.hasClass('selected')){
				tab.getParent().addClass('selected');
			}
        }
    },
    
    _getContent: function(){
        this.activePanel.setHTML(this.options.ajaxLoadingText);
        var newOptions = {
            update: this.activePanel.getProperty('id')
        };
        this.options.ajaxOptions = Object.extend(this.options.ajaxOptions, newOptions ||
        {});
        var tabRequest = new Ajax(this.options.ajaxUrl + '?tab=' + this.activeTitle.getProperty('title'), this.options.ajaxOptions);
        tabRequest.request();
    },
    
    next: function(){
        var nextTab = this.activeTitle.getNext();
        if (!nextTab) {
            nextTab = this.titles[0];
        }
        this.activate(nextTab);
    },
    
    previous: function(){
        var previousTab = this.activeTitle.getPrevious();
        if (!previousTab) {
            previousTab = this.titles[this.titles.length - 1];
        }
        this.activate(previousTab);
    }
});

