var tbCarousel = new Class({
Implements: [Options,Events],
options: {
container:null,
innerContainer:null,
navContainer:null,
navButtons:null,
slidesSelector:'a.slide',
rows:null,
maxWidth:null
},
initialize: function(options){
var _this=this;
this.setOptions(options);
this.actualPage=0;
this.running=false;
//this.calcSizes();
//this.buildNav();
this.addTouchSupport();
/* this.carousel=new Fx.Scroll.Carousel(this.options.container,{
mode:'horizontal',
link:'ignore',
childSelector:this.options.slidesSelector,
loopOnScrollEnd:true
});
this.carousel.addEvent('onShow',function(index){_this.setActive(index)});
*/
this.carousel=new Fx.Scroll(this.options.container,{
link:'ignore',
onStart:function(){
_this.running=true;
_this.setActive(_this.actualPage);
},
onComplete:function(){
_this.running=false;
}
});
//this.toPage(0);
window.addEvent('resize:pause(500)',function(){
if($(_this.options.container)){
if(!_this.options.maxWidth||$(document.body).getSize().x<_this.options.maxWidth){
_this.calcSizes();
_this.buildNav();
_this.toPage(0);
}
else{
$(_this.options.container).getElement('div.inner').setStyle('width','auto');
$(_this.options.navContainer).setStyle('visibility','hidden');
//$(_this.options.navContainer).getElement('a.prev').setStyle('visibility','hidden');
if($(_this.options.navContainer).getElement('a.prev')){
$(_this.options.navContainer).getElement('a.prev').addClass('disabled');
}
//$(_this.options.navContainer).getElement('a.next').setStyle('visibility','hidden');
if($(_this.options.navContainer).getElement('a.next')){
$(_this.options.navContainer).getElement('a.next').addClass('disabled');
}
}
}
});
window.fireEvent('resize');
},
calcSizes: function(){
this.pageWidth=$(this.options.container).getSize().x;
var cellSize=$(this.options.container).getElement(this.options.slidesSelector).getSize();
var rows=parseInt((this.options.rows)?this.options.rows:$(this.options.container).getSize().y/cellSize.y);
var cols=Math.floor(this.pageWidth/cellSize.x);
var slidesAmount=$(this.options.container).getElements(this.options.slidesSelector).length;
this.maxPages=Math.ceil(Math.ceil(slidesAmount/rows)/cols);
$(this.options.container).getElements(this.options.slidesSelector).each(function(el,i){
el.setProperty('data-page',parseInt(i/(rows*cols)));
});
var innerWidth=this.maxPages*this.pageWidth;
//console.log(this.maxPages,this.pageWidth);
//console.log(this.pageWidth,cellSize.x,cols);
$(this.options.container).getElement('div.inner').setStyle('width',innerWidth);
},
buildNav: function(){
if(this.options.navContainer){
if(this.maxPages>1){
this.actualPage=0;
$(this.options.navContainer).set('html','').setStyle('visibility','visible');
var _this=this;
new Element('a',{href:'#',class:'triangle prev',html:''})
.addEvent('click',function(e){
e.stop();
this.previousPage();
}.bind(this))
.inject($(this.options.navContainer));
for(i=0;i'})
.addEvent('click',function(e){
e.stop();
this.nextPage();
}.bind(this))
.inject($(this.options.navContainer));
}
else{
$(this.options.navContainer).setStyle('visibility','hidden');
}
}
if(this.options.navButtons){
if(this.maxPages>1){
$(this.options.navButtons.prev).setStyle('visibility','visible');
$(this.options.navButtons.next).setStyle('visibility','visible');
this.options.navButtons.prev.removeEvent('click').addEvent('click',function(e){
e.stop();
this.previousPage();
}.bind(this));
this.options.navButtons.next.removeEvent('click').addEvent('click',function(e){
e.stop();
this.nextPage();
}.bind(this));
}
else{
$(this.options.navButtons.prev).setStyle('visibility','hidden');
$(this.options.navButtons.next).setStyle('visibility','hidden');
}
}
},
setActive:function(index){
if(this.options.navContainer&&this.maxPages>1){
$(this.options.navContainer).getElements('a').removeClass('active');
$(this.options.navContainer).getElements('a.page')[this.actualPage].addClass('active');
}
},
previousPage:function(){
this.actualPage--;
this.toPage();
},
nextPage:function(){
this.actualPage++;
this.toPage();
},
toPage:function(page){
if(!this.running){
if(page!==undefined)
this.actualPage=page;
if(this.actualPage<0)
this.actualPage=0;
if(this.actualPage>=this.maxPages)
this.actualPage=this.maxPages-1;
if(this.maxPages>1){
if(this.actualPage==0){
if(this.options.navContainer){
//$(this.options.navContainer).getElement('a.prev').setStyle('visibility','hidden');
$(this.options.navContainer).getElement('a.prev').addClass('disabled');
if(this.maxPages>1){
//$(this.options.navContainer).getElement('a.next').setStyle('visibility','visible');
$(this.options.navContainer).getElement('a.next').removeClass('disabled');
}
}
if(this.options.navButtons){
$(this.options.navButtons.prev).setStyle('visibility','hidden');
if(this.maxPages>1){
$(this.options.navButtons.next).setStyle('visibility','visible');
}
}
}
else if(this.actualPage==this.maxPages-1){
if(this.options.navContainer){
//$(this.options.navContainer).getElement('a.next').setStyle('visibility','hidden');
$(this.options.navContainer).getElement('a.next').addClass('disabled');
if(this.maxPages>1){
//$(this.options.navContainer).getElement('a.prev').setStyle('visibility','visible');
$(this.options.navContainer).getElement('a.prev').removeClass('disabled');
}
}
if(this.options.navButtons){
$(this.options.navButtons.next).setStyle('visibility','hidden');
if(this.maxPages>1){
$(this.options.navButtons.prev).setStyle('visibility','visible');
}
}
}
else{
if(this.maxPages>1){
if(this.options.navContainer){
//$(this.options.navContainer).getElement('a.prev').setStyle('visibility','visible');
// $(this.options.navContainer).getElement('a.next').setStyle('visibility','visible');
$(this.options.navContainer).getElement('a.prev').removeClass('disabled');
$(this.options.navContainer).getElement('a.next').removeClass('disabled');
}
if(this.options.navButtons){
$(this.options.navButtons.prev).setStyle('visibility','visible');
$(this.options.navButtons.next).setStyle('visibility','visible');
}
}
}
}
this.carousel.start(this.actualPage*this.pageWidth);
}
},
addTouchSupport:function(){
var _this=this;
$(this.options.container).getElements(this.options.slidesSelector).addEvents({
'touchstart':function(e){
//e.preventDefault();
_this.touchX=e.touches[0].pageX;
},
'touchmove':function(e){
//e.preventDefault();
if(Math.abs(_this.touchX-e.touches[0].pageX)>10){
if(!_this.touched){
_this.touched=true;
if(_this.touchX