var ProductHandler = new function() {

	var m_ButtonSubmit;
	var m_OrderSendText;
	var m_MessageTimeout = null;
	var deliveryAdress;
	var useInvoiceAdressText;
	var btns = {};


	this.ConfirmDialog = function(button, sendOrder, yesButton, noButton, orderSend, txbDeliveryAdressClientID, useInvoiceAdress) {
		m_ButtonSubmit = button;
		m_OrderSendText = orderSend;
		useInvoiceAdressText = useInvoiceAdress;
		deliveryAdress = document.getElementById(txbDeliveryAdressClientID).value;
		btns[yesButton] = true;
		btns[noButton] = false;
		$.prompt(sendOrder, { submit: ProductHandler.ConfirmDialogSubmit, buttons: btns });
	}

	this.ConfirmDialogSubmit = function(v, m) {
		if (v) {
			if (__doPostBack && PageInitializer.PreIE7()) { // FIX for IE6
				if (deliveryAdress == "") {
					$.prompt(useInvoiceAdressText, { submit: ProductHandler.ConfirmDeliveryAdressSubmit, buttons: btns });
					return true;
				}
				__doPostBack(m_ButtonSubmit.name, '');
			} else {
				if (deliveryAdress == "") {
					$.prompt(useInvoiceAdressText, { submit: ProductHandler.ConfirmDeliveryAdressSubmit, buttons: btns });
					return true;
				}
				$.prompt(m_OrderSendText, { buttons: {} });
				m_ButtonSubmit.onclick = null;
				m_ButtonSubmit.click();
				m_ButtonSubmit.disabled = true;
			}
		}
		return true;
	}

	this.ConfirmDeliveryAdressSubmit = function(v, m) {
		if (__doPostBack && PageInitializer.PreIE7()) { // FIX for IE6
			if (v) {
				document.getElementById("txtImpromtuReturnValue").value = "true";
				$.prompt(m_OrderSendText, { buttons: {} });
				__doPostBack(m_ButtonSubmit.name, '');
			}
			return true;
		} else {
			if (v) {
				document.getElementById("txtImpromtuReturnValue").value = "true";
				$.prompt(m_OrderSendText, { buttons: {} });
				m_ButtonSubmit.onclick = null;
				m_ButtonSubmit.click();
				m_ButtonSubmit.disabled = true;
			}
			return true;
		}
	}


	this.ValidateForm = function() {
		return false;
	}

	this.Init = function() {
		ProductHandler.SetTextboxFocus();
		ProductHandler.InitTabs();
		ProductHandler.InitFAQ();
		ProductHandler.LoadCart();
		ProductHandler.LoadFavoriteList();
	}

	this.UpdateCartValue = function(companyCodeId, culture, textboxId, articleId, productId) {
		var textbox = document.getElementById(textboxId);
		var quantity = textbox.value;
		if (articleId.length > 0 && quantity.length > 0 && !isNaN(quantity) && quantity > 0) {
			AssaAbloy.Web.Apps.Products.Util.CartHandler.UpdateShoppingCart(articleId, quantity, companyCodeId, culture, productHandlerPage, ProductHandler.UpdateCartCallback);
			if (Statistics != null) {
				Statistics.AddToCart(articleId, quantity);
			}
			textbox.value = "";
			ProductHandler.ShowConfirmation(textbox.parentNode, articleId, quantity);
		}
	}

	this.UpdateCartCallback = function(res) {
		var list = document.getElementById("cart-items");
		var cart = document.getElementById("cart");
		var cartExists = false;
		if (list != null && cart != null) {
			var cartContent = document.getElementById("ctrlCartContent");
			if (list.hasChildNodes()) {
				cartExists = true;
				while (list.childNodes.length >= 1) {
					list.removeChild(list.firstChild);
				}
			}
			if (res.value != null && res.value.length > 0) {
				var compactCartText = ProductHandler.GetCompactCartText(res.value.length);
				if (compactCartText != null && compactCartText.length > 0) {
					var quantityParagraph = document.createElement("p");
					var quantityText = document.createTextNode(compactCartText);
					quantityParagraph.appendChild(quantityText);
					list.appendChild(quantityParagraph);
				} else {
					for (var i = 0; i < res.value.length; i++) {
						var quantitySpan = document.createElement("span");
						var quantityText = document.createTextNode("(" + res.value[i].Quantity + ")");
						quantitySpan.appendChild(quantityText);
						var newText = document.createTextNode(" " + res.value[i].ArticleName);
						var newNode = document.createElement("p");
						newNode.appendChild(quantitySpan);
						newNode.appendChild(newText);
						list.appendChild(newNode);
					}
				}
				cart.style.display = "block";
				if (Statistics != null) {
					Statistics.OpenCart();
				}
				if (cartContent != null) {
					cartContent.innerHTML = "(" + res.value.length + ")";
				}
			} else {
				cart.style.display = "none";
				if (cartContent != null) {
					cartContent.innerHTML = "(0)";
				}
			}
		}
	}

	this.ShowConfirmation = function(containerNode, articleId, quantity) {
		var confirmationMessage = ProductHandler.GetConfirmationMessage(articleId, quantity);
		if (confirmationMessage != null) {
			if (containerNode.tagName.toLowerCase() == "td") {
				ProductHandler.ShowTableConfirmation(containerNode.parentNode, confirmationMessage);
			} else {
				ProductHandler.ShowDivConfirmation(containerNode, confirmationMessage);
			}
		}
	}

	this.ShowTableConfirmation = function(tableRow, message) {
		ProductHandler.HideConfirmation();
		var messageRow = document.createElement("tr");
		var messageCell = document.createElement("td");
		var messageText = document.createTextNode(message);
		messageCell.appendChild(messageText);
		messageCell.setAttribute("colspan", ProductHandler.GetNumberOfColumns(tableRow));
		messageCell.className = "message";
		messageCell.onclick = ProductHandler.HideConfirmation;
		messageRow.id = "product-add-message";
		messageRow.appendChild(messageCell);
		if (tableRow.nextSibling == null) {
			tableRow.parentNode.appendChild(messageRow);
		} else {
			tableRow.parentNode.insertBefore(messageRow, tableRow.nextSibling);
		}
		m_MessageTimeout = window.setTimeout(ProductHandler.HideConfirmation, 3000);
	}

	this.ShowDivConfirmation = function(div, message) {
		var container = div.parentNode.parentNode.parentNode;
		var clearerDiv = div.parentNode.parentNode.nextSibling;
		var messageDiv = document.createElement("div");
		var messageText = document.createTextNode(message);
		messageDiv.className = "message";
		messageDiv.onclick = ProductHandler.HideConfirmation;
		messageDiv.id = "product-add-message";
		messageDiv.appendChild(messageText);
		container.insertBefore(messageDiv, clearerDiv);
		m_MessageTimeout = window.setTimeout(ProductHandler.HideConfirmation, 3000);
	}

	this.HideConfirmation = function() {
		if (m_MessageTimeout != null) {
			window.clearTimeout(m_MessageTimeout);
			m_MessageTimeout = null;
		}
		var messageObj = document.getElementById("product-add-message");
		if (messageObj != null) {
			messageObj.parentNode.removeChild(messageObj);
		}
	}

	this.GetNumberOfColumns = function(tableRow) {
		var numCols = 0;
		var tableCells = tableRow.getElementsByTagName("td");
		for (var i = 0; i < tableCells.length; i++) {
			var tableCell = tableCells[i];
			var colspan = 1;
			if (tableCell.colspan) {
				colspan = tableCell.colspan;
			}
			numCols += colspan;
		}
		return numCols;
	}

	this.GetConfirmationMessage = function(articleId, quantity) {
		var singleItemMessage = ContentHandler.ItemAddedToCart;
		var multipleItemMessage = ContentHandler.ItemsAddedToCart != null ? ContentHandler.ItemsAddedToCart : singleItemMessage;
		if (quantity == 1) {
			if (singleItemMessage != null && singleItemMessage.length > 0) {
				return String.format(singleItemMessage, articleId);
			}
		} else {
			if (multipleItemMessage != null && multipleItemMessage.length > 0) {
				return String.format(multipleItemMessage, articleId, quantity);
			}
		}

		return null;
	}

	this.GetCompactCartText = function(articleCount) {
		return ProductHandler.GetCompactText(ContentHandler.CompactCartText, articleCount);
	}

	this.GetCompactFavoriteText = function(articleCount) {
		return ProductHandler.GetCompactText(ContentHandler.CompactFavoriteText, articleCount);
	}

	this.GetCompactText = function(formatString, articleCount) {
		if (formatString.length > 0) {
			return String.format(formatString, articleCount);
		} else {
			return null;
		}
	}

	this.AddToFavorites = function(companyCodeId, culture) {
		var articleNumbers = ProductHandler.GetSelectedArticles();
		if (articleNumbers.length > 0) {
			AssaAbloy.Web.Apps.Products.Util.CartHandler.AddToFavorites(articleNumbers, companyCodeId, culture, productHandlerPage, ProductHandler.AddToFavoritesCallback);
		}
	}

	this.AddToFavoritesCallback = function(res) {
		ProductHandler.UpdateFavoriteList(res);
	}

	this.UpdateFavoriteList = function(res) {
		var list = document.getElementById("favorites-items");
		var favorites = document.getElementById("favorites");
		if (list.hasChildNodes()) {
			while (list.childNodes.length >= 1) {
				list.removeChild(list.firstChild);
			}
		}
		if (res.value != null && res.value.length > 0) {
			var compactFavText = ProductHandler.GetCompactFavoriteText(res.value.length);
			if (compactFavText != null && compactFavText.length > 0) {
				var quantityParagraph = document.createElement("p");
				var quantityText = document.createTextNode(compactFavText);
				quantityParagraph.appendChild(quantityText);
				list.appendChild(quantityParagraph);
			} else {
				for (var i = 0; i < res.value.length; i++) {
					var numberNode = document.createElement("strong");
					var numberText = document.createTextNode(res.value[i].ArticleId);
					numberNode.appendChild(numberText);
					var nameText = document.createTextNode(" " + res.value[i].ArticleName);
					var itemNode = document.createElement("p");
					itemNode.appendChild(numberNode)
					itemNode.appendChild(nameText);
					list.appendChild(itemNode);
				}
			}
			favorites.style.display = "block";
		} else {
			favorites.style.display = "none";
		}
	}

	this.LoadFavoriteList = function() {
		if (document.getElementById("favorites") != null && weborderCompanyCode != null) {
			AssaAbloy.Web.Apps.Products.Util.CartHandler.GetLatestFavorites(weborderCompanyCode, weborderCulture, productHandlerPage, ProductHandler.LoadFavoriteListCallback);
		}
	}

	this.LoadFavoriteListCallback = function(res) {
		ProductHandler.UpdateFavoriteList(res);
	}

	this.LoadCart = function() {
		if (document.getElementById("cart") != null) {
			AssaAbloy.Web.Apps.Products.Util.CartHandler.UpdateShoppingCart("", 0, "", "", productHandlerPage, ProductHandler.UpdateCartCallback);
		}
	}

	this.DeleteCartValue = function(articleId, articleRow) {
		AssaAbloy.Web.Apps.Products.Util.CartHandler.DeleteArticleFromCart(articleId, articleRow, ProductHandler.DeleteCartValueCallback);
	}

	this.DeleteCartValueCallback = function(res) {
		if (res.value != null) {
			var table = document.getElementById("cart-table");
			var tablebody = document.getElementById("cart-body");
			var articleRow = document.getElementById(res.value);
			tablebody.removeChild(articleRow);
			var rows = tablebody.getElementsByTagName("tr");
			var odd = false;
			if (rows.length == 0) {
				table.style.display = "none";
			}
			else {
				table.style.display = "block";
			}
			for (var i = 0; i < rows.length; i++) {
				if (odd) {
					rows[i].className = "odd";
					odd = false;
				} else {
					rows[i].className = "even";
					odd = true;
				}
			}
		}
	}

	this.PrintLabels = function(companyCodeId, culture) {
		var articleNumbers = ProductHandler.GetSelectedArticles();
		if (articleNumbers.length > 0) {
			AssaAbloy.Web.Apps.Products.Util.CartHandler.GetArticles(articleNumbers, companyCodeId, culture, productHandlerPage, ProductHandler.PrintLabelsCallBack);
		}
	}

	this.PrintSingleLabel = function(articleNumber, companyCodeId, culture) {
		AssaAbloy.Web.Apps.Products.Util.CartHandler.GetArticles([articleNumber], companyCodeId, culture, productHandlerPage, ProductHandler.PrintLabelsCallBack);
	}

	this.PrintLabelsCallBack = function(res) {
		if (res.value != null && res.value.length > 0) {
			DymoHandler.print(res.value);
		}
	}

	this.GetSelectedArticles = function() {
		var parentElement = null;
		parentElement = document.getElementById("orderingitem"); // Product page
		if (parentElement == null) {
			parentElement = document.getElementById("step-one"); // Weborder step 1 and Favorite list
		}
		if (parentElement != null) {
			var inputs = parentElement.getElementsByTagName("input");
			var articleNumbers = [];
			for (var i = 0; i < inputs.length; i++) {
				if (inputs[i].type == "checkbox" && inputs[i].checked) {
					var articleNumber = inputs[i].nextSibling.value;
					articleNumbers[articleNumbers.length] = articleNumber;
				}
			}
		}
		return articleNumbers;
	}

	this.TabClick = function(id) {
		if (id != null) {
			//document.location.hash = id;
			ProductHandler.SetSelectedTab(id);
		}
	}

	this.SetSelectedTab = function(id) {
		m_CurrentTab = id;
		var tab = document.getElementById(id + "tab");
		var item = document.getElementById(id + "item");
		var tabs = tab.parentNode.getElementsByTagName("li");
		var items = item.parentNode.getElementsByTagName("div");
		for (var i = 0; i < tabs.length; i++) {
			if (tabs[i] == tab) {
				tabs[i].className = "selected";
			} else {
				tabs[i].className = "";
			}
		}

		for (var i = 0; i < items.length; i++) {
			if (items[i] == item) {
				if (items[i].className.indexOf(" selected") == -1)
					items[i].className += " selected";
			} else {
				items[i].className = items[i].className.replace(/ selected/, "")
			}
		}
		return true;
	}

	this.InitTabs = function() {
		/*Product page*/
		if (document.location.href.indexOf("productId=") > -1) {
			if (document.location.href.indexOf("#") == -1) {
				id = productPageDefaultTab;
				if (id == null || id.length == 0 || !ProductHandler.TabExists(id)) {
					id = ProductHandler.GetFirstTabId();
				}
				ProductHandler.TabClick(id);
			} else {
				var hash = document.location.hash;
				if (hash.length > 0) {
					if (hash.indexOf("#") == 0) {
						hash = hash.substr(1);
					}
					ProductHandler.TabClick(hash);
				}
			}
		} else {
			/*Group page*/
			if (document.location.href.indexOf("#") == -1) {
				id = "content";
				if (id == null || id.length == 0 || !ProductHandler.TabExists(id)) {
					id = ProductHandler.GetFirstTabId();
				}
				ProductHandler.TabClick(id);
			} else {
				var hash = document.location.hash;
				if (hash.length > 0) {
					if (hash.indexOf("#") == 0) {
						hash = hash.substr(1);
					}
					ProductHandler.TabClick(hash);
				}
			}
		}
	}

	this.TabExists = function(id) {
		return document.getElementById(id + "tab") != null;
	}

	this.GetFirstTabId = function() {
		var tabnavigationholder = document.getElementById("tabnavigation");
		if (tabnavigationholder == null) {
			return null;
		}
		var tabs = tabnavigationholder.getElementsByTagName("li");
		if (tabs.length > 0) {
			var tab = tabs[0];
			return tab.id.substr(0, tab.id.length - 3);
		} else {
			return null;
		}
	}

	this.InitFAQ = function() {
		var faqContainer = document.getElementById("faqitem");
		if (faqContainer != null) {
			var dds = faqContainer.getElementsByTagName("dd");
			var dts = faqContainer.getElementsByTagName("dt");
			for (var i = 0; i < dds.length; i++) {
				dds[i].style.display = "none";
				dts[i].className = "collapsed";
			}
		}
	}

	this.SetSelectedFAQItem = function(index) {
		var faqContainer = document.getElementById("faqitem");
		var dds = faqContainer.getElementsByTagName("dd");
		var dts = faqContainer.getElementsByTagName("dt");
		var ddToExpand = dds[index];
		var dtToExpand = dts[index];
		if (ddToExpand.style.display == "block") {
			ddToExpand.style.display = "none";
			dtToExpand.className = "collapsed";
			return;
		}
		for (var i = 0; i < dds.length; i++) {
			dds[i].style.display = "none";
			dts[i].className = "collapsed";
		}
		ddToExpand.style.display = "block";
		dtToExpand.className = "expanded";
	}

	this.SetTextboxFocus = function() {
		var cartTableBody = document.getElementById("cart-body");
		var addToCartCell = document.getElementById("add-to-cart-cell");
		if (cartTableBody != null && addToCartCell != null) {
			var inputs = addToCartCell.getElementsByTagName("input");
			if (inputs.length > 0) {
				inputs[0].focus();
			}
		}
	}
}

if(document.addEventListener)
	document.addEventListener("load", ProductHandler.Init, false);
if(window.addEventListener)
	window.addEventListener("load", ProductHandler.Init, false);
else if(window.attachEvent)
	window.attachEvent("onload", ProductHandler.Init);