﻿// 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);
	}
}


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.processSavedEngagementItem(SELECTED_SKU, null, CATEGORY_ID, MASTER_CATEGORY_ID);	
	} else if (GROUP_TYPE == "Type1") {
		svc.processSavedEngagementItem(SKU, SELECTED_SKU, CATEGORY_ID, MASTER_CATEGORY_ID);	
	} else if (GROUP_TYPE == "Type2") {
		svc.processSavedEngagementItem(SELECTED_SKU, null, CATEGORY_ID, MASTER_CATEGORY_ID);	
	} else if (GROUP_TYPE == "Type3") {
		svc.processSavedEngagementItem(SELECTED_SKU, null, CATEGORY_ID, MASTER_CATEGORY_ID);	
	} else if (GROUP_TYPE == "Type7") {
		svc.processSavedEngagementItem(SELECTED_SKU, null, CATEGORY_ID, MASTER_CATEGORY_ID);	
	}
	GATrackActionEngagementAdd();
}
function initAddButton()
{
//	Debug.windowTrace("initAddButton");
	if (isAjaxEnabled()) {
		var saveLink = document.getElementById("lnkSaveForLater");
		if (saveLink) {
			saveLink.href="javascript:handleSaveClick()";
		}
	}
}	

function addItemZoom()
{
	var hasReqestedFlashVersion = true;
	var imageZoomData = "";

	var imageURL = "";
	var imageMaskX = "";
	var imageMaskY = "";
	var width = 0;
	var height = 0;
	var splitURL;
	var splitItem;

	var localeArray = locale.split("-");
	var trimmedLocale = "en";
	var labelFile = "";

	if (localeArray.length > 0)
	{
		if (localeArray[0].length == 2)
		{
			trimmedLocale = localeArray[0].toLowerCase();
		}
	}
	if ((trimmedLocale == "fr")|| (trimmedLocale == "es")|| (trimmedLocale == "it")|| (trimmedLocale == "de")) 
	{
		trimmedLocale = "en";
	}	

	// Used by the Flash Omniture implementation to grab info about the parent page
	var queryString = window.location.search.split("?").join("");
	var skuParam = URLFactory.extractQueryStringValue(queryString, "groupsku");
	var sku = "";
	var pageName = "";
	var pageURL = "";
	
	if (skuParam != "")
	{
		sku = skuParam;
	}

	pageName = s.pageName;
	pageURL = s.pageURL;
	
	if (document.forms[0].imageZoomData)
	{
		imageZoomData = document.forms[0].imageZoomData.value;
		imageZoomData += "&maskColor=" + itemZoomProperties.maskColor;
		imageZoomData += "&thumbnailHilightColor=" + itemZoomProperties.thumbnailHilightColor;
		imageZoomData += "&thumbnailBorderColor=" + itemZoomProperties.thumbnailBorderColor;
		imageZoomData += "&thumbnailBackgroundColor=" + itemZoomProperties.thumbnailBorderColor;
		imageZoomData += "&lang=" + trimmedLocale;
		imageZoomData += "&labelFile=itemWidgetLabels_" + trimmedLocale + ".xml?v=1.0";
		imageZoomData += "&xmlDir=/Shared/flash/&align=right&edgeDist=0";
		imageZoomData += "&s_pageName=" + escape(pageName);
		imageZoomData += "&s_pageURL=" + escape(pageURL);
		imageZoomData += "&s_sku=" + sku;
		imageZoomData += "&cid=288152";
		imageZoomData += "&mcat=148204";
		imageZoomData += "&autoHideIcons=false";
		imageZoomData += "&needWeddingBands=true";
		
		splitURL = imageZoomData.split("&");
		
		for (var i = 0; i < splitURL.length; i++)
		{
			splitItem = splitURL[i].split("=");
			switch(splitItem[0])
			{
				case "x0":
					imageMaskX = Number(splitItem[1]);
					break;
				case "y0":
					imageMaskY = Number(splitItem[1]);
					break;
				case "im0":
					imageURL = splitItem[1];
					break;
				case "w0":
					width = Number(splitItem[1]);
					break;
				case "h0":
					height = Number(splitItem[1]);
					break;
			}
		}

		if (imageMaskX == "")
		{
			imageMaskX = (width - 475) / 2;
		}
		
		if (imageMaskY == "")
		{
			imageMaskY = (height - 440) / 2;
		}
		
		var alternateHTML = '<div style="width:475px;height:440px;overflow:hidden;position:relative;"><img src="' + imageURL + '" alt="Necklace" title="" galleryimg="no" style="position:relative;left:' + (-imageMaskX) + 'px;top:' + (-imageMaskY) + 'px" width="' + width + '" height="' + height + '" /></div>';

		var itemFlash = new FlashAPI(vwLocator.getView("engagementImage"));
		itemFlash.setAttribute("src", "/Shared/flash/itemZoom.swf?v=5");
		itemFlash.setAttribute("width", "475");
		itemFlash.setAttribute("height", "440");
		itemFlash.setAttribute("bgcolor", itemZoomProperties.backgroundColor);
		itemFlash.setAttribute("flashVars", imageZoomData);
		itemFlash.setAttribute("name", "engagementZoom");
		itemFlash.setAlternateHTML(alternateHTML);
		itemFlash.setFlashVersion(8, 0, 0);
		itemFlash.generateFlash();
	}	
}

function addRelatedRings()
{
	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/EngagementThumbnail.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 alternateHTML = '<div style="width:475px;height:160px;overflow:hidden;position:relative;"><img src="" alt="Back to Search" title=""  /></div>';

			var relatedRingsFlash = new FlashAPI(vwLocator.getView("relatedRingsContent"));
			relatedRingsFlash.setAttribute("src", swfName);
			relatedRingsFlash.setAttribute("width", "960");
			relatedRingsFlash.setAttribute("height", "166");
			relatedRingsFlash.setAttribute("name", "relRings");
			relatedRingsFlash.setAttribute("id", "relRings");
			relatedRingsFlash.setAttribute("menu", "false");
			relatedRingsFlash.setAttribute("flashVars", "initState=" + initFlashState
        										+ "&xmlFile=" + localXML
        										+ "&xmlData=" + dataXML
        										+ "&locale=" + flexLocale
        										+ "&connectionName=" + connectionName);
			relatedRingsFlash.setAlternateHTML(alternateHTML);
			relatedRingsFlash.setFlashVersion(9, 0, 0);
			relatedRingsFlash.generateFlash();
			window.relRings = document.getElementById("relRings");
		}
		else
		{
			document.getElementById("divRelRingsWrapper").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 = "medium";

			// Clear out whatever static HTML was already in place
			prodGrid.setGridType(viewProductsGrid.gridType);
			prodGrid.setNumColumns(4);
			prodGrid.setImageSize(140);
			prodGrid.setLabelWidth(180);
			prodGrid.clickToOpenTooltip = false;
			prodGrid.tableCellSpacing = 0;
			prodGrid.useLabels = true;
			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()));
		}
	}
	catch (err)
	{
		Debug.error(err);
	}
}

// ----------------------------------------------
// Function init
// Author:		Nathan Derksen
// Description:	First function to be called after page load
// Inputs:		<none>
// Returns:		<nothing>
// ----------------------------------------------
function init()
{
	// Initialize Ajax services
	svcLocator = ServiceLocator.getInstance();
	svcLocator.registerService("addSavedItemService", new AddSavedItemService());
		
	vwLocator = ViewLocator.getInstance();
	vwLocator.registerView("engagementImage", document.getElementById("ringImage"));
	vwLocator.registerView("relatedRingsContent", document.getElementById("divRelRingsWrapper"));
		
	mozillaDragFix();

	addItemZoom();
	addRelatedRings();
	initAddButton();
}

function cancelEvent(e)
{
	if (!e) var e = window.event;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
}

function mozillaDragFix()
{
	// Disable bug where dragging out of the Flash component can hilight text on the page
	// and where a mouse up event outside the Flash component is not registered by the component
	var isSafari = (navigator.userAgent.indexOf("Safari") > -1);
	if (document.addEventListener)
	{
		if (isSafari == false)
		{
			vwLocator.getView("engagementImage").onmousedown = function() 
			{
				return false;
			};
			vwLocator.getView("engagementImage").addEventListener("mouseup", cancelEvent, false);
			document.onmouseup = function() 
			{
				// Call an AS function within the Flash component to trigger a reset
				var flashElements = document.getElementsByName("engagementZoom");
				if (flashElements.length > 0)
				{
					flashElements[flashElements.length-1].sendClick();
				}
			};
		}
	}
}

function moreDetailsRedirect(newUrl)
{
	var serverName = window.location.host;
	if (areCookiesEnabled() == true)
	{
		setCookieValue("_UrlReferrer", "http://" + serverName + "/Shopping/CategoryBrowse.aspx?cid=288152&mcat=148204");
	}

	window.location.href = newUrl;
}

//window.onload = init;
BrowserUtils.addOnLoadHandler(init);

/*Begin - Engagement Item Navigation*/
function getRingTitle(id) {
    if(document.all){idText=id.innerText}
    else{idText=id.textContent}
    return idText;
}
var ringdivX=0;
function displayTitleOn(divID, txt){
    getLeftPosition(divID);
    textContent = document.getElementById('ringTitle');
    textContent.firstChild.data=txt;
    w=textContent.offsetWidth;
    w = w/2;
    if (document.all) {ringdivX += 35;}// IE and Opera
    else {ringdivX += 25;} // All other browsers
    ringdivX -= w;
    textContent.style.left = ringdivX + "px"; 
}
function getLeftPosition(obj)
    {
    if ('string' == typeof obj)
    obj = document.getElementById(obj);
    ringdivX = 0;
    while (obj != null)
    {
    ringdivX += obj.offsetLeft;
    obj = obj.offsetParent;
    }
    return ringdivX;
}
function displayTitleOff(){
    var textContent = document.getElementById('ringTitle');
    textContent.firstChild.data="";
}
/*End - Engagement Item Navigation*/