// JavaScript Document
var showcaseTimers = new Array();
var advance_delay = 5000;
$(document).ready(function(){
	var showcaseId = $(".showcase").attr("id");
	if (showcaseId in showcaseTimers) {
		/* do nothing */
	}
	else {
		start_showcase(showcaseId);
	}
	
/*	$(".showcase_images li.active img").load(
		function() {
			alert('load');
			var showcaseId = $(this).parents(".showcase").attr("id");
			alert('showcaseId = ' + showcaseId);
			if (showcaseId in showcaseTimers) {
				alert('showcaseId is in showcaseTimers; don\'t start_showcase');
			}
			else {
				alert('start_showcase');
				start_showcase(showcaseId);
			}
		}
	);*/
	
	$(".showcase_nav a").bind(
		'click', 
		function() {
			showcase_switchto($(this).parents(".showcase").attr('id'), $(this).attr('href').replace('#',''));
			return false;
		}
	);
	
	$(".showcase_controls a").bind(
		'click',
		function() {
			var showcaseId = $(this).parents(".showcase").attr("id");
			var currentItemNumber = parseInt($("#" + showcaseId + " .showcase_images li.active").attr("id").replace("showcase_image_", ""));
			var numberOfItems = $("#" + showcaseId + " .showcase_images").children("li").size();
			var newItemNumber = null;
			/*alert('numberOfItems = ' + numberOfItems + '\ncurrentItemNumber = ' + currentItemNumber);*/
			switch ($(this).attr("href").replace("#", "")){
			case "first": 
				newItemNumber = 1;
				stop_showcase(showcaseId);
				break;
			case "prev": 
				if (currentItemNumber == 1) {newItemNumber = numberOfItems;}
				else {newItemNumber = currentItemNumber - 1;}
				stop_showcase(showcaseId);
				break;
			case "next": 
				if (currentItemNumber == numberOfItems) {newItemNumber = 1;}
				else {newItemNumber = currentItemNumber + 1;}
				stop_showcase(showcaseId);
				break;
			case "last": 
				newItemNumber = numberOfItems;
				stop_showcase(showcaseId);
				break;
			case "stopstart":
				if (showcaseId in showcaseTimers) {
					/*$(".welcome p").html('stop!');*/
					stop_showcase(showcaseId);
				}
				else {
					$("#" + showcaseId + " .showcase_controls a[href$='#next']").click();
					start_showcase(showcaseId);
				}
				return false;
				break;
			default :
			}
			if (newItemNumber == null) {
				alert('this function not supported');
			} else {
				showcase_switchto(showcaseId, newItemNumber);
			}
			return false;
		}
	);
});

function auto_advance(showcaseId) {
	if (showcaseId in showcaseTimers) {
		var currentItemNumber = parseInt($("#" + showcaseId + " .showcase_images li.active").attr("id").replace("showcase_image_", ""));
		var numberOfItems = $("#" + showcaseId + " .showcase_images").children("li").size();
		var newItemNumber = null;
		if (currentItemNumber == numberOfItems) {newItemNumber = 1;}
		else {newItemNumber = currentItemNumber + 1;}
		showcase_switchto(showcaseId, newItemNumber);
		start_showcase(showcaseId);
	}
}

function showcase_switchto(showcaseId, newItemNumber) {
	/*alert('showcase_switchto(' + showcaseId + ', ' + newItemNumber + ')');*/
	$("#" + showcaseId + " .showcase_images li.active").removeClass("active");
	$("#" + showcaseId + " #showcase_image_" + newItemNumber).addClass("active");
	$("#" + showcaseId + " .showcase_items li.active").removeClass("active");
	$("#" + showcaseId + " #showcase_item_text_" + newItemNumber).addClass("active");
	$("#" + showcaseId + " .showcase_nav li.active").removeClass("active");
	$("#" + showcaseId + " #showcase_link_" + newItemNumber).addClass("active");
	if (showcaseId in showcaseTimers) {
//		stop_showcase(showcaseId);
//		showcaseTimers[showcaseId] = setTimeout(function(){auto_advance(showcaseId)}, advance_delay);
	}
}

function stop_showcase(showcaseId) {
	clearTimeout(showcaseTimers[showcaseId]);
	delete showcaseTimers[showcaseId];
	/*$(".welcome p").html('stop<br />' + dump(showcaseTimers));*/
	$("#" + showcaseId + " .showcase_controls a[href$='#stopstart'] img").attr("alt", "start");
	$("#" + showcaseId + " .showcase_controls a[href$='#stopstart'] img").attr("src", "/images/play.png");
}
function start_showcase(showcaseId) {
	showcaseTimers[showcaseId] = setTimeout(function(){auto_advance(showcaseId)}, advance_delay);
	/*$(".welcome p").html('start<br />' + dump(showcaseTimers));*/
	$("#" + showcaseId + " .showcase_controls a[href$='#stopstart'] img").attr("alt", "stop");
	$("#" + showcaseId + " .showcase_controls a[href$='#stopstart'] img").attr("src", "/images/pause.png");
}
/**
 * Function : dump()
 * Arguments: The data - array,hash(associative array),object
 *    The level - OPTIONAL
 * Returns  : The textual representation of the array.
 * This function was inspired by the print_r function of PHP.
 * This will accept some data as the argument and return a
 * text that will be a more readable version of the
 * array/hash/object that is given.
 * Docs: http://www.openjs.com/scripts/others/dump_function_php_print_r.php
 */
function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}

