/*
	jQuery Coda-Slider v1.1 - http://www.ndoherty.com/coda-slider
	
	Copyright (c) 2007 Niall Doherty
	
	Inspired by the clever folks at http://www.panic.com/coda
	Many thanks to Gian Carlo Mingati. Coda-Slider is a heavily modified version of his slideViewer, which can be
	found at  http://www.gcmingati.net/wordpress/wp-content/lab/jquery/imagestrip/imageslide-plugin.html
	
	Requirements:
	- jQuery 1.2 ... available via  http://www.jquery.com
	- jQuery easing plugin (1.2) ... available via  http://gsgd.co.uk/sandbox/jquery/easing/
	
	****
	
 Modified by Andrew Tay (www.andrewtay.com):
 - now allows different config options for each slider on a page w/ multiple sliders
 - no longer needs easing compaitibility script. now uses current easing function names
 - removed link text as it has to be hidden anyway, and doesn't serve a functional purpose
 - fixed a bug that was messing up IE6. basically, panelContainer would be 1px too narrow, causing the last
 	floated panel to fall to the next line. cured by adding a few extra px per panel
 - thumbnail images for featured sites (aka navigation tabs) now created after stripViewer in document flow
 - now chooses a random image if none is specified by URL (using hash--#1, #2, etc...)

 Feb 2009

*/

/* GENERATE LOADER */

jQuery(function(){						
	jQuery("div.csw").prepend("<p class='loading'>Loading...<br /><img src='/images/ajax-loader.gif' alt='loading...'/ ></p>");
	});

/* CONFIG for EACH SLIDER */
	
var j = 0;									// Global variable counts each slider for multiple sliders
jQuery.fn.codaSlider = function(settings) {
	
	if (j + 1 == 2) {						// NEW!! targets second slider to be initialized
		settings = jQuery.extend({
   		easeFunc: "",
   		easeTime: 1,					// NEW!! reduced from 750ms
   		toolTip: false
			},	settings);
		} else {
		settings = jQuery.extend({
   		easeFunc: "easeInOutExpo",
   		easeTime: 400,					// NEW!! reduced from 750ms
   		toolTip: false
			},	settings);
		}

/* MAIN SLIDER FUNCTIONS */
		
	return this.each(function(){
		var container = jQuery(this);
	// Remove the preloader gif...
		container.find("p.loading").remove();
	// Self-explanatory...
		container.removeClass("csw").addClass("stripViewer");
	// Get the width of a panel, set from CSS...
		var panelWidth = container.find("div.panel").width();
	// panelCount gives us a count of the panels in the container...
		var panelCount = container.find("div.panel").size();
	// Calculate the width of all the panels when lined up end-to-end...
		var stripViewerWidth = (panelWidth * panelCount) + (4 * panelCount);	// NEW!! IE6 needs these extra pixels
	// Use the above width to specify the CSS width for the panelContainer element...
		container.find("div.panelContainer").css("width" , stripViewerWidth);
	// Set the navWidth as a multiple of panelCount to account for margin-right on each li
		var navWidth = 0;		// NEW!! was = panelCount * 2;  but don't need it since we're not using margin-right
		
		var cPanel;
		var cnt;
		
		// Specify the current panel.
		// If the loaded URL has a hash (cross-linking), we're going to use that hash to give the slider a specific starting position...
		if (location.hash && parseInt(location.hash.slice(1)) <= panelCount) {
			cPanel = parseInt(location.hash.slice(1));
			cnt = - (panelWidth * (cPanel - 1));
			jQuery(this).find("div.panelContainer").css({ left: cnt });
		// Otherwise, we'll just set the current panel to 1...
			} else { 
			// var cPanel = 1;
			cPanel = Math.floor((panelCount) * Math.random()) + 1;		// NEW!! chooses random panel
			cnt = - (panelWidth * (cPanel - 1));
			jQuery(this).find("div.panelContainer").css({ left: cnt });
			
			var cpaneltracker = cPanel;		// NEW!! tracks current panel and passes it to crosslinking function
			}
		

		// Create appropriate nav
		container.each(function(i) {
			
			// Create the Left and Right arrows - NEW!! Removed link text as its not necessary
			jQuery(this).before("<div class='stripNavL' id='stripNavL" + j + "'><a href='#'></a><\/div>");
			jQuery(this).after("<div class='stripNavR' id='stripNavR" + j + "'><a href='#'></a><\/div>");
			
			// Create the Tabs - NEW!! Removed link text as its not necessary
			jQuery(this).after("<div class='stripNav' id='stripNav" + j + "'><ul><\/ul><\/div>");	// NEW! after
			jQuery(this).find("div.panel").each(function(n) {
				jQuery("div#stripNav" + j + " ul").append("<li class='tab" + (n+1) + "'><a href='#" + (n+1) + "' title='click for preview'><\/a><\/li>");												
				});
			
			// Tab nav
			jQuery("div#stripNav" + j + " a").each(function(z) {
				// Figure out the navWidth by adding up the width of each <li>
				navWidth += jQuery(this).parent().width();

				// What happens when a nav link is clicked
				jQuery(this).bind("click", function() {				jQuery(this).addClass("current").parent().parent().find("a").not(jQuery(this)).removeClass("current"); // wow!
					var cnt = - (panelWidth*z);
					cPanel = z + 1;
					jQuery(this).parent().parent().parent().prev().find("div.panelContainer").animate({ left: cnt}, settings.easeTime, settings.easeFunc);		// NEW!! changed .next() to .prev() so tabs could go after stripViewer
					});
				});
			
			// Left nav
			jQuery("div#stripNavL" + j + " a").click(function(){
				var cnt;
				if (cPanel == 1) {
					cnt = - (panelWidth*(panelCount - 1));
					cPanel = panelCount;
					jQuery(this).parent().parent().find("div.stripNav a.current").removeClass("current").parent().parent().find("li:last a").addClass("current");
				} else {
					cPanel -= 1;
					cnt = - (panelWidth*(cPanel - 1));
					jQuery(this).parent().parent().find("div.stripNav a.current").removeClass("current").parent().prev().find("a").addClass("current");
				}
				jQuery(this).parent().parent().find("div.panelContainer").animate({ left: cnt}, settings.easeTime, settings.easeFunc);
				// Change the URL hash (cross-linking)...
				location.hash = cPanel;	
				return false;
				});
			
			// Right nav
			jQuery("div#stripNavR" + j + " a").click(function(){
				var cnt;
				if (cPanel == panelCount) {
					cnt = 0;
					cPanel = 1;
					jQuery(this).parent().parent().find("div.stripNav a.current").removeClass("current").parent().parent().find("a:eq(0)").addClass("current");
					} else {
					cnt = - (panelWidth*cPanel);
					cPanel += 1;
					jQuery(this).parent().parent().find("div.stripNav a.current").removeClass("current").parent().next().find("a").addClass("current");
					}
				jQuery(this).parent().parent().find("div.panelContainer").animate({ left: cnt}, settings.easeTime, settings.easeFunc);
				// Change the URL hash (cross-linking)...
				location.hash = cPanel;		
				return false;
				});

			
			// Same-page cross-linking
			jQuery("a.cross-link").click(function(){
				jQuery(this).parents().find(".stripNav ul li a:eq(" + (parseInt(jQuery(this).attr("href").slice(1)) - 1) + ")").trigger('click');
				});	
			
			// Set the width of the nav using the navWidth figure we calculated earlier. This is so the nav can be centred above the slider
			// jQuery("div#stripNav" + j).css("width" , navWidth);		NEW!! not needed since we want fixed width
			
			// Specify which tab is initially set to "current". Depends on if the loaded URL had a hash or not (cross-linking).
			// NEW!! else condition is modified to accomodate random panels. before, it was a:eq(0)
			if (location.hash && parseInt(location.hash.slice(1)) <= panelCount) {
				jQuery("div#stripNav" + j + " a:eq(" + (location.hash.slice(1) - 1) + ")").addClass("current");
				} else {
				jQuery("div#stripNav" + j + " a:eq(" + (cpaneltracker - 1) + ")").addClass("current");  // NEW!!
				}
			
			}); // End create appropriate nav
		
			j++;
			
		});
	};
