﻿var currentUIRenderRequests = 0;
var cartLoadComplete = false;
var printSizes = null;
var cdCartItem = null;
var cdPrice = 0;
var photoCdObjects = new Object();

function onGotCartItemCounts()
{
    showLoadingPopup(); 

    printSizes = shoppingCart.getPrintSizesInfo();

    if (shoppingCart.getNumProductsInCartByType('Prints') > 0)
    {
//        document.getElementById('PhotoCDSection').style.display = 'block';
        RenderQuickSetHTML(printSizes);
    }
}
function onRenderCartItemBatch(sender, batch)
{
    var sb = new PhotoSite.Framework.StringBuilder();

    //Render Photo Cd items first
    sb.append(RenderPhotoCdItemHTML(batch));

    for (var i = 0; i < batch.length; i++)
    {
        var pt = batch[i].ProductType;

        if (pt == 'Prints')
        {
            sb.append(RenderPrintItemHTML(batch[i]));
        }
        else if (pt != 'CD')
        {
            sb.append(RenderGiftItemHTML(batch[i]));
        }
        else
        {
            cdCartItem = batch[i];
            cdPrice = cdCartItem.Price;
            document.getElementById('OrderPhotoCD').checked = true;
            document.getElementById('photoCDPrice').innerHTML = cdPrice.toFixed(2);
        }
    }

    currentUIRenderRequests++;

    setTimeout(function(builder)
    {
        return function()
        {
            appendBuilderToDocument(builder);
        };
    } (sb), 0);
}

function appendBuilderToDocument(builder)
{
    var content = document.createElement('div');
    content.innerHTML = builder.toString();
    cartItemsDiv.appendChild(content);
    currentUIRenderRequests--;

    if (cartLoadComplete && currentUIRenderRequests == 0)
    {
        hideLoadingPopup();
    }
}

function RenderQuickSetHTML(printSizes)
{
    var sb = new PhotoSite.Framework.StringBuilder();

//    var printHasBorder = false;
//    if (printSizes.length > 0)
//        printHasBorder = printSizes[0].BorderOption;

//    if (printSizes.length > 4)
//        $get("QuickSetShowEnlargementsButton").style.display = "";

    sb.append('<div class="quick_order_fields"><div class="quick_order_qty" style="width:110px;"><strong>',
                  SR.Quantity,
              '</strong></div><div class="quick_order_options"><strong>',
                  SR.Options,
              '</strong></div><div class="quick_order_borders"><strong>',
                 "&nbsp;",
              '</strong></div></div>');

    for (var i = 0; i < printSizes.length; i++)
    {
        var printSize = printSizes[i];

        if (i === 2)
        {
            sb.append('<div id="quickset_enlargements" style="display:none">');
        }

        sb.append('<div class="quick_order_fields">');

        // Name
        //sb.append('<div class="quick_order_size">', printSize.Name, '</div>');
        
        // Quantity
        sb.append('<div class="quick_order_qty" style="width:105px;"><div style="float:left; text-align:right; width:50%;margin-right:-15px">', printSize.Name,'</div>',
                      '<input style ="border:1px solid gray;width:25px;height:14px;" id="qdd_', printSizes[i].EncRetailerProductID, '" type="text" onkeyup="quickSetQuantityChanged(this, \'', printSizes[i].EncRetailerProductID, '\');" value="0" maxlength="3" size="3"/>',
                  '</div>');

        // Options
        sb.append('<div class="quick_order_options">');

        // Surface
        sb.append('&nbsp;&nbsp;&nbsp;');
        //sb.append('<select id="surface_', printSize.EncRetailerProductID, '" onchange="quickSetSurfaceChanged(this, \'', printSize.EncRetailerProductID, '\')">');

        for (var j = 0; j < printSize.SurfaceOption.Values.length; j++)
        {
            var value = printSize.SurfaceOption.Values[j];

            sb.append('<option value="', value.EncOptionValueID, '"');

            if (value.EncOptionValueID == printSize.SurfaceOption.SelectedOptionValueID)
            {
                sb.append(' selected="selected"');
            }

            sb.append('>', value.Name, '</option>');
        }

        sb.append('</select>');
        sb.append('</div>');
        // Border
        if (printSize.BorderOption) {
            var selectedValue = null;

            for (var j = 0; j < printSize.BorderOption.Values.length; j++) {
                var value = printSize.BorderOption.Values[j];

                if (value.EncOptionValueID == printSize.BorderOption.SelectedOptionValueID) {
                    selectedValue = value;
                    break;
                }
            }
            sb.append('<div class="quick_order_borders">');
            sb.append('<img id="quickset_border_', printSize.EncRetailerProductID, '" onclick="quickSetBorderChanged(this, \'', printSize.EncRetailerProductID, '\')" src="../images/img_checkbox_');

            if (value.Name == 'True') {
                sb.append('on');
            }
            else {
                sb.append('off');
            }

            sb.append('.gif" />');
            sb.append('</div>');
        }
        else {
            sb.append('<div class="quick_order_borders">&nbsp;</div>');
        }

        //sb.append('</div>');

        sb.append('</div>');
    }

    //sb.append('</div>');
    //sb.append('</div>');

    document.getElementById('quick_set_controls').innerHTML = sb.toString();
    document.getElementById('QuickOrderSection').style.display = 'block';

    //prompt('', sb.toString());
    
}

function RenderPrintItemHTML(cartItem)
{
    var groupID = cartItem.GroupID;
    var localPrintSizes = printSizes;
    var localSubItems = cartItem.SubItems;

    var sb = new PhotoSite.Framework.StringBuilder();

    sb.append('<div class="order_item" id="container_', groupID, '">');

    // Thumbnail div
    sb.append('<div class="order_thumb">',
                  '<img class="cart_order_image_thumb" id="img_', groupID, '" src="', cartItem.ThumbUrl, '" onclick="showCropper(\'', groupID, '\'); return false;"><br />',
                  '<p><a href="#" style="font-weight:700;" onclick="showCropper(\'', groupID, '\'); return false;">', SR.ChangeCrop, '</a></p>',
              '</div>');
   
    // Information div
    sb.append('<div class="order_desc" style="width: 180px">');

    // name...
    sb.append('<p><strong>', cartItem.Name, '</strong></p>');

    var price = shoppingCart.calculatePrintPrice(cartItem).toFixed(2);

    // price...
    sb.append('<p>', SR.PriceCartItem, ': &#163<span id="price_', groupID, '">', price, '</span>', '</p>');

    // printing on back...
//    sb.append('<p>',
//                  SR.PrintingOnBack, ': <input type="text" maxlength="', backPrintingMaxChars, '" id="back_printing_', groupID, '" value="', cartItem.BackPrinting.Text, '" onkeydown="PrintingOnBackChanged(this, \'', groupID, '\'); return true;" >',
//              '</p>');

//    sb.append('<p class="fine_print">', SR.Max, ' ', backPrintingMaxChars, ' ', SR.CharactersRemaining,
//                  ' <span id="backprinting_chars_', groupID, '">',
//                  backPrintingMaxChars - cartItem.BackPrinting.Text.length,
//                  '</span>',
//              '</p>');

    // photo preview button...
    sb.append('<p>',
                  '<a href="#" onclick="onPhotoPreviewClick(\'', groupID, '\'); return false;"><strong>',
                      SR.PhotoPreview,
                  '</strong></a> &nbsp; ',
                  '<a href="#" onclick="onCartItemRemoveClick(\'', groupID, '\'); return false;"><strong>',
                      SR.RemoveCartItem,
                  '</strong></a>',
              '</p>');

    // Information div end
    sb.append('</div>');

    // Quantity / Prices div
    sb.append('<div class="left" style="width: 230px; text-align: center">');

    // Header
//    var cartItemHasBorder = false;
//    cartItemHasBorder = cartItem.BorderOption;
    sb.append('<div class="quick_order_fields"  style="width:230px">',
                   '<div class="quick_order_qty" style="width:110px;"><strong>',
                      SR.Quantity,
                  '</div><div class="quick_order_options">',
                      SR.Options,
                  '</div><div class="quick_order_borders">',
                      "&nbsp;",
                  '</div></strong>',
              '</div>');

    var subItemHTML = RenderPrintSubItemHTML(0, 8, groupID, localSubItems, localPrintSizes);
    sb.append(subItemHTML);
    sb.append('</div>');
    if (printSizes.length > 2) {
        sb.append('<div class="quick_order_btm">',
                  '<a href="#" onclick="onCollapseEnlargementsClick(\'', groupID, '\'); return false;"><strong id="enlargements_button_', groupID, '">',
                      SR.HideOtherPrintSizes,
                  '</strong></a>',
              '</div>');
    }

    sb.append('</div>', '</div>');   

    return sb.toString();
}

function RenderPrintSubItemHTML(startIndex, endIndex, groupID, localSubItems, localPrintSizes)
{
    var sb = new PhotoSite.Framework.StringBuilder();
    var useDivForInput = (Sys.Browser.agent == Sys.Browser.Firefox || Sys.Browser.agent == Sys.Browser.InternetExplorer);

    if (endIndex >= localPrintSizes.length) {
        endIndex = localPrintSizes.length;
    }
    
    for (var i = startIndex; i < endIndex; i++)
    {
        var si = localSubItems[i];
        var siRPID = si.EncRetailerProductID;
        var groupID_siRPID = groupID + '_' + siRPID;
        
        if (i === 2) {
            sb.append('<div id="order_enlargements_', groupID, '">');
        }

        sb.append('<div class="quick_order_fields"  style="width:230px">');

        if (useDivForInput == true)
            sb.append('<div class="quick_order_qty"  style="width:105px;"><div style="float:left; text-align:right; width:50%;">',
                      localPrintSizes[i].Name, "</div>");
        else
            sb.append('<div class="quick_order_qty"  style="width:105px;">',
                      localPrintSizes[i].Name);


       if (useDivForInput != false)
        {
            sb.append('<div style="margin-left:3px; padding-right: 22px; float:right;"><input class="cart_qty" maxlength="3" id="qty_');
            sb.append(groupID);
            sb.append('_');
            sb.append(siRPID);
            sb.append('" type="text" value="');
            sb.append(si.Quantity);
            sb.append('" onkeyup="PrintQuantityChanged(this, \'');
            sb.append(groupID);
            sb.append('\', ');
            sb.append(i);
            sb.append(');"></div>');
        }
        else
        {
            sb.append('<div style="margin-left:3px; float:right;"><div class="cart_qty" id="qty_div_', groupID, '_', i, '" onmousedown="printQuantityDivClicked(this, \'', groupID, '\', \'', i, '\', true)">',
                         si.Quantity,
                      '</div></div>');
        }

        sb.append('</div>');

        sb.append('<div class="quick_order_options">');

        // Surface and warning
        sb.append('<div style="width: 102px;height:15px;" class="left">');

        // Surface
        sb.append('<div class="left" style="padding-left: 20px" id="surface_', groupID_siRPID, '">',
                     si.PrintSurface.Name,
                  '</div>');

        // Resolution Warning
        sb.append('<div style="margin-right: 3px;');

        if (si.Quantity == 0 || si.WarnRes == false)
        {
            sb.append('display:none;');
        }

        sb.append('" class="left" id="warnres_',
                      groupID_siRPID,
                  '"><img src="../images/icon_warning_sm.gif" border="0"></div>');

        // Crop Warning
        if (si.WarnCrop)
        {
            sb.append('<div style="cursor:pointer;');

            if (si.Quantity == 0)
            {
                sb.append('display:none;');
            }

            sb.append('" onclick="showCropper(\'', groupID, '\',\'', siRPID, '\')" class="left" id="warncrop_', groupID_siRPID, '"><img src="../images/icon_sm_crop', SR.LanguageSuffix, '.gif" border="0"></div>');
        }

        sb.append('</div>');    // surface and warning
       
        if (si.PrintBorder && si.PrintBorder.Name.length > 0)
        {
            sb.append('<div class="left"><img id="border_',
                          groupID_siRPID,
                      '" onclick="SubItemBorderChanged(this, \'',
                          groupID,
                      '\', \'',
                          siRPID,
                      '\');" src="../images/img_checkbox_');

            if (si.PrintBorder.Name == 'True')
            {
                sb.append('on');
            }
            else
            {
                sb.append('off');
            }

            sb.append('.gif" /></div>');

        }

        sb.append('</div>');
       
        sb.append('</div>');
    }

    return sb.toString();
}

function GetGiftURL(productType)
{
    if (productType == 'Collage')
    {
        return '../album/collage_create.aspx';
    }
//    else if (productType == 'EnhancementPrints')
//    {
//        return '../album/gifts_select_media.aspx';
//    }
    else if (productType == 'CustomFrame')
    {
        return '../album/framing_landing.aspx';
    }
    else if (productType != 'Calendars' && productType != 'PhotoCalendars' && productType != 'PhotoBooks' && productType != 'TreasureknitGenericProduct' && productType != 'BusinessPrints' && productType != 'EnhancementPrints')
    {
        return '../album/gifts_select_options.aspx';
    }
    else
    {
        return '';
    }
}

function RenderPhotoCdItemHTML(batch) {

    var sb = new PhotoSite.Framework.StringBuilder();

    var photoCdItems = new Array();

    for (var i = 0; i < batch.length; i++) {
        if (batch[i].ProductType == 'CD') {
            var cdItem = batch[i];
            photoCdItems.push(cdItem);
            var qty = cdItem.Quantity > 1 ? parseInt(cdItem.Quantity / cdItem.CDsRequired) : 1;
            photoCdObjects[cdItem.EncID] = { 'id': cdItem.EncID, 'qty': cdItem.CDsRequired * qty };
        }
    }

    for (var i = 0; i < photoCdItems.length; i++) {

        var photoCdItem = photoCdItems[i];
        var groupID = photoCdItem.GroupID;
        sb.append("<div id='container_");
        sb.append(groupID);
        sb.append("' class='order_item'><div class='left' style='width: 111px; text-align: center; padding-right: 20px;'><img src=");
        sb.append(photoCdItem.ThumbUrl);
        sb.append(" border='0' width='90' height='90' /></div>");
        sb.append("<div class='left' style='width: 410px; padding-bottom: 30px;'><div class='cd_table'>");
        sb.append("<div class='cd_table_box_header'>TOTAL PHOTOS</div><div class='cd_table_box_header'>FILE SIZE(MB)</div><div class='cd_table_box_header'>CD's REQUIRED</div>");
        sb.append("<div class='cd_table_box'>");
        sb.append(photoCdItem.CDFileCount);
        sb.append("</div><div class='cd_table_box'>");
        sb.append(photoCdItem.CDFileSize);
        sb.append("</div><div class='cd_table_box'>");
        sb.append(photoCdItem.CDsRequired);
        sb.append("</div></div>");
        sb.append("<div class='left' style='width: 100%;'>");
        sb.append("<p>");
        sb.append(photoCdItem.CDsRequired);

        photoCdItem.Quantity = photoCdItem.Quantity > 1 ? parseInt(photoCdItem.Quantity / photoCdItem.CDsRequired) : 1;
        var disc = parseInt(photoCdItem.Quantity) > 1 ? "discs" : "disc";
        
        sb.append(" disc(s) to save your images (&pound;");
        sb.append(photoCdItem.Price);
        sb.append(" per disc)</p>");
        sb.append("<p><strong>quantity: <input type='text' size='2' maxlength='3' value='");
        sb.append(photoCdItem.Quantity);
        sb.append("' onkeyup='QuantityChanged(this, \"");
        sb.append(groupID);
        sb.append("\");\' id='qty_");
        sb.append(groupID);
        sb.append("'/>archive photo CD sets &pound;");
        sb.append(photoCdItem.CDsRequired * photoCdItem.Price);
        sb.append(" each ");
        sb.append('(subtotal : &pound;<span id="price_');
        sb.append(groupID);
        sb.append('">');
        
        photoCdItem.Price = photoCdItem.Price * photoCdItem.CDsRequired;

        sb.append(shoppingCart.calculateCartItemPrice(photoCdItem).toFixed(2));
        sb.append('</span>)</strong>');
        sb.append("<br /><a href='#' onclick=\'onCartItemRemoveClick(\"");
        sb.append(groupID);
        sb.append("\"); return false;'");
        sb.append(">remove CD</a> | <a href='../album/?path=1ePyT1lSuBl5zKzO_BSU5WXU7pvw3lfgy'>make more CDs</a></p>");
        sb.append("</div></div></div>");
    }

    return sb.toString();

}


function RenderGiftItemHTML(cartItem)
{
    var groupID = cartItem.GroupID;
    var sb = new PhotoSite.Framework.StringBuilder();

    sb.append('<div id="container_');
    sb.append(groupID);
    sb.append('" class="order_item">');

    sb.append('<div class="order_thumb" style="max-width: 106px;">');
    sb.append('<img class="cart_order_image_thumb" border="0"  src="');
    sb.append(getConcreteImageUrl(cartItem.ThumbUrl));
    sb.append('" alt="');
    sb.append(cartItem.ProductType);
    sb.append('">');
    sb.append('</div>');

    sb.append('<div class="order_desc" style="max-width:180px;">');
    sb.append('<p><strong>');
    sb.append(cartItem.Name);
    sb.append('</strong></p><p>');
    sb.append(SR.PriceCartItem);
    sb.append(':  &#163<span id="price_');
    sb.append(groupID);
    sb.append('">');
    sb.append(shoppingCart.calculateCartItemPrice(cartItem).toFixed(2));
    sb.append('</span></p><p>');

//    if (cartItem.PackageOption)
//    {
//        sb.append(SR.PackOf, ': ', cartItem.PackageOption.Name);
//        sb.append('</p><p>');
//    }
    if (cartItem.ProductType != 'Collage') {
        var url = GetGiftURL(cartItem.ProductType);

        if (url != '') {
            sb.append('<a href="', url, '?q=', cartItem.EncID, '&origin=cart"><strong>', SR.Preview, '</strong></a> &nbsp; ');
        }
    }
    sb.append('<a href="#" onclick="onCartItemRemoveClick(\'');
    sb.append(groupID);
    sb.append('\'); return false;"><strong>');
    sb.append(SR.RemoveCartItem);
    sb.append('</strong></a></p>');

    if (cartItem.BackToAlbum)
    {
        sb.append('<div class="left" style="width:22px; padding-top:8px">');

        sb.append('<img onclick="backToAlbumChanged(this, \'');
        sb.append(groupID);
        sb.append('\');" src="../images/img_checkbox_');
        sb.append(cartItem.BackToAlbum.Name === 'Yes' ? 'on' : 'off');
        sb.append('.gif">');

        sb.append('</div>');
        sb.append('<div class="left" style="width:180px; padding-top:5px">');
        sb.append(SR.SaveACopyOfThisPhotoToEnhancedImagesAlbum);
        sb.append('<a href="#">more info</a>');
        sb.append('</div>');
    }

    sb.append('</div>');

    sb.append('<div class="left" style="width: 220px; padding-top: 30px;"><div class="quick_order_fields2"><div class="quick_order_qty2" style="width: 180px; padding-right: 35px;"><strong class="dgrey">');
    sb.append(SR.Quantity);
    sb.append('</strong></div></div>');
    sb.append('<div class="quick_order_fields2"><div class="quick_order_qty2" style="width: 180px; padding-right: 35px;">');
    if (cartItem.PackageOption) {
        sb.append('<select onchange="onPackageQuantityChanged(\'', groupID, '\', this.options[this.selectedIndex].value)">');

        for (var i = 0; i < cartItem.PackageOption.Values.length; i++) {
            var value = cartItem.PackageOption.Values[i];

            sb.append('<option value="', value.EncOptionValueID, '" ', cartItem.PackageOptionValue.EncOptionValueID == value.EncOptionValueID ? 'selected="selected"' : '', '>');
            sb.append(value.Name, ' - &pound;', value.Price.toFixed(2));
            sb.append('</option>');
        }

        sb.append('</select>');
    }
    else{
    sb.append('<input type="text" size="2" maxlength="3" value="');
    sb.append(cartItem.Quantity);
    sb.append('" onkeyup="QuantityChanged(this, \'');
    sb.append(groupID);
    sb.append('\');" id="qty_');
    sb.append(groupID);
    sb.append('"/>');
    }
    sb.append('</div></div>');
    sb.append('</div>');
    sb.append('</div>');

    return sb.toString();
}
function onPackageQuantityChanged(groupID, optionValueID) {
    var cartItem = shoppingCart.getCartItemByGroupID(groupID);

    shoppingCart.lockCartItemForEdit(cartItem);
    cartItem.PackageOptionValue.EncOptionValueID = optionValueID;
    shoppingCart.unlockCartItem(cartItem);

    var lblPrice = $get('price_' + groupID);

    for (var i = 0; i < cartItem.PackageOption.Values.length; i++) {
        var value = cartItem.PackageOption.Values[i];

        if (value.EncOptionValueID == optionValueID) {
            cartItem.Price = value.Price;
            lblPrice.innerHTML = value.Price.toFixed(2);
            break;
        }
    }
    updateTotalPrice();
}
function onCollapseEnlargementsClick(groupID) {
    var enlargments = document.getElementById('order_enlargements_' + groupID);
    var button = document.getElementById('enlargements_button_' + groupID);

    var state = enlargments.style.display;
    state = state == '' ? 'none' : '';

    if (state == 'none') {
        button.innerHTML = SR.AddOtherPrintSizes;
    }
    else {
        button.innerHTML = SR.HideOtherPrintSizes;
    }

    enlargments.style.display = state;
}

var quickSetQuantities = null;
var quickSetValid = null;

function getPrintSizeIndexByRetailerProductID(retailerProductID)
{
    for (var i = 0; i < printSizes.length; i++)
    {
        if (printSizes[i].EncRetailerProductID == retailerProductID)
        {
            return i;
        }
    }
    return null;
}

function getQuickSetQuantity(retailerProductID)
{
    var element = document.getElementById('qdd_' + retailerProductID);
    var index = getPrintSizeIndexByRetailerProductID(retailerProductID);

    if (element != null)
    {
        var q = parseInt(element.value);

        if (isNaN(q))
        {
            return quickSetQuantities[index];
        }

        return q;
    }

    return quickSetQuantities[index];
}

function getQuickSetSurfaceOptionValueID(retailerProductID)
{
    var print = shoppingCart.getPrintSizeInfoByRetailerProductID(retailerProductID);
    var element = document.getElementById('surface_' + retailerProductID);

    if (element == null)
    {
        return print.SurfaceOption.SelectedOptionValueID;
    }

    return element.options[element.selectedIndex].value;
}

function getQuickSetBorderOptionValueID(retailerProductID)
{
    var print = shoppingCart.getPrintSizeInfoByRetailerProductID(retailerProductID);
    var element = document.getElementById('quickset_border_' + retailerProductID);

    if (element == null)
    {
        if (print.BorderOption)
        {
            return print.BorderOption.SelectedOptionValueID;
        }
        else
        {
            return null;
        }
    }

    var findName = element.src.indexOf('_on') > 0 ? 'True' : 'False';

    for (var i = 0; i < print.BorderOption.Values.length; i++)
    {
        if (print.BorderOption.Values[i].Name == findName)
        {
            return print.BorderOption.Values[i].EncOptionValueID;
        }
    }

    return print.BorderOption.DefaultOptionValueID;
}

function hasQuickSetQuantityChanged(printSizeIndex)
{
    var print = printSizes[printSizeIndex];
    var retailerProductID = print.EncRetailerProductID;
    return getQuickSetQuantity(retailerProductID) != quickSetQuantities[printSizeIndex];
}

function hasQuickSetSurfaceChanged(printSizeIndex)
{
    var print = printSizes[printSizeIndex];
    var retailerProductID = print.EncRetailerProductID;
    return getQuickSetSurfaceOptionValueID(retailerProductID) != print.SurfaceOption.SelectedOptionValueID;
}

function hasQuickSetBorderChanged(printSizeIndex)
{
    var print = printSizes[printSizeIndex];
    var retailerProductID = print.EncRetailerProductID;

    if (print.BorderOption)
    {
        return getQuickSetBorderOptionValueID(retailerProductID) != print.BorderOption.SelectedOptionValueID;
    }

    return false;
}

function quickSetItemHasChanged(retailerProductID)
{
    var print = shoppingCart.getPrintSizeInfoByRetailerProductID(retailerProductID);
    var index = getPrintSizeIndexByRetailerProductID(retailerProductID);

    var quantityChanged = hasQuickSetQuantityChanged(index);

    if (quantityChanged)
    {
        return true;
    }

    var surfaceChanged = hasQuickSetSurfaceChanged(index);
    var borderChanged = hasQuickSetBorderChanged(index);

    return surfaceChanged || borderChanged;
}

function evaluateShowQuickSetApplyButton()
{
    var changed = false;

    for (var i = 0; i < printSizes.length; i++)
    {
        if (quickSetItemHasChanged(printSizes[i].EncRetailerProductID))
        {
            changed = true;
            break;
        }
    }

    quickSetApplyButton.style.display = changed ? '' : 'none';
    quickSetDisabledButton.style.display = changed ? 'none' : '';
}

function quickSetQuantityChanged(sender, retailerProductID)
{
    if (sender.value != '' && isNaN(sender.value))
    {
        sender.value = '0';
    }
    evaluateShowQuickSetApplyButton();
}

function quickSetSurfaceChanged(sender, retailerProductID)
{
    evaluateShowQuickSetApplyButton();
}

function quickSetBorderChanged(sender, retailerProductID)
{
    var on = sender.src.indexOf('_on') > 0;
    sender.src = '../images/img_checkbox_' + (on ? 'off' : 'on') + '.gif';
    evaluateShowQuickSetApplyButton();
}

function onRenderComplete(sender, args)
{
    updateTotalPrice();

    if (shoppingCart.getNumProductsInCartByType('Prints') > 0)
    {
        var quickSetInfo = shoppingCart.getQuickSetInitialQuantities();
        quickSetQuantities = new Array();
        quickSetValid = new Array();

        for (var i = 0; i < quickSetInfo.length; i++)
        {
            if (quickSetInfo[i] != null)
            {
                if (i > 1)
                {
                    showQuickSetEnlargements();
                }

                quickSetQuantities.push(quickSetInfo[i]);
                quickSetValid.push(true);
                document.getElementById('qdd_' + printSizes[i].EncRetailerProductID).value = quickSetInfo[i];
            }
            else
            {
                quickSetQuantities.push(0);
                quickSetValid.push(false);
                document.getElementById('qdd_' + printSizes[i].EncRetailerProductID).value = '-';
            }
        }
    }

    cartLoadComplete = true;

    if (currentUIRenderRequests === 0)
    {
        hideLoadingPopup();
        //verifyCartItemsOnDocument();
    }
}

function showQuickSetEnlargements()
{
    document.getElementById('QuickSetShowEnlargementsButton').style.display = 'none';
    document.getElementById('QuickSetHideEnlargementsButton').style.display = '';
    document.getElementById('quickset_enlargements').style.display = '';
}

function hideQuickSetEnlargements()
{
    document.getElementById('QuickSetShowEnlargementsButton').style.display = '';
    document.getElementById('QuickSetHideEnlargementsButton').style.display = 'none';
    document.getElementById('quickset_enlargements').style.display = 'none';
}

function onQuickSetApplyClick()
{
    var batchZero = new Array();
    var batch = new Array();

    for (var i = 0; i < printSizes.length; i++)
    {
        var print = printSizes[i];
        var quantityChanged = hasQuickSetQuantityChanged(i);
        var surfaceChanged = hasQuickSetSurfaceChanged(i);
        var borderChanged = hasQuickSetBorderChanged(i);
        var batchObject = new Object();

        if (!quantityChanged && !surfaceChanged && !borderChanged)
        {
            continue;
        }

        batchObject.EncRetailerProductID = print.EncRetailerProductID;

        if (quantityChanged)
        {
            quickSetQuantities[i] = getQuickSetQuantity(print.EncRetailerProductID);
            quickSetValid[i] = true;
            batchObject.Quantity = quickSetQuantities[i];
        }

        if (surfaceChanged || borderChanged)
        {
            batchObject.Options = new Array();
        }

        if (surfaceChanged)
        {
            var surfaceValue = getQuickSetSurfaceOptionValueID(print.EncRetailerProductID);

            batchObject.Options.push(
                                        {
                                            EncOptionID: print.SurfaceOption.EncOptionID,
                                            EncOptionValueID: surfaceValue
                                        });

            print.SurfaceOption.SelectedOptionValueID = surfaceValue;
        }

        if (borderChanged)
        {
            var borderValue = getQuickSetBorderOptionValueID(print.EncRetailerProductID);

            batchObject.Options.push(
                                        {
                                            EncOptionID: print.BorderOption.EncOptionID,
                                            EncOptionValueID: borderValue
                                        });

            print.BorderOption.SelectedOptionValueID = borderValue;
        }

        if (batchObject.Quantity && batchObject.Quantity == 0)
        {
            batchZero.push(batchObject);
        }
        else
        {
            batch.push(batchObject);
        }
    }

    for (var i = 0; i < batchZero.length; i++)
    {
        batch.push(batchZero[i]);
    }

    if (batch.length == 0 && optionBatch.length == 0)
    {
        this.quickSetWarningPopupFunction("Nothing to update.");
        return;
    }

    var callbacks =
    {
        onBeginEditCartItem: onQuickSetCartItemBeginUpdate,
        onSubItemQuantityChanged: onQuickSetSubItemQuantityChanged,
        onSubItemSurfaceChanged: onQuickSetSubItemSurfaceChanged,
        onSubItemBorderChanged: onQuickSetSubItemBorderChanged,
        onEndEditCartItem: onQuickSetCartItemEndUpdate
    };

    evaluateShowQuickSetApplyButton();

    shoppingCart.updateQuickSet(batch, callbacks);
    showLoadingPopupDelayed();
//    displayTotalNumberOfCartItems(shoppingCart.getCartItemsCount());
}

function checkForPrintsInCart()
{
    if (shoppingCart.getNumProductsInCartByType('Prints') == 0)
    {
//        PhotoCDQuantityChanged(false);
//        document.getElementById('PhotoCDSection').style.display = 'none';
        document.getElementById('QuickOrderSection').style.display = 'none';
    }
}

function onUpdateQuickSetComplete()
{
    checkForPrintsInCart();
    updateTotalPrice();
    hideLoadingPopup();
}

var currentCartItemContainerDiv = null;

function onQuickSetCartItemBeginUpdate(sender, cartItem)
{
    currentCartItemContainerDiv = document.getElementById('container_' + cartItem.GroupID);
    //currentCartItemContainerDiv.style.display = 'none';
}

function onQuickSetCartItemEndUpdate(sender, cartItem, isDeleted, isQuantityUpdated)
{
    if (isDeleted)
    {
        document.getElementById('container_' + cartItem.GroupID).style.display = 'none';
        return;
    }
    if (isQuantityUpdated)
    {
        var price_div = document.getElementById('price_' + cartItem.GroupID);
        price_div.innerHTML = shoppingCart.calculatePrintPrice(cartItem).toFixed(2);
    }
    //currentCartItemContainerDiv.style.display = '';
}

function evalSubItemCropWarning(cartItem, subItem)
{
    //                                if (subItem.WarnCrop == false)
    //                                {
    //                                    return;
    //                                }

    var warnCrop = document.getElementById('warncrop_' + cartItem.GroupID + '_' + subItem.EncRetailerProductID);

    if (warnCrop === null)
    {
        return;
    }

    warnCrop.style.display = (subItem.Quantity > 0 && subItem.WarnCrop) ? '' : 'none';
}

function evalSubItemResolutionWarning(cartItem, subItem)
{
    //                                if (subItem.WarnRes == false)
    //                                {
    //                                    return;
    //                                }

    var warnres = document.getElementById('warnres_' + cartItem.GroupID + '_' + subItem.EncRetailerProductID);

    if (warnres == null)
    {
        return;
    }

    warnres.style.display = (subItem.Quantity > 0 && subItem.WarnRes) ? '' : 'none';
}

function onQuickSetSubItemQuantityChanged(sender, cartItem, subItem, index, evaluateWarnings)
{
    var groupID = cartItem.GroupID;
    var rpID = subItem.EncRetailerProductID;

    var qty = document.getElementById('qty_' + groupID + '_' + rpID);

    if (qty != null)
    {
        qty.value = subItem.Quantity;
    }
    else
    {
        qty = document.getElementById('qty_div_' + groupID + '_' + index);

        if (qty != null)
        {
            qty.innerHTML = subItem.Quantity;
        }
    }

    if (evaluateWarnings)
    {
        evalSubItemResolutionWarning(cartItem, subItem);
        evalSubItemCropWarning(cartItem, subItem);
    }
}

function onQuickSetSubItemBorderChanged(sender, cartItem, subItem)
{
    var img = document.getElementById('border_' + cartItem.GroupID + '_' + subItem.EncRetailerProductID);
    if (img) img.src = '../images/img_checkbox_' + (subItem.PrintBorder.Name == 'True' ? 'on' : 'off') + '.gif';
}

function onQuickSetSubItemSurfaceChanged(sender, cartItem, subItem)
{
    var div = document.getElementById('surface_' + cartItem.GroupID + '_' + subItem.EncRetailerProductID);
    if (div) div.innerHTML = subItem.PrintSurface.Name;
}

var currentCartTotal = 0;

function updateTotalPriceWithDelta(delta)
{
    currentCartTotal += delta;
    document.getElementById('totalCartAmount').innerHTML = currentCartTotal.toFixed(2);
}

function updateTotalPrice()
{
    currentCartTotal = shoppingCart.calculateCartTotalPrice();

//    if (cdCartItem)
//    {
////        currentCartTotal -= (cdCartItem.Price * cdCartItem.Quantity);
//    }

//    currentCartTotal += cdPrice;
    
    document.getElementById('totalCartAmount').innerHTML = currentCartTotal.toFixed(2);
}

function quantityFromTextBox(txtbox)
{
    var q = 0;

    if (isNaN(txtbox.value))
    {
        if (txtbox.value != '')
        {
            var u = parseInt(txtbox.value);

            if (!isNaN(u))
            {
                q = u;
            }
            
            txtbox.value = q;
        }
    }
    else
    {
        q = parseInt(txtbox.value);
    }

    return q;
}

function QuantityChanged(txtbox, groupID)
{
    var cartItem = shoppingCart.getCartItemByGroupID(groupID);
    var quantity = quantityFromTextBox(txtbox);

    shoppingCart.lockCartItemForEdit(cartItem);
    {
        cartItem.Quantity = parseInt(quantity);
        if (cartItem.ProductType == 'CD') {
            //Calculate CD qty by set
            var setQty = cartItem.CDsRequired * cartItem.Quantity;
            photoCdObjects[cartItem.EncID].qty = setQty;
        }
    }
    shoppingCart.unlockCartItem(cartItem);

    document.getElementById('price_' + groupID).innerHTML = shoppingCart.calculateCartItemPrice(cartItem).toFixed(2);

    updateTotalPrice();
}

function printQuantityDivClicked(div, groupID, index, focus)
{
    var parent = div.parentNode;
    parent.removeChild(div);

    var cartItem = shoppingCart.getCartItemByGroupID(groupID);
    var subItem = cartItem.SubItems[index];

    var sb = new PhotoSite.Framework.StringBuilder();

    sb.append('<input maxlength="3" style ="border:1px solid gray;width:25px;height:14px;" id="qty_');
    sb.append(groupID);
    sb.append('_');
    sb.append(subItem.EncRetailerProductID);
    sb.append('" type="text" value="');
    sb.append(subItem.Quantity);
    sb.append('" onkeyup="PrintQuantityChanged(this, \'');
    sb.append(groupID);
    sb.append('\', ');
    sb.append(index);
    sb.append(');">');

    parent.innerHTML = sb.toString();

    if (focus)
    {
        var input = parent.firstChild;
        input.focus();
        input.select();
    }

    if (index > 0)
    {
        covertPrintDivToInput(groupID, index - 1);
    }

    if (++index < cartItem.SubItems.length)
    {
        covertPrintDivToInput(groupID, index);
    }
}

function covertPrintDivToInput(groupID, index)
{
    var div = document.getElementById('qty_div_' + groupID + '_' + index);

    if (div)
    {
        setTimeout(function(d, grp, idx) { return function() { printQuantityDivClicked(d, grp, idx, false); }; } (div, groupID, index), 0);
    }
}

function PrintQuantityChanged(txtbox, groupID, index)
{
    var cartItem = shoppingCart.getCartItemByGroupID(groupID);
    var quantity = quantityFromTextBox(txtbox);

    var oldPrice = shoppingCart.calculatePrintPrice(cartItem);

    shoppingCart.lockCartItemForEdit(cartItem);
    {
        cartItem.SubItems[index].Quantity = parseInt(quantity);
    }
    shoppingCart.unlockCartItem(cartItem);

    var newPrice = shoppingCart.calculatePrintPrice(cartItem);

    document.getElementById('price_' + groupID).innerHTML = newPrice.toFixed(2);

    evalSubItemResolutionWarning(cartItem, cartItem.SubItems[index]);
    evalSubItemCropWarning(cartItem, cartItem.SubItems[index]);

    updateTotalPriceWithDelta(newPrice - oldPrice);

    if (quickSetValid[index])
    {
        if (quickSetQuantities[index] != quantity)
        {
            quickSetValid[index] = false;
            quickSetQuantities[index] = null;
            document.getElementById('qdd_' + cartItem.SubItems[index].EncRetailerProductID).value = '-';
        }
    }
}

function PrintingOnBackChanged(txtBox, groupID)
{
    setTimeout(function(txtBox, groupID)
    {
        return function()
        {
            PrintingOnBackChangedCallback(txtBox, groupID);
        };
    } (txtBox, groupID), 10);
}

function PrintingOnBackChangedCallback(txtBox, groupID)
{
    var cartItem = shoppingCart.getCartItemByGroupID(groupID);
    var text = txtBox.value;

    shoppingCart.lockCartItemForEdit(cartItem);
    {
        cartItem.BackPrinting.Text = text;
    }
    shoppingCart.unlockCartItem(cartItem);

    document.getElementById('backprinting_chars_' + groupID).innerHTML = backPrintingMaxChars - text.length;
}

function backToAlbumChanged(element, groupID)
{
    var cartItem = shoppingCart.getCartItemByGroupID(groupID);
    var enhanceInfo = shoppingCart.getBackToAlbumProductInfoByGroupID(groupID);

    for (var i = 0; i < enhanceInfo.BackToAlbumOption.Values.length; i++)
    {
        var value = enhanceInfo.BackToAlbumOption.Values[i];

        if (value.EncOptionValueID !== cartItem.BackToAlbum.EncOptionValueID)
        {
            shoppingCart.lockCartItemForEdit(cartItem);
            cartItem.BackToAlbum.EncOptionValueID = value.EncOptionValueID;
            cartItem.BackToAlbum.Name = value.Name;
            shoppingCart.unlockCartItem(cartItem);
            break;
        }
    }

    element.src = '../images/img_checkbox_' + (cartItem.BackToAlbum.Name == 'Yes' ? 'on' : 'off') + '.gif';
}

function SubItemBorderChanged(element, groupID, rpID)
{
    var printSize = shoppingCart.getPrintSizeInfoByRetailerProductID(rpID);
    var cartItem = shoppingCart.getCartItemByGroupID(groupID);
    var subItem = null;

    for (var i = 0; i < cartItem.SubItems.length; i++)
    {
        if (cartItem.SubItems[i].EncRetailerProductID == rpID)
        {
            subItem = cartItem.SubItems[i];
            break;
        }
    }

    shoppingCart.lockCartItemForEdit(cartItem);
    {
        var optionValueID = subItem.PrintBorder.EncOptionValueID;

        for (var i = 0; i < printSize.BorderOption.Values.length; i++)
        {
            if (printSize.BorderOption.Values[i].EncOptionValueID != optionValueID)
            {
                subItem.PrintBorder.EncOptionValueID = printSize.BorderOption.Values[i].EncOptionValueID;
                subItem.PrintBorder.Name = printSize.BorderOption.Values[i].Name;
                break;
            }
        }
    }
    shoppingCart.unlockCartItem(cartItem);

    element.src = '../images/img_checkbox_' + (subItem.PrintBorder.Name == 'True' ? 'on' : 'off') + '.gif';
}

function onPhotoPreviewClick(groupID)
{
    var cartItem = shoppingCart.getCartItemByGroupID(groupID);
    window.location = '../album/prints_preview.aspx?q=' + cartItem.EncID + '&origin=cart';
}

function onCartItemRemoveClick(groupID)
{
    var cartItem = shoppingCart.getCartItemByGroupID(groupID);
    var price = shoppingCart.calculateCartItemPrice(cartItem);
    updateTotalPriceWithDelta(-price);
    shoppingCart.deleteCartItemByGroupID(groupID);
    document.getElementById('container_' + groupID).style.display = 'none';

    if (cartItem.ProductType == 'Prints')
    {
        checkForPrintsInCart();
    }
    
//    displayTotalNumberOfCartItems(shoppingCart.getCartItemsCount());
}

function onSyncCartItem(sender, cartItem)
{
    if (cartItem.ProductType == 'Prints')
    {
        for (var i = 0; i < cartItem.SubItems.length; i++)
        {
            var subItem = cartItem.SubItems[i];

            if (subItem.PrintBorder)
            {
                var border = document.getElementById('border_' + cartItem.GroupID + '_' + subItem.EncRetailerProductID);

                if (border != null)
                {
                    border.src = '../images/img_checkbox_' + (subItem.PrintBorder.Name == 'True' ? 'on' : 'off') + '.gif';
                }
            }
        }
    }
}

function onEmpyCartClick()
{
    msgBox.Show(SR.EmptyCart, SR.AreYouSureEmptyCart, [{ Button: 'Cancel' }, { Button: 'OK', Callback: onEmpyCartConfirm}]);
}

function onEmpyCartConfirm()
{
    shoppingCart.emptyCart();
}

function onEmptyCartComplete()
{
    document.location = photo_albumUrl;
}

function onContinueShoppingClick()
{
    if (shoppingCart.isWaitingForSync())
    {
        showLoadingPopup();
        shoppingCart.syncAllNow();
        setTimeout(function() { onContinueShoppingClick(); }, 500);
    }
    else
    {
        document.location = photo_albumUrl;
    }
}

function onContinueCheckoutClick()
{
    if (shoppingCart.hasCropWarningSet())
    {
        var Message = SR.CroppingWarning;
        Message += "<br />";
        Message += "<br />";
        Message += SR.PleaseClickTheCropIcon;
        Message += '&nbsp;<img src="../images/icon_sm_crop' + SR.LanguageSuffix + '.gif">&nbsp;';
        Message += SR.PleaseClickTheCropIcon2;
        msgBox.Show(SR.ImageCropping, Message, [{ Button: 'manuallycrop' }, { Button: 'continuenocrop', Callback: continueCheckout}], { Height: 190 } );
    }
    else
    {
        continueCheckout();
    }
}

function continueCheckout()
{
    showLoadingPopup();
    shoppingCart.set_zeroQuantitySyncEnabled(true);

    if (shoppingCart.isWaitingForSync())
    {
        shoppingCart.syncAllNow();
        setTimeout(function() { continueCheckout(); }, 500);
    }
    else {

        var s = Sys.Serialization.JavaScriptSerializer.serialize(photoCdObjects);

        PageMethods.UpdatePhotoCdQty(s, indexCDUpdated, OnError);
    }
}

function indexCDUpdated(result)
{
    document.location = 'delivery_option.aspx';
}

function showCropper(groupID, rpID)
{
    //hideSelect();
    rpID = rpID ? rpID : -1;
    
    if (shoppingCart.isCartItemWaitingForSync(groupID) || shoppingCart.isCartItemDataOutOfDate(groupID))
    {
        shoppingCart.syncCartItem(groupID);
        setTimeout(function(groupID, rpID) { return function() { showCropper(groupID, rpID); }; } (groupID, rpID), 500);
    }
    else
    {
        var cartItem = shoppingCart.getCartItemByGroupID(groupID);
        var validQty = false;

        for (var i = 0; i < cartItem.SubItems.length; i++)
        {
            if (cartItem.SubItems[i].Quantity > 0)
            {
                validQty = true;
                break;
            }
        }

        if (validQty === true)
        {
            if (Sys.Browser.agent == Sys.Browser.Firefox)
            {
                scroll(0, 0);
            }
            cropEditorInit(cartItem, rpID);
            PopupCropper.show();
        }
    }
}

function PhotoCDQuantityChanged(checked)
{
    if (checked)
    {
        var cds = shoppingCart.calculateCDsNeededForPrints();
        cdPrice = cds > 0 ? orderCDPrices[cds - 1] : 0;
    }
    else
    {
        cdPrice = 0;
    }
    document.getElementById('photoCDPrice').innerHTML = cdPrice.toFixed(2);
    updateTotalPrice();
}

//
// Needed functions from old code...
//

function hideCroppingEditorPopup()
{
    //showSelect();
    PopupCropper.hide();
}

function UpdateResolutionWarning(cartItem)
{
    for (var i = cartItem.SubItems.length - 1; i >= 0; --i)
    {
        var subItem = cartItem.SubItems[i];

        if (subItem.Quantity == 0)
        {
            continue;
        }

        subItem.WarnCrop = false;

        var warnRes = document.getElementById('warnres_' + cartItem.GroupID + '_' + subItem.EncRetailerProductID);
        var warnCrop = document.getElementById('warncrop_' + cartItem.GroupID + '_' + subItem.EncRetailerProductID);

        if (warnRes !== null)
        {
            if (subItem.WarnRes)
            {
                warnRes.style.display = '';
            }
            else
            {
                warnRes.style.display = 'none';
            }
        }
        if (warnCrop !== null)
        {
            if (subItem.WarnCrop)
            {
                warnCrop.style.display = '';
            }
            else
            {
                warnCrop.style.display = 'none';
            }
        }
    }
}

function newUpdateCropImage()
{
    var groupID = currentCropEditorCartItem.GroupID;
    var cartItem = shoppingCart.getCartItemByGroupID(groupID);

    var EncID = null;

    for (var i = 0; i < cartItem.SubItems.length; i++)
    {
        if (cartItem.SubItems[i].Quantity && cartItem.SubItems[i].EncID != '')
        {
            EncID = cartItem.SubItems[i].EncID;
            break;
        }
    }

    var printGroupedThumbnail = new Object();
    printGroupedThumbnail.eOrderItemId = EncID;
    printGroupedThumbnail.thumbnailHtmlId = groupID;
    cartService.GetGroupedOrderItemThumbnailUrl(printGroupedThumbnail, gotUpdatedCropImage, OnError, groupID);
}

function updateCropImage()
{
    newUpdateCropImage();
}

function gotUpdatedCropImage(result, context)
{
    var cartItem = shoppingCart.getCartItemByGroupID(context);
    cartItem.ThumbUrl = result.thumbnailUrl;
    var img = document.getElementById('img_' + context);
    img.src = cartItem.ThumbUrl;
}

function OnError(result)
{
    var response = confirm('an unexpected error was detected: ' + result.get_message() + '\n Would you like to empty your cart?');
    if (response)
    {
        onEmpyCartClick();
    }
}
