/*
Title 	: Simple Carousel with Paging Using Mootools
Author 	: Nikhil Kunder (nik1409@gmail.com)
Date 	: 2008/09/12
Version : 1.0
    moocarousel_v1.0.js  is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 	Lesser General Public License for more details.
*/

var Slidebox = new Class({
	Implements: [Events, Options],				
	options: {
		wrapper:'',
		items:'',
		moveleft:'',
		moveright:'',
		slides:2,
		offset:350,
		currentslide:1,
		pos:0,
		ispaged:false
	},
	
	//aa:{},
	initialize: function(options){
		this.setOptions(options);
		this.currentslide= 1;
		this.wrapper = this.options.wrapper;
		this.items = this.options.items;
		//this.moveleft = $(this.options.moveleft);
		//this.moveright = $(this.options.moveright);
		this.slides = this.options.ns;
		this.offset = this.options.sss;
		this.ispaged = this.options.ispaged;
		this.parent = this.wrapper.getParent();
		this.scroll = new Fx.Scroll(this.wrapper, {offset:{'x':0, 'y':0} });
		this.dir = "right"; // direction of paging
		var that = this;
		
		if(this.ispaged){
			this.paging = new Element('div').addClass('carousel_paging');
			this.paging.id= this.wrapper.id + "_p";
			//alert(parseInt(this.slides));
			//	for (  i = parseInt(this.slides); i>0 ; i--){
			for (  i = 1;  i <= parseInt(this.slides) ; i++){
				var aa = new Element('a').addClass('page');
				
				if(i==1) aa.className= "current";
				aa.href="javascript:void(0);";
				aa.addClass('page'+i);
				aa.addEvent('click', this.page.bind(this, [i, aa, this.paging]));
				
				//aa.innerHTML = i;
				aa.injectInside(this.paging);
			}
			//alert(this.paging.innerHTML);
			this.paging.injectAfter(this.parent);
			var carousel_fix = new Element('div').addClass('clearfix').injectBefore(this.paging);
			var carousel_fix = new Element('div').addClass('clearfix').injectInside(this.paging);
		}
		//this.moveleft.addEvent('click', this.camoveleft.bind(this));
		//this.moveright.addEvent('click', this.camoveright.bind(this));
	},

	camoveleft: function(event){
	
		event = new Event(event).stop();
		if(this.currentslide == 1) return;
		//this.aa[this.currentslide].className= "paging_anchor current"
		this.currentslide--;	
		if(this.ispaged){																						
			this.setcss('left');
			this.dir = 'left';
		}
		this.pos += -(this.offset);
		this.scroll.start(this.pos);this.scroll.toLeft();
		
	},
	camoveright: function(event){

		event = new Event(event).stop();
		if(this.currentslide >= this.slides) return;
		this.currentslide++;
		if(this.ispaged){																						
			this.setcss('right');
			this.dir = 'right';
		}
		this.pos += this.offset;
		this.scroll.start(this.pos);this.scroll.toLeft();
		//this.resetcss();
		//this.aa[this.currentslide].className= "paging_anchor current"
	},
	
	page: function(pagenum,o, p){
		//event = new Event(event).stop();
		// console.log("page:" + pagenum);
		var sss = ((pagenum-1)*this.offset) ;
		if(pagenum > this.slides) return;
		if(pagenum == 1) sss = 0;
		this.currentslide = pagenum
		this.pos = sss
		this.scroll.start(this.pos);this.scroll.toLeft();
		//o.className="current";
		if (p) {  this.resetcss(o, p); }
		/*var pa = $$(".paging_anchor");
			pa.each(function(el,i){
			el.className="page";
		});*/
	},
	setcss:function(dir){
		var x = parseInt(this.currentslide)-1; 		
		if(x < 0 ) x = 0; if( x >9) x =9; 
		var o = this.paging.getElements('a')[x];
		this.resetcss(o,this.paging);
	},
	resetcss: function(o,p){
		var cpa = p.getElements('a');
		cpa.each(function(el,i){
			el.className="page";
		});
		o.className="current";
	}
	
});

var SlideboxManager = new Class({
	Implements: [Events, Options],				
	options: {
		speed: 2000
	},
	
	//aa:{},
	initialize: function(options){
		this.setOptions(options);
		this.list = [];
		var initauto = false;
		
		$(document.body).getElements('.slidebox').each(function(slidebox) {
			// init carousel
			
			var c_w = slidebox.getSize().x; //  Carousal Item Width
			var inner = slidebox.getFirst();
			
			var c_n = inner.getChildren().length - 2 ; // Total Number of  Items
	
			var c_pp = 1; // Number of  Items  perpage
			var c_marginFactor = 0;
			
			var c_sss = c_w * c_pp ; 
			//sss = slide step size
			var c_ns =  parseInt(((c_w * c_n)/c_sss) + .5); 
			// ns= number of slides
			
			c_sss += c_marginFactor;
			
			//sss = slide step size , 51 for margins
			this.list.push(new Slidebox({
				wrapper : slidebox,
				items: inner,
				moveleft: 'carousel_moveleft',
				moveright: 'carousel_moveright',
				ns: c_ns,
				sss: c_sss, 
				ispaged: true
			})); 
			initauto = true;
		},this);
		
		if (initauto) { this.initautoslide() }
	},
	
	initautoslide: function() {
		this.slideindex = 0;
		
		var autoSlideTimer = this.autoslide.periodical(this.options.speed, this);	
								
		this.list.each(function(slidebox){					
			slidebox.paging.addEvent('click',function() {
				$clear(autoSlideTimer);
			})
		});
	},
	
	autoslide: function() {
		if (this.slideindex >= this.list.length) this.slideindex = 0;
		//console.log(this.slideindex,this.list[this.slideindex].currentslide);
		this.list[this.slideindex].currentslide++;
		if (this.list[this.slideindex].currentslide > this.list[this.slideindex].slides) this.list[this.slideindex].currentslide = 1;
		if (this.list[this.slideindex].paging.getElement('.current'))
			this.list[this.slideindex].paging.getElement('.current').removeClass('current').addClass('page');
		
		if (this.list[this.slideindex].paging.getElement('.page'+this.list[this.slideindex].currentslide))
			this.list[this.slideindex].paging.getElement('.page'+this.list[this.slideindex].currentslide).addClass('current');
		
		
		this.list[this.slideindex].page(this.list[this.slideindex].currentslide,'javascript:void(0)',false);
		this.slideindex++;
	}
});