// Common JavaScript functions for NBS 2.0

// added function for loading dynamic content
// thonil (2004-05-07)

// Snatched from standlibs
var ff = new Object ();
ff.version = parseFloat(navigator.appVersion)
ff.opera = (navigator.appName == "Opera" || navigator.userAgent.indexOf("Opera") > -1) ? true : false
ff.ie = (document.all && !ff.opera) ? true : false;
ff.ns4 = (navigator.appName == "Netscape" && ff.version < 5) ? true : false;
ff.w3c = (document.getElementById && !ff.ie) ? true : false;
ff.win = (navigator.userAgent.toLowerCase().indexOf("win") > 0) ? true : false;
ff.mac = (navigator.userAgent.toLowerCase().indexOf("mac") > 0) ? true : false;
ff.ns6 = (navigator.userAgent.toLowerCase().indexOf("netscape6") >= 0) ? true : false;

ff.getObj = function(strObj) {
	if(typeof(strObj)=="object") return strObj
	else{
		var obj
		if (ff.ie) obj = document.all[strObj]
		else if (ff.w3c) {
			obj = document.getElementById(strObj)
			if (!obj) obj = document.getElementsByName(strObj)[0]
		} 
		else if(ff.ns4) {
			if (!ff.all[strObj]) ff.makeAllObj()
			obj = ff.all[strObj]
		}
		return obj
	}
}

if (!blnLastSelectedForbidden)
	var blnLastSelectedForbidden = false;

// Returns a random number. Used as query string to prevent browser from caching the page
function getRandom() {
	var rand = "" + Math.random();
	rand = rand.substr(2, rand.length);
	var d = new Date();
	var now = d.getTime();
	return rand + now;
}

function writeToInfoLayer (intWidth, strID) {
	if (strID == "null") {
		strID = "";
	}
	tempStr = "<table width=" + intWidth + " cellpadding=0 cellspacing=0 border=0>\n<tr>\n<td>\n";
	tempStr += "<span class='textBold'>" + (strID == "" ? "" : infoHeader[strID]) + "</span><br>\n";
	tempStr += "<span class='text'>" + (strID == "" ? "" : infoText[strID]) + "</span>\n</td>\n</tr>\n</table>\n";
	document.getElementById("info").innerHTML = tempStr;
	resetScroller ("info");
}

function showError(intWidth) {
	var errormessage = "";

	tempStr = "<table width=" + intWidth + " cellpadding=0 cellspacing=0 border=0>\n<tr>\n<td>\n";
	tempStr += "<span class='text'><font color=red>" + errormessage + "</font></span>\n</td>\n</tr>\n</table>\n";
	document.getElementById("info").innerHTML = tempStr;
	resetScroller ("info");
}

// Shows info on the currently selected item (colour, rim etc)
function showInfo(strCode) {
	var temp = "";
	if (strCode != "null" && strCode != "") {
		temp = infoHeader[strCode];
	}
	document.getElementById("hoverInfo").innerHTML = "<span class='text'>" + temp + "</span><br>\n";
}

function swapImage (strWhat, strID, blnForbidden, strExtraData, strModelYear, strRModel) {
	var temp = new Object () 
	switch (strWhat) {
		case "colour":
			temp.objectLayer    = "carLayer";
			temp.objectImage    = "carImage";
			temp.objectImageSrc = "http://media.nbs.volvocars.se/nbs20/img/cars/small/" + strModelYear + "m" + strExtraData + "_" + strRModel + "c" + strID + ".jpg";
			temp.swapID         = "c" + strID;
			temp.swapLastID     = "c" + strLastSelectedID;
			temp.swapPath       = "http://media.nbs.volvocars.se/nbs20/img/colours/" + strModelYear + "m" + strExtraData + "_c"
			temp.swapSrc        = strID + "_samp_selected.gif";
			temp.swapForbidden  = strLastSelectedID + "_samp_forbidden.gif";
			temp.swap           = strLastSelectedID + "_samp.gif";
			temp.blurImage      = true;
			break;
		case "interior":
			temp.objectLayer    = "carLayer";
			temp.objectImage    = "carImage";
			temp.objectImageSrc = "http://media.nbs.volvocars.se/nbs20/img/upholsteries/" + strModelYear + "m" + strExtraData + "_u" + strID + ".jpg";
			temp.swapID         = "i" + strID;
			temp.swapLastID     = "i" + strLastSelectedID;
			temp.swapPath       = "http://media.nbs.volvocars.se/nbs20/img/upholsteries/" + strModelYear + "m" + strExtraData + "_u";
			temp.swapSrc        = strID + "_samp_selected.gif";
			temp.swapForbidden  = strLastSelectedID + "_samp_forbidden.gif";
			temp.swap           = strLastSelectedID + "_samp.gif";
			temp.blurImage      = true;
			break;
		case "rims":
			temp.objectLayer    = "rimLayer";
			temp.objectImage    = "rimOnCarImage";
			temp.objectImageSrc = "http://media.nbs.volvocars.se/nbs20/img/rims/transparent/" + strModelYear + "m" + strExtraData + "_r" + strID + ".gif";
			temp.swapID         = "c" + strID;
			temp.swapLastID     = "c" + strLastSelectedID;
			temp.swapPath       = "http://media.nbs.volvocars.se/nbs20/img/rims/" + strModelYear + "m" + strExtraData + "_r";
			temp.swapSrc        = strID + "_selected.gif";
			temp.swapForbidden  = strLastSelectedID + "_forbidden.gif";
			temp.swap           = strLastSelectedID + ".gif";
			temp.blurImage      = true;
			document.getElementById("rimImage").src = temp.swapPath + strID + ".jpg";
			break;
		case "trims":
			temp.objectLayer    = "carLayer";
			temp.objectImage    = "carImage";
			temp.objectImageSrc = "http://media.nbs.volvocars.se/nbs20/img/trims/" + strModelYear + "m" + strExtraData + "_t" + strID + "_trim.jpg";
			temp.swapID         = "c" + strID;
			temp.swapLastID     = "c" + strLastSelectedID;
			temp.swapPath       = "http://media.nbs.volvocars.se/nbs20/img/trims/" + strModelYear + "m" + strExtraData + "_t";
			temp.swapSrc        = strID + "_selected.gif";
			temp.swapForbidden  = strLastSelectedID + "_forbidden.gif";
			temp.swap           = strLastSelectedID + ".gif";
			temp.blurImage      = false;
			break;
		default:
			alert ("Something's wrong... should never get here!");
			return;
	}

//	document.getElementById(temp.objectImage).src = temp.objectImageSrc;
	if (document.getElementById(temp.swapID)) {
		document.getElementById(temp.swapID).src = temp.swapPath + temp.swapSrc;
		if (strLastSelectedID != "" && strLastSelectedID != strID  && strLastSelectedID != "null") {
			if (blnLastSelectedForbidden) {
				if (document.getElementById(temp.swapLastID)) {
					document.getElementById(temp.swapLastID).src = temp.swapPath + temp.swapForbidden;
				}
			} else {
				if (document.getElementById(temp.swapLastID)) {
					document.getElementById(temp.swapLastID).src = temp.swapPath + temp.swap;
				}
			}
		}
	}
	if (temp.blurImage) {
		if (document.getElementById("blurImage")) {
			document.getElementById("blurImage").style.visibility = "hidden";
		}
	}
	strLastSelectedID = strID;

	if (blnForbidden) {
		blnLastSelectedForbidden = true;
	} else {
		blnLastSelectedForbidden = false;
	}
	clearTimeout (timer);
	return;
}

// Scroller functions
var scroller = new Array ();
var scrollSpeed = 8;

// Initialize scroller properties
function initScroller (strLayer, dragBar) {
	var temp;
	scroller[strLayer] = new Object ();
	scroller[strLayer].parentOffset = 0;

	scroller[strLayer].layerRef = document.getElementById(strLayer);	// object reference to layer
	scroller[strLayer].top = parseInt(scroller[strLayer].layerRef.style.top); // calculate top
	x = scroller[strLayer].layerRef.style.clip.split (" "); // get clip bottom
	scroller[strLayer].height = parseInt (x[2]);

	scroller[strLayer].width = scroller[strLayer].layerRef.style.width;
	if ((ff.ie && ff.mac) || ff.ns6) {
		temp = scroller[strLayer].layerRef.offsetHeight;
	} else {
		temp = scroller[strLayer].layerRef.scrollHeight;
	}
	scroller[strLayer].scrollHeight = temp - scroller[strLayer].height;
	scroller[strLayer].y = 0;
	scroller[strLayer].timer = 0;
	scroller[strLayer].dragBar = dragBar;
	if (scroller[strLayer].scrollHeight <= 0) {
		scroller[strLayer].hidden = true;
		hideLayer (strLayer + "Zscrollbar");
		hideLayer (strLayer + "Zdragbar");
	} else {
		scroller[strLayer].hidden = false;
		showLayer (strLayer + "Zscrollbar");
		showLayer (strLayer + "Zdragbar");
	}
	return;
}

function resetScroller (strLayer) {
	if (!scroller[strLayer]) return;
	if ((ff.ie && ff.mac) || ff.ns6) temp = scroller[strLayer].layerRef.offsetHeight;
	else temp = scroller[strLayer].layerRef.scrollHeight;
	scroller[strLayer].scrollHeight = temp - scroller[strLayer].height;
	scroller[strLayer].y = 0;
	if (scroller[strLayer].scrollHeight <= 0) {
		hideLayer (strLayer + "Zscrollbar");
		hideLayer (strLayer + "Zdragbar");
	} else {
		showLayer (strLayer + "Zscrollbar");
		showLayer (strLayer + "Zdragbar");
		scroller[strLayer].hidden = false;
	}

	// set clipping and move layer back to zero
	scroller[strLayer].layerRef.style.top = (scroller[strLayer].top - scroller[strLayer].y) + "px";
	scroller[strLayer].layerRef.style.clip = "rect(" + scroller[strLayer].y + "px, " + scroller[strLayer].width + ", " + (Math.floor(scroller[strLayer].height) + Math.floor(scroller[strLayer].y)) + "px, 0px)";
	scroll(strLayer, 0);
	return;
}

function scrollTo (strLayer, intYPosition) {
	if (scroller[strLayer].hidden) return;
	scroller[strLayer].y = parseInt(intYPosition);
	// Move the scrollbar-drag-thingy
	if (scroller[strLayer].dragBar) {
		x = Math.round (scroller[strLayer].top + 11 + (scroller[strLayer].y / scroller[strLayer].scrollHeight) * (scroller[strLayer].height - 43));
		document.getElementById(strLayer + "Zdragbar").style.top = x + "px";
	}
	// Set clipping and move layer
	scroller[strLayer].layerRef.style.clip = "rect(" + scroller[strLayer].y + "px, " + scroller[strLayer].width + ", " + (Math.floor(scroller[strLayer].height) + Math.floor(scroller[strLayer].y)) + "px, 0px)";
	scroller[strLayer].layerRef.style.top = (scroller[strLayer].top - scroller[strLayer].y) + "px";
	return;
}

function scroll (strLayer, intDirection) {
	if (scroller[strLayer].hidden) return;
	
	switch (intDirection) {
		case 0: // stop scrolling
			clearTimeout (scroller[strLayer].timer);
			break;
		case 1: // scroll up
			if (scroller[strLayer].y <= 0) clearTimeout (scroller[strLayer].timer);
			else scroller[strLayer].timer = setTimeout ("scroll('" + strLayer + "', " + intDirection + ")", 30);
			if (scroller[strLayer].y - scrollSpeed <= 0) 	scroller[strLayer].y = 0;
			else scroller[strLayer].y -= scrollSpeed;
			break;
		case 2: // scroll down
			var bAtBottom = scroller[strLayer].y + scrollSpeed >= scroller[strLayer].scrollHeight ? true : false;
			if (!bAtBottom) {
				scroller[strLayer].y += scrollSpeed;
				scroller[strLayer].timer = setTimeout ("scroll('" + strLayer + "', " + intDirection + ")", 30);
			} else {
				scroller[strLayer].y = scroller[strLayer].scrollHeight;
				clearTimeout (scroller[strLayer].timer);
			}
			break;
		default:
			break;
	}

	// move the scrollbar-drag-thingy
	if (scroller[strLayer].dragBar) {
		x = Math.round (scroller[strLayer].top + 11 + (scroller[strLayer].y / scroller[strLayer].scrollHeight) * (scroller[strLayer].height - 43));
		document.getElementById(strLayer + "Zdragbar").style.top = x + "px";
	}
	// set clipping and move layer
	scroller[strLayer].layerRef.style.clip = "rect(" + scroller[strLayer].y + "px, " + scroller[strLayer].width + ", " + (Math.floor(scroller[strLayer].height) + Math.floor(scroller[strLayer].y)) + "px, 0px)";
	scroller[strLayer].layerRef.style.top = (scroller[strLayer].top - scroller[strLayer].y) + "px";
	return;
}

function gotoAnchor (strLayer, strImage, intOffset) {
	if (!intOffset) var intOffset = 0;
	if (document.getElementById(strImage)) {
		var intImgPos = document.getElementById(strImage).offsetTop;
	} else {
		return;
	}

	// check if out of bounds
	// if (intImgPos > (scroller[strLayer].scrollHeight + scroller[strLayer].height)) scroller[strLayer].y = scroller[strLayer].scrollHeight;
	if ((intImgPos + intOffset) > (scroller[strLayer].scrollHeight)) scroller[strLayer].y = scroller[strLayer].scrollHeight;
	else scroller[strLayer].y = intImgPos + intOffset;
	if (scroller[strLayer].y < 0) scroller[strLayer].y = 0;

	// Set clipping and move layer
	scroller[strLayer].layerRef.style.clip = "rect(" + scroller[strLayer].y + "px, " + scroller[strLayer].width + ", " + (Math.floor(scroller[strLayer].height) + Math.floor(scroller[strLayer].y)) + "px, 0px)";
	scroller[strLayer].layerRef.style.top = (scroller[strLayer].top - scroller[strLayer].y) + "px";

	// Move the dragbar
	if (scroller[strLayer].dragBar) {
		x = scroller[strLayer].top + 11 + (scroller[strLayer].y / scroller[strLayer].scrollHeight) * (scroller[strLayer].height - 43);
		document.getElementById(strLayer + "Zdragbar").style.top = x + "px";
	}
	return;
}

var bMouseDown = false;
var bMoveStarted = false;
var strTarget;

function mouseMove (e) {
	if (!bMouseDown) return;
	if (!e) var e = window.event;
	if (!e.clientY) return;

	if (!bMoveStarted) {
		// calculate offset for dragbar
		offsetY = e.clientY - parseInt(document.getElementById(strTarget + "Zdragbar").style.top);
		bMoveStarted = true;
	}
	// calculate the new Y position of dragbar
	newPosY = e.clientY - offsetY;

	// check boundaries
	if (newPosY < scroller[strTarget].top + 11) newPosY = scroller[strTarget].top + 11;
	if (newPosY > (scroller[strTarget].height + scroller[strTarget].top - 32)) newPosY = scroller[strTarget].height + scroller[strTarget].top - 32;

	// Move dragbar to new location
	document.getElementById(strTarget + "Zdragbar").style.top = newPosY + "px";

	maxDragbarMovement = scroller[strTarget].height - 43;
	scroller[strTarget].y = parseInt ((newPosY - (scroller[strTarget].top + 11)) / maxDragbarMovement * scroller[strTarget].scrollHeight);

	scroller[strTarget].layerRef.style.clip = "rect(" + scroller[strTarget].y + "px, " + scroller[strTarget].width + ", " + (Math.floor(scroller[strTarget].height) + Math.floor(scroller[strTarget].y)) + "px, 0px)";
	scroller[strTarget].layerRef.style.top = (scroller[strTarget].top - scroller[strTarget].y) + "px";
	return false;
}

function mouseDown (e) {
	var x;
	var myObject;

	if (!e) var e = window.event;

	// get target for mouse click
	myObject = ff.ie ? e.srcElement : e.target;
	if (!myObject) return;
	if (!myObject.id) return;

	// is it a valid object (i.e. scrollbar thingie)
	if (myObject.id != "" && (myObject.id.indexOf ("scrollbar") != -1) || (myObject.id.indexOf("dragbar") != -1)) {
		x = myObject.id.split ("_")
	} else {
		return;
	}

	bMouseDown = true;
	strTarget = x[0];

	if (x[1] == "scrollbar") {
		// user clicked on the scrollbar (not directly on dragbar), calculate the new Y position of dragbar
		newPosY = e.clientY - 10;
		newPosY -= scroller[strTarget].parentOffset;

		// Check if out of bounds
		if (newPosY < scroller[strTarget].top + 11) newPosY = scroller[strTarget].top + 11;
		if (newPosY > (scroller[strTarget].height + scroller[strTarget].top - 32)) newPosY = scroller[strTarget].height + scroller[strTarget].top - 32;

		// move dragbar to new location
		document.getElementById(strTarget + "Zdragbar").style.top = newPosY + "px";

		// move layer and set clipping
		maxDragbarMovement = scroller[strTarget].height - 43;
		scroller[strTarget].y = (newPosY - (scroller[strTarget].top + 11)) / maxDragbarMovement * scroller[strTarget].scrollHeight;
		scroller[strTarget].layerRef.style.clip = "rect(" + scroller[strTarget].y + "px, " + scroller[strTarget].width + ", " + (Math.floor(scroller[strTarget].height) + Math.floor(scroller[strTarget].y)) + "px, 0px)";
		scroller[strTarget].layerRef.style.top = (scroller[strTarget].top - scroller[strTarget].y) + "px";
		bMouseDown = false;
	}
	return false;
}

function mouseUp (e) {
	if (!e) e = window.event;
	bMouseDown = false;
	bMoveStarted = false;
	strTarget = null;
	return false;
}

// function showLayer: set layer visibility to "visible"
function showLayer (layer) {
	if (!document.getElementById(layer)) return;
	document.getElementById(layer).style.visibility = "visible";
	return;
}

// function hideLayer: set object visibility to "hidden"
function hideLayer (layer) {
	if (!document.getElementById(layer)) return;
	document.getElementById(layer).style.visibility = "hidden";
	return;
}

// function setZIndex: sets z-index for an object
function setZIndex (layer, zIndex) {
	if (!document.getElementById(layer)) return;
	document.getElementById(layer).style.zIndex = zIndex;
	return;
}

document.onmousemove = mouseMove;
document.onmouseup   = mouseUp;
document.onmousedown = mouseDown;

// Functions "overButton" and "outButton" for the "Next" and "Previous" buttons at the bottom of the page
function overButton (tdID) {
	document.getElementById(tdID).style.backgroundColor = "#73A0CA";
	document.getElementById(tdID + "2").style.backgroundColor = "#73A0CA";
	return;
}

function outButton (tdID) {
	document.getElementById(tdID).style.backgroundColor = "#B0D1EF";
	document.getElementById(tdID + "2").style.backgroundColor = "#B0D1EF";
	return;
}

function changeCurrency (strIn, strGoto) {
	if (strIn != "done") {
		parent.parent.frames["main"].showLayer("cover");
		parent.parent.frames["main"].showLayer("coverbg");
		location.search = "?changeCurrency=true&key=" + getRandom() + "&goto=" + strGoto;
	}
}

function submitForm (strFormName) {
	document.forms[strFormName].submit();
}

// function selectOptionSummary
//   selects an option in the Vehicle Summary
var strSelectedProdID = "";
var strSelectedProdIDType = "";
var blnSelectedProdIDIsRemovable = false;
var lastSelectedOptionSummary = -1;

function selectOptionSummary (z, strProdID, strType, bolRemovable, strText) {
	strSelectedProdIDType = strType;

	if (bolRemovable) {
		blnSelectedProdIDIsRemovable = true;
	} else {
		blnSelectedProdIDIsRemovable = false;
	}
	lastSelectedOptionSummary = z;

	// Write the string "strText" to 'trashcan' layer
	if (strText.length > 19) {
		strText = strText.substring (0, 18) + "...";
	}
	document.getElementById("trash").innerHTML = strText;
	document.getElementById("trash").className = "trashActive";
	if (document.all) {
		document.getElementById("trash2").style.cursor = "hand";
	} else {
		document.getElementById("trash2").style.cursor = "pointer";
	}
	strSelectedProdID = strProdID;

	// Change the trashcan image (from closed to open)
	document.getElementById("trashcan").src = "http://media.nbs.volvocars.se/nbs20/img/general/24_trashcan_active.gif";
	return;
}

function deleteOption () {
	if (strSelectedProdID == "") return;

	if (blnSelectedProdIDIsRemovable) {
		if (strSelectedProdIDType == "option") {
			removeOption (strSelectedProdID);
		}
		if (strSelectedProdIDType == "package") {
			removePackage (strSelectedProdID);
		}
	} else {
		alert ("");
	}
	return;
}

function removeOption (strProdCode) {
	parent.location.href = strLink + "&Type=option&Method=removemustattribute&ProdCode=" + strProdCode;
	return;
}

function removePackage (strProdCode) {
	parent.location.href = strLink + "&Type=package&Method=remove&ProdCode=" + strProdCode;
	return;
}

// function getQueryString (varname)
//	Searches the query part of the URL for a specific variable
//	varname = Name of variable to search for
function getQueryString(varname) {
	var st = unescape(location.search);
	if (st.indexOf(varname) != -1){
		var tempst = st.substring(st.indexOf(varname + "=") + varname.length + 1,st.length);
		if (tempst.indexOf("&") != -1) {
			var newtemp = tempst.substring(0, tempst.indexOf("&"));
			return newtemp;
		} else {
			return tempst;
		}
	} else {
		return("");
	}
}

// function getOptionsString(p_strOptions, p_intWinWidth, p_intWinHeight)
// this function constructs the options argument for window.open calls and
// places the popup in the center of the clients screen.
function getOptionsString(p_strOptions, p_intWinWidth, p_intWinHeight) {
	var strOption = ( typeof(p_strOptions) == 'string' && p_strOptions.length > 0 ) ? p_strOptions + "," : "";
	if ( typeof(p_intWinHeight) == 'number' && typeof(p_intWinWidth) == 'number' ) {
		var x = ( (screen.width - p_intWinWidth) > 0 ) ? ((screen.width - p_intWinWidth) / 2) : 0;
		var y = ( (screen.height - p_intWinHeight) > 0 ) ? ((screen.height - p_intWinHeight) / 2 ) : 0;
		strOption += "left=" + x + ",top=" + y;
	}
	return strOption;
}

function getQuickTimeYesNo(iModel, iColor){ // returns true if specified model and color has a quicktime movie.
	var mModColArr = [ // array containing model-number as element 0 och a commaseparated list of colors as element 1.
		['184','01900,18900,41700,42100,42600,42700,44200,44300,44400,44500,44600,44700,44900,45000,45200,60400'],
		['285','01900,18900,41700,42100,42600,42700,44300,44400,44500,44600,44700,44900,60100,60400'],
		['295','01900,18900,41700,42600,44200,44400,44500,44600,44700,44900,45200'],
		['384','01900,18900,41700,42600,42700,44400,44500,44600,44700,44900,45000,45100,60100,60400'],
		['644','23900,24100,24300,24400,24500,24700,24800,32900,33200,33800,33900,34300,34400,34500,34600,34700,34800'],
		['645','23900,24100,24300,24400,24500,24700,24800,32900,33200,33500,33800,33900,34300,34400,34500,34600,34700,34800'],
		['872','01900,18900,41700,42000,42100,42200,42500,42600,42700,42800,43400,43500,43600,43700,44000,44300,44500,44600,44700,45200,60100,60400'],
		['873','01900,18900,41700,42100,42200,42500,42600,42700,42800,43500,43600,44000,44300,44500,44600,44700,45200,60100']
	]

	for (var i=0; i<mModColArr.length; i++){
		if ((mModColArr[i][0] == iModel) && (mModColArr[i][1].indexOf(iColor) != '-1')) { // has quicktime
			return true	// if so, break loop and return true
		}
	}
	return false // the loop was uninterrupted, therefore the model/color has no quicktime.
}

// function for loading dynamic content
function loadDynamicContent(strFileName, strScriptId) {
	var elmScript = document.getElementById(strScriptId);
	var elmHead = document.getElementsByTagName("head").item(0);
	if (elmScript) {
		elmHead.removeChild(elmScript);
	}
	var elmNewScript = document.createElement("script");
	elmNewScript.src = strFileName;
	elmNewScript.type = "text/javascript";
	elmNewScript.id = strScriptId;
	head.appendChild(elmNewScript);
	return 0;
}

function open3D() {
	// if element "flash3DSummary" exists, we're on the summary page
	if (document.getElementById("flash3DSummary")) {
		document.getElementById("flash3DSummary").style.visibility = "visible";
		document.getElementById("flash3DSummaryInfo").style.visibility = "visible";
		document.getElementById("removeItemText").style.visibility = "hidden";
	}

	// if element "flash3D" exists, we're on color or rims page
	if (document.getElementById("flash3D")) {
		document.getElementById("flash3D").style.visibility = "visible";
		// if we're on color page, hide dropdown
		if (document.getElementById("colourGroupDropDown")) {
			document.getElementById("colourGroupDropDown").style.visibility = "hidden";
		}
		// hide summary iframe
		if (document.getElementById("s1summaryFrame")) {
			document.getElementById("s1summaryFrame").style.visibility = "hidden";
		}
	}
	return;
}

function close3D() {
	// if element "flash3DSummary" exists, we're on the summary page
	if (document.getElementById("flash3DSummary")) {
		document.getElementById("flash3DSummary").style.visibility = "hidden";
		document.getElementById("flash3DSummaryInfo").style.visibility = "hidden";
		document.getElementById("removeItemText").style.visibility = "visible";
	}

	// if element "flash3D" exists, we're on color or rims page
	if (document.getElementById("flash3D")) {
		document.getElementById("flash3D").style.visibility = "hidden";
		// if we're on color page, show dropdown
		if (document.getElementById("colourGroupDropDown")) {
			document.getElementById("colourGroupDropDown").style.visibility = "visible";
		}
		// show summary iframe
		if (document.getElementById("s1summaryFrame")) {
			document.getElementById("s1summaryFrame").style.visibility = "visible";
		}
	}
	return;
}

function zoomOceanRace() {
	// summary page
	if (document.getElementById("zoomLayerOceanRace")) {
		document.getElementById("zoomLayerOceanRace").style.visibility = "visible";
		document.getElementById("zoomLayerOceanRaceClose").style.visibility = "visible";
	}
	// rims and color
	if (document.getElementById("zoomLayerOceanRaceRC")) {
		document.getElementById("zoomLayerOceanRaceRC").style.visibility = "visible";
		document.getElementById("zoomLayerOceanRaceCloseRC").style.visibility = "visible";
	}
	// hide trashcan text if present
	if (document.getElementById("removeItemText")) {
		document.getElementById("removeItemText").style.visibility = "hidden";
	}
}

function closeOceanRaceZoom() {
	// summary page
	if (document.getElementById("zoomLayerOceanRace")) {
		document.getElementById("zoomLayerOceanRace").style.visibility = "hidden";
		document.getElementById("zoomLayerOceanRaceClose").style.visibility = "hidden";
	}
	// rims and color
	if (document.getElementById("zoomLayerOceanRaceRC")) {
		document.getElementById("zoomLayerOceanRaceRC").style.visibility = "hidden";
		document.getElementById("zoomLayerOceanRaceCloseRC").style.visibility = "hidden";
	}
	// hide trashcan text if present
	if (document.getElementById("removeItemText")) {
		document.getElementById("removeItemText").style.visibility = "visible";
	}
}

/*
 * FlashObject embed
 * by Geoff Stearns (geoff@deconcept.com, http://www.deconcept.com/)
 *
 * v1.1.1 - 05-17-2005
 *
 * writes the embed code for a flash movie, includes plugin detection
 *
 * Usage:
 *
 *	myFlash = new FlashObject("path/to/swf.swf", "swfid", "width", "height", flashversion, "backgroundcolor");
 *	myFlash.write("objId");
 *
 * for best practices, see:
 *  http://blog.deconcept.com/2005/03/31/proper-flash-embedding-flashobject-best-practices/
 *
 */

var FlashObject = function(swf, id, w, h, ver, c) {
	this.swf = swf;
	this.id = id;
	this.width = w;
	this.height = h;
	this.version = ver;
	this.align = "middle";

	this.params = new Object();
	this.variables = new Object();

	this.redirect = "";
	this.sq = document.location.search.split("?")[1] || "";
	this.bypassTxt = "<p>Already have Macromedia Flash Player? <a href='?detectflash=false&"+ this.sq +"'>Click here if you have Flash Player "+ this.version +" installed</a>.</p>";
	
	if (c) this.color = this.addParam('bgcolor', c);
	this.addParam('quality', 'high'); // default to high
	this.doDetect = getQueryParamValue('detectflash');
}

var FOP = FlashObject.prototype;

FOP.addParam = function(name, value) { this.params[name] = value; }

FOP.getParams = function() { return this.params; }

FOP.getParam = function(name) { return this.params[name]; }

FOP.addVariable = function(name, value) { this.variables[name] = value; }

FOP.getVariable = function(name) { return this.variables[name]; }

FOP.getVariables = function() { return this.variables; }

FOP.getParamTags = function() {
    var paramTags = "";
    for (var param in this.getParams()) {
        paramTags += '<param name="' + param + '" value="' + this.getParam(param) + '" />';
    }
    return (paramTags == "") ? false:paramTags;
}

FOP.getHTML = function() {
    var flashHTML = "";
    if (navigator.plugins && navigator.mimeTypes.length) { // netscape plugin architecture
        flashHTML += '<embed type="application/x-shockwave-flash" src="' + this.swf + '" width="' + this.width + '" height="' + this.height + '" id="' + this.id + '" align="' + this.align + '"';
        for (var param in this.getParams()) {
            flashHTML += ' ' + param + '="' + this.getParam(param) + '"';
        }
        if (this.getVariablePairs()) {
            flashHTML += ' flashVars="' + this.getVariablePairs() + '"';
        }
        flashHTML += '></embed>';
    } else { // PC IE
        flashHTML += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + this.width + '" height="' + this.height + '" name="' + this.id + '" align="' + this.align + '">';
        flashHTML += '<param name="movie" value="' + this.swf + '" />';
        if (this.getParamTags()) {
            flashHTML += this.getParamTags();
        }
        if (this.getVariablePairs() != null) {
            flashHTML += '<param name="flashVars" value="' + this.getVariablePairs() + '" />';
        }
        flashHTML += '</object>';
    }
    return flashHTML;	
}

FOP.getVariablePairs = function() {
    var variablePairs = new Array();
    for (var name in this.getVariables()) { 
    	variablePairs.push(name + "=" + escape(this.getVariable(name))); 
    }
    return (variablePairs.length > 0) ? variablePairs.join("&"):false;
}

FOP.write = function(elementId) {
	if(detectFlash(this.version) || this.doDetect=='false') {
		if (elementId) {
			var x = this.getHTML();
			//var x = "fnurp"
			document.getElementById(elementId).innerHTML = x; // this.getHTML();
		} else {
			//document.write(this.getHTML());
		}
	} else {
		if (this.redirect != "") {
			document.location.replace(this.redirect);
		} else if (this.altTxt) {
			if (elementId) {
				document.getElementById(elementId).innerHTML = this.altTxt +""+ this.bypassTxt;
			} else {
				document.write(this.altTxt +""+ this.bypassTxt);
			}
		}
	}		
}

/* ---- detection functions ---- */
function getFlashVersion() {
	var flashversion = 0;
	if (navigator.plugins && navigator.mimeTypes.length) {
		var x = navigator.plugins["Shockwave Flash"];
		if(x && x.description) {
			var y = x.description;
   			flashversion = y.charAt(y.indexOf('.')-1);
		}
	} else {
		result = false;
	    for(var i = 15; i >= 3 && result != true; i--){
   			execScript('on error resume next: result = IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.'+i+'"))','VBScript');
   			flashversion = i;
   		}
	}
	return flashversion;
}

function detectFlash(ver) {	return (getFlashVersion() >= ver) ? true:false; }

// get value of query string param
function getQueryParamValue(param) {
	var q = document.location.search || document.location.href.split("#")[1];
	if (q) {
		var detectIndex = q.indexOf(param +"=");
		var endIndex = (q.indexOf("&", detectIndex) > -1) ? q.indexOf("&", detectIndex) : q.length;
		if (q.length > 1 && detectIndex > -1) {
			return q.substring(q.indexOf("=", detectIndex)+1, endIndex);
		} else {
			return "";
		}
	}
}

/* add Array.push if needed */
if(Array.prototype.push == null){
	Array.prototype.push = function(item) { this[this.length] = item; return this.length; }
}