﻿sf.gridView = km.createModule(function (base, exports) {

	var currentMediaItem = null,
        $mediaGrid = null,
		$playlistGrid = null,
		$type = null,
        currentMediaItems = [],
		currentPlaylistItems = [];


	function getDomMediaItemFromTarget(target, callback) {
		(function again(target) {
			if (target.id) {
				callback(target);
			} else {
				again(target.parentNode); // check the parent to see if it matches.
			}
		} (target));
	}

	function mediaItemFromTarget(eventTarget) {
		var mediaItem = false;
		getDomMediaItemFromTarget(eventTarget, function (domItem) {
			mediaItem = km(currentMediaItems).get({
				id: $(domItem).attr("id").replace("media-", "")
			})[0];
		});
		return mediaItem;
	}

	function mediaItemFromId(id) {
		var mediaItem = false;
		mediaItem = km(currentMediaItems).get({
			id: id
		})[0];
		return mediaItem;
	}

	function selectItem(mediaItem) {
		currentMediaItem = mediaItem;
		$mediaGrid.find(".active").removeClass("active");
		$("#media-" + mediaItem.id).children("a").addClass("active");
		base.dispatch("mediaItemClicked", mediaItem, $type);
	}

	function selectPlaylistItem(playlistItemId) {
		//currentMediaItem = mediaItem;
		$playlistGrid.find(".active").removeClass("active");
		$("#" + playlistItemId).children("a").addClass("active");
		base.dispatch("playlistItemClicked", playlistItemId.replace("media-", ""));
	}

	function assignClickEvents() {
		$mediaGrid.click(function (event) {
			selectItem(mediaItemFromTarget(event.target));
		});
		$playlistGrid.click(function (event) {
			getDomMediaItemFromTarget(event.target, function (domItem) {
				selectPlaylistItem(domItem.id);
			});
		});
	}

	function buildMediaList() {
		if ($mediaGrid.length > 0) {
			$mediaGrid.find("li").each(function () {
				//currentMediaItems
				//alert($(this).index() + " + " + $(this).attr("id"));
				var mediaItem = {
					id: $(this).attr("id").replace("media-", ""),
					type: $type
				};
				console.dir(mediaItem);
				currentMediaItems.push(mediaItem);
			});
			console.dir(currentMediaItems);
			selectItem(currentMediaItems[0]);
		}
	}

	exports.init = function () {
		$mediaGrid = $("#mediaGrid");
		$playlistGrid = $("#playlistGrid");
		$type = $("#media-type").val();
		assignClickEvents();
		buildMediaList();
	};

	exports.selectNextItem = function () {
		km.trace("selectNextItem");
		var index = 0;
		for (index = 0; index < currentMediaItems.length; index += 1) {
			// Find the current item
			if (currentMediaItems[index].id === currentMediaItem.id) {
				// if the current item is the last item
				if (index === currentMediaItems.length - 1) {
					selectItem(currentMediaItems[0]); // then select the first item
					return;
				} else {
					selectItem(currentMediaItems[index + 1]); // otherwise select the item after it.
					return;
				}
			}
		}
	};

	exports.selectPrevItem = function () {
		var index = 0;
		for (index = 0; index < currentMediaItems.length; index += 1) {
			// Find the current item
			if (currentMediaItems[index].id === currentMediaItem.id) {
				// if the current item is the first item
				if (index === 0) {
					selectItem(currentMediaItems[currentMediaItems.length - 1]); // then select the last item
					return;
				} else {
					selectItem(currentMediaItems[index - 1]); // otherwise select the item before it.
					return;
				}
			}
		}
	};

});
