$(document)
		.ready(
				function() {

					var Playlist = function(instance, playlist, options) {
						var self = this;

						this.instance = instance; // String: To associate
						// specific HTML with this
						// playlist
						this.playlist = playlist; // Array of Objects: The
						// playlist
						this.options = options; // Object: The jPlayer
						// constructor options for this
						// playlist

						this.current = 0;

						this.cssId = {
							jPlayer : "jquery_jplayer_",
							interface : "jp_interface_",
							playlist : "jp_playlist_"
						};
						this.cssSelector = {};

						$.each(this.cssId,
								function(entity, id) {
									self.cssSelector[entity] = "#" + id
											+ self.instance;
								});

						if (!this.options.cssSelectorAncestor) {
							this.options.cssSelectorAncestor = this.cssSelector.interface;
						}

						$(this.cssSelector.jPlayer).jPlayer(this.options);

						$(this.cssSelector.interface + " .jp-previous").click(
								function() {
									self.playlistPrev();
									$(this).blur();
									return false;
								});

						$(this.cssSelector.interface + " .jp-next").click(
								function() {
									self.playlistNext();
									$(this).blur();
									return false;
								});
					};

					Playlist.prototype = {
						displayPlaylist : function() {
							var self = this;
							$(this.cssSelector.playlist + " ul").empty();
							for (i = 0; i < this.playlist.length; i++) {
								var listItem = (i === this.playlist.length - 1) ? "<li class='jp-playlist-last'>"
										: "<li>";
								listItem += "<a href='#' id='"
										+ this.cssId.playlist + this.instance
										+ "_item_" + i + "'>";
								listItem += this.playlist[i].name;
								listItem += "</a></li>";

								// Associate playlist items with their media
								$(this.cssSelector.playlist + " ul").append(
										listItem);
								$(this.cssSelector.playlist + "_item_" + i)
										.data("index", i)
										.click(
												function() {
													var index = $(this).data(
															"index");
													if (self.current !== index) {
														self
																.playlistChange(index);
													} else {
														$(
																self.cssSelector.jPlayer)
																.jPlayer("play");
													}
													$(this).blur();
													return false;
												});

							}
						},
						playlistInit : function(autoplay) {
							if (autoplay) {
								this.playlistChange(this.current);
							} else {
								this.playlistConfig(this.current);
							}
						},
						playlistConfig : function(index) {
							$(
									this.cssSelector.playlist + "_item_"
											+ this.current).removeClass(
									"jp-playlist-current").parent()
									.removeClass("jp-playlist-current");
							$(this.cssSelector.playlist + "_item_" + index)
									.addClass("jp-playlist-current").parent()
									.addClass("jp-playlist-current");
							this.current = index;
							$(this.cssSelector.jPlayer).jPlayer("setMedia",
									this.playlist[this.current]);
						},
						playlistChange : function(index) {
							this.playlistConfig(index);
							$(this.cssSelector.jPlayer).jPlayer("play");
						},
						playlistNext : function() {
							var index = (this.current + 1 < this.playlist.length) ? this.current + 1
									: 0;
							this.playlistChange(index);
						},
						playlistPrev : function() {
							var index = (this.current - 1 >= 0) ? this.current - 1
									: this.playlist.length - 1;
							this.playlistChange(index);
						}
					};

					var homePlaylist = new Playlist("1", [  {
						name : "Le Freak",
						mp3 : "/audio/02 Le Freak.mp3"
					}, {
						name : "American Boy",
						mp3 : "/audio/08 American Boy.mp3"
					},

					{
						name : "Play That Funky Music",
						mp3 : "/audio/04 Play That Funky Music.mp3"
					}, 
					{
						name : "Lady Marmalade",
						mp3 : "/audio/03 Lady Marmalade.mp3"
					},					
					{
						name : "Walk Like an Egyptian",
						mp3 : "/audio/03 Walk Like an Egyptian.mp3"
					}

					], {
						ready : function() {
							homePlaylist.displayPlaylist();
							homePlaylist.playlistInit(true); // Parameter is
						// a boolean for
						// autoplay.
					},
					ended : function() {
						homePlaylist.playlistNext();
					},
					play : function() {
						$(this).jPlayer("pauseOthers");
					},
					swfPath : "/js",
					supplied : "mp3"
					});

				});

