/*
 * DOL 0.1 
 * Designer Oriented Library.
 * Copyright (c) 2008-2010 Shao S.Q. Chen
 * Licensed under the MIT License
 * Author: Laurie Z. Gao and Shao S.Q. Chen
*/

if(!DOL) var DOL = {};

if (!window.console) {
	window.console = {
		log: function () {
			alert(arguments[0]);
		}
	};
}

DOL.Navigation = function (){
	
	var settings = {};
	
	var defaults = {
		triggerEvent: 'click',
		loopingInterval: 10,
		duration: 500,
		debug: false
	};
	
	function setView() {
		if (settings.debug) console.log('Setting views');
		view = {};
		view.navBar = $(settings.navBar);
		view.items = view.navBar.find('.item');
		view.viewStack = $('#' + view.navBar.attr('dataProvider'));
		view.views = view.viewStack.find('.view');

		for (var i = 0; i < view.items.length; i++){
			view.items[i].index = i;
			$(view.items[i]).text(
				$(view.views[i]).attr('viewTitle')
			);
		}
	};
	
	function setEventListeners() {
		if (settings.debug) console.log('Setting Event Listeners');
		settings.triggerEvent = view.navBar.attr('triggerEvent') || settings.triggerEvent;
		settings.loopingInterval = view.viewStack.attr('loopingInterval') || settings.loopingInterval;
		settings.duration = parseInt(view.viewStack.attr('duration') || settings.duration);

		for (var i = 0; i < view.items.length; i++){
			$(view.items[i]).bind(settings.triggerEvent, function(event){
				$(this).blur();
				switchTo(this.index);
				clearTimeout(view.timer);
				return false;
			});
		}

		for (var i = 0; i < view.views.length; i++){
			$(view.views[i]).bind(settings.triggerEvent, function(event){
				$(this).blur();
				clearTimeout(view.timer);
				return false;
			});
			
			$(view.views[i]).bind('mouseout', function(event){
				$(this).blur();
				startLooping();
				return false;
			});
		}
	};
	
	function switchTo(index) {
		if (view.currentIndex || view.currentIndex === 0) {
			if (view.currentIndex == index) return;
			$(view.views[view.currentIndex]).fadeOut(settings.duration);
			$(view.items[this.view.currentIndex]).removeClass('active');
		};
		
		$(view.items[index]).addClass('active');
		$(view.views[index]).fadeIn(settings.duration);
		view.currentIndex = index;
		startLooping();
	};
	
	function startLooping() {
		clearTimeout(view.timer);
		if (! (settings.loopingInterval && settings.loopingInterval > 0)) return; 
		view.timer = setTimeout(function(){
			switchTo(getNextIndex());
		}, settings.loopingInterval)	
	};
	
	function getNextIndex() {
		var len = view.views.length;
		var nextViewIndex = (view.currentIndex + 1) % len;
		return nextViewIndex
	};
	
	function getPreviousIndex() {
		var len = view.views.length;
		var previousViewIndex = (view.currentIndex - 1 + len) % len;
		return previousViewIndex
	};
	
	return {
		init: function(options){
			settings = $.extend({}, defaults, options);
			setView();
			setEventListeners();
			if ($(view.navBar).length > 0) switchTo(0);
		}
	}
}();

$(function(){
	DOL.Navigation.init({
		'navBar': $('#my_slide_controls')
	});
});

