/**
 * @fileOverview Enhancements for overflow:hidden-Elements
 * @version 0.1
 * @author Michael Schieben <michael@twoantennas.com> 
 */

/*jslint nomen: true, debug: true, evil: false, onevar: false, browser: true, plusplus: false, undef: true */
/*global window: true, KfW: true, jQuery: true */

(function ($) {
	
	function Slidable() {
		
		$('div.eui-slidable').enhancedSlidable();
	}
	
	$.fn.enhancedSlidable = function (options) {
		var defaultSettings = {
			interval: 10000
		};
		options = $.extend(defaultSettings, options);
		
		return this.each(function () {
			
			var slidable = $(this);
			var container = slidable.find('.eui-slidable-content-wrapper');
			var pagination = null;
			var scroller = null;
			
			function slide(li) {
				var id = li.find('a').anchor();
				pagination.find('li').removeClass('selected');
				li.addClass('selected');
				scroller.scrollTo('#' + id, 300);
			}
			
			function initializePagination() {
				var items = slidable.find('div.eui-slidable-content');
				var h = '';
		
				items.each(function (i) {
			
					var id = $(this).attr('id');
					if (id === '') {
						id = KfW.id('eui-slidable-item');
					}
					
					$(this).attr('id', id);
					var title = $(this).find('h2').text();
					
					h += KfW.Template.render('eui-slidable-pagination-item', {id: id, title: title});
				});
		
				pagination = KfW.Template.element('eui-slidable-pagination', {items: h});
				slidable.append(pagination);
				
				pagination.find('li a').click(function (e) {
					e.preventDefault();
					slide($(this).parents('li'));
				});
				
			}
			
			
			function initializeScroller() {
				var scrollerId = KfW.id('eui-slidable-wrapper');
				container.wrap('<div id="' + scrollerId + '"></div>');
				scroller = slidable.find('#' + scrollerId);
			
				scroller.css('width', slidable.width()).css('overflow', 'hidden');
			}
			
			function next() {
				var nextItem = pagination.find('li.selected').next();
				if (nextItem.size() === 0) {
					nextItem = pagination.find('li:first');
				}
				slide(nextItem);
			}
			
			var timer = null;
			function start() {
				timer = window.setInterval(next, options.interval);
			}
			
			slidable.mouseenter(function (e) {
				window.clearTimeout(timer);
			});
			
			slidable.mouseleave(function (e) {
				start();
			});
			
			initializePagination();
			initializeScroller();
			slide(pagination.find('li:first'));
			start();
			
		});
		
	};
	
	KfW.addInitializer(Slidable);

}(jQuery));
