/*
 * .tabSwitch
 * Version: 1.0
 * http://www.hieu.co.uk/blog/index.php/tabswitch/
 *
 * Copyright (c) 2009 Hieu Pham - http://www.hieu.co.uk
 * COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
 * http://www.opensource.org/licenses/cddl1.php
 *
 * Date: 14/04/2009
 */
(function($){$.fn.tabSwitch=function(command,Arguements,EndFunction)
{
var defaults=
{type:"slide",cols:3,toggle:"fade",ease:40,easeType:"linear",loopback:1,width:400,height:400,index:0,speed:500,interval:5000,step:1,wrapperClass:"",viewportClass:""};
var Args=$.extend(defaults,Arguements);
var Obj=this;var jFirstObj=Obj.eq(1);
var DOMFirstObj=Obj.eq(1).get(0);
if(!$.isFunction(EndFunction))
{
var Callback=function()
{
$.data(DOMFirstObj,"index",Args.index)}
}
else
{
var Callback=function()
{
$.data(DOMFirstObj,"index",Args.index);
EndFunction()}}StoreToCache=function()
{$.data(DOMFirstObj,"type",Args.type);
$.data(DOMFirstObj,"toggle",Args.toggle);
$.data(DOMFirstObj,"cols",Args.cols);
$.data(DOMFirstObj,"ease",Args.ease);
$.data(DOMFirstObj,"easeType",Args.easeType);
$.data(DOMFirstObj,"index",Args.index);
$.data(DOMFirstObj,"loopback",Args.loopback);
if(jFirstObj.attr("style"))
{
$.data(DOMFirstObj,"orgAttr",jFirstObj.attr("style"))
}
else
{
$.data(DOMFirstObj,"orgAttr","")}
};
backFromCache=function(){Obj.attr("style",$.data(DOMFirstObj,"orgAttr"));
var ViewPortObj=$("#ViewPort"+$.data(DOMFirstObj));
ViewPortObj.replaceWith(Obj);
stopAuto();$.removeData(DOMFirstObj)};
var createTab=function(){StoreToCache();
if(Args.width){Obj.width(Args.width)}if(Args.height){Obj.height(Args.height)}
var WraperSelector="WideDiv"+$.data(DOMFirstObj);Obj.wrapAll("<div id='"+WraperSelector+"'></div>");
var WraperObj=$("#"+WraperSelector);
WraperObj.addClass(Args.wraperClass);
WraperObj.css({position:"relative"});
WraperObj.wrap("<div id='"+WraperSelector.replace("WideDiv","ViewPort")+"'></div>");
var ViewPortObj=$("#"+WraperSelector.replace("WideDiv","ViewPort"));
ViewPortObj.width(Args.width);ViewPortObj.height(Args.height);
ViewPortObj.css({display:"block",overflow:"hidden",position:"relative"});
ViewPortObj.addClass(Args.viewportClass);
switch(Args.type){case"slide":Obj.css({"float":"left"});
WraperObj.width((Args.width+2)*Obj.length);break;case"scroll":WraperObj.width(Args.width);
WraperObj.height((Args.height+2)*Obj.length);break;case"toggle":WraperObj.width(Args.width);
WraperObj.height(Args.height);Obj.css({position:"absolute",left:"-999px"});Obj.eq(Args.index).css({left:"0px",top:"0px"});
Obj.eq(Args.index).css("opacity",1);
break;case"table":WraperObj.width(Args.width*Args.cols);
Obj.css("float","left")}moveTo()};
var moveTo=function(){
var ease=0;
if(!Args.easeType){Args.easeType=(DOMFirstObj,"easeType")
}if(Args.index>Obj.length-1)
{
if($.data(DOMFirstObj,"loopback")!=0)
{Args.index=0;ease=-$.data(DOMFirstObj,"ease")
}else
{return}
}if(Args.index<0){if($.data(DOMFirstObj,"loopback")!=0){Args.index=Obj.length-1;ease=$.data(DOMFirstObj,"ease")
}else
{return}}var WraperSelector="WideDiv"+$.data(DOMFirstObj);
var WraperObj=$("#"+WraperSelector);
switch($.data(DOMFirstObj,"type")){case"slide":if(ease!=0){var easeLevel=(parseInt(WraperObj.css("left").replace("px",""))+ease);
WraperObj.animate({left:easeLevel+"px"},Args.speed,function(){WraperObj.animate({left:-(Obj.outerWidth(true)*Args.index)+"px"},Args.speed,Args.easeType,Callback())
})
}else{WraperObj.animate({left:-(Obj.outerWidth(true)*Args.index)+"px"},Args.speed,Args.easeType,Callback())}break;
case"scroll":if(ease!=0){var easeLevel=(parseInt(WraperObj.css("top").replace("px",""))+ease);
WraperObj.animate({top:easeLevel+"px"},
Args.speed,
function(){WraperObj.animate({top:-(Obj.outerHeight(true)*Args.index)+"px"},
Args.speed,Args.easeType,Callback())})}
else{
WraperObj.animate({top:-(Obj.outerHeight(true)*Args.index)+"px"}
,Args.speed,Args.easeType,Callback())}break;case"toggle":Obj.eq(Args.index).css({left:"0px",top:"0px"});
switch($.data(DOMFirstObj,"toggle"))
{
case"fade":Obj.eq(Args.index).css({opacity:0});Obj.eq(Args.index).animate({opacity:1},Args.speed);
if($.data(DOMFirstObj,"index")!=Args.index){Obj.eq($.data(DOMFirstObj,"index")).animate({opacity:0},
Args.speed,function(){$(this).css("left",-999);Callback()})}break;case"toggle":
if($.data(DOMFirstObj,"index")!=Args.index){Obj.eq(Args.index).css({display:"none"});
Obj.eq($.data(DOMFirstObj,"index")).slideUp(Args.speed,function(){Obj.eq(Args.index).slideDown(Args.speed,function()
{Callback()});$(this).css("left",-999)})}break;
case"show":if($.data(DOMFirstObj,"index")!=Args.index){Obj.eq(Args.index).css({display:"none"});
Obj.eq($.data(DOMFirstObj,"index")).hide(Args.speed,function(){Obj.eq(Args.index).show(Args.speed,function(){Callback()});
$(this).css("left",-999)})}break;
case"noeffect":if($.data(DOMFirstObj,"index")!=Args.index){Obj.eq($.data(DOMFirstObj,"index")).css("left",-999);Callback()}break}break;
case"table":var cols=$.data(DOMFirstObj,"cols");var nextX=-(Args.index%cols)*Obj.width();var nextY=-Math.floor(Args.index/cols)*Obj.height();WraperObj.animate({left:nextX},Args.speed,Args.easeType,function(){WraperObj.animate({top:nextY},Args.speed,Args.easeType,Callback())});
break;default:$("html,body").animate({scrollTop:Obj.eq(Args.index).offset().top},Args.speed);break}};moveStep=function(){var currentIdx=$.data(DOMFirstObj,"index");Args.index=parseInt(currentIdx)+parseInt(Args.step);moveTo()};startAuto=function(){$.data(DOMFirstObj,"AutoSwitch",setInterval(moveStep,Args.interval))};
stopAuto=function(){clearInterval($.data(DOMFirstObj,"AutoSwitch"));$.removeData(DOMFirstObj,"AutoSwitch")};toggleAuto=function(){if(isAuto()){stopAuto()}else{startAuto()}};isAuto=function(){if($.data(DOMFirstObj,"AutoSwitch")){return true}else{return false}};if(!command){command=""}switch(command.toLowerCase()){
case"index":if($.data(DOMFirstObj,"index")){return $.data(DOMFirstObj,"index")}
else{return 0}break;case"moveto":moveTo();
break;case"movestep":moveStep();
break;case"destroy":backFromCache();
break;case"create":createTab();
break;case"isauto":return isAuto();
break;case"toggleauto":toggleAuto();
break;case"startauto":startAuto();
break;case"stopauto":stopAuto();
break}}})(jQuery);
