/*

Extensión de una clase Javascript en un plugin
clase SliderLD
autor: mtorres@lightdesign.com.mx
*/

$.plugin = function(name, object) {
		$.fn[name] = function(options) {
			var args = Array.prototype.slice.call(arguments, 1);
			return this.each(function() {
				var instance = $.data(this, name);
				if (instance) {
					instance[options].apply(instance, args);
				} else {
					instance = $.data(this, name, new object(options, this));
				}
			});
		};
	};
	
	var SliderLD = Class.extend({
		
		settings: {
			'portview'		  : 1000,
	   		'itemsPage'		  : 4,
	 		'itemWidth' 	  : 250,
	   		'seconds'		  : 1000,
			'mask'			  : '.mask',
			'slidesContainer' : '.slidesContainer',
			'next'			  : '.next',
			'prev'			  : '.prev',
			'slide'			  : '.slide'		
			
		},
		
		defaults:{
				
		},
		
		init: function(options, element) {
			
			$this = this;
			$element = $(element);
			$settings = $this.settings;
			
			return $element.each(function() {   
      				
				if ( options ) { 
        			$.extend( $settings, options );		
      			}
				
				var target = $(this);
				
				$element.find($settings.mask).css('overflow', 'hidden');
				$element.find($settings.mask).css('width', $settings.portview);
				
				$element.find($settings.next).bind('click',nextPage);
				$element.find($settings.prev).bind('click',lastPage);	
				
				var currentPosition = 0;
  				var items = $element.find($settings.slidesContainer).find($settings.slide);
  				var numberOfItems = items.length;  
				var pages = Math.ceil(numberOfItems / $settings.itemsPage)-1 ;	
				var provisionalItems = numberOfItems - $settings.itemsPage;	
				var multiplo = numberOfItems%$settings.itemsPage;
				var cx=0;
				
				function nextPage(){
					if( currentPosition < pages ){
						currentPosition ++;
						cx = $settings.portview * currentPosition;
							if( !multiplo==0 ){
								if(currentPosition == pages ){
									var amount = (provisionalItems * $settings.itemWidth ) - $settings.portview ;
									cx = $settings.portview + amount;
								}	  
							}
							
						target.find($settings.slidesContainer).animate({
							'marginLeft' : -cx
						}, $settings.seconds);
					}
				}
				
				
				function lastPage(){
					if(currentPosition > 0){
						currentPosition --;
						if( !multiplo==0 ){
							if(currentPosition == (pages - 1) ){				
								cx = $settings.portview * currentPosition;
							}else{
								cx = $settings.portview * currentPosition;	
							}	  
						}else{
							cx = $settings.portview * currentPosition;
						}
				
					target.find($settings.slidesContainer).animate({
							'marginLeft' : -cx
    					},$settings.seconds);
					}else{
						currentPosition=0;	
					}
				}
				
    		});	
			
		}
	});
	
$.plugin('sliderLD', SliderLD);
