sf.mediaViewer = km.createModule(function (base, exports) {
	var mediaInfoOpen = true,
		player = null,
		itemToLoad = null;


	window.kmPlayerReady = function () {

		player = document.getElementById("km_player");
		if (itemToLoad) {
			player.setCurrentItemById(itemToLoad.id);
		}
	};

	function attachInfoOpenCloseEvents() {
		$("a#iconDetails").click(function () {
			if (mediaInfoOpen) {
				$("a#iconDetails").html("Open Details");
			} else {
				$("a#iconDetails").html("Close Details");
			}
			mediaInfoOpen = !mediaInfoOpen;
			$("#mediaInfo").stop(true, true).slideToggle("50");
			return false;
		});
	}

	function attachLeftRightButtonEvents() {
		$(".earLeft").click(function () {
			base.dispatch("leftClicked");
		});
		$(".earRight,#embeddedImage").click(function () {
			base.dispatch("rightClicked");
		});
	}

	function renderImage(mediaItem) {
		var image = "<h1 style='display:none;'>" + mediaItem.fullTitle + "</h1>";
		image += "<img src='" + mediaItem.still + "' alt='' />";
		$("#embeddedImage").stop(true, true).fadeOut(150, function () {
			$(this).html(image).fadeIn(200);
		});
	}

	function displayMetaData(mediaItem) {

		// set heading
		$("#mediaInfoHeading").html('<h1>' + mediaItem.fullTitle + ' <span>[' + mediaItem.category + ']</span></h1>');
		// set the items description.
		$("#mediaDesc").html(mediaItem.longDescription);
		// Production Company
		if (mediaItem.productionCompany !== null) {
			$("ul#mediaMeta li").eq(0).html('<b>Production Company:</b> ' + mediaItem.productionCompany);
		} else {
			$("ul#mediaMeta li").eq(0).hide();
		}
		// Role
		if (mediaItem.role !== null && mediaItem.role !== "") {
			$("ul#mediaMeta li").eq(1).html('<b>Role:</b> ' + mediaItem.role);
		} else {
			$("ul#mediaMeta li").eq(1).hide();
		}
		// Production Year
		if (mediaItem.productionYear !== null && mediaItem.productionYear !== "") {
			$("ul#mediaMeta li").eq(2).html('<b>Production Year:</b> ' + mediaItem.productionYear);
		} else {
			$("ul#mediaMeta li").eq(2).hide();
		}
		// Category
		$("ul#mediaMeta li").eq(3).html('<b>Category:</b> ' + mediaItem.category);
		//Views
		$("#iconViews").html(mediaItem.totalViews + " Views");
		//Likes
		if (mediaItem.totalLikes === 0) {
			$("#iconLikes").hide();
		} else {
			$("#iconLikes").show();
			$("#iconLikes").html(mediaItem.totalLikes + " Likes");
		}
		$("#shareUrl").val(window.location);
	}

	function setShareButtonLinks(mediaItem) {
		$("#shareTwitter").attr("href", "http://twitter.com/?status=" + window.location);
		$("#shareDelicious").attr("href", "http://www.delicious.com/save?url=" + window.location + "&title=" + mediaItem.fullTitle);
		$("#shareLinkedIn").attr("href", "http://www.linkedin.com/shareArticle?mini=true&url=" + window.location + "&title=" + mediaItem.fullTitle);
		$("#shareFaceBook").attr("href", "http://www.facebook.com/sharer/sharer.php?u=" + window.location);
	}

	exports.display = function (mediaItem) {
		if (mediaItem.type === "image") {
			renderImage(mediaItem);
		} else if (mediaItem.type === "video" || mediaItem.type === "audio") {
			if (player) {
				player.setCurrentItemById(mediaItem.id);
			} else {
				itemToLoad = mediaItem;
			}
		}
		// scroll to top
		$("html,body").stop(true, true).animate({ scrollTop: 0 }, 250, function () {
			window.location.hash = mediaItem.id;
			displayMetaData(mediaItem);
			setShareButtonLinks(mediaItem);
		});
	};

	exports.playItem = function (mediaItemId) {
		player.setCurrentItemById(mediaItemId);
	};

	exports.renderPlayer = function (embedCode) {
		$("#embeddedPlayer").html(embedCode);
	};

	exports.renderPlaylist = function (embedCode) {
		$("#playlistPlayer").html(embedCode);
	};

	exports.init = function () {
		attachLeftRightButtonEvents();
		attachInfoOpenCloseEvents();
	};
});

