function SlideShow(flashContainerId, controlsListId) {

	var pub = new Object();

	var flashVersion = "9.0.0";
	var baseUrl = "http://www.nomensa.com/swf/";
	var installHtml = "<p class='flash-info'>Installing the latest <a href='http://www.adobe.com/go/getflashplayer'>Adobe Flash plugin</a> will enhance the display of this content.</p>"

	pub.embed = function() {
		if (swfobject.hasFlashPlayerVersion(flashVersion)) {
			// Change script preference link text
			setScriptPrefrence.enableText = "Turn on animated presentation";
			setScriptPrefrence.disableText = "Turn off animated presentation";
			$("#"+controlsListId).prepend("<li id='script-link-container'></li>")
		    setScriptPrefrence.containerId = "script-link-container";

			if (setScriptPrefrence()) {
				// Select the image to replace
				$("#"+flashContainerId).find("img").eq(0).replaceWith("<div id='slideshowflash'></div>");

				// Embed Flash with swfobject
				var flashvars = {};
				var params = {
					base: baseUrl
				};
				var attributes  = {};
				swfobject.embedSWF(baseUrl + "hero-flash.swf", "slideshowflash", "100%", "200", flashVersion, "", flashvars, params, attributes);
			}
		} else if (swfobject.getFlashPlayerVersion().major != 0) {
			$("#"+flashContainerId).after($(installHtml));
		}
	}


	// ControlButton class
	function ControlButton(buttonLabel, buttonAction, styleClass) {
		var corners = $("<span class='se'>&nbsp;</span><span class='sw'>&nbsp;</span>")
		var enabledContent = $("<a href='#'>"+buttonLabel+"</a>");
		var disabledContent = $("<strong>"+buttonLabel+"</strong>");
		var container = $("<li class='"+styleClass+"'></li>");

		var enable = function() {
			container.empty().append(corners).append(enabledContent);
			enabledContent.click(buttonAction);
		}

		var disable = function() {
			container.empty().append(corners).append(disabledContent);
		}

		var setLabel = function(newLabel) {
			if (newLabel) {
				enabledContent.text(newLabel);
				disabledContent.text(newLabel)
			} else {
				enabledContent.text(buttonLabel);
				disabledContent.text(buttonLabel);
			}
		}

		disable();

		return({
			'element': container,
			'enable': enable,
			'disable': disable,
			'setLabel': setLabel
		});
	}


	// Started from Flash
	pub.init = function() {
		controlsList = $("#"+controlsListId);
		// Setup Controls
		controlsList.empty();

		// Replace script preference
		$("#"+controlsListId).prepend("<li id='script-link-container'></li>")
		setScriptPrefrence();

		// Create buttons
		playButton = new ControlButton("Play", playSlides, "play");
		pauseButton = new ControlButton("Pause", pauseSlides, "pause");
		previousButton = new ControlButton("Previous", playPreviousSlide, "previous");
		nextButton = new ControlButton("Next", playNextSlide, "next");

		// Add buttons
		controlsList.append(playButton.element);
		controlsList.append(pauseButton.element);
		controlsList.append(previousButton.element);
		controlsList.append(nextButton.element);
	}


	// Public methods for Flash
	pub.statusPlaying = function() {
		playButton.disable();
		pauseButton.enable();

		playButton.setLabel();
	}

	pub.statusPaused = function() {
		playButton.enable();
		pauseButton.disable();
	}

	pub.statusComplete = function() {
		playButton.enable();
		pauseButton.disable();

		playButton.setLabel("Replay");
	}

	pub.statusFirst = function() {
		previousButton.disable();
		nextButton.enable();

		playButton.setLabel();
	}

	pub.statusLast = function() {
		previousButton.enable();

		nextButton.disable();
	}

	pub.statusMiddle = function() {
		previousButton.enable();
		nextButton.enable();
	}

	// Animation Control from HTML/JS
	function playSlides() {document.getElementById("slideshowflash").playSlides(); return false}
	function pauseSlides() {document.getElementById("slideshowflash").pauseSlides(); return false}
	function playPreviousSlide() {document.getElementById("slideshowflash").playPreviousSlide(); return false}
	function playNextSlide() {document.getElementById("slideshowflash").playNextSlide(); return false}

	// Return public methods and variables
	return pub;
}

// ID of container for the flash, ID of ul of controls
heroFlash = new SlideShow("slideshow", "controls");
$(document).ready(function(){
	heroFlash.embed();
})
