/*******************************************************************************
jquery.mb.components
Copyright (c) 2001-2010. Matteo Bicocchi (Pupunzi); Open lab srl, Firenze - Italy
email: mbicocchi@open-lab.com
site: http://pupunzi.com
Licences: MIT, GPL
http://www.opensource.org/licenses/mit-license.php
http://www.gnu.org/licenses/gpl.html
******************************************************************************/
/*
* Name:jquery.mb.scrollable
* Version: 1.7.0
*/
(function($) {
$.mbScrollable= {
plugin:"mb.scrollable",
author:"Matteo Bicocchi",
version:"1.7.0",
defaults:{
dir:"horizontal",
textDir:"ltr",
width:980,
elementsInPage:4,
elementMargin:2,
shadow:false,
height:"auto",
controls:"#controls",
slideTimer:600,
autoscroll:false,
scrollTimer:6000,
loadCallback:function(){},
nextCallback:function(){},
prevCallback:function(){},
changePageCallback:function(){}
},
buildMbScrollable: function(options){
return this.each (function (){
this.options = {};
$.extend (this.options, $.mbScrollable.defaults);
$.extend (this.options, options);
var mbScrollable=this;
mbScrollable.isVertical= mbScrollable.options.dir!="horizontal";
var controls=$(mbScrollable.options.controls);
mbScrollable.idx=1;
mbScrollable.scrollTo=0;
mbScrollable.elements= $(mbScrollable).children();
mbScrollable.elements.addClass("scrollEl");
controls.hide();
$(mbScrollable).children().each(function(){$(this).wrap("
");});
if (mbScrollable.options.shadow){
$(mbScrollable.elements).css("-moz-box-shadow",mbScrollable.options.shadow);
$(mbScrollable.elements).css("-webkit-box-shadow",mbScrollable.options.shadow);
}
mbScrollable.elements= $(mbScrollable).children();
var eip= mbScrollable.options.elementsInPage").css({width:mbScrollable.elementsDim, position:"relative"});
$(mbScrollable.elements).wrapAll(mbscrollableStrip);
mbScrollable.mbscrollableStrip=$(mbScrollable).find(".scrollableStrip");
$(mbScrollable.elements).hover(
function(){
// console.debug(mbScrollable.autoScrollActive);
if(mbScrollable.autoScrollActive)
$(mbScrollable).mbStopAutoscroll();
},
function(){
if(mbScrollable.autoScrollActive)
$(mbScrollable).mbAutoscroll();
});
if(mbScrollable.options.autoscroll && mbScrollable.elements.size()>mbScrollable.options.elementsInPage){
mbScrollable.autoScrollActive=true;
$(mbScrollable).mbAutoscroll();
}
$(mbScrollable).mbPageIndex();
$(mbScrollable).mbActivateControls();
setTimeout(function(){
$(".scrollEl").fadeIn();
},1000);
$(mbScrollable).mbManageControls();
});
},
mbNextPage: function(auto){
var mbScrollable= $(this).get(0);
if (!auto) mbScrollable.autoScrollActive=false;
if(mbScrollable.idx==mbScrollable.totalPages){
$(mbScrollable).mbManageControls();
return;
}
mbScrollable.idx+=1;
$(mbScrollable).goToPage(mbScrollable.idx,false);
if(mbScrollable.options.nextCallback)
mbScrollable.options.nextCallback(mbScrollable);
},
mbPrevPage: function(auto){
var mbScrollable= $(this).get(0);
if (!auto) mbScrollable.autoScrollActive=false;
if(mbScrollable.idx==1){
$(mbScrollable).mbManageControls();
return;
}
mbScrollable.idx-=1;
$(mbScrollable).goToPage(mbScrollable.idx,false);
if(mbScrollable.options.prevCallback)
mbScrollable.options.prevCallback(mbScrollable);
},
mbFirstPage: function(){
var mbScrollable= $(this).get(0);
mbScrollable.idx=1;
$(mbScrollable).goToPage(mbScrollable.idx,false);
},
mbLastPage: function(){
var mbScrollable= $(this).get(0);
mbScrollable.idx=mbScrollable.totalPages;
$(mbScrollable).goToPage(mbScrollable.idx,false);
},
mbPageIndex: function(){
var mbScrollable= $(this).get(0);
var controls=$(mbScrollable.options.controls);
var pages=controls.find(".pageIndex");
if (pages){
var n=0;
for(var i=1;i<=mbScrollable.totalPages;i++){
n++;
var p=$(" "+n+" <\/span>").bind("click",function(){
mbScrollable.autoScrollActive=false;
$(mbScrollable).goToPage($(this).html(),false)
});
pages.append(p);
}
}
},
mbAutoscroll:function(){
var dir= "next";
var mbScrollable= $(this).get(0);
mbScrollable.autoScrollActive=true;
if(mbScrollable.autoscroll) return;
var timer=mbScrollable.options.scrollTimer+mbScrollable.options.slideTimer;
mbScrollable.autoscroll = true;
mbScrollable.auto = setInterval(function(){
dir= mbScrollable.idx==1?"next":mbScrollable.idx==mbScrollable.totalPages?"prev":dir;
if(dir=="next")
$(mbScrollable).mbNextPage(true);
else
$(mbScrollable).mbPrevPage(true);
},timer);
$(mbScrollable).mbManageControls();
},
mbStopAutoscroll: function(){
var mbScrollable= $(this).get(0);
mbScrollable.autoscroll = false;
clearInterval(mbScrollable.auto);
$(mbScrollable).mbManageControls();
},
mbActivateControls: function(){
var mbScrollable=$(this).get(0);
if(mbScrollable.options.loadCallback)
mbScrollable.options.loadCallback(mbScrollable);
var controls=$(mbScrollable.options.controls);
controls.find(".first").bind("click",function(){$(mbScrollable).mbFirstPage();});
controls.find(".prev").bind("click",function(){$(mbScrollable).mbStopAutoscroll();$(mbScrollable).mbPrevPage();});
controls.find(".next").bind("click",function(){$(mbScrollable).mbStopAutoscroll();$(mbScrollable).mbNextPage();});
controls.find(".last").bind("click",function(){$(mbScrollable).mbLastPage();});
controls.find(".start").bind("click",function(){$(mbScrollable).mbAutoscroll();});
controls.find(".stop").bind("click",function(){$(mbScrollable).mbStopAutoscroll();mbScrollable.autoScrollActive=false;});
},
mbManageControls: function(){
var mbScrollable=$(this).get(0);
var controls=$(mbScrollable.options.controls);
if (mbScrollable.elements.size()<=mbScrollable.options.elementsInPage){
controls.hide();
}else{
controls.fadeIn();
}
if (mbScrollable.idx==mbScrollable.totalPages){
controls.find(".last, .next").addClass("disabled");
}else{
controls.find(".last, .next").removeClass("disabled");
}
if (mbScrollable.idx==1){
controls.find(".first, .prev").addClass("disabled");
}else{
controls.find(".first, .prev").removeClass("disabled");
}
if (mbScrollable.autoscroll){
controls.find(".start").addClass("sel");
controls.find(".stop").removeClass("sel");
}else{
controls.find(".start").removeClass("sel");
controls.find(".stop").addClass("sel");
}
controls.find(".page").removeClass("sel");
controls.find(".page").eq(mbScrollable.idx-1).addClass("sel");
controls.find(".idx").html(mbScrollable.idx+" / "+mbScrollable.totalPages);
},
goToPage: function(i,noAnim) {
var mbScrollable= $(this).get(0);
var anim= noAnim?0:mbScrollable.options.slideTimer;
if (i>mbScrollable.totalPages) i=mbScrollable.totalPages;
mbScrollable.scrollTo=-((mbScrollable.singleElDim+mbScrollable.options.elementMargin)*(mbScrollable.options.elementsInPage*(i-1)));
if(mbScrollable.isVertical){
if (mbScrollable.scrollTo<-mbScrollable.elementsDim+mbScrollable.options.height)
mbScrollable.scrollTo=-mbScrollable.elementsDim+mbScrollable.options.height;
$(mbScrollable.mbscrollableStrip).animate({marginTop:mbScrollable.scrollTo},anim);
}else{
if (mbScrollable.scrollTo<-mbScrollable.elementsDim+mbScrollable.options.width)
mbScrollable.scrollTo=-mbScrollable.elementsDim+mbScrollable.options.width;
$(mbScrollable.mbscrollableStrip).animate({marginLeft:mbScrollable.scrollTo},anim);
}
mbScrollable.idx = Math.floor(i);
$(mbScrollable).mbManageControls();
if (!mbScrollable.autoScrollActive)
$(mbScrollable).mbStopAutoscroll();
if(mbScrollable.options.changePageCallback)
mbScrollable.options.changePageCallback(mbScrollable)
}
};
$.fn.mbScrollable=$.mbScrollable.buildMbScrollable;
$.fn.mbNextPage=$.mbScrollable.mbNextPage;
$.fn.mbPrevPage=$.mbScrollable.mbPrevPage;
$.fn.mbFirstPage=$.mbScrollable.mbFirstPage;
$.fn.mbLastPage=$.mbScrollable.mbLastPage;
$.fn.mbPageIndex=$.mbScrollable.mbPageIndex;
$.fn.mbAutoscroll=$.mbScrollable.mbAutoscroll;
$.fn.mbStopAutoscroll=$.mbScrollable.mbStopAutoscroll;
$.fn.mbActivateControls=$.mbScrollable.mbActivateControls;
$.fn.mbManageControls=$.mbScrollable.mbManageControls;
$.fn.goToPage=$.mbScrollable.goToPage;
})(jQuery);