// 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);
	}
}

// Handler function for view less button
function handleViewRelated()
{
	try
	{
		if (isAjaxEnabled() == false)
		{
			cookielessPageRefresh("viewRelated");
		}
		else
		{
			model.setCurrentProductGridName("viewRelated");
			HistoryManager.getInstance().addHistoryItem(URLFactory.convertStateToHash(model.getStateSnapshot()));
		}

		// Omniture
		var query = window.location.search.split("?").join("");
		var skuParam = URLFactory.extractQueryStringValue(query, "sku");
		s.events = "event5";
		s.eVar7 = "Rel-" + skuParam;
		s.pageName = "Activity | View Related Items";
		void(s.t());
		GATrackItemActivity('View Related Items');
	}
	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 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, "sku");
	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 += "&backgroundColor=" + itemZoomProperties.backgroundColor;
		imageZoomData += "&s_pageName=" + escape(pageName);
		imageZoomData += "&s_pageURL=" + escape(pageURL);
		imageZoomData += "&s_sku=" + sku;
		imageZoomData += "&lang=" + trimmedLocale;
		imageZoomData += "&labelFile=itemWidgetLabels2_" + trimmedLocale + ".xml?v=1.0";
		imageZoomData += "&xmlDir=/Shared/Flash/";
		imageZoomData += "&align=left";
		imageZoomData += "&showZoomIcon=true";

		if (locale.toLowerCase() == "en-us-ird")
		{
			imageZoomData += "&zoomIconTextColor=#666666";
		}
		
		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(document.getElementById("itemImage"));
		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", "itemZoom");
		itemFlash.setAlternateHTML(alternateHTML);
		itemFlash.setFlashVersion(8, 0, 0);
		itemFlash.generateFlash();
	}	
}

// ----------------------------------------------
// Function init
// Author:		Nathan Derksen
// Description:	First function to be called after page load
// Inputs:		<none>
// Returns:		<nothing>
// ----------------------------------------------
function init()
{
	try
	{
		// Suppress errors - only known workaround for Flash 9 ExternalInterface bug
		window.onerror = function(message, URL, line)
		{
			return true;
		};
	
		// Initialize Ajax services
		svcLocator = ServiceLocator.getInstance();
		svcLocator.registerService("getDataService", new GetProductsService());
		svcLocator.registerService("addToBagService", new AddShoppingBagItemService());
		svcLocator.registerService("addSavedItemService", new AddSavedItemService());

		// Initialize product grid and product navigator components
		var prodGrid = new ProductGrid(document.getElementById("divRelItems"));
		var pageNav = new PageNavigator(document.getElementById("relItemPagination"));
		prodGrid.setToolTip(ToolTipAdvanced.getInstance());
		
		// Register some useful visual components for later access
		vwLocator = ViewLocator.getInstance();
		vwLocator.registerView("productsGridHolder", document.getElementById("relItemsGrid"));
		vwLocator.registerView("productsGrid", prodGrid);
		vwLocator.registerView("navLinksHolder", document.getElementById("divRelItemLinks"));
		vwLocator.registerView("pageNavigator", pageNav);
		vwLocator.registerView("pageNumHolder", document.getElementById("pageOfPageText"));
		vwLocator.registerView("viewProductsButton", document.getElementById("viewBrowseResultsLink"));
		vwLocator.registerView("viewRelatedButton", document.getElementById("viewRelItemsLink"));
		vwLocator.registerView("pageArrowLeft", document.getElementById("relItemsArrowLft"));
		vwLocator.registerView("pageArrowRight", document.getElementById("relItemsArrowRht"));
		vwLocator.registerView("pageOfPageBar", document.getElementById("pageOfPageBar"));
		vwLocator.registerView("pagination", document.getElementById("relItemPagination"));
		vwLocator.registerView("itemImage", document.getElementById("itemImage"));
		
		addItemZoom();
		mozillaDragFix();
		initAddButton();
		
		vwLocator.getView("productsGridHolder").style.visibility = "visible";
		
		vwLocator.getView("pageArrowLeft").firstChild.href = "javascript:handlePageLeft();";
		vwLocator.getView("pageArrowRight").firstChild.href = "javascript:handlePageRight();";
		
		if (vwLocator.getView("viewProductsButton") != null && vwLocator.getView("viewProductsButton").innerHTML != "&nbsp;")
		{
			if (typeof(vwLocator.getView("viewProductsButton").firstChild.href) != "undefined")
			{
				vwLocator.getView("viewProductsButton").firstChild.href = "javascript:handleViewProducts();";
			}
		}
		if (vwLocator.getView("viewRelatedButton") != null && vwLocator.getView("viewRelatedButton").innerHTML != "&nbsp;")
		{
			if (typeof(vwLocator.getView("viewRelatedButton").firstChild.href) != "undefined")
			{
				vwLocator.getView("viewRelatedButton").firstChild.href = "javascript:handleViewRelated();";
			}
		}

		// Set up grid definition data for view all scenario
		var viewProductsGrid = new ProductGridVO();
		viewProductsGrid.gridType = "uniform";
		viewProductsGrid.gridName = "viewPaged";
		viewProductsGrid.numRows = 1;
		viewProductsGrid.pageSize = 6;

		// Set up grid definition data for view less scenario
		var viewRelatedGrid = new ProductGridVO();
		viewRelatedGrid.gridType = "uniform";
		viewRelatedGrid.gridName = "viewRelated";
		viewRelatedGrid.numRows = 1;
		viewRelatedGrid.pageSize = 6;
		
		// Clear out whatever static HTML was already in place
		prodGrid.setGridType(viewProductsGrid.gridType);
		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");
		var relatedParam = URLFactory.extractQueryStringValue(query, "related");

		model = ProductModel.getInstance();
		model.setSKU(skuParam);
		model.addProductGrid(viewProductsGrid);
		model.addProductGrid(viewRelatedGrid);
		
		if (hash != "" && isAjaxEnabled() == true)
		{
			model.setStateSnapshot(URLFactory.convertHashToState(hash));
		}
		else if (searchParams != "")
		{
			model.setStateSnapshot(URLFactory.convertHashToState(searchParams));
			if (relatedParam == "true")
			{
				model.setCurrentProductGridName("viewRelated");
				document.getElementById('viewBrowseResultsLink').innerHTML = LABEL_RELATED_ITEMS;
				document.getElementById('viewRelItemsLink').innerHTML = LABEL_RELATED_ITEMS;
			}
			var relatedItemSku = URLFactory.extractValue(searchParams, "relatedItemSku");
			if ((relatedItemSku.length > 0 )) {
				document.getElementById('viewBrowseResultsLink').innerHTML = LABEL_RELATED_ITEMS;
				document.getElementById('viewRelItemsLink').innerHTML = LABEL_RELATED_ITEMS;
			}
		}
		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;
		
		if (isAjaxEnabled() == false)
		{
			svcLocator.getService("getDataService").getJSONData();
		}
	}
	catch (err)
	{
		Debug.error(err);
	}
}

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("itemImage").onmousedown = function() 
			{
				return false;
			};
			vwLocator.getView("itemImage").addEventListener("mouseup", cancelEvent, false);
			document.onmouseup = function() 
			{
				// Call an AS function within the Flash component to trigger a reset
				var flashElements = document.getElementsByName("itemZoom");
				if (flashElements.length > 0)
				{
					if (flashElements[flashElements.length-1].sendClick)
					{
						flashElements[flashElements.length-1].sendClick();
					}
				}
			};
		}
	}
}

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";
	}

	if (typeof(selectedGrid) == "undefined")
	{
		// A page refresh is being performed, but it's not a grid change
		if (currentGrid == "viewRelated")
		{
			showRelated = "true";
		}
	}
	else if (selectedGrid == "viewRelated")
	{
		showRelated = "true";
		newSearchParamsString = URLFactory.updateHash(newSearchParamsString, "currentPage", previousPageNum);
		newQueryString = URLFactory.updateQuery(newQueryString, "pp", existingPageNum);
	}
	else if (selectedGrid == "viewPaged")
	{
		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;
}

BrowserUtils.addOnLoadHandler(init);