/**
 * tools.tabs 1.0.4 - Tabs done right.
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/tabs.html
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch  : November 2008
 * Date: ${date}
 * Revision: ${revision} 
 */  
(function($){$.tools=$.tools||{};$.tools.tabs={version:'1.0.4',conf:{tabs:'a',current:'current',onBeforeClick:null,onClick:null,effect:'default',initialIndex:0,event:'click',api:false,rotate:false},addEffect:function(name,fn){effects[name]=fn}};var effects={'default':function(i,done){this.getPanes().hide().eq(i).show();done.call()},fade:function(i,done){var conf=this.getConf(),speed=conf.fadeOutSpeed,panes=this.getPanes();if(speed){panes.fadeOut(speed)}else{panes.hide()}panes.eq(i).fadeIn(conf.fadeInSpeed,done)},slide:function(i,done){this.getPanes().slideUp(200);this.getPanes().eq(i).slideDown(400,done)},ajax:function(i,done){this.getPanes().eq(0).load(this.getTabs().eq(i).attr("href"),done)}};var w;$.tools.tabs.addEffect("horizontal",function(i,done){if(!w){w=this.getPanes().eq(0).width()}this.getCurrentPane().animate({width:0},function(){$(this).hide()});this.getPanes().eq(i).animate({width:w},function(){$(this).show();done.call()})});function Tabs(tabs,panes,conf){var self=this,$self=$(this),current;$.each(conf,function(name,fn){if($.isFunction(fn)){$self.bind(name,fn)}});$.extend(this,{click:function(i,e){var pane=self.getCurrentPane();var tab=tabs.eq(i);if(typeof i=='string'&&i.replace("#","")){tab=tabs.filter("[href*="+i.replace("#","")+"]");i=Math.max(tabs.index(tab),0)}if(conf.rotate){var last=tabs.length-1;if(i<0){return self.click(last,e)}if(i>last){return self.click(0,e)}}if(!tab.length){if(current>=0){return self}i=conf.initialIndex;tab=tabs.eq(i)}if(i===current){return self}e=e||$.Event();e.type="onBeforeClick";$self.trigger(e,[i]);if(e.isDefaultPrevented()){return}effects[conf.effect].call(self,i,function(){e.type="onClick";$self.trigger(e,[i])});e.type="onStart";$self.trigger(e,[i]);if(e.isDefaultPrevented()){return}current=i;tabs.removeClass(conf.current);tab.addClass(conf.current);return self},getConf:function(){return conf},getTabs:function(){return tabs},getPanes:function(){return panes},getCurrentPane:function(){return panes.eq(current)},getCurrentTab:function(){return tabs.eq(current)},getIndex:function(){return current},next:function(){return self.click(current+1)},prev:function(){return self.click(current-1)},bind:function(name,fn){$self.bind(name,fn);return self},onBeforeClick:function(fn){return this.bind("onBeforeClick",fn)},onClick:function(fn){return this.bind("onClick",fn)},unbind:function(name){$self.unbind(name);return self}});tabs.each(function(i){$(this).bind(conf.event,function(e){self.click(i,e);return false})});if(location.hash){self.click(location.hash)}else{if(conf.initialIndex===0||conf.initialIndex>0){self.click(conf.initialIndex)}}panes.find("a[href^=#]").click(function(e){self.click($(this).attr("href"),e)})}$.fn.tabs=function(query,conf){var el=this.eq(typeof conf=='number'?conf:0).data("tabs");if(el){return el}if($.isFunction(conf)){conf={onBeforeClick:conf}}var globals=$.extend({},$.tools.tabs.conf),len=this.length;conf=$.extend(globals,conf);this.each(function(i){var root=$(this);var els=root.find(conf.tabs);if(!els.length){els=root.children()}var panes=query.jquery?query:root.children(query);if(!panes.length){panes=len==1?$(query):root.parent().find(query)}el=new Tabs(els,panes,conf);root.data("tabs",el)});return conf.api?el:this}})(jQuery);
/**
 * jQuery TOOLS plugin :: tabs.slideshow 1.0.2
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/tabs.html#slideshow
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch  : September 2009
 * Date: ${date}
 * Revision: ${revision} 
 */
(function($){var t=$.tools.tabs;t.plugins=t.plugins||{};t.plugins.slideshow={version:'1.0.2',conf:{next:'.forward',prev:'.backward',disabledClass:'disabled',autoplay:false,autopause:true,interval:3000,clickable:false,api:false}};$.prototype.slideshow=function(conf){var globals=$.extend({},t.plugins.slideshow.conf),len=this.length,ret;conf=$.extend(globals,conf);this.each(function(){var tabs=$(this),api=tabs.tabs(),$api=$(api),ret=api;$.each(conf,function(name,fn){if($.isFunction(fn)){api.bind(name,fn)}});function find(query){return len==1?$(query):tabs.parent().find(query)}var nextButton=find(conf.next).click(function(){api.next()});var prevButton=find(conf.prev).click(function(){api.prev()});var timer,hoverTimer,startTimer,stopped=false;$.extend(api,{play:function(){if(timer){return}var e=$.Event("onBeforePlay");$api.trigger(e);if(e.isDefaultPrevented()){return api}stopped=false;timer=setInterval(api.next,conf.interval);$api.trigger("onPlay");api.next()},pause:function(){if(!timer){return api}var e=$.Event("onBeforePause");$api.trigger(e);if(e.isDefaultPrevented()){return api}timer=clearInterval(timer);startTimer=clearInterval(startTimer);$api.trigger("onPause")},stop:function(){api.pause();stopped=true},onBeforePlay:function(fn){return api.bind("onBeforePlay",fn)},onPlay:function(fn){return api.bind("onPlay",fn)},onBeforePause:function(fn){return api.bind("onBeforePause",fn)},onPause:function(fn){return api.bind("onPause",fn)}});if(conf.autopause){var els=api.getTabs().add(nextButton).add(prevButton).add(api.getPanes());els.hover(function(){api.pause();hoverTimer=clearInterval(hoverTimer)},function(){if(!stopped){hoverTimer=setTimeout(api.play,conf.interval)}})}if(conf.autoplay){startTimer=setTimeout(api.play,conf.interval)}else{api.stop()}if(conf.clickable){api.getPanes().click(function(){api.next()})}if(!api.getConf().rotate){var cls=conf.disabledClass;if(!api.getIndex()){prevButton.addClass(cls)}api.onBeforeClick(function(e,i){if(!i){prevButton.addClass(cls)}else{prevButton.removeClass(cls);if(i==api.getTabs().length-1){nextButton.addClass(cls)}else{nextButton.removeClass(cls)}}})}});return conf.api?ret:this}})(jQuery);
/**
 * jQuery TOOLS plugin :: tabs.history 1.0.2
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/tabs.html#history
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch  : September 2009
 * Date: ${date}
 * Revision: ${revision} 
 */
(function($){var t=$.tools.tabs;t.plugins=t.plugins||{};t.plugins.history={version:'1.0.2',conf:{api:false}};var hash,iframe;function setIframe(h){if(h){var doc=iframe.contentWindow.document;doc.open().close();doc.location.hash=h}}$.fn.onHash=function(fn){var el=this;if($.browser.msie&&$.browser.version<'8'){if(!iframe){iframe=$("<iframe/>").attr("src","javascript:false;").hide().get(0);$("body").append(iframe);setInterval(function(){var idoc=iframe.contentWindow.document,h=idoc.location.hash;if(hash!==h){$.event.trigger("hash",h);hash=h}},100);setIframe(location.hash||'#')}el.bind("click.hash",function(e){setIframe($(this).attr("href"))})}else{setInterval(function(){var h=location.hash;var els=el.filter("[href$="+h+"]");if(!els.length){h=h.replace("#","");els=el.filter("[href$="+h+"]")}if(els.length&&h!==hash){hash=h;$.event.trigger("hash",h)}},100)}$(window).bind("hash",fn);return this};$.fn.history=function(conf){var globals=$.extend({},t.plugins.history.conf),ret;conf=$.extend(globals,conf);this.each(function(){var api=$(this).tabs(),tabs=api.getTabs();if(api){ret=api}tabs.onHash(function(evt,hash){if(!hash||hash=='#'){hash=api.getConf().initialIndex}api.click(hash)});tabs.click(function(e){location.hash=$(this).attr("href").replace("#","")})});return conf.api?ret:this}})(jQuery);
