﻿// bAjax Client Library
// (c) 2006 Bracket Productions, All Rights Reserved

var warningBox = 'warningBox';
var logInOutBox = 'loginTease';
var loginPanel = 'loginPanel';
var cartPanel = 'cartSummaryPanel';
var cartSummary = 'topNavRight';

///////////////////////////////////////////////////////////////////
// Basic Functions
///////////////////////////////////////////////////////////////////

function getElement(id)
{
    return document.getElementById(id);
}

function showDivById(divName)
{
    getElement(divName).style.visibility = 'visible';
}

function hideDivById(divName)
{
    getElement(divName).style.visibility = 'hidden';
}

function showBlockById(divName)
{
    getElement(divName).style.display = 'block';
}

function hideBlockById(divName)
{
    getElement(divName).style.display = 'none';
}
    
function setInnerHtml(divName, newText)
{
    getElement(divName).innerHTML = newText;
}

function getInnerHtml(divName)
{
    return getElement(divName).innerHTML;
}

function setCookie(cookieName,cookieValue,nDays) 
{
    var today = new Date();
    var expire = new Date();
    if (nDays==null || nDays==0) nDays=1;
    expire.setTime(today.getTime() + 3600000*24*nDays);
    document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

///////////////////////////////////////////////////////////////////
// Validation Functions
///////////////////////////////////////////////////////////////////

function isStringEmail(src) {
     var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
     var regex = new RegExp(emailReg);
     return regex.test(src);
  }

function isInt (str)
{
	var i = parseInt (str);

	if (isNaN (i))
		return false;

	i = i . toString ();
	if (i != str)
		return false;

	return true;
}

///////////////////////////////////////////////////////////////////
// Warning Displays
///////////////////////////////////////////////////////////////////

function displayWarning(warningText)
{
    setInnerHtml(warningBox, warningText);
    showDivById(warningBox);
}

function clearWarning()
{
    setInnerHtml(warningBox, '');
    hideDivById(warningBox);
}

///////////////////////////////////////////////////////////////////
// PageRefresh
///////////////////////////////////////////////////////////////////

var reconnectCount = 0;
var reconnectMax = 500;

function reconnectPage()
{
    reconnectCount++;
    if (reconnectCount < reconnectMax)
    {
        var img = new Image(1,1);
        img.src = 'Reconnect.aspx';
    }
}

function setupReconnection()
{
    window.setInterval('reconnectPage()', 300000); //Set to length required
}

///////////////////////////////////////////////////////////////////
// Login System
///////////////////////////////////////////////////////////////////

var loginTimerID = 0;
var loginTimerRunning = false;
var loginTimerTicks = 0;
var loginRequiresRefresh = false;
var showCartOnLoginRefresh = true;

function loginRefresh()
{
    pagelets_LogInOut.LoginRefresh(loginRefreshCallback);
}

function loginRefreshCallback(result)
{
    if (result.value > -1)
    {
        loginBoxNoUser(result.value);
    } else {
        loginBoxFirstUser();
    }
    if (showCartOnLoginRefresh) showDivById(cartPanel);
}

function loginBoxNoUser(cartTotal)
{
    hideDivById(loginPanel);
    hideDivById(cartPanel);
    var loginText = "You are not logged in.<br />";
    loginText += "<a id=\"LoginLink\" href=\"#\" onClick=\"startLogin()\">Login or create an account.</a>"
    setInnerHtml(logInOutBox, loginText);
    
    updateCartDisplay(cartTotal);
}

function loginBoxFirstUser()
{
    hideDivById(loginPanel);    
    hideDivById(cartPanel);
    pagelets_LogInOut.GetCurrentUser(loginBoxUser);
}

function loginBoxUser(callback)
{
    hideDivById(loginPanel);  
    hideDivById(cartPanel);
    var userObject = callback.value;
    
    var txt = "Welcome: "+userObject.email+".<br />";
    txt += "<a href=\"#\" onClick=\"logoutClick();\">Logout</a>";
    setInnerHtml(logInOutBox, txt);
    
    updateCartDisplay(userObject.cartTotal);
}

function logoutClick() 
{
    setInnerHtml(logInOutBox, "Logging out...");
    pagelets_LogInOut.Logout(logoutDone);
}

function logoutDone()
{
    loginBoxNoUser(0);
}

function startLogin()
{
    showDivById(loginPanel);
    hideDivById(cartPanel);
}

function doLogin(buttonObject)
{
    var success = true;
    buttonObject.value = "Validating";
    
    var emailAddress = document.getElementById('emailAddress').value
    var password = getElement('Password').value
    
    if (emailAddress == "") 
    {
        success = false;
        setInnerHtml("addressValidation", "You must enter an email address.");
    }
    if (success && !isStringEmail(emailAddress))
    {
        success = false;
        setInnerHtml("addressValidation", "Please enter a valid email address.");        
    }
    if (success && password == "")
    {
        success = false;
        setInnerHtml("passwordValidation", "You must enter a password.");
    }
    
    if (success == true)
    {
        // Start a timer to keep adding dots to the login button
        if (loginTimerRunning) clearTimeout(loginTimerID);
        loginTimerRunning = true;
        loginTimerTicks = 0;
        loginTimerID = setTimeout("loginTick()", 500);
        
        // Call the server to continue the login process
        pagelets_LogInOut.AttemptLogin(emailAddress, password, loginFinal);
    } 
    else
    {
        // Validation failed - stop
        buttonObject.value = "Login";
    }
}

function loginFinal(result)
{
    // Reset to normal state
    if (loginTimerRunning) clearTimeout(loginTimerID);
    loginTimerRunning = false;
    getElement("loginButton").value = "Login";
    
    // Display user feedback
    if (result.value == null)
    {
        setInnerHtml("loginError", "Incorrect username or password. <a href=\"LostPassword.aspx\">Lost Password Wizard</a>.");
    }
    else
    {
        setCookie("username", result.value.email, 60);
        setCookie("userid", result.value.userid, 60);
    
        if (loginRequiresRefresh != true)
        {
            window.location.reload(true);
        } else {
            loginBoxUser(result);
        }
    }
}

function loginTick()
{
    if (loginTimerRunning)
    {
        loginTimerTicks++;
        var buttonText = "Validating";
        for (i=0; i<loginTimerTicks; i++)
        {
            buttonText += ".";
        }
        getElement("loginButton").value = buttonText;
        if (loginTimerTicks > 20)
        {
            loginTimerRunning = false;
            setInnerHtml("loginError", "Unable to contact server. Please try again");
            getElement("loginButton").value = "Login";
        } 
        else
        {
        loginTimerID = setTimeout("loginTick()", 500);
        }
    }
}

///////////////////////////////////////////////////////////////////
// Mini Cart System
///////////////////////////////////////////////////////////////////

var miniCartPage = 1;

function updateCartDisplay(cartTotal)
{
    var cartText = "<a href=\"#\" onclick=\"showCartPanel()\">";
    cartText += "<img src=\"images/top_cart.gif\" alt=\"Shopping Cart\" width=\"23\" height=\"20\" border=\"0\" align=\"middle\" />";
    cartText += " " +cartTotal+" Items</a>";
    setInnerHtml(cartSummary, cartText);
}

function showCartPanel()
{
    hideDivById(loginPanel);
    showDivById(cartPanel);
    setInnerHtml('cartSummaryContents', "Please wait...");
    pagelets_LogInOut.GetCartHtml(miniCartPage, drawCartPanel);
}

function hideCartPanel()
{
    hideDivById(cartPanel);
}

function drawCartPanel(result)
{
    setInnerHtml('cartSummaryContents', result.value);
}

function addToCart(skuCode, quantityBox)
{
    var quantityBoxElement = getElement(quantityBox);
    var quantity = quantityBoxElement.value;
    displayWarning("Please wait");
    hideCartPanel();
    pagelets_LogInOut.AddToCart(skuCode, quantity, addToCartCallback);
}

function addToCartCallback(result)
{
    clearWarning();
    loginRefresh();   
    showCartPanel();
}

function cartQtyChange(callingBox, callingID)
{
    var newQuantity = callingBox.value;
    var proceed = true;
    
    if (newQuantity != "") 
    {
        if (isInt(newQuantity))
        {
            if (newQuantity < 1)
            {
                if (!confirm("Do you want to remove this item from your shopping cart?")) {
                    proceed = false;
                }
            }
        } else {
            newQuantity.value = "1";
            alert("Please enter quantities as a number.");
            proceed = false;
        }
        
        if (proceed) {
            pagelets_LogInOut.UpdateCartQuantity(callingID, newQuantity, cartQtyCallback);
        } else {
            showCartPanel();
        }
    }
}

function cartQtyCallback(result)
{
    showCartPanel();
    loginRefresh();
}

function cartSetPage(pageNumber)
{
    miniCartPage = pageNumber;
    showCartPanel();
}

///////////////////////////////////////////////////////////////////
// Lost Password System
///////////////////////////////////////////////////////////////////

function LostPasswordClick()
{
    getElement("RetrieveIt").value = "Retrieving password...";
    pagelets_LostPassword.RetrievePassword(getElement("emailAddress").value, LostPasswordResult);
}

function LostPasswordResult(resultCode)
{
    getElement("RetrieveIt").value = "Email Me My Password";
    if (resultCode.value != "NO")
    {
        //setInnerHtml('LostPasswordBody', "Your password has been emailed to you. For quick reference, it is: "+resultCode.value);
        setInnerHtml('LostPasswordBody', "Your password has been emailed to you.");
    } else {        
        setInnerHtml('LostPasswordBody', "Sorry, but we were unable to find a user account with that email address.");
    }
}

///////////////////////////////////////////////////////////////////
// File Upload System
///////////////////////////////////////////////////////////////////

function checkFileFormat(fileControl)
{
    if (fileControl.value.length > 3) {
        var validExtensions = "|bmp|gif|jpg|png|tif|tiff|jpeg|exif|tga|";
        var extension = '|' + fileControl.value.substr(fileControl.value.lastIndexOf('.')+1) + '|';
        var valid = true;
        extension = extension.toLowerCase();
        if (validExtensions.indexOf(extension) < 0) 
        {
            fileControl.value = "";
            alert("This file format is not supported.");
            valid = false;
        } 
        
        if (valid)
        {
            // Get links to fields
            var par = window.parent.document;
            var num = par.getElementsByName('bframe').length -1;
            
            /*for (num=0; num<par.getElementsByName('bframe').length; num++)
            {
                var iframe = par.getElementsByName('bframe')[num];

                // Hide the iframe
                iframe.style.height = '0px';
                iframe.style.width = '0px';
                iframe.style.visibility = 'hidden';
            }*/
            var i;
            var counter = par.getElementById('frameCounter').value;
            //alert(counter);
            for (i=0; i<counter; i++)
            {
                var iframeId = 'i'+i;
                //alert(iframeId);
                var iframe = par.getElementById(iframeId);
                if (iframe)
                {
                    iframe.style.visibility = 'hidden';
                    iframe.style.height = '0px';
                    iframe.style.width = '0px';
                }
            }
            
            // Set the status
            var images = par.getElementById('uploadStatus');
            var new_div = par.createElement('div');
            var new_img = par.createElement('img');
            var new_span = par.createElement('span');
            new_div.id = "file!"+fileControl.value;
            new_span.innerHTML = fileControl.value;
            new_img.src = "images/uploader/indicator.gif";
            new_div.appendChild(new_img);
            new_div.appendChild(new_span);
            images.appendChild(new_div);
            
            // Create another upload box
            var iframeHolder = par.getElementById('uploadBuilder');
            var new_iframe = par.createElement('iframe');
            new_iframe.src = "EPrintUploader.aspx";
            new_iframe.frameBorder = '0';
            new_iframe.name = "bframe";
            new_iframe.height = "24px";
            new_iframe.id = "i"+counter;
            counter++;
            par.getElementById('frameCounter').value = counter;
            iframeHolder.appendChild(new_iframe);
            
            // send
            getElement("iform").submit();
        }
    }
}

var uploaderTimer;

function startUploaderBasket()
{
    loginRequiresRefresh = true;
    uploaderTimer = setTimeout("uploadBasketRefresh()", 1000);
}

function uploadBasketRefresh()
{
    uploaderTimer = setTimeout("uploadBasketRefresh()", 5000);
    EPrintsUpload.GetImageBasket(uploadBasketCallback);
}

function uploadBasketCallback(res)
{
    var ImageList = "";

    for (i=0; i<res.value.length; i++)
    {
        ImageList += "<div style=\"float: left; padding: 4px;\"><img src=\"" + res.value[i].imageUrl + "\" border=\"0\" width=\"75\"></img><br />";
        ImageList += "<a href=\"#\" onclick=\"uploadBasketRemoveFile(" + res.value[i].imageId + ")\">";
        ImageList += "<img src=\"images/buttons/x-close.gif\" border=\"0\"> Remove File</a></div>";
        
        var parentDiv = getElement("uploadStatus")
        
        if (parentDiv.childNodes) {
            for (j=0; j<parentDiv.childNodes.length; j++) {
                if (parentDiv.childNodes[j])
                {
                    if (parentDiv.childNodes[j].id)
                    {
                        var divName = parentDiv.childNodes[j].id;
                        if (divName.indexOf(res.value[i].originalFilename)>-1)
                        {
                            parentDiv.removeChild(parentDiv.childNodes[j]);
                        }
                    }
                }
            }
        }
    }
    
    setInnerHtml("uploadedImagesList", ImageList);
}

function uploadBasketRemoveFile(fileId)
{
    var discard = EPrintsUpload.RemoveImage(fileId);
    loginRefresh();
}

function setDefaultPhotoBook(bookControl)
{
    var discard = EPrintsUpload.SetDefaultBook(bookControl.value);
}

function EPphotobookAddBook()
{
    var bookName = getElement("newBookName").value;
    if (bookName.length < 3)
    {
        alert("Please use a longer PhotoBook name.");
    } else {
        displayWarning("Please wait...");
        EPrintsUpload.createBook(bookName, photobookAddBookDone);
    }
}

function disableUploads()
{
    //setInnerHtml("eprintsImageUploadPanel", "Before you can upload images, you must create a PhotoBook.");
}

function pbSetMode(mode)
{
    if (mode == 'pb')
    {
        hideBlockById("uploadToCart");
        showBlockById("uploadToPhotobook");
        showBlockById("selectPhotoBook");
        var discard = EPrintsUpload.SetUploadMode("photobook");
    } 
    else 
    {
        showBlockById("uploadToCart");
        hideBlockById("uploadToPhotobook");
        hideBlockById("selectPhotoBook");
        var discard = EPrintsUpload.SetUploadMode("cart");
    }
}

///////////////////////////////////////////////////////////////////
// Image Basket / Options Setting
///////////////////////////////////////////////////////////////////

var eprintsPricing;
var imageList;
var showImage = 0;

function setupBasket()
{
    displayWarning("Please wait...");
    
    loginRequiresRefresh = true;

    // Populate express options
    ImageBasket.getPriceOptions(setupExpress);
}

function setupExpress(result)
{
    // Store pricing
    eprintsPricing = result.value;
    
    // Get images
    ImageBasket.getImages(setupBasketImages);
}

function setupBasketImages(result)
{
    imageList = result.value;
    
    // Stop asking to wait...
    clearWarning();
    
    // Render
    basketRender();
}

function basketRender()
{       
    if (showImage > 0)
    {
        location.href = "ImageBasket.aspx?imageid=" + showImage + "#image" + showImage;
    }
}

function getPrintQty(imageId, printSize)
{
    var result=0;
    var i,j;
    
    for (i=0; i<imageList.length; i++)
    {
        if (imageList[i].imageId == imageId) 
        {
            if (imageList[i].Prints && imageList[i].Prints.length>0) {
                for (j=0; j<imageList[i].Prints.length; j++)
                {
                    if (imageList[i].Prints[j].size == printSize)
                    {
                        result = imageList[i].Prints[j].quantity;
                    }
                }
            } else { return 0; }
        }
    }
    
    return result;
}

function getWalletQty(imageId)
{
    var result=0;
    var i,j;
    
    for (i=0; i<imageList.length; i++)
    {
        if (imageList[i].imageId == imageId) 
        {
            if (imageList[i].Prints && imageList[i].Prints.length>0) {
                for (j=0; j<imageList[i].Prints.length; j++)
                {
                    if (imageList[i].Prints[j].size.indexOf("Wallets")!=-1)
                    {
                        result += imageList[i].Prints[j].quantity;
                    }
                }
            } else { return 0; }
        }
    }
    return result;
}

function getWalletStyle(imageId)
{
    var result="Uncut";
    var i,j;
    
    for (i=0; i<imageList.length; i++)
    {
        if (imageList[i].imageId == imageId) 
        {
            if (imageList[i].Prints && imageList[i].Prints.length>0) {
                for (j=0; j<imageList[i].Prints.length; j++)
                {
                    if (imageList[i].Prints[j].size.indexOf("Wallets")!=-1)
                    {
                        switch(imageList[i].Prints[j].size) {
                            case "Wallets uncut" : result = "Uncut"; break;
                            case "Wallets square corner cut" : result = "Cut"; break;
                            case "Wallets round corner cut" : result = "Rounded"; break;
                        }
                    }
                }
            } else { return "Uncut"; }
        }
    }
    return result;
}

function bucketSetQty(imageId, size, qtyBox)
{
    var qty = qtyBox.value;
    if (!isInt(qty))
    {
        alert("Please enter a number for quantities.");
        qtyBox.value = 0;
    } 
    else 
    {
        var goodToGo = ImageBasket.updateQty(imageId, size, qty);
        if (goodToGo.value) {
            getElement("imageRow!"+imageId).className = 'imageRowGood';
        } else {
            getElement("imageRow!"+imageId).className = 'imageRowNormal';
        }
    }
}

function basketAlbumSetQty(imageId, optionId, qtyBox)
{
    var qty = getElement(qtyBox).value;
    //var optionId = getElement(qtyBox).id;
    if (!isInt(qty))
    {
        alert("Please enter a number for quantities.");
        qtyBox.value = 0;
    } else {
        var goodToGo = ImageBasket.updateAlbumQty(imageId, optionId, qty);
        
        if (goodToGo.value) {
            getElement("imageRow!"+imageId).className = 'imageRowGood';
        } else {
            getElement("imageRow!"+imageId).className = 'imageRowNormal';
        }
    }
}

function bucketWalletQty(qtyBox, imageId)
{
    var i, walletStyle;
    var qty = qtyBox.value;
    var isValid = true;
    
    if (!isInt(qty))
    {
        alert("Please enter a number for quantities.");
        isValid = false;
    }
    if (isValid && qty % 2 != 0) 
    {
        alert("Wallet prints must be ordered in pairs (multiples of two).");
        isValid = false;
    }
    
    if (isValid) {

        var divName = "imageOpts!"+imageId;
        var target = getElement(divName);
        for (i=0; i<target.childNodes.length; i++)
        {
            if (target.childNodes[i])
            {
                if (target.childNodes[i].id)
                {
                    if (target.childNodes[i].id == "cut")
                    {
                        if (target.childNodes[i].checked) { walletStyle="Cut"; }
                    }
                    if (target.childNodes[i].id == "uncut")
                    {
                        if (target.childNodes[i].checked) { walletStyle="Uncut"; }
                    }
                    if (target.childNodes[i].id == "rounded")
                    {
                        if (target.childNodes[i].checked) { walletStyle="Rounded"; }
                    }
                }
            }
        }
        // Update server
        var goodToGo = ImageBasket.setWalletQty(imageId, qty, walletStyle);
        if (goodToGo.value) {
            getElement("imageRow!"+imageId).className = 'imageRowGood';
        } else {
            getElement("imageRow!"+imageId).className = 'imageRowNormal';
        }
        
        // Update image data
        //ImageBasket.getImages(setupBasketImages);
    } // end if
}

function bucketColor(imageId, colorOpt)
{
    var discard = ImageBasket.setImageColor(imageId, colorOpt);
    ImageBasket.getImages(setupBasketImages);
}

function bucketFinish(imageId, finishOpt)
{
    var discard = ImageBasket.setImageFinish(imageId, finishOpt);
    ImageBasket.getImages(setupBasketImages);
}

function bucketRedEye(imageId, selected)
{
    var discard = ImageBasket.setImageRedEye(imageId, selected.checked);
    ImageBasket.getImages(setupBasketImages);
}

function bucketBorder(imageId, selected)
{
    var discard = ImageBasket.setImageBorder(imageId, selected.checked);
    ImageBasket.getImages(setupBasketImages);
}

function bucketCrop(imageId, selected)
{
    var discard = ImageBasket.setImageCrop(imageId, selected.checked);
    ImageBasket.getImages(setupBasketImages);
}

function bucketComment(imageId, commentBox)
{
    var discard = ImageBasket.setImageComment(imageId, commentBox.value);
    ImageBasket.getImages(setupBasketImages);
}

function basketRemoveImage(imageId)
{
    if (confirm("Are you sure you wish to remove this image?"))
    {
        var discard = ImageBasket.removeImage(imageId);
        window.location.reload();
    }
}

function basketSetExpress(qtyBox, size)
{
    displayWarning("Please Wait...");
    var qty = qtyBox.value;
    var i;
    if (isInt(qty))
    {
        //ImageBasket.setExpress(qty, size, basketExpressCallback);
        for (i=0; i<imageList.length; i++)
        {
            if (imageList[i].ImageSource == "EPrints") {
                var boxName = imageList[i].imageId + "!" + size;
                var box = getElement(boxName);
                box.value = qty;
                bucketSetQty(imageList[i].imageId, size, box);
            }
        }
    } else {
        alert("Please enter a number for quantity.");
        qtyBox.value="0";
    }
}

function basketExpressWallets()
{
    var i, walletStyle;
    var qty = getElement("express!wallets").value;
    var isValid = true;
    
    if (!isInt(qty))
    {
        alert("Please enter a number for quantities.");
        isValid = false;
    }
    if (isValid && qty % 2 != 0)
    {
        alert("Wallets must be ordered in pairs (even numbers).");
        isValid = false;
    }
    
    if (isValid) {
        if (getElement("expressCut").checked)
        {
            walletStyle="Cut";
        }
        if (getElement("expressUncut").checked)
        {
            walletStyle="Uncut";
        }
        if (getElement("expressRounded").checked)
        {
            walletStyle="Rounded";
        }
        // Update server
        //var discard = ImageBasket.setExpressWallets(qty, walletStyle);
        
        for (i=0; i<imageList.length; i++)
        {
            if (imageList[i].ImageSource == "EPrints") {
                var boxName = "Wallets!" +imageList[i].imageId;
                var box = getElement(boxName);
                box.value = qty;
                bucketWalletQty(box, imageList[i].imageId);
            }
        }
        
        // Update image data
        //ImageBasket.getImages(setupBasketImages);
    } // end if
}

function basketExpressCallback(result)
{
    clearWarning();
    ImageBasket.getImages(setupBasketImages);
}

var selectedNoveltyImage = 0;

function basketShowNoveltyPanel(noveltyId)
{
    selectedNoveltyImage = noveltyId;
    showDivById("photoNoveltyPanel");
}

function basketHideNoveltyPanel()
{
    hideDivById("photoNoveltyPanel");
}

function basketNoveltyChanged(titleBox)
{
    displayWarning("Please Wait...");
    var novIndex = titleBox.selectedIndex;
    //alert(novIndex);
    var novName = titleBox.options[novIndex].text;
    //alert(novName);
    ImageBasket.getNoveltyDetails(novName, basketNoveltyShow);
}

function basketNoveltyShow(result)
{
    clearWarning();
    setInnerHtml("noveltyDetails", result.value);
}

function basketUpdateNoveltyQty(qtyBox, code)
{
    basketHideNoveltyPanel();
    displayWarning("Please Wait...");
    
    var qty = qtyBox.value;
    ImageBasket.updateNoveltyQty(code, qty, selectedNoveltyImage, basketUpdateNoveltyCallback);
}

function basketUpdateNoveltyCallback(result)
{
    clearWarning();
    var divName = "Novelty!" + selectedNoveltyImage;
    setInnerHtml(divName, result.value);
}

function basketIndexPrint()
{
    var isIndex = getElement("indexPrint").checked;
    ImageBasket.setIndexPrint(isIndex, basketIndexCDCallback);
}

function basketBurnCD()
{
    var isCD = getElement("burnCD").checked;
    ImageBasket.setPhotoCD(isCD, basketIndexCDCallback);
}

function basketIndexCDCallback(result)
{
}

function basketGlobalFinish(finish)
{
    switch (finish)
    {
        case "Matte" : 
            {
                getElement("globalMatte").checked = true;
                getElement("globalGloss").checked = false;
            } break;
        case "Glossy" : 
            {
                getElement("globalMatte").checked = false;
                getElement("globalGloss").checked = true;
            } break;
        default: alert("Unknown finish type: "+finish);
    }
    
    for (i=0; i<imageList.length; i++)
    {
        if (imageList[i].ImageSource == "EPrints") {
            var McontrolName = imageList[i].imageId + "!Matte";
            var Mcontrol = document.getElementById(McontrolName);
            var GcontrolName = imageList[i].imageId + "!Glossy";
            var Gcontrol = document.getElementById(GcontrolName);
            
            if (finish == "Matte")
            {
                Mcontrol.checked = true;
                Gcontrol.checked = false;
            } else {
                Mcontrol.checked = false;
                Gcontrol.checked = true;
            }
            
            bucketFinish(imageList[i].imageId, finish);
        }
    }
}

function basketGlobalBorders(control)
{
    var status;
    var i;
    status = control.checked;
    
    for (i=0; i<imageList.length; i++)
    {
        if (imageList[i].ImageSource == "EPrints")
        {
            var CcontrolName = imageList[i].imageId + "!wb";
            var Ccontrol = document.getElementById(CcontrolName);
            
            Ccontrol.checked = status;
            bucketBorder(imageList[i].imageId, Ccontrol);
        }
    }
}

// Greeting cards

var selectedGreetingCard = 0;

function basketShowGreetingCardPanel(cardId) 
{
    selectedGreetingCard = cardId;
    showDivById("greetingCardPanel");
}

function basketHideGreetingCardPanel()
{
    hideDivById("greetingCardPanel");
}

function basketGreetingCardChanged(titleBox)
{
    displayWarning("Please Wait...");
    var novIndex = titleBox.selectedIndex;
    //alert(novIndex);
    var novName = titleBox.options[novIndex].text;
    //alert(novName);
    ImageBasket.getGreetingCardDetails(novName, basketGreetingCardShow);
}

function basketGreetingCardShow(result)
{
    clearWarning();
    setInnerHtml("greetingCardDetails", result.value);
}

function basketCardStyleChanged(selectBox)
{
    displayWarning("Please Wait...");
    var novIndex = selectBox.selectedIndex;
    var novCode = selectBox.options[novIndex].value;
    ImageBasket.getGreetingCardZoom(novCode, basketCardStyleChangedDone);
}

function basketCardStyleChangedDone(result)
{
    clearWarning();
    setInnerHtml("greetingCardZoom", result.value);
}

function basketUpdateGreetingQty(qtyBox, code)
{
    basketHideGreetingCardPanel();
    displayWarning("Please Wait...");
    
    var textConcat = "";
    var countText = getElement("greetingNumText").value;
    
    for (i=1; i<countText; i++)
    {
        textConcat += getElement("cardLine"+i).value;
        textConcat += "|";
    }
    
    var qty = qtyBox.value;
    ImageBasket.updateGreetingQty(code, qty, selectedGreetingCard, textConcat, basketUpdateGreetingCallback);
}

function basketUpdateGreetingCallback(result)
{
    clearWarning();
    var divName = "Greeting!" + selectedGreetingCard;
    setInnerHtml(divName, result.value);
}

function basketGreetingTextChange(imageId, code, lineNo, textBox)
{
    displayWarning("Please Wait...");
    var newText = textBox.value;
    selectedGreetingCard = imageId;
    
    ImageBasket.updateGreetingTextLine(imageId, code, lineNo, newText, basketGreetingTextChangeDone)
}

function basketGreetingTextChangeDone(result)
{
    clearWarning();
}

// PhotoBook Support

var basketMoveId;

function basketMoveToBook(imageId)
{
    displayWarning("Please Wait...");
    basketMoveId = imageId;
    var basketBookId = getElement("mtpb"+imageId).value;
    
    ImageBasket.MoveToPhotoBook(imageId, basketBookId, basketMoveToBookDone);
}

function basketMoveToBookDone(result)
{
    clearWarning();
    alert("The selected image has been moved.");
    var discard = ImageBasket.removeImage(basketMoveId);
    window.location.reload();
}

///////////////////////////////////////////////////////////////////
// E-Albums browsing
///////////////////////////////////////////////////////////////////

var zoomedImageId = 0;

function albumZoom(imageId)
{
    displayWarning("Please wait...");
    zoomedImageId = imageId;
    pagelets_EAlbumsBrowser.GetImagePath(imageId, albumZoomDisplay);
}

function albumZoomDisplay(result)
{
    clearWarning();
    
    var divText = "<img src=\""+result.value+"\">";
    setInnerHtml("imageDetail", divText);
    
    showDivById("imageZoom");
}

function albumAddToCart()
{
    displayWarning("Please wait...");
    pagelets_EAlbumsBrowser.AddImageToCart(zoomedImageId, albumCartCallback);
}

function albumAddToCartById(imageId)
{
    displayWarning("Please wait...");
    pagelets_EAlbumsBrowser.AddImageToCart(imageId, albumCartCallback);
}

function albumCartCallback(result)
{
    clearWarning();
    hideDivById("imageZoom");
    showCartOnLoginRefresh = false;
    loginRefresh();
}

///////////////////////////////////////////////////////////////////
// Full Shopping Cart
///////////////////////////////////////////////////////////////////

function drawFullCart()
{
    displayWarning("Please wait...");
    pagelets_CartView.getCartText(drawFullCartCallback);
}

function drawFullCartCallback(result)
{
    clearWarning();
    setInnerHtml("fullCart", result.value);
}

function fullCartQtyChange(callingBox, callingID)
{
    var newQuantity = callingBox.value;
    var proceed = true;
    
    if (newQuantity != "") 
    {
        if (isInt(newQuantity))
        {
            if (newQuantity < 1)
            {
                if (!confirm("Do you want to remove this item from your shopping cart?")) {
                    proceed = false;
                }
            }
        } else {
            newQuantity.value = "1";
            alert("Please enter quantities as a number.");
            proceed = false;
        }
        
        if (proceed) {
            displayWarning("Please Wait...");
            pagelets_CartView.UpdateCartQuantity(callingID, newQuantity, fullCartQtyCallback);
        }
    }
}

function fullCartQtyCallback(result)
{
    clearWarning();
    drawFullCart();
}

///////////////////////////////////////////////////////////////////
// Full Checkout
///////////////////////////////////////////////////////////////////

function setupCheckout()
{
    //displayWarning("Please Wait...");
    Checkout2.getCheckoutHTML(checkoutCallback);
}

function checkoutCallback(result)
{
    //clearWarning();
    setInnerHtml("checkoutCartDiv", result.value);
}

///////////////////////////////////////////////////////////////////
// Inventory Search
///////////////////////////////////////////////////////////////////

function searchInvGo(callBox) 
{
    var term = callBox.value;
    
    if (term.length > 2)
    {
        showDivById("searchResults");
        setInnerHtml("searchDiv", "<img src=\"images/uploader/indicator.gif\" /> Please wait");
        pagelets_Search.doSearch(term, searchInvResult);
    } else {
        hideDivById("searchResults");
        setInnerHtml("searchDiv", "<img src=\"images/uploader/indicator.gif\" /> Please wait");    
    }
}

function searchInvResult(result)
{
    showDivById("searchResults");
    setInnerHtml("searchDiv", result.value);
}

function searchAlbumGo(callBox) 
{
    var term = callBox.value;
    
    if (term.length > 3)
    {
        pagelets_SearchAlbums.doSearch(term, searchInvResult);
    }
}

///////////////////////////////////////////////////////////////////
// Photo Books
///////////////////////////////////////////////////////////////////

var bkSelectedImages = "";
var bkAllImages = "";

function pbToggleSelection(imageId)
{
    var token = imageId + ";";

    if (bkSelectedImages.indexOf(token) > -1)
    {
        // We need teo remove it
        bkSelectedImages = bkSelectedImages.replace(token, "");
    } else {
        // We need to add it
        bkSelectedImages = bkSelectedImages + token;
    }
}

function pbClearAll()
{
    var selectedImages = bkSelectedImages.split(";");
    var i;
    
    for (i=0; i<selectedImages.length-1; i++)
    {
        var boxid = "imgsel" + selectedImages[i];
        getElement(boxid).checked = false;
    }
    bkSelectedImages = "";
}

function pbSelectAll()
{
    var selectedImages = bkAllImages.split(";");
    var i;
    
    for (i=0; i<selectedImages.length-1; i++)
    {
        var boxid = "imgsel" + selectedImages[i];
        getElement(boxid).checked = true;
        var token = selectedImages[i] + ";";
        bkSelectedImages = bkSelectedImages + token;
    }    
}

function pbAddSelectedToCart()
{
    if (confirm("Are you sure you wish to add all selected images to your cart?"))
    {
        displayWarning("Please wait...");
        pagelets_PhotoBookAJAX.addBatchToCart(bkSelectedImages, pbAddSelectedToCartDone);
    }
}

function pbAddSelectedToCartDone()
{
    clearWarning();
    loginRefresh();   
    showCartPanel();   
}

function pbDeleteSelected()
{
    if (confirm("Are you sure you wish to delete these images? Once deleted, they cannot be restored without uploading them."))
    {
        displayWarning("Please wait...");
        pagelets_PhotoBookAJAX.DeleteBatch(bkSelectedImages, pbDeleteSelectedDone);
    }
}

function pbDeleteSelectedDone()
{
    location.reload(true);
}

function getPhotoBook(bookId, isItMine)
{
    if (isItMine != 1)
    {
        hideBlockById("aboutAlbumOption");
    } 
    else 
    {
        showBlockById("aboutAlbumOption");
    }

    pagelets_PhotoBookAJAX.getPhotoBook(bookId, getPhotoBookResult);
}

function getPhotoBookResult(result)
{
    setInnerHtml("bookPics", result.value);
}

function getPhotoTags(tag)
{
    EPhotoTag.getTagList(tag, getPhotoTagsResult);
}

function getPhotoTagsResult(result)
{
    setInnerHtml("bookPics", result.value);
}


function photobookZoom(imageId)
{
    displayWarning("Please wait...");
    zoomedImageId = imageId;
    pagelets_PhotoBookAJAX.zoomPhoto(imageId, photobookZoomDisplay);
}

function photobookZoomDisplay(result)
{
    clearWarning();
    
    setInnerHtml("imageDetail", result.value);
    
    showDivById("imageZoom");
}

function photoBookAddCart(imageId)
{
    displayWarning("Please wait...");
    pagelets_PhotoBookAJAX.addToCart(imageId, photoBookAddCartDone);
}

function photoBookAddCartDone(result)
{
    clearWarning();
    loginRefresh();   
    showCartPanel();   
}

function photobookAddBook()
{
    var bookName = getElement("newBookName").value;
    if (bookName.length < 3)
    {
        alert("Please use a longer PhotoBook name.");
    } else {
        displayWarning("Please wait...");
        pagelets_PhotoBookAJAX.createBook(bookName, photobookAddBookDone);
    }
}

function photobookAddBookDone(result)
{
    clearWarning();
    window.location.reload();
}

function photobookMoveImage(imageId)
{
    displayWarning("Please Wait...");
    var destination = getElement("photoTarget").value;
    pagelets_PhotoBookAJAX.moveImage(imageId, destination, photobookMovedImage);
}

function photobookMovedImage(result)
{
    clearWarning();
    window.location.reload();
}

function photobookCaption(imageId)
{
    displayWarning("Please Wait...");
    var caption = getElement("caption").value;
    pagelets_PhotoBookAJAX.captionImage(imageId, caption, photobookCaptionDone);
}

function photobookCaptionDone(result)
{
    clearWarning();
    window.location.reload();
}

function photobookTag(imageId)
{
    var tagList = getElement("tags").value;
    displayWarning("Please Wait...");
    pagelets_PhotoBookAJAX.tagImage(imageId, tagList, photobookTagged);
}

function photobookTagged(result)
{
    clearWarning();
    window.location.reload();
}

function photobookSetOptions()
{
    var description = getElement("albumDescription").value;
    var password = getElement("newPassword").value;
    var mode = "";
    var valid = true;
    var albumId = getElement("albumId").value;
    
    if (getElement("public").checked) mode = "public";
    if (getElement("privateMode").checked) mode = "private";
    if (getElement("pbpassword").checked)
    {
        if (password.length > 0)
        {
            mode = "password";
        } else {
            alert("To password protect this photo book, please select a password.");
            valid = false;
        }
    }
    
    if (valid)
    {
        displayWarning("Please Wait...");
        pagelets_PhotoBookAJAX.setOptions(albumId, description, mode, password, photoBookSetOptionsDone);
    }
}

function photoBookSetOptionsDone(result)
{
    clearWarning();
    window.location.reload();
}

function photobookDeleteImage(imageId)
{
    if (confirm("Are you sure you want to delete that picture? Once deleted, it can only be restored by re-uploading."))
    {
        displayWarning("Please Wait...");
        pagelets_PhotoBookAJAX.deleteImage(imageId, photobookDeletedImage);
    }
}

function photobookDeletedImage(result)
{
    clearWarning();
    window.location.reload();
}

function photobookDelete()
{
    if (confirm("Are you sure you wish to delete this PhotoBook? Once deleted, it can only be restored by re-creating it."))
    {
        var albumId = getElement("albumId").value;
        pagelets_PhotoBookAJAX.deletePhotobook(albumId, photobookDeleteDone);
    }
}

function photobookDeleteDone(result)
{
    window.location.reload();
}

/////////////////////////////////////////////////////////////

var ibDefaultWidth = 60;
var ibMaxWidth = 150;
var ibCurrentWidth = 60;
var ibCurrentImage = null;
var ibTimer = 0;
var ibTimerRunning = false;
var ibshrinking = new Array();
var ibindex = 0;
var ibMode = "prints";
var ibid = 0;
var ibCurrentImageId = 0;

function ibHighlight(img)
{
    ibCurrentWidth = img.width;
    ibCurrentImage = img;
    for (var i=0; i<ibindex; i++)
    {
        if (ibshrinking[i] == img) ibshrinking[i]=0;
    }
    ibTimer = setTimeout("ibExpand()", 2);
}

function ibExpand()
{
    ibTimerRunning = false;
    ibCurrentImage.width += 10;
    if (ibCurrentImage.width < ibMaxWidth)
    {
        ibTimerRunning = true;
        ibTimer = setTimeout("ibExpand()", 2);
    }
}

function ibUnhighlight(img)
{
    ibshrinking[ibindex] = ibCurrentImage;
    ibindex++;
    setTimeout("ibContract()", 2);
}

function ibContract()
{
    var shrinkMore = false;
    for (var i=0; i<ibindex; i++)
    {
        if (ibshrinking[i] != 0)
        {
            if (ibshrinking[i].width > ibDefaultWidth)
            {
                ibshrinking[i].width -= 1;
                shrinkMore = true;
            } else {
                ibshrinking[i] = 0;
            }
        }
    }

    if (shrinkMore) setTimeout("ibContract()", 5);
}

function ibSelectPending(img, id)
{
    getElement("ibSelectedPic").src = img.src;
    ibCurrentImageId = id;
    
    setInnerHtml('ibPrints', "Please wait...");
    setInnerHtml('ibNovelties', "Please wait...");
    setInnerHtml('ibGreetings', "Please wait...");
    ImageBasket2.selectImage(id, ibSelectPendingDone); 
}

function ibSelectPendingDone(result)
{
    setInnerHtml('ibPrints', result.value.prints);
    setInnerHtml('ibNovelties', result.value.novelties);
    setInnerHtml('ibGreetings', result.value.greetings);
}

function ibSetMode(newMode)
{
    ibMode = newMode;
    
    switch (ibMode)
    {
        case "prints" : 
        {
            showBlockById("ibPrints");
            hideBlockById("ibNovelties");
            hideBlockById("ibGreetings");
            getElement("ibPrintLnk").style.fontWeight = 'bold';
            getElement("ibNoveltyLnk").style.fontWeight = 'normal';
            getElement("ibGreetingLnk").style.fontWeight = 'normal';
        } break;
        case "novelties" : 
        {
            hideBlockById("ibPrints");
            showBlockById("ibNovelties");
            hideBlockById("ibGreetings");
            getElement("ibPrintLnk").style.fontWeight = 'normal';
            getElement("ibNoveltyLnk").style.fontWeight = 'bold';
            getElement("ibGreetingLnk").style.fontWeight = 'normal';
        } break;
        break;
        case "greetings" : 
        {
            hideBlockById("ibPrints");
            hideBlockById("ibNovelties");
            showBlockById("ibGreetings");
            getElement("ibPrintLnk").style.fontWeight = 'normal';
            getElement("ibNoveltyLnk").style.fontWeight = 'normal';
            getElement("ibGreetingLnk").style.fontWeight = 'bold';
        } break;
        break;
        default: alert("unknown mode: "+ibMode); break;
    }
}

function ibBuyPackage(pkgId, textbox, id)
{
    var newQty = textbox.value;
    if (isInt(newQty))
    {
        if (newQty < 0)
        {
            alert("Only positive or zero purchase numbers are possible.");
        } else {
            // Update the server
            displayWarning("Updating cart...");
            ibid = id;
            ImageBasket2.buyPackage(id, pkgId, newQty, ibDoneBuying);
        }
    } else {
        alert("Please only enter numbers for package quantities.");
    }
}

function ibDoneBuying(result)
{
    clearWarning();
    
    if (result.value == "p")
    {
        // Remove from right list, add to left
        var img = getElement("pic"+ibid);
        img.parentNode.removeChild(img);
        getElement("pendingList").appendChild(img);
        
    } else {
        // Add to right list, remove from left
        var img = getElement("pic"+ibid);
        img.parentNode.removeChild(img);
        getElement("readyList").appendChild(img);
    }
}

function ibBuyPrint(textbox, id, size)
{
    var newQty = textbox.value;
    if (isInt(newQty))
    {
        if (newQty < 0)
        {
            alert("Only positive or zero purchase numbers are possible.");
        } else {            
            // Update the server
            displayWarning("Updating cart...");
            ibid = id;
            ImageBasket2.buyPrint(id, size, newQty, ibDoneBuying);
        }
    } else {
        alert("Please only enter numbers for print quantities.");
    }
}

function ibSetColorOption(id, color)
{
    displayWarning("Updating cart...");
    ImageBasket2.setColor(id, color, ibDone);
}

function ibSetFinishOption(id, finish)
{
    displayWarning("Updating cart...");
    ImageBasket2.setFinish(id, finish, ibDone);
}

function ibSetRedEye(id, checkbox)
{
    displayWarning("Updating cart...");
    ImageBasket2.setRedEye(id, checkbox.checked, ibDone);
}

function ibSetCrop(id, checkbox)
{
    displayWarning("Updating cart...");
    ImageBasket2.setCrop(id, checkbox.checked, ibDone);
}

function ibSetBorders(id, checkbox)
{
    displayWarning("Updating cart...");
    ImageBasket2.setBorders(id, checkbox.checked, ibDone);
}

function ibComment(id, box)
{
    displayWarning("Updating cart...");
    ImageBasket2.setComment(id, box.value, ibDone);
}

function ibDone(result)
{
    clearWarning();
}

function ibExpress(textbox, size)
{
    var newQty = textbox.value;
    if (isInt(newQty))
    {
        if (newQty < 0)
        {
            alert("Only positive or zero purchase numbers are possible.");
        } else {            
            // Update the server
            displayWarning("Updating cart and image lists...");
            ImageBasket2.buyExpress(size, textbox.value, ibExpressDone);
        }
    } else {
        alert("Please only enter numbers for print quantities.");
    }
}

function ibExpressDone(result)
{
    clearWarning();
    setInnerHtml("pendingList", result.value.pending);
    setInnerHtml("readyList", result.value.ready);
}

function ibRemovePic()
{
    if (ibCurrentImageId == 0)
    {
        alert("Please select an image to remove.");
    } else {
        displayWarning("Please wait... updating cart.");
        ImageBasket2.removeImage(ibCurrentImageId, ibRemovePicDone);
    }
}

function ibRemovePicDone(result)
{
    var imgName = "pic" + result.value;
    var img = getElement(imgName);
    img.parentNode.removeChild(img);
    clearWarning();
    
    // Clear the main panel
    setInnerHtml('ibPrints', "");
    setInnerHtml('ibNovelties', "");
    setInnerHtml('ibGreetings', "");
    getElement("ibSelectedPic").src = "";
}

function ibNoveltySelect(title, imageId)
{
    setInnerHtml('ibNovZoom', 'Please wait... loading '+title+'s');
    ImageBasket2.zoomNovelty(title, imageId, ibNoveltySelectDone);
}

function ibNoveltySelectDone(result)
{
    setInnerHtml('ibNovZoom', result.value);
}

function ibOrderNovelty(title, imageId, textbox)
{
    var newQty = textbox.value;
    if (isInt(newQty))
    {
        if (newQty < 0)
        {
            alert("Only positive or zero purchase numbers are possible.");
        } else {            
            // Update the server
            displayWarning("Updating cart and image lists...");
            ibid = imageId;
            ImageBasket2.buyNovelty(title, textbox.value, imageId, ibOrderNoveltyDone);
        }
    } else {
        alert("Please only enter numbers for print quantities.");
    }
}

function ibOrderNoveltyDone(result)
{
    clearWarning();
    
    // Update image location
    if (result.value.imageStatus == "p")
    {
        // Remove from right list, add to left
        var img = getElement("pic"+ibid);
        img.parentNode.removeChild(img);
        getElement("pendingList").appendChild(img);
        
    } else {
        // Add to right list, remove from left
        var img = getElement("pic"+ibid);
        img.parentNode.removeChild(img);
        getElement("readyList").appendChild(img);
    }
    
    // Update novelty details view
    setInnerHtml("ibNovCart", result.value.novCart);
}

function ibGreetingCardChanged(titleBox, imageId)
{
    displayWarning("Please Wait...");
    var novIndex = titleBox.selectedIndex;
    var novName = titleBox.options[novIndex].text;
    ImageBasket2.getGreetingCardDetails(novName, imageId, ibGreetingCardShow);
}

function ibGreetingCardShow(result)
{
    clearWarning();
    setInnerHtml("greetingCardDetails", result.value);
}


function ibCardStyleChanged(selectBox, imageId)
{
    displayWarning("Please Wait...");
    var novIndex = selectBox.selectedIndex;
    var novCode = selectBox.options[novIndex].value;
    ImageBasket2.getGreetingCardZoom(novCode, imageId, ibCardStyleChangedDone);
}

function ibCardStyleChangedDone(result)
{
    clearWarning();
    setInnerHtml("greetingCardZoom", result.value);
}

function ibUpdateGreetingQty(qtyBox, code, imageId)
{
    displayWarning("Please Wait...");
    
    var textConcat = "";
    var countText = getElement("greetingNumText").value;
    
    for (i=1; i<countText; i++)
    {
        textConcat += getElement("cardLine"+i).value;
        textConcat += "|";
    }
    
    var qty = qtyBox.value;
    ImageBasket2.updateGreetingQty(code, qty, imageId, textConcat, ibUpdateGreetingCallback);
}

function ibUpdateGreetingCallback(result)
{
    clearWarning();
}

function ibIndexPrint()
{
    displayWarning("Updating cart.");
    var isIndex = getElement("indexPrint").checked;
    ImageBasket2.setIndexPrint(isIndex, ibDone);    
}

function ibCD()
{
    displayWarning("Updating cart.");
    var isCD = getElement("burnToCD").checked;
    ImageBasket2.setPhotoCD(isCD, ibDone);
}

function ibBorders()
{
    displayWarning("Updating cart.");
    var isBorders = getElement("expressBorders").checked;
    ImageBasket2.setGlobalBorders(isBorders, ibDone);
}

function ibGlobalFinish(finish)
{
    displayWarning("Updating cart.");

    switch (finish)
    {
        case "Matte" : 
            {
                getElement("expressMatte").checked = true;
                getElement("expressGloss").checked = false;
            } break;
        case "Glossy" : 
            {
                getElement("expressMatte").checked = false;
                getElement("expressGloss").checked = true;
            } break;
        default: alert("Unknown finish type: "+finish);
    }
    
    ImageBasket2.setGlobalFinish(finish, ibDone);
}