﻿// Global Objects used to support common controls

// page events
var pageEvents = new Object();
pageEvents.onCartUpdate = new Event("onCartUpdate");

function Event(name) {
	this.name = name;
	this.observers = new Array();
	this.length = 0;
	
	this.raise = function(args) {
		for (var i = 0; i < this.observers.length; i++) {
			this.observers[i](args);
		}
	}
	
	this.register = function(handler) {
		this.length = this.observers.push(handler);		
	}
	
	this.unregister = function(handler) {
		for (var i = 0; i < this.observers.length; i++) {
			if (this.observers[i] == handler) {
				this.length = this.observers.splice(i, 1);
			}
		}
	}
}

function CartUpdateEventArgs(totalItems, totalAmount) {
	this.totalItems = totalItems;
	this.totalAmount = totalAmount;
}

// header navbar object
var headerNavBar = new Object();
headerNavBar.UpdateCartSummary = function(args) {
	document.getElementById("cartTotalItems").innerText = args.totalItems;
	document.getElementById("cartTotalAmount").innerText = args.totalAmount;
}
pageEvents.onCartUpdate.register(headerNavBar.UpdateCartSummary);


// global tabbed navbar object
var tabbedNavBar = new Object();
tabbedNavBar.nameRx = /([a-z]+_[a-z]+)(_hover)?(\.png)/i;
tabbedNavBar.onHover = function(isOn, img) {
	if (isOn) {
		img.src = img.src.replace(this.nameRx, '$1_hover$3');
	} else {
		img.src = img.src.replace(this.nameRx, '$1$3');
	}
}

// graphic button object
var graphicButton = new Object();
graphicButton.onHover = function(isOn, a) {
	if (isOn) {
		a.className = 'button-hover'; 
		a.childNodes[0].className = 'button-span-hover';
	} else {
		a.className = 'button-normal';
		a.childNodes[0].className = 'button-span-normal';
	}
}

// product list objects
var currentProductID;
var currentQtyID;
var currentButtonID;
var productList = new Object();
productList.GetCallbackArgs = function(productID, qtyID, buttonID) {
	currentProductID = productID;
	currentQtyID = qtyID;
	currentButtonID = buttonID;
	var mode = "+";
	var btn = document.getElementById(buttonID);
	if (btn.innerText.indexOf("-") > -1) {
		mode = "-";
		btn.innerHTML = btn.innerHTML.replace("- Remove", "Removing...");
	} else {
		btn.innerHTML = btn.innerHTML.replace("+ Add to Cart", "Adding...");
	}
	
	var qty = document.getElementById(qtyID).value;
	if (qty.length == 0) {
		if (mode == "+") {
			qty = "1";
		} else {
			qty = "0";
		}
	}
	return qty + "|" + productID + "|" + mode;
}

productList.UpdateUICallback = function(result, context) {
	var args = result.split("|");
	var itemCount = args[0];
	var totalCount = args[1];
	var cartTotal = args[2];
	var btn = document.getElementById(currentButtonID);
	if (btn.innerHTML.indexOf("Adding") > -1) {
		btn.innerHTML = btn.innerHTML.replace("Adding...", "- Remove");
	} else if (itemCount == 0) {
		btn.innerHTML = btn.innerHTML.replace("Removing...", "+ Add to Cart");
	}
	document.getElementById(currentQtyID).value = "";
	pageEvents.onCartUpdate.raise(new CartUpdateEventArgs(args[1], args[2]));
}

// product details object
var productDetail = new Object();
productDetail.GetCallbackArgs = function(productID, buttonID) {
	currentProductID = productID;
	currentButtonID = buttonID;
	var mode = "+";
	if (document.getElementById(buttonID).innerText.indexOf("-") > -1) {
		mode = "-";
	}
	return productID + "|" + mode;
}

productDetail.UpdateUICallback = function(result, context) {
	var args = result.split("|");
	var itemCount = args[0];
	var totalCount = args[1];
	var cartTotal = args[2];
	var btn = document.getElementById(currentButtonID);
	if (btn.innerHTML.indexOf("+") > -1) {
		btn.innerHTML = btn.innerHTML.replace("+ Add to Cart", "- Remove");
	} else if (itemCount == 0) {
		btn.innerHTML = btn.innerHTML.replace("- Remove", "+ Add to Cart");
	}
	pageEvents.onCartUpdate.raise(new CartUpdateEventArgs(args[1], args[2]));
}

// page content object
var pageContent = new Object();
pageContent.GenerateUrlName = function(srcObjId, destObjId, autoGenId, urlLabId, e) {
	var autoGen = document.getElementById(autoGenId);
	if (autoGen.checked) {
		var srcObj = document.getElementById(srcObjId);
		var destObj = document.getElementById(destObjId);
		var c = window.event ? String.fromCharCode(e.keyCode) : e.which;
		destObj.value = (srcObj.value + c).toLowerCase().replace(/[^a-z0-9]/g, '');
		this.SetNewUrl(urlLabId, destObj.value);
	}
}
pageContent.AutoGenerateUrlName = function(srcObjId, destObjId, autoGenId, urlLabId) {
	var autoGen = document.getElementById(autoGenId);
	if (autoGen.checked) {
		var srcObj = document.getElementById(srcObjId);
		var destObj = document.getElementById(destObjId);
		destObj.value = srcObj.value.toLowerCase().replace(/[^a-z0-9]/g, '');
		this.SetNewUrl(urlLabId, destObj.value);
	}
}
pageContent.GenerateUrl = function(objId, urlLabId, e) {
	var obj = document.getElementById(objId);
	var c = window.event ? String.fromCharCode(e.keyCode) : e.which;
	this.SetNewUrl(urlLabId, obj.value + c);
}
pageContent.RemoveInvalidChars = function(objId, urlLabId) {
	var obj = document.getElementById(objId);
	obj.value = obj.value.toLowerCase().replace(/[^a-z0-9]/g, '');
	this.SetNewUrl(urlLabId, obj.value);
}
pageContent.SetNewUrl = function(urlLabId, newValue) {
	var urlLab = document.getElementById(urlLabId);
	urlLab.innerText = urlLab.innerText.replace(/\/[a-z0-9]*\./, '/' + newValue.replace(/[^a-z0-9]/g, '') + '.');
}

var errorLog = new Object();
errorLog.ExpandCollapse = function(errorId) {
	var detail = document.getElementById("errorDetails_" + errorId);
	var img = document.getElementById("errPlusMinus_" + errorId);
	if (detail.style.display == "none") {
		detail.style.display = "block";
		img.src = "../ui/minus.png";
	} else {
		detail.style.display = "none";
		img.src = "../ui/plus.png";
	}
}