/*
 * Wizard
 * Author: Teemu Parkkinen
 * Date: 15.1.2010
 */ 
(function($) { 
	
	$.fn.wizard = function(o) {
			
		o = $.extend({
			currentPage: 0,
			steps: null,
			prevButton: null,
			nextButton: null,
			scrollToTop: false
    	}, o || {} );
	
		return this.each(function() { 			
					
			var obj = $(this);	
			var steps = $(o.steps);
			var prevButton = $(o.prevButton);
			var nextButton = $(o.nextButton);
			
			var pagesCount = $("div", obj).length;
			var stepsCount = $("li", steps).length;
				
			var pageArray = ['intro','test','result'];	
		
			$(prevButton).bind("click", function(e){
				if(o.prevButton == null) return;
				e.preventDefault(); 	
				var newIndex = o.currentPage-1;
				if( newIndex >= 0 ){
					window.location = "#page-"+pageArray[newIndex];	
				}
			});
			
			$(nextButton).bind("click", function(e){
				if(o.nextButton == null) return;
				e.preventDefault(); 
				var newIndex = o.currentPage+1;
				if( newIndex < pageArray.length ){
					window.location = "#page-"+pageArray[newIndex];
				}
			});		
			
			$(window).hashchange(setCurrentByHash);
			setCurrentByHash();
		
			function setCurrentByHash(){
				hashString = location.hash;
				var page = hashString.split('page-')[1];
				//var pageIndex = pageArray.indexOf(page);
				var pageIndex = getIndex( pageArray, page );
				pageIndex = (pageIndex == -1) ? 0 : pageIndex;
				setCurrent(pageIndex);
			}		
		
			function setCurrent(id){
				if(id >= 0 && id < pagesCount){
					var currPage = $("div.page", obj).eq(id);
					$("div.page", obj).hide();
					$(currPage, obj).show();
					o.currentPage = id;
				}
				if(id >= 0 && id < stepsCount){
					var currStep = $("li", steps).eq(id);
					$("li", steps).removeClass("selectedStep");
					$(currStep, steps).addClass("selectedStep"); 
				}	
				if( o.scrollToTop ){
					$('html, body').animate({scrollTop:0}, 'slow');
				}
			}
			
			function getIndex( arr, val ) {
				var pos = -1;
				for( var i = 0; i<arr.length; i++ ) {
					if( arr[i] == val ) {
						pos = i;
						break;
					}
				}
				return pos;
			}	
			
		})
					
	}
	
})(jQuery);		  
		
