// global variables
var overButton = false;
var buttonTimer = null;
var curStyleNum = null;
var curCounter = 0
var curSize = null;
var curURL = null;
var ie = (navigator.userAgent.indexOf("MSIE") > 0) ? true:false;
var ie6 = (navigator.userAgent.indexOf("MSIE 6.") > 0) ? true:false;
var processing = false;
var currentItemCount = 0;
var reviewsTimer = null;

/*
	functions to dynamically center snapshot 
*/

// return browser width
function getBrowserWidth() {
	var val = 0;
	if (window.innerWidth) {
		val = window.innerWidth;
	} else if ((document.documentElement) && (document.documentElement.clientWidth != 0)) {
		val = document.documentElement.clientWidth;
	} else if (document.body) {
		val = document.body.clientWidth;
	}	
	return val;
};

// return browser height
function getBrowserHeight() {
	var val = 0;
	if (window.innerHeight) {
		val = window.innerHeight;
	} else if ((document.documentElement) && (document.documentElement.clientWidth != 0)) {
		val = document.documentElement.clientHeight;
	} else if (document.body) {
		val = document.body.clientHeight;
	}	
	return val;
};

// get vertical scolling offset
function getOffsetY() {
	var offset = 0;
	if ((document.documentElement) && (document.documentElement.scrollTop)) {
		offset = document.documentElement.scrollTop;
	} else if ((document.body) && (document.body.scrollTop)) {
		offset = document.body.scrollTop;
	} else if (window.pageYOffset) {
		offset = window.pageYOffset;
	}
	return offset;
}

/*
	snapshot image functions
*/

// reset images
function clearImages() {
	// clear swatches
	if ($("swatches")) {
		$("swatches").innerHTML = "";
	}
	// clear main detail image
	if ($("detailMain")) {
		$("detailMain").src = "";
	}
	// clear thumbnails
	if ($("thumbnails")) {
		$("thumbnails").innerHTML = "";
	}
}

// preload images
var allMyImages = null;
function preloadProductImages(productID) {
	if (document.images) {
        allMyImages = new Array('b','d','e','f','g');
		var imagePath = "http://images.urbanoutfitters.com/is/image/UrbanOutfitters/";
        var imageExtensions = new Array("?$richthumb$","?$richdetail$");       
        for (var i=0; i<allMyImages.length; i++) {
            allMyImages[allMyImages[i]] = new Array("thumb","main");
            allMyImages[allMyImages[i]]["thumb"] = new Image();
            allMyImages[allMyImages[i]]["thumb"].src = imagePath + productID + "_" + allMyImages[i] + imageExtensions[0];
			allMyImages[allMyImages[i]]["main"] = new Image();
            allMyImages[allMyImages[i]]["main"].src = imagePath + productID + "_" + allMyImages[i] + imageExtensions[1];
        }
    }
}

// create thumbnails
function createThumbnails(colorName) {
	var thumbnails = $("thumbnails");
	var content = "";
	if (thumbnails) {
		thumbnails.innerHTML = "";
		var colors = new Array('b','d','e','f','g');
		for (var j=0; j<colors.length; j++) {
			var cur = colors[j];
			var selected = "";
			if (j == 0) {
				selected = ' class="selected"';
			}
			content += '<li class="thumb"><a href="javascript:changeThumbNail(\'' + cur + '\')"><img src="' + allMyImages[cur]["thumb"].src + '" alt="' + colorName + '"' + selected + '/></a></li>';        	
		}
		thumbnails.innerHTML = content;
	}
}

// create swatch 
function createSwatch(styleNum, colorCode, colorName, selected) {
	var swatchPath = "/urban/images/swatches/";
	var swatchSuffix = "_s.png";
	var swatch = "";
	swatch += '<a href="javascript:changeSwatch(\'' + colorCode + '\')">';
	swatch += '<img id="' + styleNum + 'swatches" src="' + swatchPath + styleNum + '_' + colorCode + swatchSuffix + '" alt="' + colorName + '"' + selected + '"/>'; 
	swatch += '</a>';
	return swatch;
}

// change swatch images
function changeSwatch(colorID) {
	// change detailMain
	var detailMain = $("detailMain");
	if (detailMain) {
		var productID = detailMain.src.substring(detailMain.src.lastIndexOf("/")+1, detailMain.src.indexOf("_"));
		productID += ("_" + colorID);
		preloadProductImages(productID);
		detailMain.src = allMyImages['b']["main"].src;
		// update product detail link
		updateProductDetailLink(colorID);
	}
	// change thumbnails
	var thumbNails = $$("#thumbnails img");
	if (thumbNails != null) {
		var counter = 0;
		thumbNails.each(function(t) {
			var index = allMyImages[counter];
			t.src = allMyImages[index]["thumb"].src;
			// update thumbnail selected
			changeThumbNail('b');
			if (t.src.indexOf("_b?") > 0) {
				t.addClassName("selected");
				t.up().blur();
			}
			counter++;
		});
	}
	// update swatch selected
	var swatches = $$("#swatches img");
	if (swatches) {
		swatches.each(function(s) {
			if (s.hasClassName("selected")) {
				s.removeClassName("selected");	
			} else if (s.src.indexOf(colorID) > 0) {
				s.addClassName("selected");
				s.up().blur();
			}
		});
	}
	// change swatch value in drop down menu
	updateSnapColorMenu(colorID);
	// update size drop down menu options
	updateSnapSizeMenu();
}

// change thumbnails
function changeThumbNail(thumbID) {
	// change detailMain
	var detailMain = $("detailMain");
	if (detailMain) {
		detailMain.src = allMyImages[thumbID]["main"].src;
	}
	// change thumbnail classes
	var thumbNails = $$("#thumbnails img");
	if (thumbNails) {
		thumbNails.each(function(t) {
			// update thumbnail class
			if (t.hasClassName("selected")) {
				t.removeClassName("selected");	
			} else if (t.src.indexOf("_"+thumbID+"?") > 0) {
				t.addClassName("selected");
				t.up().blur();
			}
		});
	}
}

// display main image + thumbnails + swatches
function addProductImages(styleNum, counter) {
	var prodArr = eval("uo"+styleNum+counter);
	var total = prodArr["colors"].length;
	var swatches = $("swatches");
	var swatchesLabel = $("swatchesLabel");	
	// reset swatches
	if (swatches) {
		swatches.innerHTML = "";
	}
	// reset swatches label
	if (swatchesLabel) {
		swatchesLabel.style.display = "none";
	}
	// get index of selected color
	var selectedIndex = getSelectedIndex(prodArr);
	// loop through all colors for a given product				
	for (var i=0; i<total; i++) {
		var selected = "";
		var cur = prodArr["colors"][i];
		// add option to drop down menu
		addSelectOptions(cur[0], cur[1], $("snapColors"), false);
		// set-up initial detail main image and thumbnails
		if (i == selectedIndex) {
			// preload product images
			preloadProductImages(styleNum+'_'+cur[0]);
			// set selected index for color drop down
			$("snapColors").selectedIndex = i;
			// set detail main image
			$("detailMain").src = allMyImages["b"]["main"].src;
			$("detailMain").alt = cur[1];
			// create thumbnails
			createThumbnails(cur[1]);
			// if more than one color way, display swatches
			if ((total > 1) && (swatches)) {
				// display swatches
				swatchesLabel.style.display = "block";
				selected = ' class="selected"';
				swatches.innerHTML += createSwatch(styleNum, cur[0], cur[1], selected);
			}		
		} else if (swatches) {
			// display swatches
			swatches.innerHTML += createSwatch(styleNum, cur[0], cur[1], selected);
		}
	}
}

/*
	color + size drop down menu functions
*/

// update product detail page link based on selected color */
function updateProductDetailLink(colorValue) {
	if ($("viewFullDetails")) {
		// break down url and replace color value
		var detailsURL = $("viewFullDetails").href;
		var colorParam = "&color=";
		var part1 = detailsURL.substring(0, (detailsURL.indexOf(colorParam)+colorParam.length)); 
		var part2 = detailsURL.substring(detailsURL.indexOf("&pushId="));
		$("viewFullDetails").href = part1 + colorValue + part2;
	}
}

// loop through array and return index of selected swatch color
function getSelectedIndex(obj) {
	var total = obj["colors"].length;
	var selectedIndex = 0;
	for (var i=0; i<total; i++) {
		var cur = obj["colors"][i];
		if (cur[0] == obj["selectedColor"]) {
			selectedIndex = i;
			break;
		}	
	}
	return selectedIndex;
}

// populate size drop down menu based on color id
function addProductSizes() {
	var prodArr = eval("uo"+curStyleNum+curCounter);
	var total = prodArr["skus"].length;
	var color = "";
	if ($("snapColors")) {
		color = $("snapColors").value;
	}
	if (color.length == 0) {
		color = prodArr["selectedColor"];
	}
	// loop through all sizes for a given product				
	for (var i=0; i<total; i++) {
		var cur = prodArr["skus"][i][1];
		var selected = false;
		if (cur == curSize) {
			selected = true;
		}
		// verify size option is available for color code
		if (prodArr["skus"][i][2] == color) {
			// add option to drop down menu
			addSelectOptions(cur, cur, $("snapSizes"), selected);
		}
	}
}

// add options to drop down menu
function addSelectOptions(val, txt, menu, selected) {
	if (menu) {
	  	var opt = document.createElement("option");
	    /*
	    // verify that colorName is not too long
	    var maxChars = 12;
	    if (colorName.length > maxChars) {
	    	// if too long, truncate name
	    	colorName = colorName.substring(0,maxChars) + "...";
	    }
	    */
		opt.text = txt;
	    opt.value = val;
	    if (selected) {
	    	opt.setAttribute('selected','selected');
	    }
	    try {
	    	menu.add(opt, null); // standards compliant; doesn't work in IE
	    } catch(e) {
	    	menu.add(opt); // IE only
	    }	  
	}	    
}

// reset color options for drop down
function resetSelectOptions(menu) {
	if (menu) {
		while(menu.length != 0) {
			menu.options[menu.length-1] = null;
		}
	}
}

// change selected index value in drop down menu
function updateSnapColorMenu(colorID) {
	var snapColor = $("snapColors");
	if (snapColor) {
		for (var i=0; i<snapColor.length; i++) {
			var cur = snapColor.options[i];
			if (cur.value == colorID) {
				snapColor.selectedIndex = i;	
			}
		}
	}
}

// update size menu based on available color way
function updateSnapSizeMenu() {
	// get and set selected size
	if ($("snapSizes")) {
		curSize = $("snapSizes").value;
	}
	// clear current size menu options
	resetSelectOptions($("snapSizes"));
	// add size options for color way
	addProductSizes();
}

/*
	main functions to show and hide snapshot
*/

// add product title, price, description, sku, colors
function addProductCopy(styleNum, counter) {
	var prodArr = eval("uo"+styleNum+counter);
	// title: replace html entities
	var temp = prodArr["title"].replace(/&gt;/g, ">");
	temp = temp.replace(/&lt;/g, "<");
	if ($("snapTitle")) {
		$("snapTitle").innerHTML = temp;
	}
	if ($("catID")) {
		// call coremetrics JS functions
		cmProductView(styleNum, temp, $("catID").value);
	}
	// price 
	if ($("snapPrice")) {
		$("snapPrice").innerHTML = prodArr["price"];
	}
	// description
	if ($("snapDescription")) {
		if (prodArr["description"] == "null") {
			prodArr["description"] = "";
		}
		$("snapDescription").innerHTML = prodArr["description"];
	}
	// sku
	if ($("snapSku")) {
		$("snapSku").innerHTML = "SKU #" + styleNum;	
	}
	// update bazaar voice iframe
	if ($("BVFrame")) {
		var curSrc = $("BVFrame").src;
		var newSrc = curSrc.replace("productRepositoryId",styleNum);
		$("BVFrame").src = newSrc;
		// update bazaar voice read reviews link
		updateReadReviewsLink();
	}
	// product details url
	if ($("viewFullDetails")) {
		curURL = prodArr["url"];
		$("viewFullDetails").href = curURL;
	}
	// populate sizes drop down menu
	addProductSizes();
	// update product detail page link
	updateProductDetailLink(prodArr["selectedColor"]);
}

// update bazaar voice read reviews link
function updateReadReviewsLink() {
	// update bazaar voice ratings link
	if ($("BVSummaryReadReviewsLink")) {
		clearTimeout(readReviewsTimer);
		readReviewsTimer = null;
		$("BVSummaryReadReviewsLink").onclick = "javascript:location='" + curURL + "&tabStyle=Reviews'";
		$("BVSummaryReadReviewsLink").href = curURL + "&tabStyle=Reviews";
	} else {
		readReviewsTimer = setTimeout("updateReadReviewsLink()",250);
	}
}

// create only one snapshot object for all products
function launchSnapshot(styleNum, counter) {
	// reset quantity selected index for quantity drop down
	var snapQuantity = $("snapQuantity");
	if (snapQuantity) {
		snapQuantity.selectedIndex = 0;
	}
	// set hidden productId field value
	var productId = $("productId");
	if (productId) {
		productId.value = styleNum;
	}
	// get the user's screen dimensions and calculate center point
	var screenWidth = getBrowserWidth();
	var screenHeight = getBrowserHeight();
	// snapshot dimensions
	var snapshotWidth = 522;
	var snapshotHeight = 436;
	// scrolling offset
	var scrollY = getOffsetY();
	// set snapshot coordinates
	var x = Math.floor(screenWidth/2) - Math.floor(snapshotWidth/2) + "px";
	var y = Math.floor(screenHeight/2) - Math.floor(snapshotHeight/2) + scrollY + "px";
	// set snapshotObj
	var snapshot = $("snapshot");
	var wrapperObj = $("snapshotWrapper");
	if ((snapshot) && (wrapperObj)) {
		// make snapshot visible
		snapshot.style.top = y;
		snapshot.style.left = x;
		// set snapshotWrapper height
		if (wrapperObj) {
			if( window.innerHeight && window.scrollMaxY ) // Firefox
			{
				pageWidth = window.innerWidth + window.scrollMaxX;
				pageHeight = window.innerHeight + window.scrollMaxY;
			}
			else if( document.body.scrollHeight > document.body.offsetHeight ) // all but Explorer Mac
			{
				pageWidth = document.body.scrollWidth;
				pageHeight = document.body.scrollHeight;
			}
			else // works in Explorer 6 Strict, Mozilla (not FF) and Safari
			{
				pageWidth = document.body.offsetWidth + document.body.offsetLeft;
				pageHeight = document.body.offsetHeight + document.body.offsetTop;
			}
			wrapperObj.style.height = pageHeight + "px";	
			if (ie) {
				wrapperObj.style.width = screenWidth + "px";	
			}
		}
		// reset color + size options
		resetSelectOptions($("snapColors"));
		resetSelectOptions($("snapSizes"));
		// display main image + thumbnails + swatches
		addProductImages(styleNum, counter);
		// populate snapshot with product data
		addProductCopy(styleNum, counter);
		// display snapshot
		wrapperObj.style.display = "block";
		snapshot.style.display = "block";
		// hide snapshot button
		over(false);
		checkForBtn();	
	}
}

// close snapshot
function hideSnapshot() {
	// make sure that snapshot is not in the process of adding to bag
	if (!processing) {
		var wrapperObj = $("snapshotWrapper");
		var snapshot = $("snapshot");
		if ((wrapperObj) && (snapshot)) {
			wrapperObj.style.display = "none";
			snapshot.style.display = "none";
			// reset images
			clearImages();
			// purge bazaar voice iframe
			if ($("BVFrame")) {
				var curSrc = $("BVFrame").src;
				var newSrc = curSrc.replace(curStyleNum,"productRepositoryId");
				$("BVFrame").src = newSrc;
			}
			// reset variables
			overButton = false;
			curStyleNum = null;
			curSize = null;
			curURL = null;
			processing = false;
			currentItemCount = 0;
		}
		// cleartimeout
		resetTimer();
	}
}

/*
	functions to create snapshot button on product thumbnail
*/

// create only one snapshot button for all products
function showSnapshotBtn(styleNum, counter) {
	// remove previous buttons
	checkForBtn();
	resetButtonTimer();
	// check for object
	var obj = $("imageWrapper"+styleNum+counter);
	// write to imageWrapper
	if (obj) {
		if (obj.innerHTML.indexOf("snapshotBtn") < 0) {
			// dynamically create anchor tag to launch
			var newanchor = document.createElement('a');
			newanchor.setAttribute("id", "snapshotBtn");
			newanchor.setAttribute("href", "javascript:launchSnapshot('" + styleNum + "','" + counter + "')");
			if (!ie) {
				newanchor.setAttribute("onmouseover", "javascript:over(true)");
				newanchor.setAttribute("onmouseout", "javascript:over(false)");
			} else {
				newanchor.onmouseover = function() { 
					over(true); 
				}
				newanchor.onmouseout = function() {
					over(false);
				}
			}
			var sometext = document.createTextNode('Snapshot');
			newanchor.appendChild(sometext);
			obj.appendChild(newanchor);
		}
		curStyleNum = styleNum;
		curCounter = counter;
	}
}

// boolean variable tracking mouseover/mouseout state of snapshot button
function over(bool) {
	overButton = bool;
}

// hide snapshot executes on a 200th sec delay
function hideSnapshotBtn() {
	var obj = $("imageWrapper"+curStyleNum+curCounter);
	if (obj) {
		buttonTimer = setTimeout("checkForBtn()", 200);	
	}
}

// add snapshot button only once
function checkForBtn() {
	var childObj = $("snapshotBtn");
	var obj = $("imageWrapper"+curStyleNum+curCounter);
	if ((childObj) && (obj) && (curStyleNum != null) && (!overButton)) {
		try {
			obj.removeChild(childObj);
		} catch (e)	{
			childObj.parentNode.removeChild(childObj);
		}
	} else {
		resetButtonTimer();
	}
	// fix ie6 select bug
	this.focus();
}

// clear snapshot button timer
function resetButtonTimer() {
	clearTimeout(buttonTimer);
	buttonTimer = null;
}


/* 
	ajax add to bag functions
*/

// add to cart
function addToCart() {
	/*
		make sure user cannot hit add to bag more than once until 
		initial add to bag request has been processed
	*/
	if ((!processing) && ($('message'))) {
		// set boolean flag to disable all other events while processing
		processing = true;
		// disable checkout button, links, and drop down menus
		disableContent();
		// hide message and reset fade timers
		resetTimer();
		// check current cart count
		currentItemCount = getCartItemCount();
		// display processing message
		$('message').innerHTML = "Processing ...";
		$('message').style.background = "#575757";
		$('message').style.display = "block";
		// format uri to post
		var url = "/urban/catalog/common/snapshot_addtocart.jsp";
		// submit ajax call to jsp + return messaging
		var qstring = getSnapShotData();
		// check query string for data
		if (qstring.length > 0) {
			url += qstring;
			new Ajax.Request(url, {
				method: 'get',
				onSuccess: function(transport) {
			    	// update cart quantity
			    	updateCartCount();
			    	// check cart item count innerHTML
			    	var curCount = getCartItemCount();
			    	// display success message
			    	$('message').innerHTML = transport.responseText;
					// url decode message
					$('message').innerHTML = urlDecode($('message').innerHTML);
					// fade message
			    	if (transport.responseText.indexOf("added to your bag") < 0) {
			    		// did not add to bag
			    		timer = 900;
			    		$('message').style.background = "#b93618";
			    		// check current cart item count
			    		if (curCount > currentItemCount) {
			    			// add messaging that additional items were added to your cart
			    			var diff = curCount - currentItemCount;
			    			$('message').innerHTML += diff + " items added to your cart.";
			    			// call coremetrics shop5s
				    		cmAddToBag(diff);
			    		} else {
			    			// call coremetrics shop5s
				    		cmAddToBag(null);
				    	}
			    	} else {
				    	// successfully added to bag
				    	timer = 900;
			    		$('message').style.background = "#b93618";
			    		// call coremetrics shop5s
				    	cmAddToBag(null);
			    	}
			    	// fade message
			    	fadeMsg();
			    },
			    onFailure: function(transport) {
			    	// display ajax error message
			    	$('message').innerHTML = "Sorry, but the Snapshot is unable to submit your order at this time. Please click the 'View Full Details' link below to purchase from the product detail page.";
			    	$('message').style.background = "#b93618";
			    	// fade message
			    	timer = 1200;
			    	fadeMsg();
			    }
			});
		} else {
			// display ajax error message
	    	$('message').innerHTML = "Sorry, but the Snapshot is unable to submit your order at this time. Please click the 'View Full Details' link below to purchase from the product detail page.";
	    	$('message').style.background = "#b93618";
	    	// fade message
	    	timer = 1200;
	    	fadeMsg();
		}
	}
}	

// get current cart count
function getCartItemCount() {
	var itemCount = 0;
	try {
		itemCount = $('inlineCartLink').innerHTML.replace(/\s/g,"");
		itemCount = itemCount.substring(itemCount.indexOf("(")+1, itemCount.indexOf("items"));
	} catch(e) {
		//alert(e);
	}
	return itemCount;
}

// update cart item count
function updateCartCount() {
	var obj = $("inlineCartLink");
	var url = "/urban/common/shopping_cart_item_count.jsp";
	if (obj) {
		new Ajax.Request(url, {
			method: 'get',
			onSuccess: function(transport) {
				// update value
				obj.innerHTML = "( " + transport.responseText + " )";
				// update inline cart
				updateInlineCart();
			},
		    onFailure: function(transport) {
		    	// do nothing
		    }
		});
	}
}

// set product sku
function setProductSku() {
	var sku = "";
	try {
		var prodArr = eval("uo"+curStyleNum+curCounter);
		var allSkus = prodArr['skus'];
		// get product color
		var color = $("snapColors").value;
		// get size
		var size = $("snapSizes").value;
		// lookup sku
		for (var i=0; i<allSkus.length; i++) {
			var curSku = allSkus[i][0];
			var curSize = allSkus[i][1];
			var curColor = allSkus[i][2];
			if ((color == curColor) && (size == curSize)) {
				sku = curSku;
			}			
		}
	} catch (err) {
		// alert(err);
	}
	return sku;
}

// get data for ajax request
function getSnapShotData() {	
	var qstring = "";
	try {
		// set product sku based on size and color
		var sku = setProductSku();
		var qty = $("snapQuantity").value;
		if (!qty) {
			qty = 1;
		}
		// set get values	
		qstring = "?productId="+curStyleNum+"&quantity="+qty+"&skuId="+sku;
	} catch (err) {
		// alert(err);
	}
	return qstring;
}


/*
	disable/enable page content while processing add to bag request
*/

// disables buttons, links, + drop down menus while processing add to bag request
function disableContent() {
	try {
		var arr = new Array("snapColors","snapSizes","snapQuantity","addToBagBtn","checkoutBtn");
		for (var i=0; i<arr.length; i++) {
			if ($(arr[i])) {
				$(arr[i]).disabled = true;
			}
		}	
		$("viewFullDetails").onclick = function(){return false;}
		$("continueShopping").onclick = function(){return false;}
	} catch(e) {
		// alert(e);
	}
}

// enables buttons, links, + drop down menus after processing add to bag request
function enableContent() {
	try {
		var arr = new Array("snapColors","snapSizes","snapQuantity","addToBagBtn","viewFullDetails","checkoutBtn","continueShopping");
		for (var i=0; i<arr.length; i++) {
			if ($(arr[i])) {
				$(arr[i]).disabled = false;
			}
		}	
		$("viewFullDetails").onclick = function(){return true;}
		$("continueShopping").onclick = function(){return true;}
	} catch(e) {
		// alert(e);
	}
}

/*
	ajax response functions to display messaging
*/

// global vars for message faders
var opac = 100;
var fadetimer = null;
var msgtimer = null;
var timer = 250;

// wait x number of secs before fading out message
function fadeMsg() {
	// fade message out
	msgtimer = setTimeout("fadeAway()",timer);
}

// decrements opacity by 1 until reaches 0
function fadeAway() {
	var ie = (document.all) ? true : false;
	if (msgtimer != null) {
		clearTimeout(msgtimer);
		msgtimer = null;
	}
	if (opac > 0) {
		// decrement var
		opac--;
		// update styles
		if (ie) {
			$('message').style.filter = "alpha(opacity=" + opac + ")";
		} else {
			$('message').style.opacity = opac/100;
		}
		// set timer
		fadetimer = setTimeout("fadeAway()",10);	
	} else {
		// reset timer
		resetTimer();
		// re-enable other event processing
		processing = false;
		enableContent();
	}	
}

// resets msg styles + fade timers + global var
function resetTimer() {
	clearTimeout(fadetimer);
	fadetimer = null;
	// reset display
	$('message').style.display = "none";
	// reset opacity
	if (ie) {
		$('message').style.filter = "alpha(opacity=100)";
	} else {
		$('message').style.opacity = 1.0;
	}
	// reset opac var
	opac = 100;
}


/*
	CoreMetrics functions
*/
// Coremetrics product view
function cmProductView(styleNum, prodTitle, catID) { 
	cmSetProduction();
	cmCreateProductviewTag(styleNum, prodTitle, "RICH_"+catID);
}
// Coremetrics Shop Action 5 Event sent when a product is added to bag is performed successfully
function cmAddToBag(qtyOveride) {
	try {
		// get data for coremetrics shop5s
    	var cmData = new Array();
    	cmData['prodTitle'] = $("snapTitle").innerHTML;
		var replaceChar = /'/g ;  // any occurence of single quotes in the string would be matched
	    if (replaceChar.test(cmData['prodTitle'])) {
	        cmData['prodTitle'] = cmData['prodTitle'].replace(replaceChar,'\'') ;
	    }
		cmData['prodID'] = curStyleNum;
		var qty = 1;
		if (qtyOveride != null) {
			qty = qtyOveride;
		} else if ($("snapQuantity")) {
			qty = $("snapQuantity").value;
		}
		if (qty == 0) {
			qty = 1;
		}
		cmData['prodQty'] = qty;
		var price = formatPrice($("snapPrice").innerHTML);
		cmData['prodPrice'] = price;
		cmData['catID'] = "RICH_" + $("catID").value;
		cmData['prodColor'] = $("snapColors").options[$("snapColors").selectedIndex].text;
		cmData['prodSize'] = $("snapSizes").value;
		// call coremetrics functions
		cmCreateShopAction5Tag(cmData['prodID'], cmData['prodTitle'], cmData['prodQty'], cmData['prodPrice'], cmData['catID'], cmData['prodColor'], cmData['prodSize']);
		cmDisplayShop5s();
	} catch (err) {
		//alert(err);
	}
}

// returns properly formatted price value for coremetrics
function formatPrice(str) {
	var price = str;
	// trim everything before and including $
	price = price.substring(price.indexOf("$")+1);
	// trim sale "was is" pricing and/or closing </p> tag
	if (price.indexOf("<em>") > 0) {
		price = price.substring(0, price.indexOf("<em>"));
	} else if (price.indexOf("</p>") > 0) {
		price = price.substring(0, price.indexOf("</p>"));
	}
	// trim price range
	if (price.indexOf("-") > 0) {
		price = price.substring(0, price.indexOf("-"));
	}
	return price;
}

/* 
	urldecode function
	
*/
function urlDecode(txt) {
	// Replace + with ' '
	// Replace %xx with equivalent character
	// Put [ERROR] in output if %xx is invalid.
	var HEXCHARS = "0123456789ABCDEFabcdef";
	var encoded = txt;
	var plaintext = "";
	var i = 0;
	while (i < encoded.length) {
		var ch = encoded.charAt(i);
		if (ch == "+") {
			plaintext += " ";
			i++;
		} else if (ch == "%") {
			if (i < (encoded.length-2) && HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 && HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				//alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
			plaintext += ch;
			i++;
		}
	} // end while
	return plaintext;
}