/*
 * jQuery TastyScroll 1.0
 *
 * Copyright (c) 2011 Ed Knittel
 * Licensed under the GPL license.
 *
 * http://tastycms.com/tastyscroll/
 *
 */
 ;;
(function($){  
	$.fn.tastyscroll = function(options){
		//if(console){console.log('Initialize: http://tastycms.com/tastyscroll/')};
		var defaults = {
			attach_to_window : false,
			autoscroll : 0,
			button_opacity : 0.5,
			infinite_loop : true,
			scroll_speed: 1000,
			visible_width: 650
		};  
		var options = $.extend({}, defaults, options);
		
		return this.each(function(){
			var scroller = $(this);
			scroller.children().wrapAll('<div class="container" />');
			
			var container = scroller.find('.container'),
				frame_left = 0,
				frame_start = 1,
				shim = frame_left,
				count = container.children().size();
			
			scroller.addClass('tastyscroll');
			container.children().addClass('item');
			container.css({width: options.visible_width*count});
			container.after('<a class="prev" /><a class="next" />');

			var prev = scroller.find('.prev'),
				next = scroller.find('.next'),
				init_prev_width = prev.width(),
				init_next_width = next.width();
				
			prev.css({opacity: options.button_opacity});
			next.css({opacity: options.button_opacity});
			
			if(options.attach_to_window){
				$('body').css({margin: 0,padding: 0})
				var scroller_width = $(window).width();
				shim = (scroller_width-options.visible_width)/2;
				container.css({left: shim});
				function shift(scroller_width){
					shim = (scroller_width-options.visible_width)/2;
					frame_left = shim;
					container.css({left : frame_left+"px"});
					if(prev.width() >= init_prev_width){
						prev.css({width: shim});
						next.css({width: shim});
					}else{
						prev.css({width: init_prev_width});
						next.css({width: init_prev_width});
					}
				}
				shift(scroller_width);
				$(window).resize(function(){
					scroller_width = $(window).width();
					shift(scroller_width);
					if(options.infinite_loop){
						container.css({left: -(options.visible_width)+shim+"px"});
					}
				});
			}
			
			if(options.autoscroll > 0){
				var tasty_timeout = window.setInterval(function(){next.click()}, options.autoscroll);
				scroller.mouseout(function(){
					window.clearInterval(tasty_timeout);
					tasty_timeout = window.setInterval(function(){next.click()}, options.autoscroll);
				});
				scroller.mouseover(function(){
					window.clearInterval(tasty_timeout);
				});
			}
			
			function set(){
				container.css({left: -(options.visible_width)+shim+"px"});
			}
			
			if(options.infinite_loop){
				var last = container.children(':last-child');
				last.remove().prependTo(container);
				container.css({left: -(options.visible_width)+shim+"px"});
				new_frame_start = 0;
			}
						
			prev.click(function(){
				new_left = ((frame_left/1) + options.visible_width);
				if(options.infinite_loop){
					var last = container.children(':last-child');
					last.remove().prependTo(container);
					container.css({left: -(options.visible_width*2)+shim+"px"});
					new_left = -options.visible_width+shim;
				}else{
					new_frame_start = ((frame_start/1)-1);
					if(new_frame_start <= 0){
						new_left = -(options.visible_width*count)+options.visible_width+shim;
						new_frame_start = count;
					}
				}
				container.animate({left: new_left+"px"}, options.scroll_speed);
				frame_left = new_left;
				frame_start = new_frame_start;
				return false;
			});
			
			next.click(function(){
				new_left = ((frame_left/1) - options.visible_width);
				if(options.infinite_loop){
					new_frame_start = 0;
					new_left = -(options.visible_width*2)+shim;
					container.animate({left: new_left+"px"}, options.scroll_speed, function(){
						var first = container.children(':first-child');
						first.remove().appendTo(container);
						container.css({left: -(options.visible_width)+shim+"px"});
					});
				}else{
					new_frame_start = ((frame_start/1)+1);
					if(new_frame_start > count){
						new_left = shim;
						new_frame_start = 1;
					}
					container.animate({left: new_left+"px"}, options.scroll_speed);
				}
				frame_left = new_left;
				frame_start = new_frame_start;
				return false;
			});
			return false;
		});  
	};
})(jQuery);
