﻿// You have to set the status element on the page
//
// ajaxBasket.setStatusElement($get(...));


Type.registerNamespace('Shop1');

Shop1.AjaxBasket = function() {
	// this is the target for the add to basket button.
	//this.element = null;
	// this is the target for the basket overview  (see master page)
	this.targetElement = null;
	// this is the target for the complete basket (see basket web page)
	this.targetTableElement = null;
	
	this.load();
}

Shop1.AjaxBasket.prototype = {
	
	initialize : function() {
	},

	dispose : function() {
	},
	
	
	setTableElement : function(targetTableElement) {
		this.targetTableElement = targetTableElement;
	},

	load : function() {
//		var s = "";
//		s += "<table style='width:100%;text-align:right;'><tr><td width='100%'>";
//		s += "<span		class='Selection' onclick='ajaxBasket.addItem();'>zum Warenkorb&nbsp;<img src='shopservices/images/cart.gif' />&nbsp;<input type='button' class='subMit' value='hinzuf&uuml;gen'/></span>";
//		s += "</td></tr></table>";
//		
//		this.element.innerHTML = s;
		this.targetElement = $get('BasketInfoTarget');
		
	},
	
	// add current item to the basket. goto to basket page.
	addItem : function() {
		PageMethods.AddItem(_handleCallback, _handleFailed, "GotoBasket");
	},
	
	// remove item from basket. do refresh for basket and overview
	removeItem : function(instanceID) {
		PageMethods.RemoveItem(instanceID, _handleCallback, _handleFailed, "Refresh");
	},

	changeQuantity : function(instanceID, newQuantity) {
		if (newQuantity > 1000)
			newQuantity = 1000;
		if (newQuantity < 0)
			newQuantity = 1;
		PageMethods.UpdateQuantity(instanceID, newQuantity, _handleCallback, _handleFailed, "Refresh");
	},
	
	// jump to detail page (variant or article) for this basket item. 
	gotoDetailPage : function(instanceID, isAddOn) {
		PageMethods.LoadCurrent(instanceID, _handleCallback, _handleFailed, "ShowDetail");
	},
	
	refreshBasket : function() {
		PageMethods.GetBasket(_handleCallback, _handleFailed, "Refresh");
	},

	// refresh overview 
	refreshBasketOverview : function() {
		PageMethods.GetOverview(_handleCallback, _handleFailed, "RefreshOverview");
	},
	
	// refresh basket
	_updatePageElementBasket : function(basketResultContainer) {
		if (this.targetTableElement != null && basketResultContainer != null) {
			var s = "";
			s += "<table class='basket'>";
			s += "<col class='detailColumn'/><col class='deleteColumn'/><col class='instrumentColumn'/><col class='unitPriceColumn'/><col class='quantityColumn'/><col class='updateButtonColumn'/><col class='totalPriceColumn' />";
			s += "<tr class='basketheader'>";
			s += "<td></td><td></td><td>" + AjaxResources.Basket.InstrumentColumnCaption + "</td><td style='text-align:right'>" + AjaxResources.Basket.UnitPriceColumnCaption + "</td><td style='text-align:right'>" + AjaxResources.Basket.QuantityColumnCaption + "</td><td /><td>" + AjaxResources.Basket.TotalAmountColumnCaption + "</td>";
			s += "</tr>";

			// empty row
			s += "<tr class='emptybasketrow'><td colspan='7'>&nbsp</td></tr>";

			if (basketResultContainer.Items.length > 0) {
				for (var i = 0; i < basketResultContainer.Items.length; i++) {
					var item = basketResultContainer.Items[i];
					s += "<tr class='basketrow'>";
					s += "<td colspan='4' class='Selection' onclick=\"ajaxBasket.gotoDetailPage('" + item.InstanceID + "', " + item.IsAddOn + ");\">" + item.InstrumentName + "</td><td colspan='3'></td>";
					s += "</tr>";
					s += "<tr class='basketrow'>";
					// Detailbutton
					s += "<td><img class='Selection' src='ShopServices/images/b-edit.gif' onclick=\"ajaxBasket.gotoDetailPage('" + item.InstanceID + "', " + item.IsAddOn + ");\"/></td>";
					// Deletebutton
					s += "<td><img class='Selection' src='ShopServices/images/b-delete.gif' onclick=\"ajaxBasket.removeItem('" + item.InstanceID + "');\"/></td>";
					// Gerätebezeichnung
					s += "<td class='Selection' onclick=\"ajaxBasket.gotoDetailPage('" + item.InstanceID + "', " + item.IsAddOn + ");\">" + item.OrderNumber + "</td>";
					// Einzelpreis
					s += "<td style='text-align:right'>" + formatPrice(item.TotalAmount/item.Quantity) + "</td>";
					// Anzahl
					s += "<td style='text-align:right'><input id='input_{instanceID}' class='BasketInput' size='4' value='" + item.Quantity + "' onkeyup='checkQuantity(\"{instanceID}\");' /></td>";
					s += "<td><input type='button' id='button_{instanceID}' src='shopservices/images/accept.gif' onclick='changeQuantity(\"{instanceID}\");' class='subMit' value='" + AjaxResources.Basket.AcceptButtonText + "'/></td>";

					// Gesamtpreis
					s += "<td style='text-align:right'>" + formatPrice(item.TotalAmount) + "</td>";
					s += "</tr>";
				
					// empty row
					s += "<tr class='emptybasketrow'><td colspan='7'>&nbsp</td></tr>";
					s = s.replace(/{InstanceID}/gi, item.InstanceID);
				}
				// Porto und Verpackung
				s += "<tr class='basketrow'>";
				s += "<td></td><td></td><td colspan='3' >" + AjaxResources.Basket.ShippingAndPackingCosts + "</td><td colspan='3' style='text-align:right'>" + formatPrice(basketResultContainer.PackingCosts) + "</td>";
				s += "</tr>";

				// Summe
				s += "<tr class='basketsum'>";
				s += "<td /><td /><td /><td /><td colspan='2' class='basketsumcell'>" + AjaxResources.Basket.TotalNetAmountCaption + "</td><td>" + formatPrice(basketResultContainer.TotalNetAmount) + "</td>";
				s += "</tr>";
				s += "<tr class='basketsum'>";
				s += "<td /><td /><td /><td /><td colspan='2' class='basketsumcell'>" + AjaxResources.Basket.SalesTaxCaption + " " + formatPercent(basketResultContainer.TaxRate) + "</td><td>" + formatPrice(basketResultContainer.TotalTaxAmount) + "</td>";
				s += "</tr>";
				s += "<tr class='basketsum'>";
				s += "<td /><td /><td /><td /><td colspan='2' class='basketsumcell'>" + AjaxResources.Basket.TotalGrossAmountCaption + "</td><td>" + formatPrice(basketResultContainer.TotalGrossAmount) + "</td>";
				s += "</tr>";
			} else {
				s += "<tr class='basketrow'>";
				s += "<td></td><td></td><td colspan='3' >" + AjaxResources.Basket.NoSelection + "</td><td colspan='3' style='text-align:right'></td>";
				s += "</tr>";
			}		
			s += "</table><br/>";

			this.targetTableElement.innerHTML = s;
		}
	},
			
	_updatePageElementOverview : function(productOverview) {
		var e = $get("BasketOverviewTarget");
		if (e != null) {
			if (productOverview == null) {
				PageMethods.GetOverview(_handleCallback, _handleFailed, "RefreshOverview");
			}
			else {
			
				var s = "";
				s += "<table class='basketoverview'>";
				var s_article = AjaxResources.BasketOverview.OneArticle;
				if (productOverview.Quantity > 1)
					s_article = AjaxResources.BasketOverview.Articles;
				if (productOverview.Quantity > 0)
					s += "<tr class='basketoverviewrow'><td>" + productOverview.Quantity + " " + s_article + "</td><td>" + formatPrice(productOverview.Amount) + "</td></tr>";
				else
					s += "<tr class='basketoverviewrow'><td colspan='2'>" + AjaxResources.BasketOverview.NoSelection + "</td></tr>";
				
				s += "</table>";
				
				e.innerHTML = s;
			}
		}
	}
	
}


var ajaxBasket = new Shop1.AjaxBasket;
// Summary:
//	handle all callbacks. use context to distinguish next action.
function _handleCallback(result, context, caller) {
	switch (context) {
		case "Refresh":
			ajaxBasket._updatePageElementBasket(result);	
			ajaxBasket.refreshBasketOverview();
			break;
		case "GotoBasket":
			window.location.href = "Basket.aspx";
			break;
		case "RefreshOverview":
			ajaxBasket._updatePageElementOverview(result);
			break;
		case "ShowDetail":
			window.location.href = result;
		default:
			Sys.Debug.trace("Unknown");
	}
}

function _handleFailed(error) {
	alert(error.get_message());
}

function changeQuantity(instanceID) {
	var inputBox = $get('input_' + instanceID);
	ajaxBasket.changeQuantity(instanceID, inputBox.value);	
}

// checks the user input quantity. a valid value is 0 (remove) to 1000
function checkQuantity(instanceID) {
	var inputBox = $get('input_' + instanceID);
	var button = $get('button_' + instanceID);
	
	var valid = false;
	
	if (inputBox.value == "0") {
		valid = true;
	}
	else {
		var value = parseInt(inputBox.value);
		if (value > 0 && value < 1000)
			valid = true;
	}
	
	if (valid) {
		//Sys.UI.DomElement.toggleCssClass(inputBox, "BasketInputValid");
		button.disabled = false;
		if (window.event.keyCode == 13)
			changeQuantity(instanceID);
	}
	else {
		//Sys.UI.DomElement.toggleCssClass(inputBox, "BasketInputInvalid");
		button.disabled = true;
	}
}


// notify script manager for script end 
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
