var productsComplete = false;;
var productsXMLPath = "xml/products.xml";
var productsXMLDoc = null;
var productsXMLRequest;
var productCategory;
var products;
var wtbMode = false;
var templateMode = false;

var tCategories;
var tLabelSizes;
var tVendors;
var ddLabelTypes;
var ddLabelSizes;
var ddVendors;
var formWTBEnabled = false;
var resultsWTBEnabled = false;
var formLabelTypeEnabled = false;
var formCompatibleEnabled = false;
var firstTime = true;

var wtbBtnOnline;
var wtbBtnStore;

function loadProductsXML(url) {
    if (window.XMLHttpRequest) {
        productsXMLRequest = new XMLHttpRequest();
        productsXMLRequest.onreadystatechange = processProductsReqChange;
        productsXMLRequest.open("GET", url, true);
        productsXMLRequest.send(null);
    } else if (window.ActiveXObject) {
        isIE = true;
        productsXMLRequest = new ActiveXObject("Microsoft.XMLHTTP");
        if (productsXMLRequest) {
            productsXMLRequest.onreadystatechange = processProductsReqChange;
            productsXMLRequest.open("GET", url, true);
            productsXMLRequest.send();
        }
    }
}

function processProductsReqChange() {
    // only if req shows "loaded"
    if (productsXMLRequest.readyState == 4) {
        // only if "OK"
        if (productsXMLRequest.status == 200) {
			productsXMLDoc = productsXMLRequest.responseXML;
			saveProducts();
        } else {
            alert("There was a problem retrieving the XML data:\n" + productsXMLRequest.statusText);
        }
    }
}

function setFunctionMode(){
	var theURL = location.href.toLowerCase();
	if (theURL.indexOf("templates.html") != -1){
		templateMode = true;
		wtbMode = false;
	} else if (theURL.indexOf("where_to_buy.html") != -1){
		templateMode = false;
		wtbMode = true;
	} else {
		templateMode = false;
		wtbMode = false;
	}
}

function parseProductsXML(category){
	setFunctionMode();
	productCategory = category;
	productsComplete = false;
	if (productsXMLDoc == null){
		loadProductsXML(productsXMLPath);
	} else {
		saveProducts();
	}
	if (templateMode){
		if (getParamValue("prodid") != null){
			window.onload = function(){
				var productID = getParamValue("prodid");
				document.formProductNumber.productNumber.value = productID;
				searchByProductNumber();
			}
		} else {
			document.formProductNumber.productNumber.focus();
		}
	}
}

function initTemplates(){
	ddLabelTypes = document.formLabelType.labelType;
	ddLabelSizes = document.formLabelType.labelSize;
	ddVendors = document.formCompatible.vendor;
	
	ddLabelTypes.options[ddLabelTypes.length] = new Option("Please Select", "");
	for (var i = 0; i < tCategories.length; i++){
		ddLabelTypes.options[ddLabelTypes.length] = new Option(tCategories[i], [i]);
	}
		
	ddVendors.options[ddVendors.length] = new Option("Please Select", "");
	for (var i = 0; i < tVendors.length; i++){
		ddVendors.options[ddVendors.length] = new Option(tVendors[i].label, tVendors[i].id);
	}
}

function updateLabelSizes(categoryIndex){
	if (categoryIndex == ""){
		hideDIV("labelSizePanel");
	} else {
		ddLabelSizes.options.length = 0;
		ddLabelSizes.options[ddLabelSizes.length] = new Option("Please Select", "");
		for (var i = 0; i < tLabelSizes[categoryIndex].length; i++){
			ddLabelSizes.options[ddLabelSizes.length] = new Option(tLabelSizes[categoryIndex][i], [i]);
		}
		ddLabelSizes.selectedIndex = 0;
		showDIV("labelSizePanel");
	}
	enableLabelTypeButton(0);
}

function enableLabelTypeButton(sizeIndex){
	if (sizeIndex == 0){
		formLabelTypeEnabled = false;
		document.images["btnFindLabelType"].src = "images/btn_find_disabled.gif";
	} else {
		formLabelTypeEnabled = true;
		document.images["btnFindLabelType"].src = "images/btn_find.gif";
	}
}

function enableCompatibleButton(vendorIndex){
	if (vendorIndex == 0){
		formCompatibleEnabled = false;
		document.images["btnFindCompatible"].src = "images/btn_find_disabled.gif";
	} else {
		formCompatibleEnabled = true;
		document.images["btnFindCompatible"].src = "images/btn_find.gif";
	}
}

function searchByProductNumber(){
	var productNumber = document.formProductNumber.productNumber.value.toUpperCase();
	var productResults = new Array();;
	var found = false;
	var formError = getObject("formProductNumberError");
	var i = 0;
		
	clearErrors();

	while(!found && (i < products.length)){
		if (productNumber == products[i].id){
			found = true;
			productResults.push(products[i]);
		} else {
			i++;
		}
	}
	
	if (!found){
		formError.innerHTML = "Incorrect product number. Please try again.";
		hideDIV("templateResultsPanel");
	} else if (!productResults[0].hasTemplate){
		formError.innerHTML = "Sorry. There are no templates available for that product.";
		hideDIV("templateResultsPanel");
	} else {
		displayTemplateResults(productResults);
	}
	
	return false;
}

function searchByLabelType(){
	if (formLabelTypeEnabled){
		var productResults = new Array();;
		var category = ddLabelTypes.options[ddLabelTypes.selectedIndex].text;
		var size = ddLabelSizes.options[ddLabelSizes.selectedIndex].text;

		clearErrors();

		for (var i = 0; i < products.length; i++){
			if ((products[i].category == category) && (products[i].size == size) && (products[i].hasTemplate)){
				productResults.push(products[i]);
			}
		}
		
		displayTemplateResults(productResults);
	}
	
	return false;
}

function searchByCompatible(){
	if (formCompatibleEnabled){
		var productResults = new Array();;
		var formError = getObject("formCompatibleError");
		var vendor = ddVendors.options[ddVendors.selectedIndex].value;
		var vendorItemNumber = document.formCompatible.vendorItemNumber.value;
		
		clearErrors();
		
		for (var i = 0; i < products.length; i++){
			if (eval('products[i].' + vendor + ' == vendorItemNumber')){
				productResults.push(products[i]);
			}
		}
		
		if (productResults.length == 0){
			formError.innerHTML = "No compatible label template found. Please try again.";
			hideDIV("templateResultsPanel");
		} else {
			displayTemplateResults(productResults);
		}
	}
	
	return false;
}

function clearErrors(){
	var formErrors =  new Array();
	formErrors.push(getObject("formProductNumberError"));
	formErrors.push(getObject("formCompatibleError"));
	for (var i = 0; i < formErrors.length; i++){
		formErrors[i].innerHTML = "";
	}
}

function displayTemplateResults(productResults){
	var tResultsHdr = getObject("tResultsHdr");
	var tResults = getObject("tResults");
	var resultsContent = "";
	
	if (productResults.length > 1){
		tResultsHdr.innerHTML = "Items Found (" + productResults.length + "):";
	} else {
		tResultsHdr.innerHTML = "Item Found:"
	}
	
	for (var i = 0; i < productResults.length; i++){
		resultsContent += '<div class="tResult">' + productResults[i].id + ' Post-It&reg; Removable ' + productResults[i].category + ', ' + productResults[i].material + ', ' + productResults[i].size + '</div>';
		resultsContent += '<div class="tResultButton"><a href="javascript:downloadTemplate(\'' + productResults[i].id + '\')"><img src="images/btn_download_template.gif" alt="Download Template &gt;" width="169" height="23" border="0" /></a></div>';
	}
	
	tResults.innerHTML = resultsContent;
	showDIV("templateResultsPanel");
	
	if (firstTime && (getParamValue("prodid") != null)){
		firstTime = false;
		downloadTemplate(getParamValue("prodid"));
	}
}

function downloadTemplate(productID){
	var templateProduct = getProductByID(productID);
	var tResultConfirmation = getObject("tResultConfirmation");
	var confirmationContent = "";
	dcsMultiTrack('WT.cg_n','Template Downloads','WT.cg_s',templateProduct.category + ': ' + templateProduct.id + ' ' + templateProduct.material + ', ' + templateProduct.size,'DCS.dcsuri','/postitlabels/productclicks.html','WT.ti','Productclicks','WT.si_cs','1');
	confirmationContent += templateProduct.id + '<br />';
	confirmationContent += 'Post-it&reg; Removable ' + templateProduct.category + '<br />';
    confirmationContent += templateProduct.material + '<br />';
    confirmationContent += templateProduct.size;
    tResultConfirmation.innerHTML = confirmationContent;
	hideDIV('templateForms');
	showDIV('templateConfirmation');
	location.href = "templates/Post-it Brand Template " + productID + ".doc";
}

function getProductByID(productID){
	for (var i = 0; i < products.length; i++){
		if (products[i].id == productID){
			return products[i];
		}
	}
	
	return null;
}

function saveProducts(){
	var tmpItem;
	var rawItems = new Array();
	var rawVendors = new Array();
	products = new Array();
	tCategories = new Array();
	tLabelSizes = new Array();
	tVendors = new Array();
	rawItems = productsXMLDoc.getElementsByTagName("product");
	rawVendors = productsXMLDoc.getElementsByTagName("vendor");
	
	for (var j = 0; j < rawVendors.length; j++){
		tmpItem = new Object();
		tmpItem.id = rawVendors[j].getAttribute("id");
		tmpItem.label = rawVendors[j].getAttribute("label");
		tVendors.push(tmpItem);
	}
	
	for (var i = 0; i < rawItems.length; i++){
		if (templateMode || wtbMode || (productCategory == rawItems[i].getAttribute("category"))){
			tmpItem = new Object();
			tmpItem.id = rawItems[i].getAttribute("id");
			tmpItem.sku = rawItems[i].getAttribute("sku");
			tmpItem.category = rawItems[i].getAttribute("category");
			tmpItem.color = rawItems[i].getAttribute("color");
			tmpItem.material = rawItems[i].getAttribute("material");
			tmpItem.size = rawItems[i].getAttribute("size");
			tmpItem.perpack = rawItems[i].getAttribute("perpack");
			tmpItem.hasTemplate = (rawItems[i].getAttribute("template").toLowerCase() == "true");
			if (tmpItem.hasTemplate){
				for (var k = 0; k < tVendors.length; k++){
					eval('tmpItem.' + tVendors[k].id + ' = rawItems[i].getAttribute("' + tVendors[k].id + '")');
				}
			}
			if (tmpItem.hasTemplate || wtbMode){
				addCategorySize(tmpItem.category, tmpItem.size);
			}
			products.push(tmpItem);
		}
	}
	
	products = sortProducts(products);
	
	if (templateMode){
		initTemplates();
	} else if (wtbMode){
		initWTB();
	} else {
		displayProducts(products);
	}
}

function addCategorySize(category, size){
	var categoryIndex = getCategoryIndex(category);
	if (categoryIndex == -1){
		categoryIndex = addCategory(category);
	}
	var sizeIndex = getLabelSizeIndex(categoryIndex, size);
	if (sizeIndex == -1){
		sizeIndex = addLabelSize(categoryIndex, size);
	}
}

function getCategoryIndex(category){
	var i = 0;
	while (i < tCategories.length){
		if (category == tCategories[i]){
			return i;
		} else {
			i++;
		}
	}
	return -1;
}

function addCategory(category){
	tCategories.push(category);
	tCategories.sort();
	var categoryIndex = getCategoryIndex(category);
	var tmpArray = new Array();
	tmpArray.push(new Array());
	tLabelSizes = tLabelSizes.slice(0, categoryIndex).concat(tmpArray).concat(tLabelSizes.slice(categoryIndex));
	return categoryIndex;
}

function getLabelSizeIndex(categoryIndex, size){
	var i = 0;
	while (i < tLabelSizes[categoryIndex].length){
		if (size == tLabelSizes[categoryIndex][i]){
			return i;
		} else {
			i++;
		}
	}
	return -1;
}

function addLabelSize(categoryIndex, size){
	tLabelSizes[categoryIndex].push(size);
	tLabelSizes[categoryIndex].sort();
	return getLabelSizeIndex(categoryIndex, size);
}

function sortProducts(items){
	var tmpItem;
	for (var i = 0; i < items.length - 1; i++){
		for (var j = i + 1; j < items.length; j++){
			if (items[i].id > items[j].id){
				tmpItem = items[i];
				items[i] = items[j];
				items[j] = tmpItem;
			}
		}
	}
	return items;
}

function displayProducts(items){
	var productsListing = getObject("productListing");
	var productsContent = "";
	var productsListingHeader = '<table cellpadding="0" cellspacing="0" border="0" class="pt"><tr><th class="ptID">Product<br />Number</th><th class="ptColor">Label<br />Color</th><th class="ptMaterial">Label<br />Material</th><th class="ptSize">Label<br />Size</th><th class="ptPerPack">Labels<br />/Pack</th><th class="ptLinks"></th></tr>';
	var productsListingFooter = '</table>';
	if (items.length > 0){
		productsListing.style.height = "auto";
		for (var i = 0; i < items.length; i++){
			if ((i % 2) == 0){
				productsContent += '<tr class="ptOdd">';
			} else {
				productsContent += '<tr class="ptEven">';
			}
			productsContent += '<td class="ptID"><a href="javascript:showProduct(\'' + items[i].id + '\');" class="brand">' + items[i].id + '</a></td>';
            productsContent += '<td class="ptColor">' + items[i].color + '</td>';
            productsContent += '<td class="ptMaterial">' + items[i].material + '</td>';
            productsContent += '<td class="ptSize">' + items[i].size + '</td>';
            productsContent += '<td class="ptPerPack">' + items[i].perpack + '</td>';
            productsContent += '<td class="ptLinks">';
            productsContent += '<a href="where_to_buy.html" class="brand" onclick="dcsMultiTrack(\'WT.cg_n\',\'Where to Buy Clicks\',\'WT.cg_s\',\'' + items[i].category + ': ' + items[i].id + '\', \'DCS.dcsuri\',\'/postitlabels/productclicks.html\',\'WT.ti\',\'Productclicks\')">Where to buy</a>';
			productsContent += '<a href="Name_Badge_Instructions.pdf" target="_blank" class="brand" onclick="dcsMultiTrack(\'WT.cg_n\',\'How to use Clicks\',\'WT.cg_s\',\'' + items[i].category + ': ' + items[i].id + '\',\'DCS.dcsuri\',\'/postitlabels/productclicks.html\',\'WT.ti\',\'Productclicks\')">How to use</a>';		
			if (items[i].hasTemplate){
				productsContent += '<a href="templates.html?prodid=' + items[i].id + '" class="brand" onclick="dcsMultiTrack(\'WT.cg_n\',\'Template Downloads\',\'WT.cg_s\',\'' + items[i].category + ': ' + items[i].id + '\',\'DCS.dcsuri\',\'/postitlabels/productclicks.html\',\'WT.ti\',\'Productclicks\')">Get template</a>';
			}
            productsContent += '</td>';
			productsContent += '</tr>';
			productsContent += '<tr class="ptSpacer"><td colspan="6"></td></tr>';
		}
	}
	productsListing.innerHTML = productsListingHeader + productsContent + productsListingFooter;
	productsComplete = true;
}

// Products Left Nav Highlighting
function leftNavInit(){
	var leftNav = getObject("leftnav");
	if (leftNav != null){
		var pageURL = location.pathname.substring(location.pathname.lastIndexOf("/") + 1).toLowerCase();
		var lnavLinks = leftNav.getElementsByTagName("A");
		for (var i = 0; i < lnavLinks.length; i++){
			var lnavLinkURL = lnavLinks[i].pathname.substring(lnavLinks[i].pathname.lastIndexOf("/") + 1).toLowerCase();
			if (lnavLinkURL == pageURL){
				lnavLinks[i].className = "current";
			}
		}
	}
}

/* Gets Parameter Values from QueryString */
function getParamValue(paramName){
	paramName += "=";
	var paramLength=paramName.length;
	var start = -1;
	if (location.search.indexOf("?" + paramName) != -1){
		start = location.search.indexOf("?" + paramName) + 1;
	} else if (location.search.indexOf("&" + paramName) != -1){
		start = location.search.indexOf("&" + paramName) + 1;
	}
	if (start != -1){
		if (location.search.indexOf("&",start + 1) != -1){
			tempValue = location.search.substring(start + paramLength, location.search.indexOf("&",start + 1));
		}
		else {
			tempValue = location.search.substring(start + paramLength);
		}
		return tempValue;
	}
	else {
		return null;
	}
}

function initWTB(){
	wtbBtnOnline = new Object();
	wtbBtnOnline.disabled = new Image();
	wtbBtnOnline.disabled.src = "images/btn_buy_online_disabled.gif";
	wtbBtnOnline.enabled = new Image();
	wtbBtnOnline.enabled.src = "images/btn_buy_online.gif";
	wtbBtnOnline.selected = new Image();
	wtbBtnOnline.selected.src = "images/btn_buy_online_over.gif";

	wtbBtnStore = new Object();
	wtbBtnStore.disabled = new Image();
	wtbBtnStore.disabled.src = "images/btn_buy_instore_disabled.gif";
	wtbBtnStore.enabled = new Image();
	wtbBtnStore.enabled.src = "images/btn_buy_instore.gif";
	wtbBtnStore.selected = new Image();
	wtbBtnStore.selected.src = "images/btn_buy_instore_over.gif";

	ddLabelTypes = document.formWTB.labelType;
	ddLabelNames = document.formWTB.labelName;
	
	ddLabelTypes.options[ddLabelTypes.length] = new Option("Please Select", "");
	for (var i = 0; i < tCategories.length; i++){
		ddLabelTypes.options[ddLabelTypes.length] = new Option(tCategories[i], [i]);
	}
}

function updateLabelNames(categoryIndex){
	if (categoryIndex == ""){
		hideDIV("labelNamesPanel");
	} else {
		ddLabelNames.options.length = 0;
		ddLabelNames.options[ddLabelNames.length] = new Option("Please Select", "");
		products = getProductsByCategory(tCategories[categoryIndex]);
		for (var i = 0; i < products.length; i++){
			ddLabelNames.options[ddLabelNames.length] = new Option(products[i].id + " " + products[i].color + " " + products[i].material + " " + products[i].size, products[i].id);
		}
		ddLabelNames.selectedIndex = 0;
		showDIV("labelNamesPanel");
	}
	enableWTBButton(0);
}

function enableWTBButton(nameIndex){
	if (nameIndex == 0){
		formWTBEnabled = false;
		document.images["btnWTBFind"].src = "images/btn_find_disabled.gif";
		document.images["wtbProduct"].src = "images/products/wtb/MMM_GroupShot.jpg";
	} else {
		formWTBEnabled = true;
		document.images["btnWTBFind"].src = "images/btn_find.gif";
		document.images["wtbProduct"].src = "images/products/wtb/MMM_" + products[nameIndex - 1].id + ".jpg";
	}
	resultsWTBEnabled = false;
	wtbTabToggle(1);
}

function getProductsByCategory(category){
	var tmpItem;
	var rawItems = new Array();
	var catprods = new Array();
	rawItems = productsXMLDoc.getElementsByTagName("product");
	
	for (var i = 0; i < rawItems.length; i++){
		if (category == rawItems[i].getAttribute("category")){
			tmpItem = new Object();
			tmpItem.id = rawItems[i].getAttribute("id");
			tmpItem.sku = rawItems[i].getAttribute("sku");
			tmpItem.color = rawItems[i].getAttribute("color");
			tmpItem.material = rawItems[i].getAttribute("material");
			tmpItem.size = rawItems[i].getAttribute("size");
			tmpItem.perpack = rawItems[i].getAttribute("perpack");
			catprods.push(tmpItem);
		}
	}
	
	catprods = sortProducts(catprods);
	return catprods;
}

function removeDashes(input){
	var regEx = new RegExp("-", "gi");
	return input.replace(regEx, "");
}

function submitWTB(isInStore){
	var zipCode = document.formWTB.zipcode.value;
	var zipCodeError = getObject("formZipCodeError");
	var onlineResults = window.frames["onlineresults"];
	var inStoreResults = window.frames["instoreresults"];
	var currProduct = products[ddLabelNames.selectedIndex - 1];
	onlineResults.location.href = "where_to_buy_results.html?zipcode=-1&sku=" + currProduct.sku;
	
	if (zipCode.length == 5){
		zipCodeError.innerHTML = "";
		inStoreResults.location.href = "where_to_buy_results.html?zipcode=" + zipCode + "&sku=" + currProduct.sku;
	} else if (isInStore){
		zipCodeError.innerHTML = "INVALID ZIP CODE";
	}
	
	resultsWTBEnabled = true;
	if (!isInStore){
		wtbTabToggle(2);
	}
}

function wtbTabToggle(tabNum){
	var btnOnline = document.images["btnWTBTabOnline"];
	var btnStore = document.images["btnWTBTabStore"];
	var palette = getObject("wtbResultsBg");
	var paletteCorner = getObject("wtbResultsCorner");
	if (tabNum == 1){
		showDIV("wtbTab1");
		hideDIV("wtbTab2");
		hideDIV("wtbTab3");
		btnOnline.src = wtbBtnOnline.disabled.src;
		btnStore.src = wtbBtnStore.disabled.src;
		palette.style.backgroundColor = "#FEFCE5";
		paletteCorner.style.backgroundImage = "url(images/boxcorner_br.gif)";
	} else if (resultsWTBEnabled){
		if (tabNum == 2){
			hideDIV("wtbTab1");
			showDIV("wtbTab2");
			hideDIV("wtbTab3");
			btnOnline.src = wtbBtnOnline.selected.src;
			btnStore.src = wtbBtnStore.enabled.src;
			palette.style.backgroundColor = "#FFFFFF";
			paletteCorner.style.backgroundImage = "url(images/boxcorner_br_white.gif)";
		} else if (tabNum == 3){
			hideDIV("wtbTab1");
			hideDIV("wtbTab2");
			showDIV("wtbTab3");
			btnOnline.src = wtbBtnOnline.enabled.src;
			btnStore.src = wtbBtnStore.selected.src;
			palette.style.backgroundColor = "#FFFFFF";
			paletteCorner.style.backgroundImage = "url(images/boxcorner_br_white.gif)";
		}
	}
}

var digitsOnly = /[1234567890]/g;
var integerOnly = /[0-9\.]/g;
var alphaOnly = /[A-Z]/g;

function restrictCharacters(myfield, e, restrictionType) {
	if (!e) var e = window.event
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;
	var character = String.fromCharCode(code);

	// if they pressed esc... remove focus from field...
	if (code==27) { this.blur(); return false; }
	
	// ignore if they are press other keys
	// strange because code: 39 is the down key AND ' key...
	// and DEL also equals .
	if (!e.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40) {
		if (character.match(restrictionType)) {
			return true;
		} else {
			return false;
		}
	}
}
// JavaScript Document
