//-------------------------------------------------------------------------- References

/**
 * Reference to the Flex application in the HTML page.
 */
var flashUI;

/**
 * Reference to the navigation popup window.
 */
var navigatorWindow;

/**
 * Reference to the navigation frame.
 */
var navigatorUI;

/**
 * The product array
 */
 var products;
 
/**
 * The checkoutId
 */
 var checkoutId;

//-------------------------------------------------------------------------- Calls from Flex

/**
 * Launches the checkout navigator.
 */
function openCheckoutNavigator()
{
	if (flashUI == null)
		flashUI = document.getElementById("myvboApp");
	if (flashUI == null)
		alert("Could not obtain reference to Flex application");
	
	navigatorWindow = window.open("checkoutNavigator/html/checkoutframes.html");
	
	if (navigatorWindow == undefined)
 		flashUI.onPopupFails();
}

function setCheckoutId(value)
{
	checkoutId = value;
}

function setProducts(value)
{
	products = value;
	var productPicker = navigatorUI.getElementById("productPicker");
	
	var comboText = "";
	for (var i = 0;  i < products.length;  i++)
	{
		comboText += '<option value="' + getProductKey(products[i]) + '">' + products[i].label + '</option>\n';
	}
	
	if (productPicker.outerHTML == undefined)
		productPicker.innerHTML = comboText; // Most browsers
	else
		productPicker.outerHTML = "<select id='productPicker' onChange='onChangeProduct()'>" + comboText + "</select>"; // Internet Explorer
}

function setCheckoutName(name)
{
	navigatorUI.getElementById("checkoutName").innerHTML = name;
}

function setCheckoutInstructions(instructions)
{
	navigatorUI.getElementById("instructions").innerHTML = instructions;
}

function setNextButtonVisibility(value)
{
	var btnNext = navigatorUI.getElementById("nextButton");
	btnNext.style.visibility = value ? "visible" : "hidden";
}

function setStoreURL(url)
{
	navigatorWindow.frames[1].location = url;
}

//-------------------------------------------------------------------------- Calls from HTML

/**
 * Callback from checkoutnavigator.html which indicates that the frame has loaded.
 * It returns a reference to this scripting file so that the frame can more
 * easily invoke the services in this file:
 *
 * 		- onClickNext()
 *		- onClickDelete()
 *		- onClickMarkComplete())
 *		- onClickCancelCheckout())
 */
function onNavigationFrameLoaded(window, frame)
{
	if (flashUI == null)
		flashUI = document.getElementById("myvboApp");
	
	navigatorWindow = window;
	navigatorUI = frame;
	flashUI.onNavigatorCreated();	
	return self;
}

function onClickNext()
{
	var productPicker = navigatorUI.getElementById("productPicker");
	if (productPicker.selectedIndex + 1 < productPicker.options.length)
	{
		productPicker.selectedIndex += 1;
		onProductChanged()
	}
}

function onProductChanged()
{		
	var cmbProducts = navigatorUI.getElementById("productPicker");
	var item = products[cmbProducts.selectedIndex];		
	setStoreURL(item.url);	
}

function onClickDelete()
{
	var productPicker = navigatorUI.getElementById("productPicker");
	flashUI.onDeleteItem(checkoutId, productPicker.options[productPicker.selectedIndex].value);
}

function onClickMarkCompleted()
{
	navigatorWindow.close();
	flashUI.onCheckoutComplete(checkoutId);
}

function onClickCancelCheckout()
{
	navigatorWindow.close();
	flashUI.onCheckoutCanceled(checkoutId);
}

//-------------------------------------------------------------------------- Helper functions

function getProductKey(product)
{
	return "product__" + product.id
}
