/**
 * Copyright by Cassis Piotr Lewandowski. All rights reserved.
 * See http://cassis.pl
 * Contact piotr@cassis.pl
*/
(function($) {
	$.fn.cassisFlowBox = function( options) {
		var opts = $.extend( {}, $.fn.cassisFlowBox.defaults, options);
		this.each(function() {
			if ($('.flowBoxInner div').length <= 1) {
				return( false);
			}
			var $this = $(this);
			if (opts.direction == 'left') {
				var items = $('.flowBoxInner div', this);
				opts.current = items.length-1;
				// set margin for last element
				var m = 0;
				for (var i=0; i<opts.current; i++) {
					m += items.eq( i).width();
				}
				$('.flowBoxInner', this).css( 'margin-left', (-1*m)+'px');
			}
			$.data( this, 'options', opts);
			// update element styles
			if (opts.showNavi) {
				setNavi( this);
			}
			$this.mouseover( stop).mouseout( start).addClass( 'flowBoxSet');
			
//			$this.mouseout();
		});
		if (false == $.fn.cassisFlowBox.intervalSet) {
			setInterval( function() {
				$('.flowBoxSet').each( function() {
					var opt = $.data( this, 'options');
					var inc = (opt.direction == 'right') ? 1 : -1;
					$(this).cassisFlowBoxChange( opt.current+inc);
				})
			}, opts.interval);
			$.fn.cassisFlowBox.intervalSet = true;
		}
		return( this);
	}
	
	function start() {
		$.data( this, 'options').run = true;
	}
	
	function stop() {
		$.data( this, 'options').run = false;
	}
	
	$.fn.cassisFlowStop = function() {
		this.each( function() {
			$.data( this, 'options').run = false;
		});
	}
	
	$.fn.cassisFlowStart = function() {
		this.each( function() {
			$.data( this, 'options').run = true;
		});
	}
	
	function setNavi( o) {
		var opt = $.data( o, 'options');
		var navi = '<ul class="flowBoxNavi">';
		navi += '<li><a href="#" class="prev">&lt;</a></li>';
		for (var i=0; i<$('.flowBoxInner div', o).length; i++) {
			navi += '<li><a href="#" title="'+(i+1)+'">'+(i+1)+'</a></li>';
		}
		navi += '<li><a href="#" class="next">&gt;</a></li>';
		navi += '</ul>';
		$(o).append( navi);
		$('.flowBoxNavi a[title]', o).click( function() { $(this.parentNode.parentNode.parentNode).cassisFlowBoxChange( parseInt(this.title)-1, true);return( false);});
		$('.flowBoxNavi a.prev', o).click( function() { $(this.parentNode.parentNode.parentNode).cassisFlowBoxPrev();return( false);});
		$('.flowBoxNavi a.next', o).click( function() { $(this.parentNode.parentNode.parentNode).cassisFlowBoxNext();return( false);});
		$('.flowBoxNavi li:eq(1)', o).addClass( 'active');
	}
	
	$.fn.cassisFlowBoxPrev = function() {
		this.each( function() {
			var opt = $.data( this, 'options');
			var inc = (opt.direction == 'right') ? -1 : 1;
			$(this).cassisFlowBoxChange( opt.current+inc, true);
		});
	}
	$.fn.cassisFlowBoxNext = function() {
		this.each( function() {
			var opt = $.data( this, 'options');
			var inc = (opt.direction == 'right') ? 1 : -1;
			$(this).cassisFlowBoxChange( opt.current+inc, true);
		});
	}
	$.fn.cassisFlowBoxChange = function( show, force) {
		this.each( function() {
			var opt = $.data( this, 'options');
			if (!opt.run && !force) {
				return( true);
			}
			var $this = $(this);
			var items = $this.find( '.flowBoxInner div');
			if (show < 0) {
				show = items.length-1;
			}
			show = show % items.length;
			var m = 0;
			for (var i=0; i<show; i++) {
				m += items.eq( i).width();
			}
			$('.flowBoxInner', this).animate( {marginLeft:(-1*m)+'px'}, 400);
			opt.current = show;
			$( '.flowBoxNavi li.active', this).removeClass( 'active');
			$( '.flowBoxNavi li:eq('+(opt.current+1)+')', this).addClass( 'active');
			return( false);
		});
	}
	
	$.fn.cassisFlowBox.intervalSet = false;
	$.fn.cassisFlowBox.defaults = {
    	current: 0,
    	run:true,
    	interval:5000,
    	direction:'right',
    	showNavi:true
  };
})(jQuery);


$(document).ready( function() { $('.flowBox').cassisFlowBox()});
