/*
 * jQuery smallSlider component
 * @author NextCode.it <nextcode.it@gmail.com>
 * @version 1.1
 * @date Sep 29th, 2011
 *
 * vers. 1.1: Sep 29th, 2011
 * - added rel parameter to items list
 * - added rel parameter to onSelect() event
 * vers. 1.0: Nov 20th, 2010
 */

(function($) {
	$.fn.smallslider = function(options){
		var $this = $(this);
		if ( $.type($this.attr('id')) == "undefined" ) {
			$this.attr('id','smallslider_'+Math.round(Math.random()*100000000000000000));
		}
		$this.id = $this.attr('id');

		$this.addClass("smallSlider");

		$this.defaults = {			
			prevClass: 		'_prevBtn',
			prevText: 		'previous',
			nextClass: 		'_nextBtn',	
			nextText: 		'next',
			visibleItems:	3,
			thumbSize:		[94,52],
			thumbStyle:		"",
			showLabel:		false,
			onSelect:		function() {}
		}; 
		$this.startIdx = 0;
		$this.totItems = 0;
		
		$this.defaults = $.extend($this.defaults, options); 
		$this.items = new Array();
		
		$this.find("ul li").each(function(idx,element) {  
			var $element = $(element);
			var $a = $element.find("a");
			$this.items.push({
				'url': $a.attr('href'),
				'rel': $a.attr('rel'),
				'title': $a.attr('title'),
				'img': $a.find("img").attr('src'),
				'info': $element.find("span.info").html(),
				'title2': $element.find("span.title").html()
			});			
		});
		$this.find("ul").remove();
		
		$this.append(
			"<div class='"+$this.defaults.prevClass+"' title='"+$this.defaults.prevText+"'></div>"+
			"<div class='_thumbs'></div>"+
			"<div class='"+$this.defaults.nextClass+"' title='"+$this.defaults.nextText+"'></div>"
		);
		
		var $thumbs = $this.find('._thumbs');
		$($this.items).each(function(idx,element){
			var html = '<div class="_thumb" style="'+$this.defaults.thumbStyle+';width:'+$this.defaults.thumbSize[0]+'px;height:'+$this.defaults.thumbSize[1]+'px;"><a href="#" title="'+element['title']+'" rel="'+element['rel']+'"><img src="'+element['img']+'" style="width:'+$this.defaults.thumbSize[0]+'px;height:'+$this.defaults.thumbSize[1]+'px;">';
			if ( $this.defaults.showLabel )
				html += '<br>'+element.title;
			html += '</a></div>';
			$thumbs.append(html);
		});
		
		// Fix thumb container width
		$this.find("._thumbs").width( ( $this.find("._thumbs ._thumb:first").outerWidth() * $this.defaults.visibleItems ) + "px" );
		
		$this.find("."+$this.defaults.prevClass).click(function(){
			if ( $this.startIdx - $this.defaults.visibleItems >= 0 )
				smallSliderShowItems($this.startIdx - $this.defaults.visibleItems);
		})

		$this.find("."+$this.defaults.nextClass).click(function(){
			if ( $this.startIdx + $this.defaults.visibleItems < $this.items.length )
				smallSliderShowItems($this.startIdx + $this.defaults.visibleItems);
		})
		
		$this.find("._thumbs ._thumb a").click(function(){
			if ( $.type($this.defaults.onSelect) == "function" ) {
				var idx = $(this).parent().index('#'+$this.id+' div._thumb');
				if ( $this.items[idx] )
					$this.defaults.onSelect( $this.items[idx]['url'], $this.items[idx]['info'], $this.items[idx]['title2'], $this.items[idx]['rel'] );
			}
			return false;
		});
		
		function smallSliderShowItems(startIdx) {
			$this.startIdx = startIdx;
			$this.find("._thumbs ._thumb").hide();
			for( var i = $this.startIdx; i < $this.startIdx+$this.defaults.visibleItems; i++ ) {
				$this.find("._thumbs ._thumb:eq("+i+")").fadeIn();
			}
		}

		// Shows items
		smallSliderShowItems($this.startIdx);
		
		// Simulates click on first item
		$this.find("._thumbs ._thumb a:first").trigger("click");

	}
})(jQuery);

