﻿// Setup global vars
var model;
var svcLocator;
var vwLocator;
var sortByCriteria = "";

var itemZoomProperties = {
	maskColor: "#FFFFFF",
	thumbnailHilightColor: "#66CCCC",
	thumbnailBorderColor: "#EAEAEA",
	thumbnailBackgroundColor: "#FFFFFF",
	backgroundColor: "#FFFFFF"
};

// Handler function for page left button
function handlePageLeft() {
	try {
		model.setPageNum(model.getPageNum() - 1);
		if (isAjaxEnabled() == false) {
			cookielessPageRefresh();
		}
		else {
			HistoryManager.getInstance().addHistoryItem(URLFactory.convertStateToHash(model.getStateSnapshot()));
		}
	}
	catch (err) {
		Debug.error(err);
	}
}

// Handler function for page right button
function handlePageRight() {
	try {
		model.setPageNum(model.getPageNum() + 1);
		if (isAjaxEnabled() == false) {
			cookielessPageRefresh();
		}
		else {
			HistoryManager.getInstance().addHistoryItem(URLFactory.convertStateToHash(model.getStateSnapshot()));
		}
	}
	catch (err) {
		Debug.error(err);
	}
}

// Handler function for skip 5 pages left button
function handleScrollLeft() {
	try {
		model.pageSetBackward();
		if (isAjaxEnabled() == false) {
			cookielessPageRefresh();
		}
		else {
			HistoryManager.getInstance().addHistoryItem(URLFactory.convertStateToHash(model.getStateSnapshot()));
		}
	}
	catch (err) {
		Debug.error(err);
	}
}

// Handler function for skip 5 pages right button
function handleScrollRight() {
	try {
		model.pageSetForward();
		if (isAjaxEnabled() == false) {
			cookielessPageRefresh();
		}
		else {
			HistoryManager.getInstance().addHistoryItem(URLFactory.convertStateToHash(model.getStateSnapshot()));
		}
	}
	catch (err) {
		Debug.error(err);
	}
}

// Handler function for show page button
function gotoPage(pageNum) {
	try {
		model.setPageNum(pageNum);
		if (isAjaxEnabled() == false) {
			cookielessPageRefresh();
		}
		else {
			HistoryManager.getInstance().addHistoryItem(URLFactory.convertStateToHash(model.getStateSnapshot()));
		}
	}
	catch (err) {
		Debug.error(err);
	}
}

// Handler function view all button
function handleViewProducts() {
	try {
		if (isAjaxEnabled() == false) {
			cookielessPageRefresh("viewPaged");
		}
		else {
			model.setCurrentProductGridName("viewPaged");
			HistoryManager.getInstance().addHistoryItem(URLFactory.convertStateToHash(model.getStateSnapshot()));
		}
	}
	catch (err) {
		Debug.error(err);
	}
}

function handleAddClick() {
	var q;
	var respCtx = {
		onSuccess: handleAddSuccess,
		onFailure: handleAddFault
	}
	var svc = svcLocator.getService("addToBagService");
	if (GROUP_TYPE == "Individual" && document.forms[0].ctlSkuIndividual$txtQuantity) {
		//individual sku
		q = document.forms[0].ctlSkuIndividual$txtQuantity.value;
		svc.processAddToBag(SKU, null, q, CATEGORY_ID, MASTER_CATEGORY_ID, ORDER_ORIGINATION, respCtx);
	} else if (GROUP_TYPE == "Type1" && document.forms[0].ctlSkuGroupType1$txtQuantity) {
		//group type 1
		q = document.forms[0].ctlSkuGroupType1$txtQuantity.value;
		svc.processAddToBag(SKU, SELECTED_SKU, q, CATEGORY_ID, MASTER_CATEGORY_ID, ORDER_ORIGINATION, respCtx);
	} else if (GROUP_TYPE == "Type2") {
		var qArray = new Array();
		for (var skuCnt = 0; skuCnt < SKU_ARRAY.length; skuCnt++) {
			qArray.push(document.forms[0]["ctlSkuGroupType2$rptItemList$ctl0" + skuCnt + "$txtQuantity"].value);
		}
		svc.processAddMultipleToBag(SKU, SKU_ARRAY, qArray, SELECTED_SKU, CATEGORY_ID, MASTER_CATEGORY_ID, ORDER_ORIGINATION, respCtx);
	} else if (GROUP_TYPE == "Type3") {
		q = document.forms[0].ctlSkuGroupType3$txtQuantity.value;
		svc.processAddToBag(SKU, null, q, CATEGORY_ID, MASTER_CATEGORY_ID, ORDER_ORIGINATION, respCtx);
	} else if (GROUP_TYPE == "Type7") {
		q = document.forms[0].ctlSkuGroupType7$txtQuantity.value;
		svc.processAddToBag(SKU, null, q, CATEGORY_ID, MASTER_CATEGORY_ID, ORDER_ORIGINATION, respCtx);
	}
	//document.getElementById("addMessage").innerHTML = "<img src='/Shared/Images/misc/progress.gif' alt='' /> Loading... ";
	//document.getElementById("addMessage").style.display = "block";
	omnitureTrackActionAdd("Item Page", "Add to ShoppingBag");
	GATrackItemActivity('Add to ShoppingBag');
}
function handleAddSuccess() {
	//	Debug.windowTrace("handleAddSuccess");
	//d. if error message is displayed, hide it
	var errorNode = document.getElementById("ajaxError");
	if (errorNode) {
		errorNode.innerHTML = "";
	}
	if (GROUP_TYPE == "Type2") {
		for (var addSkuCnt = 0; addSkuCnt < SKU_ARRAY.length; addSkuCnt++) {
			var errMsgNode = document.getElementById("errMsg" + addSkuCnt);
			if (errMsgNode) {
				errMsgNode.innerHTML = "";
				errMsgNode.parentNode.removeChild(errMsgNode);
			}
		}
	}
	//e. update Add to Cart button to Proceed to Checkout (assumes item page)
	document.getElementById("btnPurchase").style.display = "none";
	document.getElementById("btnGoToSB").style.display = "block";
	//f. add message below button
	document.getElementById("addMessage").innerHTML = LABEL_ADD_SUCCESS;
	document.getElementById("addMessage").style.display = "block";
}

function handleAddFault(argResult) {
	//	Debug.windowTrace("handleAddFault:"+typeof(argResult));
	var msg;
	if (typeof (argResult) == "string") {
		//some other error occurred
		msg = argResult;
	} else {
		//set the error message from the status key
		for (var skuCnt = 0; skuCnt < argResult.length; skuCnt++) {
			var currSku = argResult[skuCnt];
			msg = "";
			var currMsg = null;
			try { eval("currMsg = " + currSku.status + ";"); } catch (err) { }
			if (currMsg) {
				msg += currMsg;
			} else {
				msg += currSku.status;
			}
			currSku.errorString = msg;
			//			Debug.windowTrace(currSku.id+": Status = "+currSku.status+"; "+currSku.errorString);
		}
	}
	var errorDiv = document.getElementById("ajaxError");
	if (errorDiv) {
		if (typeof (argResult) != "String" && argResult.length > 1) {
			//			Debug.windowTrace("looping through all skus on page");
			for (var skuACnt = 0; skuACnt < SKU_ARRAY.length; skuACnt++) {
				var currASku = SKU_ARRAY[skuACnt];
				//get message for this sku
				var skuMsg;
				for (var innerCnt = 0; innerCnt < argResult.length; innerCnt++) {
					if (currASku == argResult[innerCnt].id) {
						skuMsg = argResult[innerCnt].errorString;
						break;
					}
				}
				//need to place error messages with each sku				
				var currView = document.getElementById("errMsg" + skuACnt);
				if (skuMsg != "PENDING") {
					//					Debug.windowTrace("skuMsg="+skuMsg);
					if (!currView) {
						var currView = document.createElement("div");
						currView.id = "errMsg" + skuACnt;
						currView.className = "groupType2Error";
						var prevSibling = document.getElementById("ctlSkuGroupType2_rptItemList_ctl0" + skuACnt + "_divGrpData");
						if (!prevSibling) {
							prevSibling = document.getElementById("ctlSkuGroupType2_rptItemList_ctl0" + skuACnt + "_txtQuantity").parentNode.parentNode;
						}
						var msgParent = prevSibling.parentNode;
						msgParent.insertBefore(currView, prevSibling.nextSibling);
					}
					currView.innerHTML = skuMsg;
				} else {
					if (currView) {
						currView.innerHTML = "";
						currView.parentNode.removeChild(currView);
					}

				}
			}
		} else {
			errorDiv.innerHTML = msg;
		}
	}
	//hide progress indicator
	var addMessageDiv = document.getElementById("addMessage");
	if (addMessageDiv) {
		addMessageDiv.innerHTML = "";
		addMessageDiv.style.display = "none";
	}
}

function handleSaveClick() {
	var svc = svcLocator.getService("addSavedItemService");
	if (GROUP_TYPE == "Individual") {
		svc.processSavedItem(SKU, null, CATEGORY_ID, MASTER_CATEGORY_ID);
	} else if (GROUP_TYPE == "Type1") {
		svc.processSavedItem(SKU, SELECTED_SKU, CATEGORY_ID, MASTER_CATEGORY_ID);
	} else if (GROUP_TYPE == "Type2") {
		svc.processMultipleSavedItems(SKU, SKU_ARRAY, SELECTED_SKU, CATEGORY_ID, MASTER_CATEGORY_ID);
	} else if (GROUP_TYPE == "Type3") {
		svc.processSavedItem(SKU, null, CATEGORY_ID, MASTER_CATEGORY_ID);
	} else if (GROUP_TYPE == "Type7") {
		svc.processSavedItem(SKU, null, CATEGORY_ID, MASTER_CATEGORY_ID);
	}
	omnitureTrackAction("Item Page", "Add to SavedItems");
	GATrackItemActivity('Add to SavedItems');
}
function handleGridAddItem(argIdToAdd) {
	var ajaxCtx = {
		onSuccess: handleGridAddSuccess,
		onFailure: handleGridAddFault
	}
	svcLocator.getService("addToBagService").processAddToBag(argIdToAdd, null, "1", CATEGORY_ID, MASTER_CATEGORY_ID, ORDER_ORIGINATION, ajaxCtx);
	omnitureTrackActionAdd("Item Page Thumbnails", "Add to ShoppingBag");
}
function handleGridAddSuccess() {
	//do nothing
}
function handleGridAddFault(argResult) {
	var skuId = argResult[0].id;
	var errorCode = argResult[0].status;
	generateEvent("onProductSelected", skuId, errorCode);
}

function handleGridSaveItem(argIdToSave) {
	svcLocator.getService("addSavedItemService").processSavedItem(argIdToSave, null, CATEGORY_ID, MASTER_CATEGORY_ID);
	omnitureTrackAction("Item Page Thumbnails", "Add to SavedItems");
}

function initAddButton() {
	//	Debug.windowTrace("initAddButton");
	if (isAjaxEnabled()) {
		var addLink = document.getElementById("btnPurchase");
		//some items do not have a btnPurchase
		if (addLink) {
			addLink.href = "javascript:handleAddClick()";
		}

		var saveLink = document.getElementById("ancSaveForLater");
		if (saveLink) {
			saveLink.href = "javascript:handleSaveClick()";
		}
	}
}



function cancelEvent(e) {
	if (!e) var e = window.event;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
}

function cookielessPageRefresh(selectedGrid) {
	var newSearchParamsString = URLFactory.convertStateToServiceHash(model.getStateSnapshot());
	var existingQueryString = window.location.search.split("?").join("");
	var currentGrid = model.getCurrentProductGridName();
	var showRelated = "false";
	var newQueryString = existingQueryString;

	var previousPageNum = URLFactory.extractQueryStringValue(existingQueryString, "pp");
	if (previousPageNum == "") {
		previousPageNum = "1";
	}

	var existingPageNum = String(model.getPageNum() + 1);
	if (model.getPageNum() < 0 || existingPageNum == null || typeof (existingPageNum) == "undefined") {
		existingPageNum = "1";
	}

	newSearchParamsString = URLFactory.updateHash(newSearchParamsString, "currentPage", previousPageNum);
	newQueryString = URLFactory.updateQuery(newQueryString, "pp", existingPageNum);

	//	window.location.href = "Item.aspx?" + newQueryString + sessionId + partnerId + showRelated;
	newQueryString = URLFactory.updateQuery(newQueryString, "search_params", newSearchParamsString);
	newQueryString = URLFactory.updateQuery(newQueryString, "related", showRelated);
	window.location.search = newQueryString;
}

var firstRefinement = true;

function trackFlashClick(screenName) {
	//Debug.windowTrace("trackFlashClick('"+screenName+"')");
	var refinementTitle = "Engagement Refinement | " + screenName;
	var browseURL = location.href;
	/*		var flashPageTitle = "Engagement Browse |";
	var browseURL = location.href;
	var stateArray = screenName.split("/");
	if (stateArray[1] != "0") {
	flashPageTitle += " Shape,";
	}
	if (stateArray[2] != "0") {
	flashPageTitle += " Setting,";
	}
	if (stateArray[3] != "0") {
	flashPageTitle += " Metal,";
	}
	if (stateArray[4] != "0") {
	flashPageTitle += " Legends,";
	}
	flashPageTitle += " Page " + stateArray[0];
	*/
	if (firstRefinement) {
		s.pageName = "Activity | Engagement Browse with refinements";
		s.prop7 = "Engagement Browse with refinements";
		s.t();
		firstRefinement = false;
		TrackEngagementBrowseWithRefinements();
	}
	setCookieValue("_UrlReferrer=", browseURL);
	//Debug.windowTrace("refinementTitle= --|"+refinementTitle+"|--");
	s.pageName = refinementTitle;
	s.t();
}

var errorHTML = "";
function getPageHeight() {
	return (document.getElementById('container').offsetHeight - 25);
}

function init() 
{
	try {
		// Suppress errors - only known workaround for Flash 9 ExternalInterface bug
		window.onerror = function(message, URL, line) {
			return true;
		};
		if (isMobile() == false) {
			var flexLocale = locale;
			var localXML = "";
			var dataXML = "/engagement/dataprovider.aspx";
			var swfName = "/Shared/Flash/Engagement/EngagementBrowse.swf";
			switch (flexLocale) {
				case "en-US":
					localXML = "/Shared/Flash/Engagement/localText.xml?v=1";
					break;
				case "ja-JP":
					localXML = "/Shared/Flash/Engagement/localText_ja-JP.xml?v=1";
					break;
				case "zh-CN":
					localXML = "/Shared/Flash/Engagement/localText_zh-CN.xml?v=1";
					break;
				default:
					localXML = "/Shared/Flash/Engagement/localText.xml?v=1";
					flexLocale = "en-US";
					break;
			}

			var currentState = ProductModel.getInstance().getStateSnapshot();
			var initFlashState = currentState.flash;
			var connectionName = FlashCommBridge.getInstance().requestConnectionName();

			var itemFlash = new FlashAPI(document.getElementById("engagementBrowseContent"));
			itemFlash.setAttribute("src", swfName);
			itemFlash.setAttribute("width", "960");
			itemFlash.setAttribute("height", "625");
			itemFlash.setAttribute("name", "engagementBrowse");
			itemFlash.setAttribute("id", "engagementBrowse");
			itemFlash.setAttribute("menu", "false");
			itemFlash.setAttribute("flashVars", "initState=" + initFlashState
										+ "&xmlFile=" + localXML
										+ "&xmlData=" + dataXML
										+ "&locale=" + flexLocale
										+ "&connectionName=" + connectionName);
			itemFlash.setAlternateRedirect("/Common/Errors/Flash.aspx");
			itemFlash.setFlashVersion(9, 0, 0);
			itemFlash.generateFlash();
			//Debug.windowTrace("init");
			window.engagementMovie = document.getElementById("engagementBrowse");
			document.getElementById("engagementBrowseContent").style.visibility = "visible";
			//HistoryManager.getInstance().initHistory(); //called in marketing.js
		}
		else 
		{
			document.getElementById("engagementBrowseContent").style.visibility = "visible";

			// Initialize Ajax services
			svcLocator = ServiceLocator.getInstance();
			svcLocator.registerService("getDataService", new GetEngagementCatalogService());
			//                    svcLocator.registerService("addToBagService", new AddShoppingBagItemService());
			//                    svcLocator.registerService("addSavedItemService", new AddSavedItemService());

			// Initialize product grid and product navigator components
			var prodGrid = new ProductGrid(document.getElementById("engagementItems"));
			var pageNav = new PageNavigator(document.getElementById("engagementPagination"));
			//			prodGrid.setToolTip(ToolTipAdvanced.getInstance());

			// Register some useful visual components for later access
			vwLocator = ViewLocator.getInstance();
			vwLocator.registerView("productsGridHolder", document.getElementById("engagementGrid"));
			vwLocator.registerView("productsGrid", prodGrid);
			vwLocator.registerView("navLinksHolder", document.getElementById("divEngagementLinks"));
			vwLocator.registerView("pageNavigator", pageNav);
			vwLocator.registerView("numItemsHolder", document.getElementById("numItemsText"));
			vwLocator.registerView("pageArrowLeft", document.getElementById("engagementArrowLft"));
			vwLocator.registerView("pageArrowRight", document.getElementById("engagementArrowRht"));
			vwLocator.registerView("pageOfPageBar", document.getElementById("pageOfPageBar"));
			vwLocator.registerView("pagination", document.getElementById("engagementPagination"));
			vwLocator.registerView("header", document.getElementById("engagementLinks"));

			initAddButton();

			vwLocator.getView("productsGridHolder").style.visibility = "visible";

			vwLocator.getView("pageArrowLeft").firstChild.href = "javascript:handlePageLeft();";
			vwLocator.getView("pageArrowRight").firstChild.href = "javascript:handlePageRight();";

			// Set up grid definition data for view all scenario
			var viewProductsGrid = new ProductGridVO();
			viewProductsGrid.gridType = "uniform";
			viewProductsGrid.gridName = "viewPaged";
			viewProductsGrid.numRows = 1;
			viewProductsGrid.pageSize = 4;
			viewProductsGrid.imageSize = "large";

			// Clear out whatever static HTML was already in place
			prodGrid.setGridType(viewProductsGrid.gridType);
			prodGrid.setNumColumns(4);
			prodGrid.setImageSize(210);
			prodGrid.useLabels = true;
			prodGrid.clickToOpenTooltip = false;
			prodGrid.tableCellSpacing = 0;
			prodGrid.labelClassName = "engagementThumbnailLabel";
			prodGrid.overLabelClassName = "engagementThumbnailLabelOver";
			prodGrid.setProducts(["", "", "", ""]);

			// Set up event handlers for all components
			var productGridHandler = new ProductGridEventHandler();
			subscribe(productGridHandler);

			var gridNavigationHandler = new GridNavigationEventHandler();
			subscribe(gridNavigationHandler);

			// Initialize model
			var hash = window.location.hash;
			var query = window.location.search.split("?").join("");
			var skuParam = URLFactory.extractQueryStringValue(query, "sku");
			var searchParams = URLFactory.extractQueryStringValue(query, "search_params");

			model = ProductModel.getInstance();
			model.setSKU(skuParam);
			model.addProductGrid(viewProductsGrid);

			if (hash != "" && isAjaxEnabled() == true) {
				model.setStateSnapshot(URLFactory.convertHashToState(hash));
			}
			else if (searchParams != "") {
				model.setStateSnapshot(URLFactory.convertHashToState(searchParams));
			}
			else {
				var stateSnapshot = model.getStateSnapshot();
				//			stateSnapshot.currentProductGrid = "viewPaged";
				model.setStateSnapshot(stateSnapshot);
			}

			HistoryManager.getInstance().overrideBaseState(URLFactory.convertStateToHash(model.getStateSnapshot()));

			// Initialize tooltip
			//			ToolTipAdvanced.getInstance().init("toolTipHolder");
			//			ToolTipAdvanced.getInstance().moveWithCursor = false;

			//			svcLocator.getService("getDataService").getData();
		}
	}
	catch (err)
	{
		Debug.error(err);
	}
}
BrowserUtils.addOnLoadHandler(init);