﻿Viostream.MediaBase.prototype.Draw = function() {
	/// <summary> Builds a media item on the screen </summary>
	var mb = this;
	try {

		var oFrag = Viostream.Templates.MediaItem.cloneNode(true);
		var $Frag = $(oFrag.childNodes);

		$Frag.find(".video-title-text")
            .bind("click", { mb: this }, this.AddToPlayList)
            .mouseover(function() { window.status = ""; return false; })
            .html(mb.MediaTitle);

		mb.MediaDescription = (mb.MediaDescription != null) ? mb.MediaDescription : "";

		$Frag.find(".video-description").html(this.FormatDesc(mb.MediaDescription));

		$Frag.find(".video-thumb")
                .width(Viostream.targetThumbNailWidth)
                .height(Viostream.targetThumbNailHeight)
                .attr("src", mb.ThumbnailURL);

		$Frag.find(".video-date").html(mb.Created);

		$Frag.find(".video-views").html(0);

		$Frag.find(".video-category a")
               .bind("click", { mb: this }, this.AddToPlayList)
               .mouseover(function() { window.status = ""; return false; })
               .html("&nbsp");

		//add to playlist image/button        
		var aAddToPlaylist = $cE("a");
		aAddToPlaylist.href = "JavaScript:void(0);";


		if (Viostream.UseShadowBox && mb.MediaType == "Album") {
			var oPlaylistAdd = $Frag.find(".playlist-add").bind("click", { mb: this }, function(e) {
				var _mb = e.data.mb;
				Shadowbox.open({
					title: _mb.MediaTitle,
					type: 'img',
					content: _mb.Album[0].Url,
					gallery: _mb.MediaId
				});
				return false;
			});

			for (var i = 1; i < this.Album.length; i++) {
				var imglink = $cE("a");
				imglink.className = "sboxGall";
				imglink.href = this.Album[i].Url;
				imglink.innerHTML = "piclink"
				imglink.title = this.Album[i].Title + " : " + this.Album[i].Description;
				imglink.alt = this.Album[i].Description;
				imglink.rel = 'shadowbox[' + this.MediaId + ']';
				oPlaylistAdd.append(imglink);
			}
			if (this.Album.length > 1) {
				Shadowbox.setup(oPlaylistAdd.find("a.sboxGall"), { gallery: this.MediaId });
			}

		} else {
			$Frag.find(".playlist-add").bind("click", { mb: this }, this.AddToPlayList);
		}

		//create rating list
		if ((Viostream.UseRating) && (mb.rating > 0))
			$Frag.find(".rateList").find("li").slice(0, mb.rating).each(function() {
				if (this.className.indexOf("right") != -1)
					this.className = this.className.replace("right", "rightstarred");
				else
					this.className += " starred";
			});

		/****************************************************************
			Override to add this
		****************************************************************/
		if ($.inArray(mb.MediaId, Viostream.BuyableMedia) != -1) {
			$("<a class='btn-addtocart' href='#AddToCart'>Add to Cart</a>")
				.bind("click", { mb: this }, Viostream.Shopping.AddToCart)
				.appendTo($Frag.find(".video-card"));
		}
		/****************************************************************/

		var ulMediaItemWrapper = $("#" + Viostream.mediaItemListId);

		ulMediaItemWrapper.append(oFrag);
	}
	catch (e) {
		notify("BuildMediaItemElement(mb) " + e.message, true);
	}
};

function currentlyPlaying(mediaTitle, mediaLength, mediaDescription, created, mediaId, averageVote) {
	if (mediaId != null) {
		Viostream.MediaId = mediaId;
		averageVote = (averageVote == null || averageVote == "") ? 0 : averageVote;
		//alert("averageVote = " + averageVote);
		if (typeof (Viostream.RateThis) == "function")
			Viostream.RateThis(averageVote);

		if (typeof (Viostream.PopulateComments) == "function")
			Viostream.PopulateComments(Viostream.MediaId);

		if (typeof (Viostream.PopulateKeywords) == "function")
			Viostream.PopulateKeywords();

		/****************************************************************
		Override to add this
		****************************************************************/
		if ($.inArray(mediaId, Viostream.BuyableMedia) != -1) {
			Viostream.Shopping.Options.BtnAddToCart.show();
		} else {
			Viostream.Shopping.Options.BtnAddToCart.hide();
		}
		/***************************************************************/

		var d = new Date();
		d.setISO8601(created);


		$("#" + Viostream.VideoInfo.Title).html(mediaTitle);
		$("#" + Viostream.VideoInfo.Description).html(mediaDescription);
		$("#" + Viostream.VideoInfo.DateAdded).html(d.getFormatDate());
		$("#" + Viostream.VideoInfo.PanelId).show();
		$("#" + Viostream.VideoInfo.SocialBookMarkId).show();

		/* UPDATE BOOKMARKS */
		var linksObjects = {
			"delicious": { "base": "http://del.icio.us/post",
				"urlDelim": "url",
				"titleDelim": "title"
			},
			"digg": { "base": "http://digg.com/submit",
				"urlDelim": "url",
				"titleDelim": "title"
			},
			"reddit": { "base": "http://reddit.com/submit",
				"urlDelim": "url",
				"titleDelim": "title"
			},
			"facebook": { "base": "http://www.facebook.com/sharer.php",
				"urlDelim": "u",
				"titleDelim": null
			},
			"stumbleupon": { "base": "http://www.stumbleupon.com/submit",
				"urlDelim": "url",
				"titleDelim": "title"
			},
			"myspace": { "base": "http://www.myspace.com/index.cfm",
				"urlDelim": "fuseaction=postto&u",
				"titleDelim": "t"
			},
			"twitter": { "base": "http://twitter.com/home",
				"urlDelim": "status",
				"titleDelim": "%20",
				"appendTitle": true
			},
			"bebo": { "base": "http://bebo.com/c/share",
				"urlDelim": "url",
				"titleDelim": "Title"
			}
		};
		$("#" + Viostream.VideoInfo.SocialBookMarkId + " a").each(function() {
			var linkid = this.id.toLowerCase();
			var linkurl = location.href.split("#")[0].split("?")[0] + escape("?MediaId=") + mediaId;
			var linkstr = linksObjects[linkid].base + "?" + linksObjects[linkid].urlDelim + "=" + linkurl;
			if (linksObjects[linkid].titleDelim != null) {
				var title = Viostream.PortalName + " : " + mediaTitle;
				if (linksObjects[linkid].appendTitle)
					linkstr += linksObjects[linkid].titleDelim + title;
				else
					linkstr += "&" + linksObjects[linkid].titleDelim + "=" + title;
			}
			this.href = linkstr;
		});

		var SocialBookMarkButton = $("#" + Viostream.VideoInfo.SocialBookMarkButtonId);
		if (SocialBookMarkButton.length) {
			SocialBookMarkButton[0].onclick =
			function() {
				addthis_url = location.href.split("#")[0].split("?")[0] + "?MediaId=" + mediaId;
				addthis_title = document.title;
				return addthis_click(this);
			}
		}

	}

};

Viostream.User.prototype.LoginHandleSuccess = function(o) {
	/// <summary> Successful login, update the page </summary>
	if (!Viostream.AjaxObject.DisplayErrors(o, "Login")) {
		var item = $(o).find("Item");
		Viostream.user.PopulateUser(item.find("Id").text(), item.find("FirstName").text(), item.find("LastName").text(), item.find("EmailAddress").text(), item.find("Alias").text());

		/****************************************************************
		Override to add this
		****************************************************************/		
		if (Viostream.Shopping) {
			$.ajax({
				url: Viostream.ShoppingWSUrl + "LoadCart",
				success: function(o) {
					Viostream.Shopping.BuildCart(o);
				},
				error: function() {
					Viostream.Error("Error building cart at login", Viostream.user);
				}
			});
			Viostream.Shopping.CheckPastOrders(true);
		}
		/****************************************************************/
		
		if (document.location.href.toLowerCase().indexOf("upload.aspx") != -1) {
			document.location.reload();
		}
	}
};

Viostream.User.prototype.LogoutHandleSuccess = function(o) {
	/// <summary> Successful logout, update the page </summary>
	if (!Viostream.AjaxObject.DisplayErrors(o, "Logout")) {
		Viostream.user = new Viostream.User();
		Viostream.UserIsLoggedIn = false;

		/****************************************************************
			Override to add this
		****************************************************************/
		if (Viostream.Shopping) {
			Viostream.Shopping.Cart = [];
			Viostream.Shopping.OrderId = -1;
			Viostream.Shopping.Options.BtnCart.find("span").text("");
			$("#orders-button").hide();
		}
		/****************************************************************/
		
		if (document.location.href.toLowerCase().indexOf("upload.aspx") != -1) {
			document.location.reload();
		}
		Viostream.changeLoginStatus();
	}
};
//Viostream.BuyableMedia = [];

Viostream.ShoppingWSUrl = "/Service/Shopping.asmx/";

$(function() {
	$("#terms").click(function() {
		var a = $(this);
		var w = window.open(a.attr("href"), a.text().replace(/\s+/g, "_"), 'width=660,height=500,resizable=1,scrollbars=yes');
		return !w;
	});
});

Viostream.Extend({
	Effects: {
		Pulse: function(elem, interval) {
			elem
				.fadeOut(interval)
				.fadeIn(interval)
				.fadeOut(interval)
				.fadeIn(interval);
		},
		Overlay: function() {
			var body = $("body");
			Viostream.Effects.Overlay = $("#overlay");
			if (Viostream.Effects.Overlay.length == 0)
				Viostream.Effects.Overlay = $('<div id="overlay"></div>').appendTo(body);

			$(Viostream.Shopping.Options.DisplayCartClose).click(Viostream.Effects.CloseOverlay);
			Viostream.Effects.Overlay.click(Viostream.Effects.CloseOverlay);
			$(document).bind("keyup.overlay", function(e) {
				if (e.keyCode == 27)  //if esc key
					Viostream.Effects.CloseOverlay();
			});
		},
		ShowOverlay: function(){
			var height = $(document).height();
			Viostream.Effects.Overlay
					.css({ "opacity": 0 })
					.show()
					.height(height)
					.animate({ "opacity": 0.8 }, "fast");
		},
		CloseOverlay: function() {
			Viostream.Effects.Overlay.fadeOut("fast", Viostream.Effects.CloseOverlayCallback);
			return false;
		},
		CloseOverlayCallback: function() {}
	}
});
Viostream.Extend({
	Shopping: {
		Defaults: {
			CartMaxSize: 5,
			BtnAddToCart: "#btn-addtocart",
			BtnCart: "#btn-cart",
			CartProgress: "#cart-progress",
			DisplayCart: "#cart",
			DisplayCartClose: "#cart-close",
			DisplayCartRow: ".cart-item",
			OrderInput: "#orderId",
			PastOrderCart: "#past-orders",
			PastOrderCartRow: ".cart-item"
		},
		Options: null,
		Init: function(opts) {
			Viostream.Shopping.Options = $.extend({}, Viostream.Shopping.Defaults, opts);
			Viostream.Shopping.Options.BtnCart = $(Viostream.Shopping.Options.BtnCart);
			Viostream.Shopping.Options.BtnCart
				.bind("click", Viostream.Shopping.CheckOut);
			Viostream.BuyableMedia = Viostream.Shopping.Options.BuyableMedia;
			Viostream.Shopping.Options.OrderInput = $(Viostream.Shopping.Options.OrderInput);
			//userisloggedin?
			if (Viostream.Shopping.Options.InitCart) {
				Viostream.Shopping.Cart = Viostream.Shopping.Options.InitCart;
				Viostream.Shopping.Options.BtnCart.find("span").text(Viostream.Shopping.Cart.length);
			}
			if (Viostream.Shopping.Options.OrderId) {
				Viostream.Shopping.OrderId = Viostream.Shopping.Options.OrderId;
				Viostream.Shopping.Options.OrderInput.val(Viostream.Shopping.OrderId);
				Viostream.Shopping.OrderTotal = Viostream.Shopping.Options.OrderTotal;
			}
			Viostream.Shopping.Options.BtnAddToCart = $(Viostream.Shopping.Options.BtnAddToCart);
			Viostream.Shopping.Options.BtnAddToCart
				.bind("click", { "AddFromPlayList": true }, Viostream.Shopping.AddToCart);
			Viostream.Shopping.Options.CartProgress = $(Viostream.Shopping.Options.CartProgress);
			Viostream.Shopping.Options.DisplayCart = $(Viostream.Shopping.Options.DisplayCart);
			Viostream.Shopping.Options.DisplayCartRow = Viostream.Shopping.Options.DisplayCart.find(Viostream.Shopping.Options.DisplayCartRow).remove();
			Viostream.Shopping.Options.DisplayCartRow.click(Viostream.Shopping.CartClick);
			Viostream.Shopping.Options.PastOrderCart = $(Viostream.Shopping.Options.PastOrderCart);
			Viostream.Shopping.Options.PastOrderCartRow = Viostream.Shopping.Options.PastOrderCart.find(Viostream.Shopping.Options.PastOrderCartRow).remove();
			Viostream.Effects.CloseOverlayCallback = function() { Viostream.Shopping.Options.DisplayCart.hide(); };
			Viostream.Effects.Overlay();
			if (Viostream.UserisLoggedIn) {
				Viostream.Shopping.CheckPastOrders(false);
			}
			//just going to bung this in here...
			$("#links-close").click(function(e) {
				e.preventDefault();
				if (confirm("If you sure you are done downloading your videos, click OK to continue.")) {
					$(this).parent().parent().remove();
					Viostream.Effects.CloseOverlay();
				}
			});
			//just going to bung this in here...
			$("#orders-close").click(function(e) {
				e.preventDefault();
				$(this).parent().parent().hide();
				Viostream.Effects.CloseOverlay();
			});

			$("#orders-button").click(function(e) {
				e.preventDefault();
				$("#past-orders-container").show();
			});
		},
		Cart: [],
		OrderId: -1,
		OrderTotal: 0,
		AddToCart: function(e) {
			e.preventDefault();
			if (Viostream.UserIsLoggedIn) {
				var mediaBase = null;
				if (Viostream.Shopping.Cart.length > Viostream.Shopping.Options.CartMaxSize - 1) {
					alert("Only " + Viostream.Shopping.Options.CartMaxSize + " items can be added to the shopping cart.");
				} else {
					Viostream.Shopping.ShowProgress("Adding item to cart.");
					if (e.data.AddFromPlayList) {
						if (Viostream.MediaId != null && Viostream.PlayList.ClientSidePlaylist != null) {
							var mediaBase = null;
							var i = Viostream.PlayList.ClientSidePlaylist.length;
							while (i--) {
								if (Viostream.PlayList.ClientSidePlaylist[i].MediaId == Viostream.MediaId) {
									mediaBase = Viostream.PlayList.ClientSidePlaylist[i];
									break;
								}
							}
						}
					} else {
						mediaBase = e.data.mb;
					}
					if (mediaBase != null) {
						var i = Viostream.Shopping.Cart.length;
						while (i--) {
							if (Viostream.Shopping.Cart[i].MediaId == mediaBase.MediaId) {
								alert(mediaBase.MediaTitle + " is already in your cart.");
								Viostream.Shopping.Options.CartProgress.hide();
								return false;
							}
						}
						Viostream.Shopping.Add(mediaBase);
					} else {
						Viostream.Shopping.Options.CartProgress.hide();
						alert("Error adding item to cart.");
					}
				}
			} else {
				alert("You need to be logged in to buy races.\n If you do not have a user account you will need to register.");
				Viostream.ToggleLogin();
			}
		},
		Add: function(mb) {
			$.ajax({
				url: Viostream.ShoppingWSUrl + "AddToCart",
				success: function(o) {
					Viostream.Shopping.AddHandleSuccess(o);
				},
				error: function() {
					alert("Error adding item to cart.");
					Viostream.Shopping.Options.CartProgress.hide();
				},
				data: {
					"mediaId": mb.MediaId,
					"mediaTitle": mb.MediaTitle
				}
			});
		},
		AddHandleSuccess: function(o) {
			//empty cart and build it from response
			Viostream.Shopping.Cart.length = 0;
			Viostream.Shopping.BuildCart(o, "Add to Cart");
		},
		RemoveFromCart: function(e) {
			Viostream.Shopping.ShowProgress("Removing item from cart.");
			var MediaId = e.data.MediaId;
			Viostream.Shopping.Remove(MediaId);
		},
		Remove: function(MediaId) {
			$.ajax({
				url: Viostream.ShoppingWSUrl + "RemoveFromCart",
				success: function(o) {
					Viostream.Shopping.RemoveHandleSuccess(o, MediaId);
				},
				error: function() {
					alert("Error removing item from cart.");
					Viostream.Shopping.Options.CartProgress.hide();
				},
				data: {
					"mediaId": MediaId
				}
			});
		},
		RemoveHandleSuccess: function(o, MediaId) {
			if (!Viostream.AjaxObject.DisplayErrors(o, "Remove From Cart")) {
				var i = Viostream.Shopping.Cart.length;
				while (i--) {
					if (Viostream.Shopping.Cart[i].MediaId == MediaId) {
						var rest = Viostream.Shopping.Cart.slice(i + 1);
						Viostream.Shopping.Cart.length = i;
						Viostream.Shopping.Cart.push.apply(Viostream.Shopping.Cart, rest);
						Viostream.Shopping.Options.BtnCart.find("span").text(Viostream.Shopping.Cart.length);
						Viostream.Shopping.OrderTotal = $(o).find("Total").text();
						if (!Viostream.Shopping.RenderCart()) {
							Viostream.Effects.CloseOverlay();
							alert("You cart is empty.");
						}
						Viostream.Effects.Pulse(Viostream.Shopping.Options.BtnCart, 400);
						break;
					}
				}
			}
			Viostream.Shopping.Options.CartProgress.hide();
		},
		CartClick: function(e) {
			e.preventDefault();
			if (e.target.className == "cart-remove-item") {
				var d = { data: { MediaId: e.target.id} };
				Viostream.Shopping.RemoveFromCart($.extend({}, e, d));
			}
		},
		ShowCart: function() {
			if (Viostream.UserIsLoggedIn) {
				if (Viostream.Shopping.RenderCart()) {
					if (Viostream.Shopping.OrderId) {
						Viostream.Effects.ShowOverlay();
						Viostream.Shopping.Options.DisplayCart.show();
					} else {
						Viostream.Error("Cart exsits but no OrderId", {});
					}
				} else {
					alert("You cart is empty.");
				}
			} else {
				alert("You need to be logged in to checkout.\n If you do not have a user account you will need to register.");
				Viostream.ToggleLogin();
			}
		},
		RenderCart: function() {
			var i = Viostream.Shopping.Cart.length;
			if (i) {
				var cartTable = Viostream.Shopping.Options.DisplayCart.find("#cart-table");
				cartTable.find(".cart-item").remove(); //ack..class set in options but clobbered. Re-think.
				$("#cart-total").find("span").text(Viostream.Shopping.OrderTotal);
				while (i--) {
					var item = Viostream.Shopping.Cart[i];
					var cartRow = Viostream.Shopping.Options.DisplayCartRow.clone(true);
					if (i % 2 == 1)
						cartRow.addClass("cart-item-alt"); //classes from opts?

					cartRow.find(".item-name").text(item.MediaTitle);
					cartRow.find(".item-size").text(item.FileSize + "MB");
					cartRow.find(".cart-remove-item").attr("id", item.MediaId);
					cartTable.append(cartRow);
				}
				Viostream.Shopping.Options.OrderInput.val(Viostream.Shopping.OrderId);
				return true;
			} else {
				return false;
			}
		},
		BuildCart: function(responseXML, errorTitle) {
			errorTitle = errorTitle || "Retrieve Cart";
			if (!Viostream.AjaxObject.DisplayErrors(responseXML, errorTitle)) {
				var r = $(responseXML);
				Viostream.Shopping.OrderId = r.find("Id").text();
				Viostream.Shopping.OrderTotal = r.find("Total").text();
				r.find("OrderItem").each(function() {
					var orderItem = $(this);
					Viostream.Shopping.Cart.push({
						"MediaId": orderItem.find("ItemId").text(),
						"MediaTitle": orderItem.find("ItemName").text(),
						"FileSize": orderItem.find("FileSize").text()
					});
				});
				if (Viostream.Shopping.Cart.length) {
					Viostream.Shopping.Options.BtnCart.find("span").text(Viostream.Shopping.Cart.length);
					Viostream.Effects.Pulse(Viostream.Shopping.Options.BtnCart, 400);
				}
			}
			Viostream.Shopping.Options.CartProgress.hide();
		},
		CheckOut: function(e) {
			e.preventDefault();
			Viostream.Shopping.ShowCart();
		},
		VerifyOrder: function(options) {
			Viostream.Shopping.ShowProgress("Please wait while we check your order.");
			if (options.poll) {
				Viostream.Shopping.VerifyPolling = window.setInterval(function() { Viostream.Shopping.Verify(options.TransactionId, options.OrderId) }, (options.interval || 5000));
			}
			else {
				Viostream.Shopping.Verify(options.TransactionId, options.OrderId);
			}
		},
		Verify: function(TransactionId, OrderId) {
			$.ajax({
				url: Viostream.ShoppingWSUrl + "CompleteOrder",
				success: function(o) {
					var r = $(o);
					var strings = r.find("string");
					if (!strings.length) {
						//keep polling
					} else if (!Viostream.AjaxObject.DisplayErrors(o, "Complete Order")) {
						window.clearInterval(Viostream.Shopping.VerifyPolling);
						Viostream.Shopping.VerifyPolling = null;
						Viostream.Shopping.BuildLinks(strings);
					} else {
						window.clearInterval(Viostream.Shopping.VerifyPolling);
						Viostream.Shopping.VerifyPolling = null;
						Viostream.Shopping.Options.CartProgress.hide();
					}
				},
				data: { "orderId": OrderId, "transactionId": TransactionId }
			});
		},
		VerifyPolling: null,
		BuildLinks: function(strings) {
			var links = $("#download-links-container");
			var output = "";
			strings.each(function() {
				output += $(this).text();
			});
			$("#download-links").html(output);
			Viostream.Effects.ShowOverlay();
			links.show();
			Viostream.Shopping.Options.CartProgress.hide();
		},
		CheckPastOrders: function(show) {
			$.ajax({
				url: Viostream.ShoppingWSUrl + "ListOrders",
				success: function(o) {
					Viostream.Shopping.PopulatePastOrders(o, show);
				},
				error: function() {
					Viostream.Error("Error building Populate Past Orders at login", Viostream.user);
				}
			});
		},
		PopulatePastOrders: function(responseXML, show) {
			if (!Viostream.AjaxObject.DisplayErrors(responseXML, "List Orders")) {
				var poContainer = $("#past-orders-container");
				var r = $(responseXML);
				var pastorderTable = poContainer.find("#pastorder-table");
				pastorderTable.find(".cart-item").remove();
				var strings = r.find("string");
				if (strings.length) {
					strings.each(function(i) {
						var orderItem = $(this);
						var cartRow = Viostream.Shopping.Options.PastOrderCartRow.clone(true);
						if (i % 2 == 1)
							cartRow.addClass("cart-item-alt"); //classes from opts?
						cartRow.find(".item-name").html(orderItem.text());
						pastorderTable.append(cartRow);
					});
					if (show)
						poContainer.show();
					$("#orders-button").show();
				}
			}
		},
		ShowProgress: function(msg) {
			Viostream.Shopping.Options.CartProgress.find("span").text(msg).end().show();
		}
	}
});
