qtabs.js 3.09 KB
/**
 * QTabs for Mootools 1.11
 *
 * @version 1.0.0
 * @package qtabs
 * @author Massimo Giagnoni ( http://www.latenight-coding.com )
 * @copyright Copyright (C) 2008 Massimo Giagnoni. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/

var QTabs = new Class({
    options:{
		flexHeight:false,
		def_tab:0,
		autoplay:0,
		scrolling:0,
		delay:3000,
		duration:500,
		transition:'Quad',
		easing:'easeInOut',
		onActive: function(container, idx){
			var content = this.tcontents[idx];
			var s = container.getSize();
			var cw = s.size.x;
			if(this.options.flexHeight) {
				s = content.getSize();
				container.setStyle('height', s.size.y + 'px');
			}
					
			var d = (this.curTab >= 0 ? this.options.duration : 1);
			var sdir = this.options.scrolling;
			if(sdir == 'a') {
				if(idx > this.curTab) {
					sdir = 'lr';
				} else {
					sdir = 'rl';
				}	
			}
			var lft = [0,0];
			switch(sdir) {
				case 'lr':
					lft = [-cw,0];
					break;
				case 'rl':
					lft = [cw,0];
					break;
			}
	              
			this.fxOn = true;
			if(this.options.transition == 'linear') {
				var t = Fx.Transitions[this.options.transition];
			} else {
				var t = Fx.Transitions[this.options.transition][this.options.easing];
			}
			content.effects({
				duration: d,
				transition: t
			}).start({
				top: [0,0],
				left: lft,
				opacity: [1,1]
			});
			this.fxEnd.delay(d, this);
			this.tabs[idx].addClass('open').removeClass('closed');
		},

		onBackground: function(tab, content){
			content.setStyle('display', 'none');
			tab.addClass('closed').removeClass('open');
		}
    },

    initialize: function(m_id, options){
        
        this.setOptions(options);
        this.tabs = $('qtabs-'+ m_id).getElements('li')
        this.container = $('current-'+ m_id);
        this.tcontents = this.container.getElements('div.qtcontent');
		
		for (var i = 0, l = this.tabs.length; i < l; i++){
            var tab = this.tabs[i];
            tab.addEvent('click', this.display.bind(this, i));
            tab.addEvent('mouseenter', this.mouseEnter.bind(this, i));
            tab.addEvent('mouseleave', this.mouseLeave.bind(this, i));
        }
		this.curTab = -1;
		this.display(this.options.def_tab);

    },

    display: function(i){
    	if(i < 0 || i >= this.tabs.length) { i=0; }
        if(this.curTab == i || this.fxOn) {return;}
        
        $clear(this.timer);
        for (var c = 0, l = this.tabs.length; c < l; c++){
            if (c != i) {
            	this.tabs[c].addClass('closed').removeClass('open');
            } 
            this.tcontents[c].setOpacity(0);
        }
        this.fireEvent('onActive', [this.container, i]);
        this.curTab = i;
    },
    mouseEnter: function(i){
    	this.tabs[i].addClass('hover');
    },
    mouseLeave: function(i){
    	this.tabs[i].removeClass('hover');
    },
    fxEnd: function() {
		this.fxOn = false;
		if(this.options.autoplay) {
			var i = this.curTab + 1;
			if(i >= this.tcontents.length) {
				i = 0;
			}
			this.timer = this.display.delay(this.options.delay, this, i);
		}
	}
});

QTabs.implement(new Events);
QTabs.implement(new Options);