function showPlaylist(){
	$('.sm2-link').removeClass('sm2-link-hidden').addClass('sm2-link-visible');
	$('#main-playlist-wrap').removeClass('main-playlist-hidden').addClass('main-playlist-visible');
	if ( $('.playing').size() > 0 ) { // song playing
		var position = $('.playing').position();
		$('#main-playlist-wrap').data('jsp').scrollTo(0,position.top);
	} else if ( $('.paused').size() > 0 ) { // song paused
		var position = $('.paused').position();
		$('#main-playlist-wrap').data('jsp').scrollTo(0,position.top);
	}
}

function hidePlaylist() {
	$('#main-playlist-wrap').data('jsp').scrollTo(0,0);
	$('#main-playlist-wrap').removeClass('main-playlist-visible').addClass('main-playlist-hidden');
	$('.sm2-link').removeClass('sm2-link-visible').addClass('sm2-link-hidden');
}

/*!
 * jQuery Sound Manager Plugin
 * http://github.com/adriengibrat/jQuery-SoundManager
 *
 * Copyright (c) 2009 Adrien Gibrat
 * Dual licensed under the MIT and GPL licenses.
 * http://opensource.org/licenses/mit-license.php
 */
(function($){
	var sm = soundManager;
	$.playable = $.extend( function( url, settings ) {
		$.extend( sm, {
			url : url, // Set Flash url
			debugMode : window.location.hash.match(/^#debug/i), // Activate Debugging with hash (#debug)
			consoleOnly : window.location.hash.match(/console$/i), // Debug in console only (#debugconsole)
			defaultOptions : $.extend({ // Extends soundManager default options
				autoStart : false,
				pauseOnly : false,
				playNext : true,
				loopNext : true,
				playAlone : true,
				doUnload : false
			}, settings )
		});
		$.each( $.playable.events, function( i, event ) { // Set Events Handler as element custom Handler
			sm.defaultOptions[event] = function() {
				this.options.element.triggerHandler( event, this );
			};
		} );
	}, {
		count : 0,
		current : null,
		searching : null,
		css : {
			playable: 'playable',
			loading : 'loading',
			playing : 'playing',
			paused : 'paused'
		},
		methods : ['play','stop','pause','resume','togglePause','mute','unmute','unload','setPosition','setVolume','setPan'],
		events : ['onload', 'onplay', 'onpause', 'onresume', 'onstop', 'onfinish'],
		init : function( options ) {
			var options = $.extend( true, {}, sm.defaultOptions, options ),
				self = this
			.addClass( $.playable.css.playable )
			.data( 'playable', sm.createSound( $.extend( options, {
				id : 'playable' + $.playable.count++,
				url : this.attr( 'href' ),
				element : this
			} ) ) )
			.click(function( event ) {
				event.preventDefault();
				self.data( 'playable' ).togglePause();
				hidePlaylist();
				return false;
			} )
			.bind( 'onload.playable', function( event, sound ){
				if ( sound.readyState == 2 )
					$.playable.next();
			} )
			.bind( 'onplay.playable', function(){
				if ( options.playAlone && $.playable.current && $.playable.current != self )
					$.playable.current.data( 'playable' )[ options.pauseOnly ? 'pause' : 'stop' ]();
				$.playable.current = self.focus();
			} )
			.bind( 'onresume.playable', function( event, sound ){
				self.triggerHandler( 'onplay', sound );
			} )
			.bind( 'onstop.playable', function( event, sound ){
				if ( options.doUnload )
					sound.unload();
			} )
			.bind( 'onfinish.playable', function( event, sound ){
				self.triggerHandler( 'onstop', sound );
				if ( options.playNext )
					$.playable.next();
			} );
			$.each( $.playable.ui, function( i, ui ){ // Bind UIs
				ui.call( self, options );
			} );
		},
		ui : {
			basic : function() {
				var self = this
				.bind( 'onload.playable', function(){
					self.removeClass( $.playable.css.loading );
				} )
				.bind( 'onplay.playable', function(){
					self.removeClass( $.playable.css.paused ).addClass( $.playable.css.playing );
					if ( self.data( 'playable' ).readyState == 1 )
						self.addClass( $.playable.css.loading );
				} )
				.bind( 'onpause.playable', function(){
					if ( ! $.playable.searching )
						self.removeClass( $.playable.css.playing ).addClass( $.playable.css.paused );
				} )
				.bind( 'onstop.playable', function(){
					self.removeClass( [$.playable.css.playing, $.playable.css.loading, $.playable.css.paused].join(' ') );
				} );
			}
		},
		next : function() {
			if ( ! this.current )
				return;
			var options = this.current.data( 'playable' ).options,
				playlist = $( options.selector ),
				move = arguments[0] || 1,
				next = playlist.eq( playlist.index( options.element ) + move ).data( 'playable' );
			if ( ! next && options.loopNext )
				next = playlist.eq( 0 ).data( 'playable' );
			if ( next && ! next.playState )
				next.play();
		}
	} );
	$.fn.playable = function( options ) {
		var self = this.is( 'a[href]' ) ? this : this.find( 'a[href]' ),
			options = options || {};
		if ( typeof options == 'string' && $.inArray( options, $.playable.methods ) != -1 )
			self.each( function( args ){
				var sound = $( this ).data( 'playable' );
				sound && sound[options]( args );
			}, [arguments[1]] );
		else {
			options.selector = self.selector;
			sm.onready( function() {
				self.each( function(){
					var self = $( this );
					if ( sm.canPlayURL( self.attr( 'href' ) ) )
						$.playable.init.call( self, options );
				});
				if ( options && options.autoStart )
					self.filter( ':first' ).click();
			});
		}
		return this;
	};
})(jQuery);


/*****************************************************************/
/* UI */

/*!
 * jQuery Sound Manager Simple UI
 * http://github.com/adriengibrat/jQuery-SoundManager
 *
 * Copyright (c) 2009 Adrien Gibrat
 * Dual licensed under the MIT and GPL licenses.
 * http://opensource.org/licenses/mit-license.php
 */
(function($){
	if ( ! $.playable )
		return;
	$.playable.events.push( 'whileloading', 'whileplaying' );
	$.extend( true, $.playable, {
		css : {
			ui : 'ui',
			timing : 'timing',
			elapsed : 'elapsed',
			total : 'total',
			controls : 'controls',
			loading : 'loading',
			position : 'position',
			searching : 'searching'
		},
		formatTime : function( ms ) {
			var ns = Math.floor( ms / 1000 ),
				m = Math.floor( ns / 60 ),
				s = ns - m * 60 ;
			return m + ':' + ( s < 10 ? '0' + s : s );
		},
		ui : {
			simple : function() {
				var doNothing = function() {
						return false;
					};
				$( '<span class="' + $.playable.css.ui + ' ' + $.playable.css.timing + '"><span class="' + $.playable.css.elapsed + '"></span><span class="' + $.playable.css.total + '"></span></span>' )
				.bind( 'click.playable', doNothing )
				.prependTo( this );
				$( '<span class="' + $.playable.css.ui + ' ' + $.playable.css.controls + '"><span class="' + $.playable.css.loading + '"></span><span class="' + $.playable.css.position + '"></span></span>' )
				.bind( 'click.playable', doNothing )
				.bind( 'mousedown.playable', function( event ) {
					var controls	= $( this ).addClass( $.playable.css.searching ),
						position	= controls.find( '.' + $.playable.css.position ),
						left		= controls.offset().left,
						width		= controls.width(),
						sound		= controls.parent().data( 'playable' );
						x			= event.clientX - left;
					$.playable.searching = controls;
					position.width( x );
					sound.setPosition( x / width * sound.durationEstimate );
					sound.pause();
					$( document ).bind( 'mousemove.playable', function( event ) {
						var x = Math.max( 0, Math.min( event.clientX - left, width ) );
						position.width( x );
						sound.setPosition( x / width * sound.durationEstimate );
						return false;
					} );
					return false;
				} )
				.appendTo( this );
				$( this )
				.bind( 'onstop.playable', function(){
					$( '.' + $.playable.css.elapsed + ', .' + $.playable.css.total, this ).empty();
				} )
				.bind( 'whileloading.playable', function( event, sound ){
					$( '.' + $.playable.css.loading, this ).width( sound.bytesLoaded / sound.bytesTotal * 100 + '%' );
				} )
				.bind( 'whileplaying.playable', function( event, sound ){
					$( '.' + $.playable.css.position, this ).width( sound.position / sound.durationEstimate * 100 + '%' );
					$( '.' + $.playable.css.elapsed, this ).html( $.playable.formatTime( sound.position ) );
					$( '.' + $.playable.css.total, this ).html( ' / ' + $.playable.formatTime( sound.durationEstimate ) );
				} );
				$( document ).bind( 'mouseup.playable', function( event ) {
					event.preventDefault();
					if ( ! $.playable.searching )
						return;
					var element	= $.playable.searching.removeClass( $.playable.css.searching ).parent(),
						sound	= element.data( 'playable' );
					$( document ).unbind( 'mousemove.playable' );
					if ( element.hasClass( $.playable.css.playing ) )
						sound.resume();
					$.playable.searching = null;
					return false;
				} );
			}
		}
	});
})(jQuery);


