/*
 * 	Easy Slider - jQuery plugin
 *	written by Alen Grakalic	
 *	http://cssglobe.com/post/3783/jquery-plugin-easy-image-or-content-slider
 *
 *	Copyright (c) 2009 Alen Grakalic (http://cssglobe.com)
 *	Dual licensed under the MIT (MIT-LICENSE.txt)
 *	and GPL (GPL-LICENSE.txt) licenses.
 *
 *	Built for jQuery library
 *	http://jquery.com
 *
 */
 
/*
 *	markup example for $("#images").easySlider();
 *	
 * 	<div id="images">
 *		<ul>
 *			<li><img src="images/01.jpg" alt="" /></li>
 *			<li><img src="images/02.jpg" alt="" /></li>
 *			<li><img src="images/03.jpg" alt="" /></li>
 *			<li><img src="images/04.jpg" alt="" /></li>
 *			<li><img src="images/05.jpg" alt="" /></li>
 *		</ul>
 *	</div>
 *
 */

(function($) {

	$.fn.easySlider = function(options){
	  
		// default configuration properties
		var defaults = {
			'prevId': 		'prevBtn',
			'prevText': 		'Previous',
			'nextId': 		'nextBtn',	
			'nextText': 		'Next',
			'prev-next': true,
			'slide-tabs': false,
			'orientation':	'', //  'vertical' is optional;
			'start': 			1,	
			'speed': 			800,
			'labels': 		[],
            'anchors': 		[],
			'label-position': 'bottom'
		}; 
		
		var options = $.extend(defaults, options);  

		return this.each(function() {  
			obj = $(this); 				
			var s = $(">ul>li", obj).length;
			var w = function(){ return obj.width() }; 
			var h = obj.height(); 
			var ts = s-1;
			var _t = parseInt(options.start);
			var t = p = (_t && (_t>0) && (_t<=s))? _t-1 : 0;
			var vertical = (options.orientation == 'vertical');

			if(!vertical) {
			     $(">ul>li", obj).css({
			         'float':'left',
			         'width':parseFloat(100/s)+"%",
			         'text-align': 'center'
			     });
			     unfixwidth();
			}
            
            // added support for labels supplied by anchors
            $(">ul>li>a[name]", obj).each(function(i,n){
                options.labels[i] = this.innerHTML;
                options.anchors[i] = this.name;
                $(this).hide();
            });
			
			if(options['label-position'] == 'bottom') {
			     $(obj).after(makenav());		
			}else{
			     $(obj).before(makenav());
			}
			
			$("a","#"+options.prevId).parent().hide();
            $("a","#"+options.nextId).parent().hide();
            $("a","#"+options.nextId).click(function(){		
                animate("next");
                toggle_prev_next();
            });
            $("a","#"+options.prevId).click(function(){		
                animate("prev");
                toggle_prev_next();
            });	
			$(">ul>li", obj).each(linknav);
            $(".slide-rewind").click(function(){		
                animate(0);
                toggle_prev_next();
            });
			$(">ul", obj).show();
			
            //add support for arrow keys
			$(document).keypress(function (e) {
                  if (e.which == 37) {
                    animate("prev");                    
                    toggle_prev_next();
                  } else if (e.which == 39) {
                    animate("next");                    
                    toggle_prev_next();
                  }
             });
			
			function makenav(){
			    var nav = '<ul class="slide-tabs '+ options['slide-class'] + '">';
			    if(options['prev-next']) nav +='<li id="'+ options.prevId +'"><a href=\"javascript:void(0);\">'+ options.prevText +'</a></li>';
			    var label;
			    if (options['slide-tabs']) {
                    for(var x=0; x<s; x++){
                       label = options.labels[x]||(x+1);
                       nav += '<li class="slide-tab slide-tab-'+ x ;
                       if(x == t) nav += ' selected';
                       nav += '"><a href=\"javascript:void(0)\"><span>'+ label +'</span></a></li>'; 
                    }
                }
                if(options['prev-next']) nav +='<li id="'+ options.nextId +'"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></li>';
                return nav += '</ul>';
			};
            
			function linknav(i,n){
			   $("a",".slide-tab-"+i).click(function(){		
                    animate(i);                    
                    toggle_prev_next();
                });
			};
            
			function toggle_prev_next(){
			    if (t>=ts){ 
                    $("#"+options.nextId).fadeOut();
                    $("#"+options.prevId).fadeIn();
                }else if (t<=0){
                    $("#"+options.prevId).fadeOut();
                    $("#"+options.nextId).fadeIn();
                }else{
                    $("#"+options.prevId).fadeIn();
                    $("#"+options.nextId).fadeIn();
                }
                $(".slide-tabs>li").removeClass("selected")
                $(".slide-tabs>li.slide-tab-"+(t)).addClass("selected");
                if(t == 0){
                    $(".slide-rewind").addClass("slide-rewind-selected");
                }else{
                    $(".slide-rewind").removeClass("slide-rewind-selected");
                }
			}
			function fixwidth(){
			   return $(">ul", obj).css('width',s*w());
			};
			function unfixwidth(){
			   return $(">ul", obj).css({
			     'width':parseFloat(100*s)+"%",
			     'marginLeft': ((100*t)*-1)+"%"
			   });
			};
			function animate(pos){
				if(pos == "next"){
					t = (t>=ts) ? ts : t+1;	
				} else if(pos == "prev") {
					t = (t<=0) ? 0 : t-1;
				} else {
				    t = parseInt(pos)||0;
				};								
				if(!vertical) {
					p = (t*w()*-1);
					fixwidth().animate(
						{ marginLeft: p }, 
						options.speed,
						"linear",
						function(){
                            //unfixwidth();
						}
					)				
				} else {
					p = (t*h*-1);
					$(">ul",obj).animate(
						{ marginTop: p }, 
						options.speed
					);					
				}
			};
			if(s>1) $("a","#"+options.nextId).parent().fadeIn();	
		});
	  
	};

})(jQuery);