// Hold the currently visible box.
var vanns_box_container = null;
var vanns_box_overlay = null;
var vanns_shadow_box = null;
var boxZIndex = 510001;

var toggleWindowedObjectsFlag = true;
var closeFirst = true;
var closeableOverlay = true;

var popupTimeout = 30000;

var loadingImage = null;
if (document.images)
	{
	loadingImage = new Image(16,16);
	loadingImage.src = window.location.protocol + "//www.vanns.com/images/ball_loader.gif";
	}

function showPopupBox(boxId)
	{
	// Disable the flag.
	toggleWindowedObjectsFlag = false;

	if (closeFirst)
		{
		// Close any open boxes.
		closePopupBox();
		}

	try
		{
		// Re-enable the flag.
		toggleWindowedObjectsFlag = true;

		// Turn off the windowed objects.
		toggleWindowedObjects('hidden');

		// Reset the box.
		vanns_box_overlay = null;
		vanns_shadow_box = null;
		vanns_box_container = null;

		// Get the box.
		vanns_box_overlay = document.getElementById('vanns_box_overlay');
		vanns_shadow_box = document.getElementById('vanns_shadow_box');
		vanns_box_container = document.getElementById(boxId);

		// Set the position of the box.
		scrollPopupBox();

		// Show the box.
		vanns_box_overlay.style.display = 'block';
		vanns_shadow_box.style.display = 'block';
		vanns_box_container.style.display = 'block';
		}
	catch (e)
		{
		window.status = e;

		// Re-enable the flag.
		toggleWindowedObjectsFlag = true;
		closePopupBox();
		}
	}

function closePopupBox()
	{
	if (closeableOverlay)
		{
		if (toggleWindowedObjectsFlag)
			{
			// Turn on the windowed objects.
			toggleWindowedObjects('visible');
			}

		try
			{
			vanns_box_overlay.style.display = 'none';
			vanns_box_overlay = null;
			}
		catch (e)
			{}

		try
			{
			vanns_shadow_box.style.display = 'none';
			vanns_shadow_box = null;
			}
		catch (e)
			{}

		try
			{
			vanns_box_container.style.display = 'none';
			vanns_box_container = null;
			}
		catch (e)
			{}
		}
	}

// This is a trick to hide html elements that do not play well with others.
function toggleWindowedObjects(visibility)
	{
	// Get the list of windowed objects.
	var windowedObjects = document.getElementsByTagName("select");

	// Loop through the list of windowed objects.
	for (var i = 0; i < windowedObjects.length; i++)
		{
		// Set the visibility of the windowed object.
		windowedObjects[i].style.visibility = visibility;
		}
	}

// When the window scrolls and a box is visible, scroll the box into position.
window.onscroll = scrollPopupBox;
window.onresize = scrollPopupBox;

function scrollPopupBox()
	{
	// If there is a box, move it.
	if (vanns_box_container !== null)
		{
		// Move the box into the middle of the screen.
		//vanns_box_overlay.style.top = document.body.scrollTop;
		centerBox(vanns_box_container);
		}
	}

// If the user presses the escape or enter keys while a box is visible, do something.
document.onkeyup = checkKeyPress;

function checkKeyPress(e)
	{
	// If there is a box visible, do something.
	if (vanns_box_container !== null && vanns_box_container.style.display === 'block')
		{
		// Get the key code id.
		var keyId = (window.event) ? event.keyCode : e.keyCode;

		// User pressed the esc key.
		if (keyId === 27)
			{
			// Turn the box off.
			closePopupBox();
			return false;
			}
		}

	return true;
	}

function getDimensions(element)
	{
	element = $(element);
	var display = $(element).style.display;
	if (display != 'none' && display != null) // Safari bug
		return {width: element.offsetWidth, height: element.offsetHeight};

	// All *Width and *Height properties give 0 on elements with display none,
	// so enable the element temporarily
	var els = element.style;
	var originalVisibility = els.visibility;
	var originalPosition = els.position;
	var originalDisplay = els.display;
	els.visibility = 'hidden';
	els.position = 'absolute';
	els.display = 'block';

	var originalWidth = element.clientWidth;
	var originalHeight = element.clientHeight;
	els.display = originalDisplay;
	els.position = originalPosition;
	els.visibility = originalVisibility;

	return {width: originalWidth, height: originalHeight};
	}

function $(element)
	{
	if (typeof element == "string")
		{
		element = document.getElementById(element);
		}

	return element;
	}

function centerBox(element)
	{
	var my_width  = 0;
	var my_height = 0;

	if (typeof(window.innerWidth) === 'number')
		{
		my_width  = window.innerWidth;
		my_height = window.innerHeight;
		}
	else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
		{
		my_width  = document.documentElement.clientWidth;
		my_height = document.documentElement.clientHeight;
		}
	else if (document.body && (document.body.clientWidth || document.body.clientHeight))
		{
		my_width  = document.body.clientWidth;
		my_height = document.body.clientHeight;
		}

	vanns_box_overlay.style.width = my_width + 'px';

	var scrollY = 0;

	if (document.documentElement && document.documentElement.scrollTop)
		{
		scrollY = document.documentElement.scrollTop;
		}
	else if (document.body && document.body.scrollTop)
		{
		scrollY = document.body.scrollTop;
		}
	else if (window.pageYOffset)
		{
		scrollY = window.pageYOffset;
		}
	else if (window.scrollY)
		{
		scrollY = window.scrollY;
		}

	var elementDimensions = getDimensions(element);

	var pageWrapper = null;
	try
		{
		pageWrapper = document.getElementById('pagewrapper');
		}
	catch (e)
		{
		}

	var setX = (( 830 - elementDimensions.width  ) - (pageWrapper.offsetLeft / 2)) / 2;
	var setY = ( my_height - elementDimensions.height ) / 2 + scrollY;

	setX = ( setX < 0 ) ? 0 : setX;
	setY = ( setY < 0 ) ? 0 : setY;

	element.style.position = 'absolute';
	element.style.left = setX + "px";
	element.style.top = setY + "px";
	element.style.display = 'block';
	element.style.zIndex = boxZIndex;
	vanns_shadow_box.style.left = (setX + 5) + "px";
	vanns_shadow_box.style.top = (setY + 5) + "px";
	vanns_shadow_box.style.width = elementDimensions.width + "px";
	vanns_shadow_box.style.height = elementDimensions.height + "px";
	vanns_shadow_box.style.zIndex  = boxZIndex - 1;
	}

function toggleContainer(containerId)
	{
	var container = null;
	try
		{
		container = document.getElementById(containerId);
		if (container.style.display === 'none' || container.style.display === '')
			{
			container.style.display = "block";
			}
		else
			{
			container.style.display = "none";
			}
		}
	catch (e)
		{}
	}

function showHiddenContainer(linkId, containerId)
	{
	var link = null;
	var container = null;
	try
		{
		link = document.getElementById(linkId);
		container = document.getElementById(containerId);
		container.style.display = "block";
		link.style.display = "none";
		}
	catch (e)
		{}
	}

function compareSelections(root_uri)
	{
	// Get the list of compare checkboxes.
	var compareSelectors = document.getElementsByName("compare_selector");

	// Loop through the list of objects and collect the skus.
	var skusList = '';
	for (var i = 0; i < compareSelectors.length; i++)
		{
		if (compareSelectors[i].checked !== false)
			{
			// Collect the sku.
			skusList += '/' + compareSelectors[i].value;
			}
		}

	try
		{
		// Add the root sku to the list (if there is a root sku).
		skusList = '/' + rootSku + skusList;
		}
	catch (e)
		{
		}

	// Make sure we have enough to compare.
	if (skusList === '' || (skusList.substring(1, skusList.length)).split('/').length < 2)
		{
		window.alert("Please select at least two items to compare.");
		return;
		}
	else if (skusList !== '' && (skusList.substring(1, skusList.length)).split('/').length >= 6)
		{
		window.alert("Only five items can be compared at one time.  Others will be ignored.");
		}

	// Go to the compare page.
	window.location.href = root_uri + "servlet/compare" + skusList;
	}

// ----------------------------------------------------------------------------------------------------------------------
// Do the custom popup boxes
// ----------------------------------------------------------------------------------------------------------------------

function popPreOrderBox(sku)
	{
	showSplashPopup('Adding Item To Cart...');
	DwrPopupBoxes.getPreOrderPopupBox(sku,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function popBundlePreOrderBox(sku, bundleId)
	{
	showSplashPopup('Adding Item To Cart...');
	DwrPopupBoxes.getBundlePreOrderPopupBox(sku, bundleId,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function popAddForSpecialPriceBox(sku)
	{
	showSplashPopup('Adding Item To Cart...');
	DwrPopupBoxes.getAddForSpecialPriceBox(sku,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function popBundleAddForSpecialPriceBox(sku, bundleId)
	{
	showSplashPopup('Adding Item To Cart...');
	DwrPopupBoxes.getBundleAddForSpecialPriceBox(sku, bundleId,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function checkItemForFreeBundles(sku)
	{
	showSplashPopup('Adding Item To Cart...');
	var callMetaData = {
		callback: checkBundles,
		arg: sku,
		timeout: popupTimeout,
		errorHandler: popBoxError
		};

	DwrPopupBoxes.checkItemForFreeBundles(sku, callMetaData);
	return false;
	}

function checkBundles(freeBundleHTML, sku)
	{
	if (freeBundleHTML !== null)
		{
		dwr.util.setValue("vanns_box_container", freeBundleHTML, {escapeHtml: false});
		closeFirst = false;
		showPopupBox('vanns_box_container');
		closeFirst = true;
		try
			{
			loadMBoxInputImageData();
			}
		catch (e)
			{
			}
		}
	else
		{
		try
			{
			var addToCartForm = document.getElementById('item_add_to_cart_' + sku);
			addToCartForm.submit();
			}
		catch(e)
			{
			}
		}
	}

function popClearanceItemBox(sku, clearanceCode)
	{
	showSplashPopup('Adding Item To Cart...');
	DwrPopupBoxes.getClearanceItemBox(sku, clearanceCode,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function popNotificationBox(sku)
	{
	showSplashPopup();
	DwrPopupBoxes.getNotificationBox(sku,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function popMyPriceFormBox(sku)
	{
	showSplashPopup();
	DwrPopupBoxes.getMyPriceFormBox(sku,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function postMyPriceFormRequest(myPriceSku)
	{
	try
		{
		var price = document.getElementById('price');
		var customerName = document.getElementById('customer_name');
		var emailAddress = document.getElementById('email_address');
		var phoneNumber = document.getElementById('phone_number');

		// Test the price.
		if (price.value.length == 0 || isNaN(parseFloat(price.value)) || parseFloat(price.value) <= 0)
			{
			window.alert("Please enter a valid price.\n(example: 200.00)");
			price.focus();
			return false;
			}
		// Test the customer name.
		else if (customerName.value.length == 0)
			{
			window.alert("Please enter your name.");
			customerName.focus();
			return false;
			}
		// Test the email address.
		else if (emailAddress.value.length == 0 || !(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/.test(emailAddress.value)))
			{
			window.alert("Please enter a valid email address.");
			emailAddress.focus();
			return false;
			}
		// Test the phone number.
		else if (phoneNumber.value.length > 0 && !(/^\(?\d{3}\)?([-\/\.\s]?)\d{3}([-\/\.\s]?)\d{4}$/.test(phoneNumber.value)))
			{
			window.alert("Please enter a valid phone number.\n(example: 123-456-7890)");
			phoneNumber.focus();
			return false;
			}
		else
			{
			// Close the myprice window.
			closePopupBox();

			// Submit the request.
			showSplashPopup('Thank you for your request.');
			DwrPopupBoxes.postMyPriceRequest(myPriceSku, price.value, customerName.value, emailAddress.value, phoneNumber.value);

			// Reset the form.
			price.value = '';
			customerName.value = '';
			emailAddress.value = '';
			phoneNumber.value = '';
			}
		}
	catch (e)
		{
		window.alert(e);
		}
	}

function popEmailBetterPriceBox(sku)
	{
	showSplashPopup();
	DwrPopupBoxes.getEmailBetterPriceBox(sku,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function popCompareAttributeDefinitionBox(attributeId)
	{
	showSplashPopup();
	DwrPopupBoxes.getCompareAttributeDefinitionBox(attributeId,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function popItemDetailsBox(sku)
	{
	showSplashPopup();
	DwrPopupBoxes.getItemDetailsBox(sku,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function popFinanceDetailsBox(financePromoId)
	{
	showSplashPopup();
	DwrPopupBoxes.getFinanceDetailsBox(financePromoId,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function popMediaViewerBox(sku, clearance_code, image_index, defaultTab)
	{
	showSplashPopup('Loading Media...');
	DwrPopupBoxes.getMediaViewerBox(sku, clearance_code, image_index, defaultTab,
		{
		callback: popBox,
		timeout: popupTimeout,
		errorHandler: popBoxError
		});
	}

function showInlineMediaViewer(imageName)
	{
	var imageContent = '<img src="' + imageName + '" width="490" height="490" border="0" />';
	dwr.util.setValue("image_viewer_container", imageContent, {escapeHtml: false});
	document.getElementById('imageViewerBox').style.display = 'block';
	}

function selectMediaTab(tabId, mediaTabsAvailable)
	{
	resetMediaTabs(mediaTabsAvailable);

	var activeTab = null;
	var activeContainer = null;
	try
		{
		activeTab = document.getElementById(tabId + '_tab');
		activeContainer = document.getElementById(tabId + '_container');
		if (activeTab !== null)
			{
			activeTab.className = 'activeMediaViewerTab';
			activeContainer.style.display = 'block';
			}
		}
	catch (e)
		{
		}
	}

function resetMediaTabs(mediaTabsAvailable)
	{
	for (var i = 0; i < mediaTabsAvailable.length; i++)
		{
		var tab = null;
		var container = null;
		try
			{
			tab = document.getElementById(mediaTabsAvailable[i] + '_tab');
			container = document.getElementById(mediaTabsAvailable[i] + '_container');
			if (tab !== null)
				{
				tab.className = 'inactiveMediaViewerTab';
				container.style.display = 'none';
				}
			}
		catch (e)
			{
			}
		}
	}

function displayMediaImage(imageName, imageTitle)
	{
	if (imageName != null && imageName !== undefined)
		{
		var imageDisplay = '<img src="' + imageName + '" width="490" height="490" border="0" />';
		if (imageTitle == null || imageTitle == undefined || imageTitle == '')
			{
			imageTitle = '&nbsp;';
			}
		imageDisplay += '<p style="font-size: 10px; color: #000000; padding: 0px; margin: 0px; padding-top: 10px;">' + imageTitle + '</p>';
		dwr.util.setValue("media_content_area", imageDisplay, {escapeHtml: false});
		}
	}

var videoPlayer = null;
function onFlowPlayerReady()
	{
	try
		{
		if (videoPlayer !== null && !videoPlayer.getIsPlaying())
			{
			videoPlayer.DoPlay();
			}
		}
	catch (e)
		{
		}
	}

function popVideoFlowPlayerBox(url)
	{
	videoPlayer = null;
	showSplashPopup();

	// Make sure the browser can display this flash.
	var hasRequiredVersion = false;
	try
		{
		hasRequiredVersion = DetectFlashVer(8, 0, 0);
		}
	catch (e)
		{
		}

	if (hasRequiredVersion)
		{
		loadVideoPlayer(url);
		showPopupBox('videoFlowPlayerBox');
		}
	else
		{
		window.alert("Please upgrade your version of Flash.");
		}
	}

function showInlineVideoFlowPlayer(url)
	{
	videoPlayer = null;

	// Make sure the browser can display this flash.
	var hasRequiredVersion = false;
	try
		{
		hasRequiredVersion = DetectFlashVer(8, 0, 0);
		}
	catch (e)
		{
		}

	if (hasRequiredVersion)
		{
		document.getElementById('videoFlowPlayerBox').style.display = 'block';
		loadVideoPlayer(url);
		}
	else
		{
		window.alert("Please upgrade your version of Flash.");
		}
	}

function loadVideoPlayer(url)
	{
	try
		{
		videoPlayer = flashembed("player_box",
			window.location.protocol + "//static.vanns.com/movies/swfs/FlowPlayerDark.swf",
			{
			config:
				{
				autoPlay: true,
				autoBuffering: true,
				initialScale: 'fit',
				scaling: 'fit',
				loop: false,
				autoRewind: true,
				useNativeFullScreen: true,
				videoFile: url,
				controlsOverVideo: 'ease',
				controlBarBackgroundColor: -1,
				controlBarGloss: 'low'
				}
			});
		}
	catch (e)
		{
		window.alert("We were unable to load the video in your browser.\nPlease upgrade your browser or try a different one.");
		return;
		}
	}

// ----------------------------------------------------------------------------------------------------------------------
// These are the callback functions.
// ----------------------------------------------------------------------------------------------------------------------

function popSplashPopup(message, loadingImage)
	{
	var defaultContent = '<table cellpadding="0" cellspacing="0" border="0" style="display: block; padding: 10px; border: 1px solid #000000; background-color: #FFFFFF; z-index: ' + boxZIndex + ';"><tr><td align="center" valign="middle">';
	if (message !== null && message !== undefined)
		{
		defaultContent += '<h3 style="font-size: 9pt; padding-bottom: 10px;">' + message + '</h3>';
		}
	else
		{
		defaultContent += '<h3 style="font-size: 9pt; padding-bottom: 10px;">Loading...</h3>';
		}
	if (loadingImage !== null && loadingImage !== undefined)
		{
		defaultContent += '<img src="' + loadingImage + '" width="16" height="16" border="0" />';
		}
	else
		{
		defaultContent += '<img src="' + window.location.protocol + '//www.vanns.com/images/ball_loader.gif" width="16" height="16" border="0" />';
		}
	defaultContent += '</td></tr></table>';
	dwr.util.setValue("vanns_box_container", defaultContent, {escapeHtml: false});
	closeFirst = false;
	showPopupBox('vanns_box_container');
	closeFirst = true;
	}

function showSplashPopup(message, loadingImage)
	{
	dwr.engine.setPreHook(function()
		{
		var defaultContent = '<table cellpadding="0" cellspacing="0" border="0" style="display: block; padding: 10px; border: 1px solid #000000; background-color: #FFFFFF; z-index: ' + boxZIndex + ';"><tr><td align="center" valign="middle">';
		if (message !== null && message !== undefined)
			{
			defaultContent += '<h3 style="font-size: 9pt; padding-bottom: 10px;">' + message + '</h3>';
			}
		else
			{
			defaultContent += '<h3 style="font-size: 9pt; padding-bottom: 10px;">Loading...</h3>';
			}
		if (loadingImage !== null && loadingImage !== undefined)
			{
			defaultContent += '<img src="' + loadingImage + '" width="16" height="16" border="0" />';
			}
		else
			{
			defaultContent += '<img src="' + window.location.protocol + '//www.vanns.com/images/ball_loader.gif" width="16" height="16" border="0" />';
			}
		defaultContent += '</td></tr></table>';
		dwr.util.setValue("vanns_box_container", defaultContent, {escapeHtml: false});
		closeFirst = false;
		showPopupBox('vanns_box_container');
		closeFirst = true;
		});
	dwr.engine.setPostHook(function()
		{
		closePopupBox();
		destroySplashPopup();
		});
	}

function destroySplashPopup()
	{
	dwr.engine.setPreHook(null);
	dwr.engine.setPostHook(null);
	}

function popBox(pageContents)
	{
	if (pageContents !== null)
		{
		dwr.util.setValue("vanns_box_container", pageContents, {escapeHtml: false});
		closeFirst = false;
		showPopupBox('vanns_box_container');
		closeFirst = true;
		try
			{
			loadMBoxInputImageData();
			}
		catch (e)
			{
			}
		}
	}

function popBoxError(message)
	{
	window.status = message;
	}
