(function($){
 
    $.fn.extend({ 
         
        /* pass the options variable to the function */
        minislider: function(options) {
 			
            /* Set the default values */
            var defaults = {
                speed: 500,
				controlnormalcolour: '#ccc',
				controlhovercolour: '#751975',
				bouncelength: 50,
				padding: 12,
				auto: false,
				autospeed:6000
            }   
            
            var options =  $.extend(defaults, options);
 			
 			 /* Get things under way */
            return this.each(function() {
                var o = options;
                var obj = $(this);
                var timer;
  				var i=0;
  				var max_turns = 50;
  				/* apply the css */
             	init(o, obj);
             	/* auto slider */
				 $('.slidercarriage').delay(6000).fadeIn(100, function() {
       				 // Animation complete
     			 
     			 	if(o.auto){
						timer = setInterval(function(){  
							do_timer(o, obj);
							i++;
							pause_timer();
						}, o.autospeed);	
					}
     			 });
				
				/* Decide whether to stop timer or not */
				function pause_timer(){
					if(i==max_turns){
						clearInterval(timer);
						o.auto = false; 
					}
				}
				/* Action: right arrow click */
             	obj.find('.slideright').click(function(e) { 
             		e.preventDefault();
             		clearInterval(timer);
             		o.auto = false;
             		slideRight(o, obj);
             	});
             	/* Action: left arrow click */
             	obj.find('.slideleft').click(function(e) { 
             		e.preventDefault();
             		clearInterval(timer);
             		o.auto = false;
             		slideLeft(o, obj);
             	});
             	/* Action: bullet click */
             	obj.find('.minislider-bullet').live("click", function(e) {  
					e.preventDefault();
					clearInterval(timer);
					o.auto = false;
					var bulletobj = $(this); 
					firebullet(o, bulletobj, obj);
				});
				/* Event tracking */
				obj.find('.slideritem').click(function(e) { 
					var slide = $(this).index()+1;
					var subject = $(this).children('h3').text();
					var tag = $(e.target).parent().get(0).tagName;
					var label = subject+' ['+slide+' > '+tag+']';
					try{_gaq.push(['_trackEvent', 'Minislider', 'Clickthrough', label]);console.log('push')} catch(err) {}
				});
				/* Action: hover over slider / unhover slider */
				$(".slidercarriage").hover(
				  function () {
				    clearInterval(timer);
				  },
				  function () {
				    if(o.auto){
						timer = setInterval(function(){  
							do_timer(o, obj);
						}, o.autospeed);
					}
				  }
				);
            });
            
            
    
            
			/* Set everything up */
			function init(o, obj){
				var num = obj.find('.slideritem').length;
				obj.attr("data-counter",0);
				var i=0;
				obj.find('.sliderbody').append('<a href="#" class="slideleft">&laquo;</a>');
				obj.find('.sliderbody').append('<a href="#" class="slideright">&raquo;</a>');	
				/* */
				while(i<num){
					obj.find('.minislider-bulletbox').append('<span class="minislider-bullet"><a href="#">&bull;</a></span>');
					i++;
				}
				obj.find('.minislider-bullet a').css('color', o.controlnormalcolour).eq(0).css('color', o.controlhovercolour);
				obj.find('.sliderbody').css("overflow","hidden");
				obj.find('a.slideleft, a.slideright').show();	
			}
			
			/* Slide to the right */
			function slideRight(o, obj) {   
				var w = obj.find('.sliderbody').width()+o.padding;
				var num = obj.find('.slideritem').length;
				var minicounter = obj.attr("data-counter"); 
				
				/* */
				if( minicounter < (num-1) ){
					/* do slide */
					obj.find('.slidercarriage').animate({
					    left: '-='+w
					  }, o.speed, function() {
					    /* Animation complete.*/
					});
					minicounter++;
					obj.attr("data-counter",minicounter);
					obj.find('.minislider-bullet a').css('color', o.controlnormalcolour).eq(minicounter).css('color', o.controlhovercolour);	
				}
				else{
					/* dont slide */
					obj.find('.slidercarriage').animate({
					    left: '-='+o.bouncelength
					  }, 100, function() {
					    /* Animation complete. */
					    obj.find('.slidercarriage').animate({
					    	left: '+='+o.bouncelength
					  	}, 100, function() {
					    /* Animation complete. */
						});
					});
				}
			}
			
			/* Slide to the left */
			function slideLeft(o, obj) {              
				var w = obj.find('.sliderbody').width()+o.padding;
				var minicounter = obj.attr("data-counter");
				/* */ 
				if(minicounter < 1){
					/* dont slide */
					obj.find('.slidercarriage').animate({
					    left: '+='+o.bouncelength
					  }, 100, function() {
					    /* Animation complete.  */
					    obj.find('.slidercarriage').animate({
					    	left: '-='+o.bouncelength
					  	}, 100, function() {
					    /* Animation complete. */
						});
					});
				}
				else{
					/* do slide */
					obj.find('.slidercarriage').animate({
					    left: '+='+w
					  }, o.speed, function() {
					    /* Animation complete. */
					});
					minicounter--;
					obj.attr("data-counter",minicounter);
					obj.find('.minislider-bullet a').css('color', o.controlnormalcolour).eq(minicounter).css('color', o.controlhovercolour);
				}
			}
			
			/* auto slide */
			function do_timer(o, obj){
				var num = obj.find('.slideritem').length;
				var minicounter = obj.attr("data-counter");
				if( minicounter < (num-1) ){			
					slideRight(o, obj);	
				}
				else{
					reset(o, obj) ;
				}
			}
			
			/* Slider back to the beginning */
			function reset(o, obj){
				var num = obj.find('.slideritem').length;
				var w = (obj.find('.sliderbody').width()+o.padding) * (num-1);
				var speed = (o.speed * num)/2;
				/* animate slider back to initial state */
				obj.find('.slidercarriage').animate({
					    left: '+='+w
					  }, speed, function() {
					    /* Animation complete. */
				});
				minicounter = 0;
				obj.attr("data-counter",minicounter);
				obj.find('.minislider-bullet a').css('color', o.controlnormalcolour).eq(minicounter).css('color', o.controlhovercolour);
			}
			
			/* Deal with bullet clicks */
			function firebullet(o, bulletobj, obj) {     
				minicounter = bulletobj.index();
				var w = (obj.find('.sliderbody').width()+o.padding)*minicounter*-1;
				/* show prev slide */
				obj.find('.slidercarriage').animate({
				    left: w
				  }, o.speed, function() {
				    /* Animation complete. */
				});
				obj.attr("data-counter",minicounter);
				obj.find('.minislider-bullet a').css('color', o.controlnormalcolour).eq(minicounter).css('color', o.controlhovercolour);
			} 
			         
        }
 
    });
     
})(jQuery);


