(function($) {
	$.facebox = function(data, cx, cy) {
		$.facebox.loading(cx, cy)
		$.facebox.reveal(data)
	}

	$.extend(
		$.facebox, {
			settings: {
				opacity      : 0,
				overlay      : true,
				loadingImage : 'http://imgcdn.pandora.tv/gimg/img/playlist/but_close2.gif',
				closeImage   : 'http://imgcdn.pandora.tv/gimg/img/playlist/but_close2.gif',
				faceboxHtml  : '<div id="facebox" class="facebox" style="display:none;position:absolute;"></div>'
			},

			loading: function(cx, cy) {
				init()
				if ($('#facebox .loading').length == 1) return true
				showOverlay()

				$('#facebox').empty()
				$('#facebox').children().hide().end().
					append('<div class="loading"><img src="'+$.facebox.settings.loadingImage+'"/></div>')

				$('#facebox').css({
					top:	cy,
					left:	cx
				}).show()

				$(document).bind('keydown.facebox', function(e) {
					if (e.keyCode == 27) $.facebox.close()
					return true
				})
				$(document).trigger('loading.facebox')
			},

			reveal: function(data) {
				$('#facebox').append(data)
				$('#facebox .loading').remove()
				$(document).trigger('reveal.facebox').trigger('afterReveal.facebox')
			},

			close: function() {
				$(document).trigger('close.facebox')
				return false
			}
  })

	// called one time to setup facebox on this page
	function init(settings) {
		if ($.facebox.settings.inited) return true
		else $.facebox.settings.inited = true

		$(document).trigger('init.facebox')
		makeCompatible()

		if (settings) $.extend($.facebox.settings, settings)
		$('body').append($.facebox.settings.faceboxHtml)

		$('#facebox .close').click($.facebox.close)
		$('#facebox .close_image').attr('src', $.facebox.settings.closeImage)
	}

	// Backwards compatibility
	function makeCompatible() {
		var $s = $.facebox.settings

		$s.loadingImage = $s.loading_image || $s.loadingImage
		$s.closeImage = $s.close_image || $s.closeImage
		$s.faceboxHtml = $s.facebox_html || $s.faceboxHtml
	}

	function skipOverlay() {
		return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null 
	}

	function showOverlay() {
		if (skipOverlay()) return

		if ($('facebox_overlay').length == 0) 
		  $("body").append('<div id="facebox_overlay"></div>')

		$('#facebox_overlay')
			.click(function() { $(document).trigger('close.facebox') })
			.fadeIn(200)
		return false
	}

	function hideOverlay() {
		if (skipOverlay()) return

		$('#facebox_overlay').fadeOut(200, function(){
			$("#facebox_overlay").removeClass("facebox_overlayBG")
			$("#facebox_overlay").addClass("facebox_hide") 
			$("#facebox_overlay").remove()
		})
		
		return false
	}

	$(document).bind('close.facebox', function() {
		$(document).unbind('keydown.facebox')
		$('#facebox').fadeOut(function() {
			$('#facebox').removeClass().addClass('facebox_content')
			hideOverlay()
			$('#facebox .loading').remove()
		})
	})

})(jQuery);
