var slider = null;
(function($){

 	$.fn.extend({ 
 		
 		pbslider: function(options, arg2) {
 			
			var defaults = {
				startItem: 0,
				imgWidth: "0",
				visibleItems: 0,
				ajaxURL: null,
				autoSlide: false
            }
            
            if(arg2==undefined)
            {
            	var options =  $.extend(defaults, options);
            	slider = new $.pbslider(this, options, arg2);
            	return slider;
            }
            else
            {
				return slider.update(options);
			}
    	}
	});
	
	$.pbslider = function(item, options, arg2){

		this.options = options;
	
        this.container  = null;
        this.list       = $(item).children('ul');
        this.buttonNext = $('.pbslider-next');
        this.buttonPrev = $('.pbslider-prev');

        this.items 		= null;
        this.firstPosition = 0;
        this.lastPosition = this.options.visibleItems+1;
        this.nbItems = 0;
        this.nbSliderItems = this.options.visibleItems+2;
        this.isFresh = true; //because of an ie bug
        this.isSliding = false;
        
        
    	this.container = $("<div class='pbslider-container'></div>");
		this.container.append(this.list);
		$(item).empty();
		this.container.appendTo(item);
        
        
        var self = this;
        this.initialize();
    	
    	this.enableButtons();
        	
	    this.funcNext   = function() { self.next(); };
        this.funcPrev   = function() { self.prev(); };

	}
	
    $.pbslider.fn = $.pbslider.prototype = {
        pbslider: '0.0.1.'
    };
 
    $.pbslider.fn.extend = $.pbslider.extend = $.extend;
	
	$.pbslider.fn.extend({
		initialize:function(){
			var self = this;
			this.list.empty();

			for(var i=0; i<this.nbSliderItems; i++)
			{
				$('<li id="pbslider-'+i+'" class="pbslider-item"></li>').css('width', self.options.imgWidth).appendTo(this.list);
			}
			this.getList();
			
		},
		
		update: function(options)
		{
			for(var i in options)
			{
				this.options[i] = options[i];
			}
		},
		
		getList:function(){
			var self = this;
			$.ajax({
				type: "POST",
				url: self.options.ajaxURL,
				success: function(msg){
					self.items = eval('(' + msg + ')');
					self.nbItems = self.items.length;
					var j =self.options.startItem;
					for(var i=1; i<self.nbSliderItems+1; i++)
					{
						if(j>=self.nbItems)j=0;
						self.showItem(i % self.nbSliderItems);
						j++;
					}
					if(self.options.autoSlide)self.autoSlide();
					self.afterInitializing();
					
			}
		 });
		},
		
		next: function() {
			this.lastPosition++;
			this.lastPosition = this.lastPosition % this.nbItems;
			this.firstPosition++;
			this.firstPosition = this.firstPosition % this.nbItems;


			var self = this;
			this.disableButtons();
			this.beforeSliding();

			if(!self.isFresh)
			{
				self.list.children(':first').remove();
			}
			self.isFresh = false;

			$('<li id="pbslider-'+(self.lastPosition)+'" class="pbslider-item"></li>').appendTo(self.list);

			self.showItem(self.lastPosition);
			
			this.list.children(':first').animate({"width": "0px"}, "slow", "easeInOutCubic", function(){
				self.enableButtons();
				self.afterSliding();
			});

			if(self.options.autoSlide && self.lastPosition != (self.nbItems-1))
			{
				self.autoSlide();
			}
			else
			{
				self.options.autoSlide = false;
			}
			

		},
		
		prev: function() {
 			this.lastPosition--;
			if(this.lastPosition==-1)this.lastPosition = this.nbItems-1;
			this.firstPosition--;
			if(this.firstPosition==-1)this.firstPosition = this.nbItems-1;

			var self = this;
			
			this.disableButtons();
			this.beforeSliding();
			
			self.list.children(':last').remove();
			$('<li id="pbslider-'+(this.firstPosition)+'" class="pbslider-item" style="width:0px;padding:0;"></li>').prependTo(self.list);
			
			this.list.children(':first').animate({"width": this.options.imgWidth}, "slow", "easeInOutCubic", function(){
				self.showItem(self.firstPosition);
				self.enableButtons();
				self.afterSliding();
			});
		},
		
		showItem: function(position){
			
			var itemPosition = position-1+this.options.startItem;

			if(itemPosition==-1)itemPosition = this.nbItems-1;
			else if(itemPosition>=this.nbItems)itemPosition = itemPosition % this.nbItems;

			var e = this.items[itemPosition];

			var imgWrap = $('<div class="pbitem-'+position+'" class="center-item"></div>');
			
			var pbImg = $('<img src="'+e.url+'"/>');
			pbImg.attr('alt', e.title);
			pbImg.addClass('item-img');
			pbImg.appendTo(imgWrap);
			
			imgWrap.appendTo(this.list.children('#pbslider-'+position));
		},
		
		
		autoSlide: function()
		{
			var self = this;
			if(!this.isSliding)
			{
				this.isSliding = true;
				setTimeout(function() {
						self.isSliding = false;
						if(self.options.autoSlide)
						{
							self.next();
						}
					}, 5000);
			}
		},
		
		disableButtons: function()
		{
			this.buttonNext.unbind('click');
			this.buttonPrev.unbind('click');
		},
		
		
		enableButtons: function()
		{
			var self = this;
			this.buttonNext.click(function(){
				self.next();
				self.options.autoSlide = false;
				this.isSliding = true;
			})
			
			this.buttonPrev.click(function(){
				self.prev();
				self.options.autoSlide = false;
				this.isSliding = true;
			})
		},		
		
		afterInitializing: function()
		{
		},

		
		beforeSliding: function()
		{
		},
		
		afterSliding: function()
		{
		}
	})
			
})(jQuery);

