window.onload = globalsInit;			//runs the page initialization functions at load time

// interface globals
var arrCatnav = new Array()			//stores the open/closed states of category navigation
var arrRefnav = new Array()			//stores the open/closed states of refinement navigation, when present in the page
var arrCostScale = new Array();		//stores associations for the cost range selection tool, when present in the page
var PhoneSelector;							//the phone selector object, when present in the page

function globalsInit() {
	//function calls to initialize various page elements
	rolloversInit();
	catnavInit();
	if (document.getElementById("refnavBox")) { refnavInit(); }
	if (document.getElementById("nowrapContent")) { nowrapInit(); }
	try {
		pageInit();
	} catch(e) { }
}

function rolloversInit() {
	// sets up all image rollovers for images with classname=="imgOver"
	if (!document.getElementById) return;
	
	var arrPreload = new Array();
	var strSrcTmp;

	var arrImages = document.getElementsByTagName('img');
	for (var i=0; i<arrImages.length; i++) {
		if (arrImages[i].className == "imgOver") {
			var src = arrImages[i].src;
			var imgtype = src.substring(src.lastIndexOf("."), src.length);
			var altsrc = src.replace(imgtype, "_on" + imgtype);

			arrImages[i].setAttribute('altsrc', altsrc);
			arrPreload[i] = new Image();
			arrPreload[i].src = altsrc;
			
			arrImages[i].onmouseover = function() {
				strSrcTmp = this.getAttribute('src');
				this.setAttribute('src', this.getAttribute('altsrc'));
			}

			arrImages[i].onmouseout = function() {
				if (!strSrcTmp) strSrcTmp = this.getAttribute('src').replace("_on" + imgtype, imgtype);
				this.setAttribute('src', strSrcTmp);
			}

		}
	}

	// sets up all image rollovers for form submit buttons that have classname starting with "imgOver"
	var arrInputs = document.getElementsByTagName('input');
	for (var i=0; i<arrInputs.length; i++) {
		if (arrInputs[i].className.indexOf("imgOver") == 0) {
			var src = arrInputs[i].src;
			var imgtype = src.substring(src.lastIndexOf("."), src.length);
			var altsrc = src.replace(imgtype, "_on" + imgtype);

			arrInputs[i].setAttribute('altsrc', altsrc);
			arrPreload[i] = new Image();
			arrPreload[i].src = altsrc;
			
			arrInputs[i].onmouseover = function() {
				strSrcTmp = this.getAttribute('src');
				this.setAttribute('src', this.getAttribute('altsrc'));
			}

			arrInputs[i].onmouseout = function() {
				if (!strSrcTmp) strSrcTmp = this.getAttribute('src').replace("_on" + imgtype, imgtype);
				this.setAttribute('src', strSrcTmp);
			}
		}
	}
}

function catnavInit() {
	//initializes the main menu (category navigation)
	var arrSpans = document.getElementsByTagName('span');
	
	for (var i=0; i<arrSpans.length; i++) {
		if (arrSpans[i].className == "catnavLeftSymbol") {
			var currBox = arrSpans[i].parentNode.parentNode.parentNode.parentNode.parentNode;
			if (document.getElementById(currBox.id.replace("_closed","_open")).className !== "catnavBox_active") {
				arrCatnav[arrCatnav.length] = { Name: currBox.id.replace("_closed",""), Open: false }
				currBox.style.display = "block";
				arrSpans[i].onclick = function() {
					catnavRefresh(this.parentNode.parentNode.parentNode.parentNode.parentNode.id.replace("_closed",""));
				}
			}
		} else if (arrSpans[i].className == "catnavLeftSymbol_open") {
			var currBox = arrSpans[i].parentNode.parentNode.parentNode.parentNode.parentNode;
			if (currBox.className == "catnavBox_active") {
				arrCatnav[arrCatnav.length] = { Name: currBox.id.replace("_open", ""), Open: true }
				currBox.style.display = "block";
			}
			arrSpans[i].onclick = function() {
				catnavRefresh(this.parentNode.parentNode.parentNode.parentNode.parentNode.id.replace("_open",""));
			}
		}

		if (arrSpans[i].className == "catnavHeading") {
			arrSpans[i].onclick = function() {
					catnavRefresh(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id.replace("_closed",""));
			}
		}

		if (arrSpans[i].className == "catnavHeading_open") {
			arrSpans[i].onclick = function() {
				catnavRefresh(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id.replace("_open",""));
			}
		}
	}
}

function catnavRefresh(strCatnav) {
	// refreshes the category navigation whenever a category heading is clicked
	for (var i=0; i<arrCatnav.length; i++) {
		currId = arrCatnav[i].Name + ((arrCatnav[i].Open) ? "_open" : "_closed");
		document.getElementById(currId).style.display = "none";
		if (arrCatnav[i].Name == strCatnav) {
			arrCatnav[i].Open = (arrCatnav[i].Open) ? false : true;
		}
	}

	for (var i=0; i<arrCatnav.length; i++) {
		currId = arrCatnav[i].Name + ((arrCatnav[i].Open) ? "_open" : "_closed");
		document.getElementById(currId).style.display = "block";
	}
}

function refnavInit() {
	// initialize the refinement navigation boxes - wire up all onclick events for the box headings
	var arrSpans = document.getElementsByTagName('span');
	
	for (var i=0; i<arrSpans.length; i++) {
		if (arrSpans[i].className == "refnavLeftSymbol") {
			var currBox = arrSpans[i].parentNode.parentNode.parentNode.parentNode.parentNode;
			if (document.getElementById(currBox.id.replace("_closed","_open")).className !== "refitemBox_active") {
				arrRefnav[arrRefnav.length] = { Name: currBox.id.replace("_closed",""), Open: false }
				currBox.style.display = "block";
			}
			arrSpans[i].onclick = function() {
				refnavRefresh(this.parentNode.parentNode.parentNode.parentNode.parentNode.id.replace("_closed",""));
			}
		} else if (arrSpans[i].className == "refnavLeftSymbol_open") {
			var currBox = arrSpans[i].parentNode.parentNode.parentNode.parentNode.parentNode;
			if (currBox.className == "refitemBox_active") {
				arrRefnav[arrRefnav.length] = { Name: currBox.id.replace("_open", ""), Open: true }
				currBox.style.display = "block";
			}

			if (currBox.id == "refnavPhone_open") {
				arrSpans[i].onclick = function() {
					PhoneSelector.Dismiss();
					refnavRefresh(this.parentNode.parentNode.parentNode.parentNode.parentNode.id.replace("_open",""));
				}
			} else {
				arrSpans[i].onclick = function() {
					refnavRefresh(this.parentNode.parentNode.parentNode.parentNode.parentNode.id.replace("_open",""));
				}
			}
		}

		if (arrSpans[i].className == "refnavHeading") {
			arrSpans[i].onclick = function() {
					refnavRefresh(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id.replace("_closed",""));
			}
		}

		if (arrSpans[i].className == "refnavHeading_open") {
			if (currBox.id == "refnavPhone_open") {
				arrSpans[i].onclick = function() {
					PhoneSelector.Dismiss();
					refnavRefresh(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id.replace("_open",""));
				}
			} else {
				arrSpans[i].onclick = function() {
					refnavRefresh(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id.replace("_open",""));
				}
			}
		}
	}
	document.getElementById("refnavBox").style.display = "block";
	reftools_init();
}

function refnavRefresh(strRefnav) {
	document.getElementById("refnavBox_bot").style.display = "none";
	var intCurrRefnavHeight = document.getElementById("refnavBox").offsetHeight - 7;
	var intCurrBoxHeights = 0;
	var intNewBoxHeights = 0;

	for (var i=0; i<arrRefnav.length; i++) {
		var currId = arrRefnav[i].Name + ((arrRefnav[i].Open) ? "_open" : "_closed");
		intCurrBoxHeights += document.getElementById(currId).offsetHeight;
		document.getElementById(currId).style.display = "none";
		if ((strRefnav) && (arrRefnav[i].Name == strRefnav)) {
			arrRefnav[i].Open = (arrRefnav[i].Open) ? false : true;
		}
	}

	for (var i=0; i<arrRefnav.length; i++) {
		var currId = arrRefnav[i].Name + ((arrRefnav[i].Open) ? "_open" : "_closed");
		document.getElementById(currId).style.display = "block";
		intNewBoxHeights += document.getElementById(currId).offsetHeight;
	}

	document.getElementById("refnavBox_bot").style.display = "block";
}


function reftools_init() {
	//initializes all refinement tools for user events
	//create events for all input elements: checkboxes, etc.
	var arrInputs = document.forms["refnav_form"].elements;
	
	for (var i=0; i<arrInputs.length; i++) {
		//checkbox events and corresponding text labels
		if (arrInputs[i].type == "checkbox") {
			var currLabelId = arrInputs[i].id.replace("check","label");
			arrInputs[i].onclick = function() {
				reftools_updateSummary(this.type, this.className);
			}
			document.getElementById(currLabelId).onclick = function() {
				document.getElementById(this.id.replace("_label","_check")).click();
				reftools_updateSummary(this.type, this.className.replace("_label","_check"));
			}
		//radio buttons and text labels
		} else if (arrInputs[i].type == "radio") {
			var currLabelId = arrInputs[i].id.replace("_radio","_label");
			arrInputs[i].onclick = function() {
				reftools_updateSummary(this.type, this.className, this.name, this.id);
			}
			document.getElementById(currLabelId).onclick = function() {
				document.getElementById(this.id.replace("_label","_radio")).click();
			}
		}
	}
	
	//create events for all span elements
	var arrSpans = document.getElementsByTagName("span");
	
	for (var i=0; i<arrSpans.length; i++) {
		//'select all' + 'clear all' labels
		if ((arrSpans[i].className == "reftool_selectAll") || (arrSpans[i].className == "reftool_clearAll")){
			var currBox = arrSpans[i].parentNode.parentNode;
			arrSpans[i].onclick = function() {
				reftools_setAllChecks(this.parentNode.parentNode.id.replace("_open","_check"), (this.className == "reftool_selectAll"));
				reftools_updateSummary("checkbox", this.parentNode.parentNode.id.replace("_open","_check"));
			}
		}

		//'update results' labels
		if (arrSpans[i].className == "reftool_update") {
			arrSpans[i].onclick = function() {
				document.forms["refnav_form"].submit();
			}
		}
		
		//phone selector call-to-action
		if (arrSpans[i].id == "phoneSelector_cta") {
			arrSpans[i].onclick = function() {
				PhoneSelector.Launch();
			}
		}
		
		//phone selector "previous" action labels
		if (arrSpans[i].className == "phoneSelectorBack") {
			arrSpans[i].onclick = function() {
				PhoneSelector.Back(this.parentNode.parentNode);
			}
		}
	}

	//create events for all image elements
	var arrImages = document.getElementsByTagName("img");
	
	for (var i=0; i<arrImages.length; i++) {
		var arrPreload = new Array();

		//cost scale images and corresponding text labels
		if (arrImages[i].className == "reftoolCostScale") {
			var currLabelId  = arrImages[i].id.replace("scale","label");

			//do preload of the alternate image
			if (arrImages[i].id !== "reftool_costscale0") {
				var src = arrImages[i].src;
				var imgtype = src.substring(src.lastIndexOf("."), src.length);
				var altsrc = src.replace("_on" + imgtype, "_off" + imgtype);

				arrCostScale[arrCostScale.length] = { Image: arrImages[i], On: arrImages[i].src, Off: altsrc };
	
				arrPreload[i] = new Image();
				arrPreload[i].src = altsrc;
			}

			arrImages[i].onclick = function() {
				reftools_updateCostScale(this.id.replace("reftool_costscale",""));
			}
			document.getElementById(currLabelId).onclick = function() {
				reftools_updateCostScale(this.id.replace("reftool_costlabel",""));
			}
		}
		
		//phone selector close box
		if (arrImages[i].id == "phoneSelectorClose") {
			arrImages[i].onclick = function() {
				PhoneSelector.Dismiss();
			}
		}
		
		//phone selector "previous" arrows
		if (arrImages[i].className == "phoneSelectorArrow") {
			arrImages[i].onclick = function() {
				PhoneSelector.Back(this.parentNode.parentNode);
			}
		}
	}
	
	if (document.getElementById("refnavCost_closed")) {
		reftools_initCostScale();
	}

	arrInputs = document.forms["refnav_form"].elements;
	for (i=0; i<arrInputs.length; i++) {
		if ((arrInputs[i].type == "radio") && (arrInputs[i].checked)) {
			reftools_updateSummary("radio", arrInputs[i].className, arrInputs[i].name, arrInputs[i].id);
		}
		
		if (arrInputs[i].type == "checkbox") {
			reftools_updateSummary("checkbox", arrInputs[i].className);
		}
	}
	
	if (document.getElementById("refnavPhone_closed")) {
		reftools_initPhoneSelector();
	}
}

function reftools_updateSummary(strInputType, strInputClass, strInputName, strInputId) {
	var arrInputs = document.forms["refnav_form"].elements;

	switch (strInputType) {
		case "checkbox":
			var intClassChecked = 0;
			var intClassTotal = 0;
			
			for (i=0; i<arrInputs.length; i++) {
				if (arrInputs[i].className == strInputClass) {
					intClassTotal += 1;
					intClassChecked += (arrInputs[i].checked) ? 1 : 0;
				}
			}

			document.getElementById(strInputClass.replace("_check","_summary")).innerHTML = "Selected " + intClassChecked + "/" + intClassTotal;
			break;

		case "radio":
			var arrRadioGroup = document.forms["refnav_form"].elements[strInputName];
			var intRadioIndex = -1;
			for (i=0; i<arrRadioGroup.length; i++) {
				if (arrRadioGroup[i].checked) {
					intRadioIndex = i;
				}
			}
			var strCheckedLabel = document.getElementById(strInputId).value;
			document.getElementById(strInputClass.replace("_radio","_summary")).innerHTML = "Selected: " + strCheckedLabel;
			break;

		default:
			break;
	}
}

function reftools_setAllChecks(strInputClass, blnChecked) {
	//handler for the "Select All" and "Clear All" interface event labels
	var arrInputs = document.forms["refnav_form"].elements;
	
	for (i=0; i<arrInputs.length; i++) {
		if (arrInputs[i].className == strInputClass) {
			arrInputs[i].checked = blnChecked;
		}
	}
}

function reftools_initCostScale() {
	//set the cost scale display based upon the value of the hidden form input
	reftools_updateCostScale(document.forms["refnav_form"].elements["reftool_cost_max"].value);
}

function reftools_updateCostScale(intScaleIndex) {
	//update the refinement tool display for the tool is collapsed.
	for (i=0; i<arrCostScale.length; i++) {
		arrCostScale[i].Image.src = (i<intScaleIndex) ? arrCostScale[i].On : arrCostScale[i].Off;
	}

	var strDisplayMax = (document.getElementById("reftool_costlabel" + intScaleIndex).innerHTML.indexOf("$") < 0) ? "$" + document.getElementById("reftool_costlabel" + intScaleIndex).innerHTML : document.getElementById("reftool_costlabel" + intScaleIndex).innerHTML;
	document.getElementById("refnavCost_summary").innerHTML = "Selected $0" + ((intScaleIndex > 0) ? "-" + strDisplayMax : "");
	document.forms["refnav_form"].elements["reftool_cost_max"].value = intScaleIndex;
	
}

function reftools_initPhoneSelector() {
	//instantiate and initialize the selector object
	PhoneSelector = new clsPhoneSelector();
	PhoneSelector.Init();
}

function nowrapInit() {
	//set a minimum height for the nowrapContent box in lieu of the poorly supported "min-height" css attribute
	if (document.getElementById("nowrapContent").offsetHeight < 463) {
		document.getElementById("nowrapContent").style.height = "450px";
	}
}

/* **** Object Prototypes **** */
Array.prototype.getIndex = arr_getIndex;

/* search an array list for a value, return the first index of that value */
function arr_getIndex(strValue) {
	var intFound = -1;
	for (var i=0; i<this.length; i++) {
		if (this[i] == strValue) {
			intFound=i;
			break;
		}
	}
	return intFound;
}

/* Specific to the vouchers.asp page */
function showVoucherEmail(value, prod_id)
{
	document.getElementById('voucherEmail').style.display = 'block';
	document.getElementById('value').value = value;
	document.getElementById('prod_id').value = prod_id;
}

function hideVoucherEmail()
{	
	alert("Processed");
	var t = document.getElementById('status').value;
		
	if (t == 1)
	{
		document.getElementById('voucherEmail').style.display = 'none';
		document.getElementById('voucherEmailMsg').innerHTML = 'Thank you.';
	}
	else
	{
		document.getElementById('voucherEmail').style.display = 'block';
		document.getElementById('voucherEmailMsg').innerHTML = 'Please fill in your details.';			
	}
}