//	multimedia.js
//	3 Dec 2009
//
$(document).ready(function(){ 
	try { 
		var tl = (typeof sjhs.urlVariables.trace != "undefined") ? parseInt(sjhs.urlVariables.trace) : ERROR;
		sjhs.consoleTrace = new consoleTrace(tl);	// Reporting severity threshold filter:  0=log, 1=info, 2=warning, 3=error
		sjhs.consoleTrace.log("LOG", "$(document).ready");

		
		// Initialize menu
		var MainMenuBar = new Spry.Widget.MenuBar("MainMenuBar", {imgDown:"../SpryAssets/SpryMenuBarDownHover.gif", imgRight:"../SpryAssets/SpryMenuBarRightHover.gif"});

		// Write footer information
		if (document.lastModified) {		// Not supported by Safari 3.2
			$("#LastModified").html("Page last modified " + document.lastModified);
		}

		// Create the tabs and panes
		sjhs.tabs = $("ul.css-tabs").tabs("div.css-panes > div", {
			onBeforeClick: function(event, tabIndex) { 
				sjhs.consoleTrace.log("LOG", "Tabs event type (%s), tabIndex (%d)", event.type, tabIndex);
			}
			, onClick: function(event, tabIndex) { 
				sjhs.consoleTrace.log("LOG", "Tabs event type (%s), tabIndex (%d)", event.type, tabIndex);
			}
		});
		
		// Create the scrollable playlists within the planes  
		sjhs.scrollables = $("div.scrollable").scrollable({ 
			vertical:true 
			, clickable: false
			, size: 3 
			, onBeforeSeek: function (event, indexNum) {
				sjhs.consoleTrace.log("LOG", "Scrollable event type (%s), tabIndex (%d)", event.type, indexNum);
			}, onSeek: function (event, indexNum) {
				sjhs.consoleTrace.log("LOG", "Scrollable event type (%s), tabIndex (%d)", event.type, indexNum);
			}, onStart: function (event, indexNum) {
				sjhs.consoleTrace.log("LOG", "Scrollable event type (%s), tabIndex (%d)", event.type, indexNum);
			}
		// use mousewheel plugin 
		}).mousewheel(); 

		// setup scrolling for the playlist elements
		$("div.playlist").scrollable({
			items:'div.clips',
			vertical:true,
			next:'a.down',
			prev:'a.up'
		}).mousewheel();

		// Hover behavior for media items
		// lazy code assumes the element has no other css classes
		$("div.scrollable > div.items > div").hover(
			function () {
				this.className = "hoverOver";
			}
			, function () {
				this.className = "";
			}
		);
		
		// setup overlay actions for playlist images
		sjhs.overlays = $("img[rel]").overlay({
	 
			// use the Apple effect for overlay
			effect: 'apple'		
			, top: 0
			, left: 0
			, expose: '#dbc8ac'				
			
			, onLoad: function(content) {
				try {
					sjhs.consoleTrace.log("LOG", "Overlay event type (%s)", content.type);
					// find the player contained inside this overlay and load it
					sjhs.currentOverlay = this;
					this.getOverlay().find("a.player").flowplayer(0).load();
				} catch (exception) {
					sjhs.consoleTrace.log("ERROR", 'Exception: ', exception);
				}
			}
			
			, onClose: function(content) {
				sjhs.consoleTrace.log("LOG", "Overlay event type (%s)", content.type);
				$f().unload();
				sjhs.currentOverlay = null;
			}
		});				
		/*
		// install the flowplayers for Science on St John
		flowplayer("playerScienceOnSTJ", "flowplayer/flowplayer-3.1.5.swf", {
				plugins: { 
					// audio plugin
					audio: { 
						url: 'flowplayer/flowplayer.audio-3.1.2.swf'
					} 
					
					// bandwidth check plugin
					, bwcheck: {  
						url: 'flowplayer/flowplayer.bwcheck-3.1.3.swf' 
						, netConnectionUrl: 'http://www.stjohnhistoricalsociety.org/Articles/ScienceOnSTJ/img0.png' + '?' + Math.random()
						, bitrates: { slow: 32, low: 48} //, mid: 64, high: 128 }
						, defaultBitRate: 32
//						, rememberBitRate: false
						, onBwDone: function(url, chosenBitrate, bitrate) {
							sjhs.consoleTrace.log("LOG", "Player Bandwith check done: url (%s) chosenBitrate(%d), bitrate(%d)" , url, chosenBitrate, bitrate);
							if (!$f(0).getConfig().bitrate) {
								$f(0).getConfig().bitrate = bitrate;
								$f(0).getConfig().chosenBitrate = chosenBitrate;
								var html;
								html = "Network download speed is: " +parseInt(bitrate)+ " kbps, <br />selecting audio encoded at " +chosenBitrate+ " kbps.";
								sjhs.currentOverlay.getOverlay().find(".networkSpeed").html(html);
								sjhs.currentOverlay.getOverlay().find(".playUrl").html("URL: " + url );
							}
						}
					}

					, myContent: {
						url: 'flowplayer/flowplayer.content-3.1.0.swf'
						, width: '95%'
						, height: '93%'
						, padding: '15px'
						, opacity: '1.0'
					}
				}	
			
				, clip: {
					autoBuffering: true
					, autoPlay: true
					, baseUrl: 'http://www.stjohnhistoricalsociety.org/Multimedia/audio/'
					
					// this event never fires !!!
					, onbeforeBegin: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeBegin: ", clip.completeUrl);
						
					}
					, onBegin: function (clip) {
						try {
							sjhs.consoleTrace.log("LOG", "Clip onBegin: ", clip.completeUrl);

							sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");

							// Set cuepoints for this clip
							clip.onCuepoint(clip.clipCuepoints, function (clip, cuepoint) {
								sjhs.consoleTrace.log("LOG", "cuepoint " + cuepoint + " entered on clip " + clip.url);
								this.getPlugin("myContent").setHtml(cuepoint.cueHtml);
							});

						} catch(exception) {
							sjhs.consoleTrace.log("ERROR", 'Exception: ', exception);
						}
					}

					, onBeforeFinish: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeFinish: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player:  Completed");
					}
					, onFinish: function (clip) {
						pageTracker._trackEvent("Audio", "Finish", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "Clip onFinish: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onFinish");
					}
					
					, onBeforeStart: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeStart: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeStart");
					}
					, onStart: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Start", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onStart: ", clip.completeUrl);
						$(".playerStatus").html("Playing: " + clip.url );
						$(".playURL").html("URL: " + clip.url );
					}
					
					, onBeforePause: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforePause: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Paused");
					}
					, onPause: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Pause", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onPause: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onFinish");
					}
					
					, onBeforeResume: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeResume: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Resuming");
					}
					, onResume: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Resume", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onResume: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onResume");
					}
					
					, onBeforeSeek: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeSeek: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeSeek");
					}
					, onSeek: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onSeek: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onSeek");
					}
					
					, onBeforeStop: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeStop: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Stopped");
					}
					, onStop: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Stop", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onStop: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onStop");
					}
					
					, onUpdate: function (clip) {
						sjhs.consoleTrace.log("LOG", "onUpdate: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onUpdate");
					}
					
					, onBufferEmpty: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferEmpty: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferEmpty");
					}
					
					, onBufferFull: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferFull: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferFull");
					}
					, onBufferStop: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferStop: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferStop");
					}
					
					, onNetStreamEvent: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onNetStreamEvent: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onNetStreamEvent");
					}
					, urlResolvers: 'bwcheck'
				
				}
				
				// Define playlist
				, playlist: [
					{
						url: 'ScienceOnSTJ/Science1.m4a'
						, title: 'Science on St John, Part I'
						, time: '13:35 min'
						, clipCuepoints: [ 
							  { time: ((0*60) + 00) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img0.jpg" width="640" height="480" />' }
							, { time: ((1*60) + 28) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img0.jpg" width="640" height="480" />' }
							, { time: ((1*60) + 50) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img1.jpg" width="640" height="480" />' }
							, { time: ((3*60) + 20) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img2.jpg" width="640" height="480" />' }
							, { time: ((4*60) + 00) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img3.jpg" width="640" height="480" />' }
							, { time: ((4*60) + 36) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img4.jpg" width="640" height="480" />' }
							, { time: ((5*60) + 45) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img5.jpg" width="640" height="480" />' }
							, { time: ((6*60) + 32) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img6.jpg" width="640" height="480" />' }
							, { time: ((7*60) + 24) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img7.jpg" width="640" height="480" />' }
							, { time: ((8*60) + 26) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img8.jpg" width="640" height="480" />' }
							, { time: ((9*60) + 13) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img9.jpg" width="640" height="480" />' }
							]						
					}
					, {
						url: 'ScienceOnSTJ/Science2.m4a'
						, title: 'Science on St John, Part II'
						, time: '9:50 min'
						, clipCuepoints: [ 
							  { time: ((0*60) + 00) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img10.jpg" width="640" height="480" />' }
							, { time: ((0*60) + 30) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img11.jpg" width="640" height="480" />' }
							, { time: ((1*60) + 05) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img12.jpg" width="640" height="480" />' }
							, { time: ((2*60) + 00) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img13.jpg" width="640" height="480" />' }
							, { time: ((2*60) + 36) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img14.jpg" width="640" height="480" />' }
							, { time: ((2*60) + 47) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img15.jpg" width="640" height="480" />' }
							, { time: ((3*60) + 08) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img16.jpg" width="640" height="480" />' }
							, { time: ((3*60) + 46) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img17.jpg" width="640" height="480" />' }
							, { time: ((4*60) + 56) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img18.jpg" width="640" height="480" />' }
							, { time: ((5*60) + 48) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img19.jpg" width="640" height="480" />' }
							, { time: ((7*60) + 17) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img20.jpg" width="640" height="480" />' }
							, { time: ((7*60) + 47) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img21.jpg" width="640" height="480" />' }
							, { time: ((8*60) + 41) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img22.jpg" width="640" height="480" />' }
						]
					}
					, {
						url: 'ScienceOnSTJ/Science3.m4a'
						, title: 'Science on St John, Part III'
						, time: '18:26 min'
						, clipCuepoints: [ 
							  { time: ((0*60) + 00) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img23.jpg" width="640" height="480" />' }
							, { time: ((0*60) + 13) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img24.jpg" width="640" height="480" />' }
							, { time: ((1*60) + 29) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img25.jpg" width="640" height="480" />' }
							, { time: ((2*60) + 32) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img26.jpg" width="640" height="480" />' }
							, { time: ((3*60) + 35) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img27.jpg" width="640" height="480" />' }
							, { time: ((4*60) + 17) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img28.jpg" width="640" height="480" />' }
							, { time: ((6*60) + 21) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img29.jpg" width="640" height="480" />' }
							, { time: ((8*60) + 23) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img30.jpg" width="640" height="480" />' }
							, { time: ((8*60) + 41) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img31.jpg" width="640" height="480" />' }
							, { time: ((10*60) + 40) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img32.jpg" width="640" height="480" />' }
							, { time: ((12*60) + 05) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img33.jpg" width="640" height="480" />' }
							, { time: ((12*60) + 55) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img34.jpg" width="640" height="480" />' }
							, { time: ((14*60) + 23) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img35.jpg" width="640" height="480" />' }
							, { time: ((15*60) + 03) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img36.jpg" width="640" height="480" />' }
							, { time: ((15*60) + 52) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img37.jpg" width="640" height="480" />' }
							, { time: ((16*60) + 06) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img38.jpg" width="640" height="480" />' }
						]
					}
					, {
						url: 'ScienceOnSTJ/Science4.m4a'
						, title: 'Science on St John, Part IV'
						, time: '11:16 min'
						, clipCuepoints: [ 
							  { time: ((0*60) + 00) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img39.jpg" width="640" height="480" />' }
							, { time: ((0*60) + 26) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img40.jpg" width="640" height="480" />' }
							, { time: ((0*60) + 56) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img41.jpg" width="640" height="480" />' }
							, { time: ((1*60) + 04) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img42.jpg" width="640" height="480" />' }
							, { time: ((4*60) + 09) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img43.jpg" width="640" height="480" />' }
							, { time: ((4*60) + 36) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img44.jpg" width="640" height="480" />' }
							, { time: ((5*60) + 47) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img45.jpg" width="640" height="480" />' }
							, { time: ((6*60) + 49) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img46.jpg" width="640" height="480" />' }
							, { time: ((7*60) + 17) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img47.jpg" width="640" height="480" />' }
							, { time: ((7*60) + 38) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img48.jpg" width="640" height="480" />' }
							, { time: ((8*60) + 11) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img49.jpg" width="640" height="480" />' }
							, { time: ((9*60) + 01) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img50.jpg" width="640" height="480" />' }
							, { time: ((10*60) + 06) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img51.jpg" width="640" height="480" />' }
						]
					}
					, {
						url: 'ScienceOnSTJ/Science5.m4a'
						, title: 'Science on St John, Part 5'
						, time: '15:32 min'
						, clipCuepoints: [ 
							  { time: ((0*60) + 00) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img52.jpg" width="640" height="480" />' }
							, { time: ((0*60) + 28) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img53.jpg" width="640" height="480" />' }
							, { time: ((2*60) + 09) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img54.jpg" width="640" height="480" />' }
							, { time: ((2*60) + 43) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img55.jpg" width="640" height="480" />' }
							, { time: ((3*60) + 11) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img56.jpg" width="640" height="480" />' }
							, { time: ((4*60) + 00) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img57.jpg" width="640" height="480" />' }
							, { time: ((5*60) + 05) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img58.jpg" width="640" height="480" />' }
							, { time: ((5*60) + 42) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img59.jpg" width="640" height="480" />' }
							, { time: ((7*60) + 35) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img60.jpg" width="640" height="480" />' }
							, { time: ((8*60) + 12) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img61.jpg" width="640" height="480" />' }
							, { time: ((11*60) + 11) * 1000, cueHtml: '<img src="Articles/ScienceOnSTJ/img62.jpg" width="640" height="480" />' }
						]						
					}
				 ]
				// Custom properties
				, chosenBitrate: null
				, bitrate: null
				
				// event callbacks
				, onBeforeClick: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onBeforeClick (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeFinish");
				}

				, onError: function (errorCode, errorMessage) {
					sjhs.consoleTrace.log("ERROR", errorMessage);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeFinish");
				}
				
				, onBeforeLoad: function (event) {
					sjhs.consoleTrace.log("LOG", "Player OnBeforeLoad (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Loading...");
				}
				, onLoad: function (event) {
					sjhs.consoleTrace.log("LOG", "Player Onload (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Loaded.  Detecting network download speed...");
 
				}
				
				, onBeforeUnload: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onBeforeUnload (%s)", event);
					// sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeUnload");
				}
				, onUnload: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onUnload (%s)", event);
					// sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onUnload");
				}
				
				, onClipAdd: function(clip) {
					sjhs.consoleTrace.log("LOG", "Player onClipAdd ", clip.completeUrl);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onClipAdd");
				}
				, onPlaylistReplace: function(playlist) {
					sjhs.consoleTrace.log("LOG", "Player onPlaylistReplace ", playlist[0].completeUrl);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onPlaylistReplace");
				}
				
				, onMouseOver: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onMouseOver (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onMouseOver");
				}
				
				, onMouseOut: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onMouseOut (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onMouseOut");
				}
				
				, onKeyPress: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onKeyPress (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onKeyPress");
				}
				
			}).playlist("#overlayScienceOnSTJ > div.playlistWrapper> div.playlist > div.clips"
				, {loop: true}				// When clip completes, advance to next clip
				, {playOnClick: true}		// ??
			);	
		*/
		
		// install the flowplayer for Ladys' Storytelling series
		flowplayer("playerLST", "flowplayer/flowplayer-3.1.5.swf", {
				plugins: { 
					// audio plugin
					audio: { 
						url: 'flowplayer/flowplayer.audio-3.1.2.swf'
					} 
					
					// bandwidth check plugin
					, bwcheck: {  
						url: 'flowplayer/flowplayer.bwcheck-3.1.3.swf' 
						, netConnectionUrl: 'http://www.stjohnhistoricalsociety.org/Articles/STJWomenTellingSpeakers/img_AliceOConnor_xl.jpg' + '?' + Math.random()
						, bitrates: { slow: 32, low: 48, mid: 64, high: 128 }
						, defaultBitRate: 32
//						, rememberBitRate: false
						, onBwDone: function(url, chosenBitrate, bitrate) {
							sjhs.consoleTrace.log("LOG", "Player Bandwith check done: url (%s) chosenBitrate(%d), bitrate(%d)" , url, chosenBitrate, bitrate);
							if (!$f(0).getConfig().bitrate) {
								$f(0).getConfig().bitrate = bitrate;
								$f(0).getConfig().chosenBitrate = chosenBitrate;
								var html;
								html = "Network download speed is: " +parseInt(bitrate)+ " kbps, <br />selecting audio encoded at " +chosenBitrate+ " kbps.";
								sjhs.currentOverlay.getOverlay().find(".networkSpeed").html(html);
								sjhs.currentOverlay.getOverlay().find(".playUrl").html("URL: " + url );
							}
						}
					}

					, myContent: {
						url: 'flowplayer/flowplayer.content-3.1.0.swf'
						, width: '95%'
						, height: '88%'
						, opacity: '1.0'
					}
				}	
			
				, clip: {
					autoBuffering: true
					, autoPlay: true
					, baseUrl: 'http://www.stjohnhistoricalsociety.org/Multimedia/audio/'
					
					// this event never fires !!!
					, onbeforeBegin: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeBegin: ", clip.completeUrl);
						
					}
					, onBegin: function (clip) {
						try {
							sjhs.consoleTrace.log("LOG", "Clip onBegin: ", clip.completeUrl);

							sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");

							// Set cuepoints for this clip
							clip.onCuepoint(clip.clipCuepoints, function (clip, cuepoint) {
								sjhs.consoleTrace.log("LOG", "cuepoint " + cuepoint + " entered on clip " + clip.url);
								this.getPlugin("myContent").setHtml(cuepoint.cueHtml);
							});

						} catch(exception) {
							sjhs.consoleTrace.log("ERROR", 'Exception: ', exception);
						}
					}

					, onBeforeFinish: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeFinish: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Finished");
					}
					, onFinish: function (clip) {
						pageTracker._trackEvent("Audio", "Finish", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "Clip onFinish: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Finish");
					}
					
					, onBeforeStart: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeStart: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeStart");
					}
					, onStart: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Start", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onStart: ", clip.completeUrl);
						$(".playerStatus").html("Playing: " + clip.url );
						$(".playURL").html("URL: " + clip.url );
					}
					
					, onBeforePause: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforePause: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Paused");
					}
					, onPause: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Pause", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onPause: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Paused");
					}
					
					, onBeforeResume: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeResume: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");
					}
					, onResume: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Resume", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onResume: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");
					}
					
					, onBeforeSeek: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeSeek: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeSeek");
					}
					, onSeek: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onSeek: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onSeek");
					}
					
					, onBeforeStop: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeStop: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeStop");
					}
					, onStop: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Stop", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onStop: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Stopped");
					}
					
					, onUpdate: function (clip) {
						sjhs.consoleTrace.log("LOG", "onUpdate: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onUpdate");
					}
					
					, onBufferEmpty: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferEmpty: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferEmpty");
					}
					
					, onBufferFull: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferFull: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferFull");
					}
					, onBufferStop: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferStop: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferStop");
					}
					
					, onNetStreamEvent: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onNetStreamEvent: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onNetStreamEvent");
					}
					, urlResolvers: 'bwcheck'
				
				}
				
				// Define playlist
				, playlist: [
					{
						url: 'STJWomenTelling/LST1.m4a'
						, title: 'Ladies&rsquo; Storytelling, Part I'
						, time: '13:22 min'
						, clipCuepoints: [ 
							  { time: ((0*60) + 00) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_BeverlyBiziewski_pl.jpg" width="107" height="110" /><p>Beverly Biziewski</p>' }
							, { time: ((0*60) + 19) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AliceOConnor_pl.jpg" width="222" height="250" /><p>Alice Rhymer OConnor</p>' }
							, { time: ((0*60) + 36) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EdnaFreeman_pl.jpg" width="285" height="250" /><p>Edna OConnor Freedman</p>' }
							, { time: ((0*60) + 45) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
							, { time: ((0*60) + 50) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_YvonneWells_pl.jpg" width="222" height="250" /><p>Yvonne Hodge Wells</p>' }
							, { time: ((0*60) + 58) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_ShirleySewer_pl.jpg" width="277" height="250" /><p>Shirley Frazier Sewer</p>' }
							, { time: ((1*60) + 03) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EulitaJacobs_pl.jpg" width="274" height="250" /><p>Eulita Hansby Jacobs</p>' }
							, { time: ((1*60) + 06) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Childs</p>' }
							, { time: ((4*60) + 34) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EulitaJacobs_pl.jpg" width="274" height="250" /><p>Eulita Hansby Jacobs</p>' }
							, { time: ((8*60) + 37) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
							, { time: ((9*60) + 30) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AliceOConnor_pl.jpg" width="222" height="250" /><p>Alice Rhymer OConnor</p>' }
							, { time: ((11*60) + 35) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
							, { time: ((12*60) + 53) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Childs</p>' }
							]						
					}
					, {
						url: 'STJWomenTelling/LST2.m4a'
						, title: 'Ladies&rsquo; Storytelling, Part II'
						, time: '15:26 min'
						, clipCuepoints: [ 
						  { time: ((0*60) + 00) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AliceOConnor_pl.jpg" width="222" height="250" /><p>Alice Rhymer OConnor</p>' }
						, { time: ((0*60) + 41) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((1*60) + 25) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EdnaFreeman_pl.jpg" width="285" height="250" /><p>Edna OConnor Freedman</p>' }
						, { time: ((4*60) + 02) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_YvonneWells_pl.jpg" width="222" height="250" /><p>Yvonne Hodge Wells</p>' }
						, { time: ((4*60) + 15) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndroChilds_pl.jpg" width="282" height="250" /><p>Andro Childs</p>' }
						, { time: ((5*60) + 15) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((6*60) + 59) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_YvonneWells_pl.jpg" width="222" height="250" /><p>Yvonne Hodge Wells</p>' }
						, { time: ((10*60) + 45) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_ShirleySewer_pl.jpg" width="277" height="250" /><p>Shirley Frazier Sewer</p>' }
						]
					}
					, {
						url: 'STJWomenTelling/LST3.m4a'
						, title: 'Ladies&rsquo; Storytelling, Part III'
						, time: '14:29 min'
						, clipCuepoints: [ 
						  { time: ((0*60) + 00) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EulitaJacobs_pl.jpg" width="274" height="250" /><p>Eulita Hansby Jacobs</p>' }
						, { time: ((1*60) + 14) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Childs</p>' }
						, { time: ((1*60) + 33) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AliceOConnor_pl.jpg" width="222" height="250" /><p>Alice Rhymer OConnor</p>' }
						, { time: ((5*60) + 00) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Childs</p>' }
						, { time: ((9*60) + 15) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EdnaFreeman_pl.jpg" width="285" height="250" /><p>Edna OConnor Freedman</p>' }
						, { time: ((10*60) + 21) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AliceOConnor_pl.jpg" width="222" height="250" /><p>Alice Rhymer OConnor</p>' }
						, { time: ((12*60) + 13) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Childs</p>' }
						]
					}
					, {
						url: 'STJWomenTelling/LST4.m4a'
						, title: 'Ladies&rsquo; Storytelling, Part IV'
						, time: '20:13 min'
						, clipCuepoints: [ 
						  { time: ((0*60) + 00) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_ShirleySewer_pl.jpg" width="277" height="250" /><p>Shirley Frazier Sewer</p>' }
						, { time: ((0*60) + 57) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Keating Childs</p>' }
						, { time: ((2*60) + 05) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EulitaJacobs_pl.jpg" width="274" height="250" /><p>Eulita Hansby Jacobs</p>' }
						, { time: ((4*60) + 50) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_YvonneWells_pl.jpg" width="222" height="250" /><p>Yvonne Hodge Wells</p>' }
						, { time: ((8*60) + 39) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EdnaFreeman_pl.jpg" width="285" height="250" /><p>Edna OConnor Freedman</p>' }
						, { time: ((9*60) + 40) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_YvonneWells_pl.jpg" width="222" height="250" /><p>Yvonne Hodge Wells</p>' }
						, { time: ((10*60) + 25) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((10*60) + 48) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EdnaFreeman_pl.jpg" width="285" height="250" /><p>Edna OConnor Freedman</p>' }
						, { time: ((11*60) + 02) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((11*60) + 41) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Keating Childs</p>' }
						, { time: ((14*60) + 31) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AliceOConnor_pl.jpg" width="222" height="250" /><p>Alice Rhymer OConnor</p>' }
						, { time: ((15*60) + 18) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((17*60) + 20) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Keating Childs</p>' }
						, { time: ((19*60) + 10) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						]
					}
					, {
						url: 'STJWomenTelling/LST5.m4a'
						, title: 'Ladies&rsquo; Storytelling, Part V'
						, time: '18:02 min'
						, clipCuepoints: [ 
						  { time: ((0*60) + 00) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_YvonneWells_pl.jpg" width="222" height="250" /><p>Yvonne Hodge Wells</p>' }
						, { time: ((0*60) + 40) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((0*60) + 45) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_ShirleySewer_pl.jpg" width="277" height="250" /><p>Shirley Frazier Sewer</p>' }
						, { time: ((0*60) + 55) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((1*60) + 14) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Childs</p>' }
						, { time: ((2*60) + 35) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_YvonneWells_pl.jpg" width="222" height="250" /><p>Yvonne Hodge Wells</p>' }
						, { time: ((3*60) + 25) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EdnaFreeman_pl.jpg" width="285" height="250" /><p>Edna OConnor Freedman</p>' }
						, { time: ((3*60) + 46) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_YvonneWells_pl.jpg" width="222" height="250" /><p>Yvonne Hodge Wells</p>' }
						, { time: ((4*60) + 05) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((6*60) + 41) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Keating Childs</p>' }
						, { time: ((7*60) + 33) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_ShirleySewer_pl.jpg" width="277" height="250" /><p>Shirley Frazier Sewer</p>' }
						, { time: ((8*60) + 20) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Childs</p>' }
						, { time: ((9*60) + 50) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_BeverlyBiziewski_pl.jpg" width="107" height="110" /><p>Beverly Biziewski</p>' }
						, { time: ((9*60) + 56) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_MargieLabrenz_pl.jpg" width="116" height="109" /><p>Margie Labrenz</p>' }
						, { time: ((10*60) + 10) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EulitaJacobs_pl.jpg" width="274" height="250" /><p>Eulita Hansby Jacobs</p>' }
						, { time: ((10*60) + 38) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EdnaFreeman_pl.jpg" width="285" height="250" /><p>Edna OConnor Freedman</p>' }
						, { time: ((10*60) + 45) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((10*60) + 52) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EdnaFreeman_pl.jpg" width="285" height="250" /><p>Edna OConnor Freedman</p>' }
						, { time: ((11*60) + 35) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((13*60) + 01) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_EdnaFreeman_pl.jpg" width="285" height="250" /><p>Edna OConnor Freedman</p>' }
						, { time: ((13*60) + 20) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((14*60) + 05) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_MorganBarlas_pl.jpg" width="110" height="110" /><p>Morgan Barlas</p>' }
						, { time: ((14*60) + 15) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((14*60) + 58) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Keating Childs</p>' }
						, { time: ((15*60) + 26) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_MorganBarlas_pl.jpg" width="110" height="110" /><p>Morgan Barlas</p>' }
						, { time: ((15*60) + 32) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_NaomiVarlack_pl.jpg" width="310" height="250" /><p>Naomi OConnor Varlack</p>' }
						, { time: ((15*60) + 41) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_AndromeadaChilds_pl.jpg" width="282" height="250" /><p>Andro Keating Childs</p>' }
						, { time: ((16*60) + 01) * 1000, cueHtml: '<img src="Articles/STJWomenTellingSpeakers/img_BeverlyBiziewski_pl.jpg" width="107" height="110" /><p>Beverly Biziewski</p>' }
						]						
					}
				 ]
				// Custom properties
				, chosenBitrate: null
				, bitrate: null
				
				// event callbacks
				, onBeforeClick: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onBeforeClick (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeFinish");
				}

				, onError: function (errorCode, errorMessage) {
					sjhs.consoleTrace.log("ERROR", errorMessage);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeFinish");
				}
				
				, onBeforeLoad: function (event) {
					sjhs.consoleTrace.log("LOG", "Player OnBeforeLoad (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Loading...");
				}
				, onLoad: function (event) {
					sjhs.consoleTrace.log("LOG", "Player Onload (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Loaded.  Detecting network download speed...");
 
				}
				
				, onBeforeUnload: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onBeforeUnload (%s)", event);
					// sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeUnload");
				}
				, onUnload: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onUnload (%s)", event);
					// sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onUnload");
				}
				
				, onClipAdd: function(clip) {
					sjhs.consoleTrace.log("LOG", "Player onClipAdd ", clip.completeUrl);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onClipAdd");
				}
				, onPlaylistReplace: function(playlist) {
					sjhs.consoleTrace.log("LOG", "Player onPlaylistReplace ", playlist[0].completeUrl);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onPlaylistReplace");
				}
				
				, onMouseOver: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onMouseOver (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onMouseOver");
				}
				
				, onMouseOut: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onMouseOut (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onMouseOut");
				}
				
				, onKeyPress: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onKeyPress (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onKeyPress");
				}
				
			}).playlist("#overlayLST > div.playlistWrapper> div.playlist > div.clips"
				, {loop: true}				// When clip completes, advance to next clip
				, {playOnClick: true}		// ??
			);	

		// Hot Steel at Cruz Bay
		flowplayer("playerHotSteelAtCruzBay", "flowplayer/flowplayer-3.1.5.swf", {
				plugins: { 
					// audio plugin
					audio: { 
						url: 'flowplayer/flowplayer.audio-3.1.2.swf'
					} 
					
					/* bandwidth check plugin
					, bwcheck: {  
						url: 'flowplayer/flowplayer.bwcheck-3.1.3.swf' 
						, netConnectionUrl: 'http://www.stjohnhistoricalsociety.org/Articles/STJWomenTellingSpeakers/img_AliceOConnor_xl.jpg' + '?' + Math.random()
						, bitrates: { slow: 32, low: 48, mid: 64, high: 128 }
						, defaultBitRate: 32
//						, rememberBitRate: false
						, onBwDone: function(url, chosenBitrate, bitrate) {
							sjhs.consoleTrace.log("LOG", "Player Bandwith check done: url (%s) chosenBitrate(%d), bitrate(%d)" , url, chosenBitrate, bitrate);
							if (!$f(0).getConfig().bitrate) {
								$f(0).getConfig().bitrate = bitrate;
								$f(0).getConfig().chosenBitrate = chosenBitrate;
								var html;
								html = "Network download speed is: " +parseInt(bitrate)+ " kbps, selecting audio encoded at " +chosenBitrate+ " kbps.";
								sjhs.currentOverlay.getOverlay().find(".networkSpeed").html(html);
								sjhs.currentOverlay.getOverlay().find(".playUrl").html("URL: " + url );
							}
						}
					}
					*/
					, myContent: {
						url: 'flowplayer/flowplayer.content-3.1.0.swf'
						, width: '95%'
						, height: '88%'
						, opacity: '1.0'
					}
				}	
			
				, clip: {
					autoBuffering: true
					, autoPlay: true
					, baseUrl: 'http://www.stjohnhistoricalsociety.org/Music/'
					
					// this event never fires !!!
					, onbeforeBegin: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeBegin: ", clip.completeUrl);
						
					}
					, onBegin: function (clip) {
						try {
							sjhs.consoleTrace.log("LOG", "Clip onBegin: ", clip.completeUrl);
							sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");

							// Set cuepoints for this clip
							if (typeof clip.clipCuepoints == 'object') {
								clip.onCuepoint(clip.clipCuepoints, function (clip, cuepoint) {
									sjhs.consoleTrace.log("LOG", "cuepoint " + cuepoint + " entered on clip " + clip.url);
									this.getPlugin("myContent").setHtml(cuepoint.cueHtml);
								});
							}

						} catch(exception) {
							sjhs.consoleTrace.log("ERROR", 'Exception: ', exception);
						}
					}

					, onBeforeFinish: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeFinish: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Finished");
					}
					, onFinish: function (clip) {
						pageTracker._trackEvent("Audio", "Finish", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "Clip onFinish: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Finished");
					}
					
					, onBeforeStart: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeStart: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeStart");
					}
					, onStart: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Start", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onStart: ", clip.completeUrl);
						$(".playerStatus").html("Playing: " + clip.url );
						$(".playURL").html("URL: " + clip.url );
					}
					
					, onBeforePause: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforePause: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Paused");
					}
					, onPause: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Pause", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onPause: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Paused");
					}
					
					, onBeforeResume: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeResume: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");
					}
					, onResume: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Resume", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onResume: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onResume");
					}
					
					, onBeforeSeek: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeSeek: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeSeek");
					}
					, onSeek: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onSeek: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onSeek");
					}
					
					, onBeforeStop: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeStop: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeStop");
					}
					, onStop: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Stop", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onStop: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Stopped");
					}
					
					, onUpdate: function (clip) {
						sjhs.consoleTrace.log("LOG", "onUpdate: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onUpdate");
					}
					
					, onBufferEmpty: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferEmpty: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferEmpty");
					}
					
					, onBufferFull: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferFull: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferFull");
					}
					, onBufferStop: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferStop: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferStop");
					}
					
					, onNetStreamEvent: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onNetStreamEvent: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onNetStreamEvent");
					}
					, urlResolvers: 'bwcheck'
				
				}
				
				// Define playlist
				, playlist: [
					{ url: "Cruz%20Bay%20Hot%20Shots/Hot%20Steel%20At%20Cruz%20Bay/Track%201.mp3"
						, title: "1. It&rsquo;s Still Early"
						, time: '3:36 min'
						, clipCuepoints : [{
							time: ((0*60) + 00) * 1000, cueHtml: '<img src="Music/Cruz%20Bay%20Hot%20Shots/Hot%20Steel%20At%20Cruz%20Bay/Hot-Steel-At-Cruz-Bay.jpg" width="250" height="254"/>'
						}] 
					}
					, {
						url: "Cruz%20Bay%20Hot%20Shots/Hot%20Steel%20At%20Cruz%20Bay/Track%202.mp3"
						, title: "2. There&rsquo;s a Man In Your Pajamas"
						, time: '4:40 min'
					}
					, {
						url:  "Cruz%20Bay%20Hot%20Shots/Hot%20Steel%20At%20Cruz%20Bay/Track%203.mp3"
						, title: "3. Over The Waves"
						, time: '2:10 min'
					}
					, {
						url:  "Cruz%20Bay%20Hot%20Shots/Hot%20Steel%20At%20Cruz%20Bay/Track%204.mp3"
						, title: "4. When The Saints Go Marching In"
						, time: '3:17 min'
					}
					, {
						url:  "Cruz%20Bay%20Hot%20Shots/Hot%20Steel%20At%20Cruz%20Bay/Track%205.mp3"
						, title: "5. The Old Man and the Donkey"
						, time: '5:14 min'
					}
					, {
						url:  "Cruz%20Bay%20Hot%20Shots/Hot%20Steel%20At%20Cruz%20Bay/Track%206.mp3"
						, title: "6. I Want To Be Alive"
						, time: '4:12 min'
					}
					, {
						url:  "Cruz%20Bay%20Hot%20Shots/Hot%20Steel%20At%20Cruz%20Bay/Track%207.mp3"
						, title: "7. Michael Row The Boat"
						, time: '4:11 min'
					}
					, {
						url:  "Cruz%20Bay%20Hot%20Shots/Hot%20Steel%20At%20Cruz%20Bay/Track%208.mp3"
						, title: "8. Downtown"
						, time: '5:55 min'
					}
					, {
						url:  "Cruz%20Bay%20Hot%20Shots/Hot%20Steel%20At%20Cruz%20Bay/Track%209.mp3"
						, title: "9. Meringue"
						, time: '3:58 min'
					}
					, {
						url:  "Cruz%20Bay%20Hot%20Shots/Hot%20Steel%20At%20Cruz%20Bay/Track%2010.mp3"
						, title: "10. Mama Look I Booboo"
						, time: '3:36 min'
					}
				]
				
				// Custom properties
				, chosenBitrate: null
				, bitrate: null
				
				// event callbacks
				, onBeforeClick: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onBeforeClick (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeFinish");
				}

				, onError: function (errorCode, errorMessage) {
					sjhs.consoleTrace.log("ERROR", errorMessage);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeFinish");
				}
				
				, onBeforeLoad: function (event) {
					sjhs.consoleTrace.log("LOG", "Player OnBeforeLoad (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Loading...");
				}
				, onLoad: function (event) {
					sjhs.consoleTrace.log("LOG", "Player Onload (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Loaded.  Detecting network download speed...");
 
				}
				
				, onBeforeUnload: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onBeforeUnload (%s)", event);
					// sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeUnload");
				}
				, onUnload: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onUnload (%s)", event);
					// sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onUnload");
				}
				
				, onClipAdd: function(clip) {
					sjhs.consoleTrace.log("LOG", "Player onClipAdd ", clip.completeUrl);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onClipAdd");
				}
				, onPlaylistReplace: function(playlist) {
					sjhs.consoleTrace.log("LOG", "Player onPlaylistReplace ", playlist[0].completeUrl);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onPlaylistReplace");
				}
				
				, onMouseOver: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onMouseOver (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onMouseOver");
				}
				
				, onMouseOut: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onMouseOut (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onMouseOut");
				}
				
				, onKeyPress: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onKeyPress (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onKeyPress");
				}
				
			}).playlist("#ovHotSteelAtCruzBay > div.playlistWrapper > div.playlist > div.clips"
				, {loop: true}				// When clip completes, advance to next clip
				, {playOnClick: true}		// ??
			);	

		// Calypso Carnival
		flowplayer("playerCalypsoCarnival", "flowplayer/flowplayer-3.1.5.swf", {
				plugins: { 
					// audio plugin
					audio: { 
						url: 'flowplayer/flowplayer.audio-3.1.2.swf'
					} 
					
					/* bandwidth check plugin
					, bwcheck: {  
						url: 'flowplayer/flowplayer.bwcheck-3.1.3.swf' 
						, netConnectionUrl: 'http://www.stjohnhistoricalsociety.org/Articles/STJWomenTellingSpeakers/img_AliceOConnor_xl.jpg' + '?' + Math.random()
						, bitrates: { slow: 32, low: 48, mid: 64, high: 128 }
						, defaultBitRate: 32
//						, rememberBitRate: false
						, onBwDone: function(url, chosenBitrate, bitrate) {
							sjhs.consoleTrace.log("LOG", "Player Bandwith check done: url (%s) chosenBitrate(%d), bitrate(%d)" , url, chosenBitrate, bitrate);
							if (!$f(0).getConfig().bitrate) {
								$f(0).getConfig().bitrate = bitrate;
								$f(0).getConfig().chosenBitrate = chosenBitrate;
								var html;
								html = "Network download speed is: " +parseInt(bitrate)+ " kbps, selecting audio encoded at " +chosenBitrate+ " kbps.";
								sjhs.currentOverlay.getOverlay().find(".networkSpeed").html(html);
								sjhs.currentOverlay.getOverlay().find(".playUrl").html("URL: " + url );
							}
						}
					}
					*/
					, myContent: {
						url: 'flowplayer/flowplayer.content-3.1.0.swf'
						, width: '95%'
						, height: '88%'
						, opacity: '1.0'
					}
				}	
			
				, clip: {
					autoBuffering: true
					, autoPlay: true
					, baseUrl: 'http://www.stjohnhistoricalsociety.org/Music/'
					
					// this event never fires !!!
					, onbeforeBegin: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeBegin: ", clip.completeUrl);
						
					}
					, onBegin: function (clip) {
						try {
							sjhs.consoleTrace.log("LOG", "Clip onBegin: ", clip.completeUrl);
							sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");

							// Set cuepoints for this clip
							if (typeof clip.clipCuepoints == 'object') {
								clip.onCuepoint(clip.clipCuepoints, function (clip, cuepoint) {
									sjhs.consoleTrace.log("LOG", "cuepoint " + cuepoint + " entered on clip " + clip.url);
									this.getPlugin("myContent").setHtml(cuepoint.cueHtml);
								});
							}

						} catch(exception) {
							sjhs.consoleTrace.log("ERROR", 'Exception: ', exception);
						}
					}

					, onBeforeFinish: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeFinish: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Finished");
					}
					, onFinish: function (clip) {
						pageTracker._trackEvent("Audio", "Finish", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "Clip onFinish: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Finish");
					}
					
					, onBeforeStart: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeStart: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeStart");
					}
					, onStart: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Start", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onStart: ", clip.completeUrl);
						$(".playerStatus").html("Playing: " + clip.url );
						$(".playURL").html("URL: " + clip.url );
					}
					
					, onBeforePause: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforePause: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Paused");
					}
					, onPause: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Pause", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onPause: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Finish");
					}
					
					, onBeforeResume: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeResume: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");
					}
					, onResume: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Resume", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onResume: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");
					}
					
					, onBeforeSeek: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeSeek: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeSeek");
					}
					, onSeek: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onSeek: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onSeek");
					}
					
					, onBeforeStop: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeStop: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeStop");
					}
					, onStop: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Stop", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onStop: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Stopped");
					}
					
					, onUpdate: function (clip) {
						sjhs.consoleTrace.log("LOG", "onUpdate: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onUpdate");
					}
					
					, onBufferEmpty: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferEmpty: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferEmpty");
					}
					
					, onBufferFull: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferFull: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferFull");
					}
					, onBufferStop: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferStop: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferStop");
					}
					
					, onNetStreamEvent: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onNetStreamEvent: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onNetStreamEvent");
					}
					, urlResolvers: 'bwcheck'
				
				}
				
				, playlist: [
					{ title: "1. Rum and Coco-Cola (Wilmoth Houdini)"
						, url: "Calypso%20Carnival/Holiday/Track%201.mp3"
						, time: '5:55 min'
						, clipCuepoints : [{
							time: ((0*60) + 00) * 1000, cueHtml: '<img src="Music/Calypso%20Carnival/Holiday/HolidayInTheWestIndies.jpg" width="248" height="250"/>'
						}] 
					}
					, { title: "2. Love, Love, Love (Lorder Beginner)"
						, url: "Calypso%20Carnival/Holiday/Track%202.mp3"
						, time: '2:50 min'
					}
					, { title: "3. Nora (Lorder Kitchener with Cyril Blakes Calypso Band)"
						, url: "Calypso%20Carnival/Holiday/Track%203.mp3"
						, time: '2:57 min'
					}
					, { title: "4. Little Mary Had A Lamb (The Lion with Frederico&rsquo;s Calypso Band)"
						, url: "Calypso%20Carnival/Holiday/Track%204.mp3"
						, time: '3:07 min'
					}
					, { title: "5. Man Smart and Woman Smarter (The Iron Duke)"
						, url: "Calypso%20Carnival/Holiday/Track%205.mp3"
						, time: '3:00 min'
					}
					, { title: "6. Gin and Coconut Water (Wilmoth Houdini)"
						, url: "Calypso%20Carnival/Holiday/Track%206.mp3"
						, time: '2:55 min'
					}
					, { title: "7. Housewives"
						, url: "Calypso%20Carnival/Holiday/Track%207.mp3"
						, time: '2:54 min'
					}
					, { title: "8. Mary Ann (The Lion with Frederico&rsquo;s Calypso Band)"
						, url: "Calypso%20Carnival/Holiday/Track%208.mp3"
						, time: '2:32 min'
					}
					, { title: "9. The Dollar and The Pound (Lord Beginner)"
						, url: "Calypso%20Carnival/Holiday/Track%209.mp3"
						, time: '3:29 min'
					}
					, { title: "10. Ugly Woman (The Lion)"
						, url: "Calypso%20Carnival/Holiday/Track%2010.mp3"
						, time: '3:02 min'
					}
					, { title: "11. General Election (Lord Beginner)"
						, url: "Calypso%20Carnival/Holiday/Track%2011.mp3"
						, time: '2:49 min'
					}
				]
				// Custom properties
				, chosenBitrate: null
				, bitrate: null
				
				// event callbacks
				, onBeforeClick: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onBeforeClick (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeFinish");
				}

				, onError: function (errorCode, errorMessage) {
					sjhs.consoleTrace.log("ERROR", errorMessage);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeFinish");
				}
				
				, onBeforeLoad: function (event) {
					sjhs.consoleTrace.log("LOG", "Player OnBeforeLoad (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Loading...");
				}
				, onLoad: function (event) {
					sjhs.consoleTrace.log("LOG", "Player Onload (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Loaded.  Detecting network download speed...");
 
				}
				
				, onBeforeUnload: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onBeforeUnload (%s)", event);
					// sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeUnload");
				}
				, onUnload: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onUnload (%s)", event);
					// sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onUnload");
				}
				
				, onClipAdd: function(clip) {
					sjhs.consoleTrace.log("LOG", "Player onClipAdd ", clip.completeUrl);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onClipAdd");
				}
				, onPlaylistReplace: function(playlist) {
					sjhs.consoleTrace.log("LOG", "Player onPlaylistReplace ", playlist[0].completeUrl);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onPlaylistReplace");
				}
				
				, onMouseOver: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onMouseOver (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onMouseOver");
				}
				
				, onMouseOut: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onMouseOut (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onMouseOut");
				}
				
				, onKeyPress: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onKeyPress (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onKeyPress");
				}
				
			}).playlist("#ovCalypsoCarnival > div.playlistWrapper > div.playlist > div.clips"
				, {loop: true}				// When clip completes, advance to next clip
				, {playOnClick: true}		// ??
			);	

		// Marie Richards: Folklore Melodies
		flowplayer("playerFolkloreMelodies", "flowplayer/flowplayer-3.1.5.swf", {
				plugins: { 
					// audio plugin
					audio: { 
						url: 'flowplayer/flowplayer.audio-3.1.2.swf'
					} 
					
					/* bandwidth check plugin
					, bwcheck: {  
						url: 'flowplayer/flowplayer.bwcheck-3.1.3.swf' 
						, netConnectionUrl: 'http://www.stjohnhistoricalsociety.org/Articles/STJWomenTellingSpeakers/img_AliceOConnor_xl.jpg' + '?' + Math.random()
						, bitrates: { slow: 32, low: 48, mid: 64, high: 128 }
						, defaultBitRate: 32
//						, rememberBitRate: false
						, onBwDone: function(url, chosenBitrate, bitrate) {
							sjhs.consoleTrace.log("LOG", "Player Bandwith check done: url (%s) chosenBitrate(%d), bitrate(%d)" , url, chosenBitrate, bitrate);
							if (!$f(0).getConfig().bitrate) {
								$f(0).getConfig().bitrate = bitrate;
								$f(0).getConfig().chosenBitrate = chosenBitrate;
								var html;
								html = "Network download speed is: " +parseInt(bitrate)+ " kbps, selecting audio encoded at " +chosenBitrate+ " kbps.";
								sjhs.currentOverlay.getOverlay().find(".networkSpeed").html(html);
								sjhs.currentOverlay.getOverlay().find(".playUrl").html("URL: " + url );
							}
						}
					}
					, myContent: {
						url: 'flowplayer/flowplayer.content-3.1.0.swf'
						, width: '95%'
						, height: '88%'
						, opacity: '1.0'
					}
					*/
				}	
			
				, clip: {
					autoBuffering: true
					, autoPlay: true
					, baseUrl: 'http://www.stjohnhistoricalsociety.org/Music/'
					
					// this event never fires !!!
					, onbeforeBegin: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeBegin: ", clip.completeUrl);
						
					}
					, onBegin: function (clip) {
						try {
							sjhs.consoleTrace.log("LOG", "Clip onBegin: ", clip.completeUrl);
							sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");

							// Set cuepoints for this clip
							if (typeof clip.clipCuepoints == 'object') {
								clip.onCuepoint(clip.clipCuepoints, function (clip, cuepoint) {
									sjhs.consoleTrace.log("LOG", "cuepoint " + cuepoint + " entered on clip " + clip.url);
									this.getPlugin("myContent").setHtml(cuepoint.cueHtml);
								});
							}

						} catch(exception) {
							sjhs.consoleTrace.log("ERROR", 'Exception: ', exception);
						}
					}

					, onBeforeFinish: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeFinish: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Finished");
					}
					, onFinish: function (clip) {
						pageTracker._trackEvent("Audio", "Finish", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "Clip onFinish: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Finish");
					}
					
					, onBeforeStart: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeStart: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeStart");
					}
					, onStart: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Start", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onStart: ", clip.completeUrl);
						$(".playerStatus").html("Playing: " + clip.url );
						$(".playURL").html("URL: " + clip.url );
					}
					
					, onBeforePause: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforePause: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Paused");
					}
					, onPause: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Pause", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onPause: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Finish");
					}
					
					, onBeforeResume: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeResume: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");
					}
					, onResume: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Resume", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onResume: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Playing");
					}
					
					, onBeforeSeek: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeSeek: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeSeek");
					}
					, onSeek: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onSeek: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onSeek");
					}
					
					, onBeforeStop: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBeforeStop: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeStop");
					}
					, onStop: function (clip) {
						pageTracker._trackEvent("Audio", "Clip Stop", clip.url, parseInt(this.getTime()));
						sjhs.consoleTrace.log("LOG", "onStop: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player status: Stopped");
					}
					
					, onUpdate: function (clip) {
						sjhs.consoleTrace.log("LOG", "onUpdate: ", clip.completeUrl);
						sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onUpdate");
					}
					
					, onBufferEmpty: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferEmpty: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferEmpty");
					}
					
					, onBufferFull: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferFull: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferFull");
					}
					, onBufferStop: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onBufferStop: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBufferStop");
					}
					
					, onNetStreamEvent: function (clip) {
						sjhs.consoleTrace.log("LOG", "Clip onNetStreamEvent: ", clip.completeUrl);
						//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onNetStreamEvent");
					}
					, urlResolvers: 'bwcheck'
				
				}
				
				/*	Bug  playlist template is not expanded unless there are 2 or more playlist entries */
				, playlist: [
					{ title: "Marie Richards:  Folklore Melodies"
						, url: "Marie%20Richards/Folklore%20Melodies/Folklore-Melodies2.jpg"
						, time: '14:28 min'
					}
					, { title: "Sides A and B"
						, url: "Marie%20Richards/Folklore%20Melodies/Track%201.mp3"
						, time: '14:28 min'
					}
				]
				
				// Custom properties
				, chosenBitrate: null
				, bitrate: null
				
				// event callbacks
				, onBeforeClick: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onBeforeClick (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeFinish");
				}

				, onError: function (errorCode, errorMessage) {
					sjhs.consoleTrace.log("ERROR", errorMessage);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeFinish");
				}
				
				, onBeforeLoad: function (event) {
					sjhs.consoleTrace.log("LOG", "Player OnBeforeLoad (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Loading...");
				}
				, onLoad: function (event) {
					sjhs.consoleTrace.log("LOG", "Player Onload (%s)", event);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: Loaded.  Detecting network download speed...");
 
				}
				
				, onBeforeUnload: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onBeforeUnload (%s)", event);
					// sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onBeforeUnload");
				}
				, onUnload: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onUnload (%s)", event);
					// sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onUnload");
				}
				
				, onClipAdd: function(clip) {
					sjhs.consoleTrace.log("LOG", "Player onClipAdd ", clip.completeUrl);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onClipAdd");
				}
				, onPlaylistReplace: function(playlist) {
					sjhs.consoleTrace.log("LOG", "Player onPlaylistReplace ", playlist[0].completeUrl);
					sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onPlaylistReplace");
				}
				
				, onMouseOver: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onMouseOver (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onMouseOver");
				}
				
				, onMouseOut: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onMouseOut (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onMouseOut");
				}
				
				, onKeyPress: function (event) {
					sjhs.consoleTrace.log("LOG", "Player onKeyPress (%s)", event);
					//sjhs.currentOverlay.getOverlay().find(".playerStatus").html("Player: onKeyPress");
				}
				
			}).playlist("#ovFolkloreMelodies > div.playlistWrapper > div.playlist > div.clips"
				, {loop: true}				// When clip completes, advance to next clip
				, {playOnClick: true}		// ??
			);	
	} catch(exception) {
		sjhs.consoleTrace.log("ERROR", 'Exception: ', exception);
	}
});	

// eof
