﻿var Products = {};

Products.cache = {};
Products.news = {};
Products.currentTag = 0;
Products.paginationIndex = 0;
Products.paginationCount = 4;
Products.itemsCount = 0;


Products.userLike = function(productId)
{

	Facebook.requestStreamPublishPermissions(function(hasPermission)
	{
		// Call it only once the dialog is closed (or if we already have the permission)
		Api.invoke("/products/like?productId="+productId);
	});
}


Products.userWatch = function(productId)
{
	Api.invoke("/products/enter?productId=" + productId);
}

Products.shopComment = function(comment)
{
	Facebook.requestStreamPublishPermissions(function(hasPermission)
	{	
		Api.invoke("/shop/comment?comment=" + comment);
		$(".personal-profile .status").html(comment);
		$(".social .post .textbox").val("");		
	});
}

Products.userComment = function(productId, comment)
{
	Facebook.requestStreamPublishPermissions(function(hasPermission)
	{
		Api.invoke("/products/comment?productId=" + productId + "&comment=" + comment);
		$("#product-comment-text").val("");
	});
}

Products.showLoading = function(hideNav)
{
	if (hideNav)
	{
		$('.product-navigation').css('visibility', 'hidden');
		$('.nav-next').css('visibility', 'hidden');
		$('.nav-prev').css('visibility', 'hidden');
	}
	$('.product-list').css('visibility', 'hidden');
	$('.fashion-item').css('visibility', 'hidden');
	$('.website-content-loading').show();
}


Products.hideLoading = function()
{
	$('.product-navigation').css('visibility', 'visible');
	$('.product-list').css('visibility', 'visible');
	$('.fashion-item').css('visibility', 'visible');
	$('.website-content-loading').hide();

}


Products.showProductsByTag = function(tagId, showFeed)
{
	Products.showLoading(true);
	Products.currentTag = tagId;
	Products.paginationIndex = 0;
	Products.updateProductsList(showFeed);
	$('.sub-category-link').css('font-weight', 'normal');
	$('.sub-category-link').css('color', '#505050');
	$('#sub-category-link-' + tagId).css('font-weight', 'bold');
	$('#sub-category-link-' + tagId).css('color', '#000000');
	Tags.userEnter(tagId);
}



Products.prevPage = function()
{
	//Products.showLoading(false);
	Products.paginationIndex -= Products.paginationCount;
	Products.updateProductsList(false);
}



Products.nextPage = function()
{
	//Products.showLoading(false);
	Products.paginationIndex += Products.paginationCount;
	Products.updateProductsList(false);
}

Products.hideNavigationLinksIfNecessary = function()
{
	var firstItemOnNextPageIndex = Products.paginationIndex + Products.paginationCount;
	var lastItemIndex = Products.itemsCount - 1;

	var showPrev = Products.paginationIndex > 0;
	$('.product-navigation .nav-prev').css("visibility", showPrev? "visible" : "hidden");

	var showNext = firstItemOnNextPageIndex <= lastItemIndex;
	$('.product-navigation .nav-next').css("visibility", showNext? "visible" : "hidden");

}


Products.updateProductsList = function(sendFeed)
{
	domElementToUpdate = $('#product-list-real');

	var itemTemplate = jQuery.trim($("#product-template").html());
	var url = String.fillWithArray('/products?tagId={currentTag}&startIndex={paginationIndex}&numberOfItems={paginationCount}', Products);
	var itemToShowOnStartup = jQuery.url.param("pr");
	if (typeof (itemToShowOnStartup) != 'undefined')
	{
		url += "&itemToShowOnStartup=" + itemToShowOnStartup;
	}


	var onUpdateComplete = function(itemsPropertiesArray, itemsCount)
	{
		if (itemsCount > 250)
			itemsCount = 250; // TODO: Remove this hack

		Products.itemsCount = itemsCount;
		$('.nav-title').html(String.format("Items {0}-{1} out of {2}:", Products.paginationIndex + 1, Products.paginationIndex + Products.paginationCount, itemsCount));
		Products.hideNavigationLinksIfNecessary();

		Products.hideLoading();


		for (itemIndex in itemsPropertiesArray)
		{

			var itemProperties = itemsPropertiesArray[itemIndex];
			// Prefetch large image in product display
			var image = new Image();
			image.src = itemProperties["ImageUrlLargePortrait"];
		}

		var firstItemId = itemsPropertiesArray[0]["ItemId"];
		Products.displayProduct(firstItemId, sendFeed);
		$(".product-display .post .textbox").watermark("Discuss this product");

		$('.show-tooltip').cluetip(
		{
			splitTitle: '|',
			showTitle: false,
			cluetipClass: 'jtip',
			width: '200px',
			topOffset: '20px',
			leftOffset: '0px',
			positionBy: 'bottomTop',
			cursor: 'normal'
		});

		tb_init('a.thickbox, area.thickbox, input.thickbox');

	}

	var onModifyItemProperties = function(itemProperties)
	{
		var i1, i2, i3;
		i1 = Math.floor(Math.random() * 9)
		do
		{
			i2 = Math.floor(Math.random() * 9)
		} while (i2 == i1);
		do
		{
			i3 = Math.floor(Math.random() * 9)
		} while (i3 == i1 || i3 == i2);

		for (i = 0; i < 9; i++)
		{
			itemProperties['DisplayUser' + i] = 'hide';
		}

		var sentences = Array("Yay! Very nice", "I like it", "It's really great", "Would definitely recommend", "Extremely Cute", "Wow!", "Cool Stuff", "Mmmm...", "Great!", "It's amazing", "What do you say?", "I like", "Definitely Like", "Pretty Nice", "w00t", "Whoa", "Pretty Cool", "I LOVE that!");


		itemProperties['DisplayUser' + i1] = '';
		itemProperties['DisplayUser' + i2] = '';
		itemProperties['DisplayUser' + i3] = '';
		itemProperties['DisplayUser' + i1 + 'Text'] = sentences[Math.floor(Math.random() * sentences.length)];
		itemProperties['DisplayUser' + i2 + 'Text'] = sentences[Math.floor(Math.random() * sentences.length)];
		itemProperties['DisplayUser' + i3 + 'Text'] = sentences[Math.floor(Math.random() * sentences.length)];


		if (typeof (itemProperties['Sizes']) != 'string')
		{
			itemProperties['SizesString'] = itemProperties['Sizes'].join(', ');
		}
		else
		{
			itemProperties['SizesString'] = '';
		}
		if (typeof (itemProperties['Colors']) != 'string')
		{
			itemProperties['ColorsString'] = itemProperties['Colors'].join(', ');
		}
		else
		{
			itemProperties['ColorsString'] = '';
		}
		// Handle price properties
		itemProperties['Price'] = '$' + itemProperties['Price'];
		if (itemProperties['OriginalPrice'] != '')
		{
			itemProperties['OriginalPrice'] = '$' + itemProperties['OriginalPrice'];
		}

		// Handle image properties
		if (typeof (itemProperties['ImageId']) != 'undefined')
		{
			itemProperties["ImageUrlSmallPortrait"] = ItemImage.getUrl(itemProperties['ImageId'], ItemImage.type.SMALL_PORTRAIT);
			itemProperties["ImageUrlMediumPortrait"] = ItemImage.getUrl(itemProperties['ImageId'], ItemImage.type.MEDIUM_PORTRAIT);
			itemProperties["ImageUrlLargePortrait"] = ItemImage.getUrl(itemProperties['ImageId'], ItemImage.type.LARGE_PORTRAIT);
		}
		itemProperties['LikesText'] = NewsFeed.getLikeText(itemProperties['TotalLikes']);

	}


	//Api.updateByItem(itemProperties, '#product-display-template', '#product-display');

	Api.getListAndUpdate(url, 'ClientProduct', itemTemplate, domElementToUpdate, onUpdateComplete, onModifyItemProperties);
}


Products.displayProduct = function(productId, sendFeed)
{
	$(".product-nav-images .product-image").css('width', '120px');
	$(".product-nav-images .product-image").css('height', '240px');
	$(".product-nav-images .product-image").css('border', 'none');
	$(".product-nav-images .likes").show();
	$(".product-nav-images .no-likes").hide();
	$(".product-nav-images").css('padding-top', '5px');
	$("#product-nav-image-" + productId + " .product-image").css('border', '2px solid #673E87');
	$("#product-nav-image-" + productId + " .product-image").css('border-bottom', '1px solid #673E87');
	$("#product-nav-image-" + productId + " .product-image").css('width', '180px');
	$("#product-nav-image-" + productId + " .product-image").css('height', '360px');
	$("#product-nav-image-" + productId + " .likes").hide();
	$("#product-nav-image-" + productId + " .no-likes").show();
	$("#product-nav-image-" + productId).css('padding-top', '0');
	var itemProperties = Products.getProperties(productId);
	Api.updateByItem(itemProperties, '#product-display-template', '#product-display');
	if (sendFeed)
	{
		Products.userWatch(productId);
	}

	if (typeof (Products.news[productId]) != 'undefined' && Products.news[productId] != null)
	{
		$("#news-feed-" + productId).html(Products.news[productId]);
	}

	Products.cache[productId];


	// After showing the product	
	$('#product-comment-text').keyup(function(e)
	{
		if (e.keyCode == 13)
		{
			var val = $("#product-comment-text").val();
			var productId = $("#product-id").val();
			Products.userComment(productId, val);
		}
	});
	$("#product-comment-send").click(function()
	{		
		var val = $("#product-comment-text").val();
		var productId = $("#product-id").val();
		Products.userComment(productId, val);
	});
	tb_init('a.thickbox, area.thickbox, input.thickbox');

}


Products.toggleDescription = function(showDescription)
{
	$('.product-display .description').css("display", showDescription ? "block" : "none");
	$('.product-display .show-description').css("display", !showDescription ? "inline" : "none");
	$('.product-display .hide-description').css("display", showDescription ? "inline" : "none");
}


Products.getProperties = function(productId)
{
	return Products.cache[productId];
}

Products.cacheProperties = function(productId, productProperties)
{
	Products.cache[productId] = productProperties;
}