var itemNum = '';
var totalSlides = 0;
var currentSlide = 1;
var contentSlides = "";

$(document).ready(function()
{
    $('.productcode_dropdown').livequery(function(){
        var container = containerId();
        //if ($(this).val() == 'dropdown'){
            $(container + '#quantity').hide();
            $(container + '#personalize_box').hide();
            $('#purchase_container').hide();
            $('#add_to_wishlist').hide();
            $('#color-selector').hide();
        //}        
    });
    // link to magazine page (shop from magazine)   
    $('#view_magazine').livequery(function(){
        $(this).click(function(){
            var width = screen.width;
            var height = screen.height;
            var page = $(this).attr('page');
            //alert(height);
            if(height < '900'){
                window.location = '/shopbymagazinesmall/' + page;
            }else{
                window.location = '/shopbymagazine/' + page;
            }
        });

        $(this).hover(function(){
           $(this).css('cursor','pointer');
        });
    });
    
    //switch personalization methods
    $('#personalization_methods-xml').live('click',function(){
        $('#xml-personalization').show();
        //othersstuff hide.
        if ($('#personalize_yes').parent().hasClass('ez-checked')) {
            $('#personalize_yes').click();
        }
        $('.ez-checkbox').hide();
        $('#color-selector').hide();
        $('.add_shared_sample').hide();
        $('#sharedSampleText').hide();
        $('.personalize-icon').hide();
        $('.personalize_header').hide();
        $('#personalization-data').hide();
    });
    $('#personalization_methods-standard').live('click',function(){
        $('#personalize-xml-text').val('');
        $('#personalize-xml-errors').html('');
        $('#xml-personalization').hide();
        //othersstuff show.
        $('.ez-checkbox').show();
        if (!$('#color-selector').hasClass('hide')){
            $('#color-selector').show(); 
        }
        $('.add_shared_sample').show();
        $('#sharedSampleText').show();
        $('.personalize-icon').show();
        $('.personalize_header').show();
        $('#personalization-data').show();
    });    
    
    // product group menu bindings
    $('#product-group-menu').live('change', function() {
        var container = containerId();
        var productMenu = $(container).find('.product-menu');
        var selectedGroup = $(this).val();
        var productOptions = $(container).find('.product-options option');
        var wrapper = $(container).find('#product_info_wrapper');
        var tempDiv = $(container).find("#please_select");


        if (productMenu.size() == 0) {
            productMenu = $(container).find('#sizeMenu');
        }

        // remove product options
        productMenu.children().each(function() {
            if ($(this).val() != 'choose') {
                $(this).remove();
            }
        });

        // add product group options
        productOptions.each(function() {
            if ($(this).hasClass(selectedGroup)) {
                productMenu.append($(this).clone());
            }
        });

        // set default product menu value
        productMenu.val('choose');
        $(container + '.quantity_box').attr('productcode', 'choose');
        wrapper.hide();
        tempDiv.show();
    });
    
    //occurs when the product dropdown menu is changed.
    $(".productcode_dropdown").live('change',productDropDownChange);
    
    // show all reviews
    $("#read_all_reviews, #top_read_reviews").live('click', function() {
        $("#review_list").siblings().hide();
        $("#read_all_section").hide();
        $("#outer_review_header").show();
        $("#product_reviews_container > span.rating_header").show();
        $("#review_list").show();

        changeTab($("#product_reviews_tab"));
    });

    // change review page bindings
    $(".review_list_page_number").click(function() {
        var new_page = $(this).html();
        var current_page = getCurrentReviewPageNumber();
        
        if (current_page != new_page) {
            changeReviewPage(new_page, current_page);
        }
    });

    // previous review page bindings
    $("#review_list_page_prev").click(function() {
        var current_page = getCurrentReviewPageNumber();
        changeReviewPage(current_page - 1, current_page);
    });

    // next review page bindings
    $("#review_list_page_next").click(function() {
        var current_page = getCurrentReviewPageNumber();
        changeReviewPage(current_page + 1, current_page);
    });

    // write a review click
    $("#write_a_review").live('click', displayReviewForm);
    $("#top_write_a_review").live('click', displayReviewForm);

    // setup product review bindings
    $("#review-form-container").productReview();

    // review feedback bindings
    $(".helpful_link").live('click', function() {
        var parts = $(this).attr('id').split('_');
        var data = {
            review_id: parts[1],
            link: parts[0]
        };

        var helpful_note = $(this).parent();
        helpful_note.html('<img src="/images/loading_small.gif" />');

        $.post('/reviews/update-review', {data: JSON.stringify(data)}, function() {
            helpful_note.html("Thank you for your feedback.");
        });
    });
    
    // show inappropriate form
    $(".inappropriate_link").click(function() {
            $(this).next().show();
            $(this).hide();
    });

    // inappropriate review form bindings
    $(".inappropriate-form-container form").livequery(function() {
        $(this).ajaxForm({
            url: '/reviews/flag-inappropriate',
            type: 'POST',
            success: function(response, request_status, wrapped_set) {
                var error_num = $(response).find('.errors').size();
                if (error_num > 0) {
                    $(wrapped_set).replaceWith(response);
                } else {
                    $(wrapped_set).html('Thank you for your feedback');
                }
            },
            beforeSubmit: function(data, matched_set, options) {
                $(matched_set).find('#submit')
                    .replaceWith('<img src="/images/loading_small.gif" />');
            }
        });
    }); 

    // close product review form bindings
    $("#button_container #close_button").live('click', function() {
        $("#product_reviews_container span.rating_header").show();
        $("#outer_review_header").show();
        $("#review_form_subcontainer").hide();
        $("#read_all_section").show();
        $("#button_container").hide();
        $("#review_header_container").hide();
        $("#preview_review").remove();
        $("#initial_review").show();
    });

    // add rounded corners
    $(".product_tab").livequery(function() {
        $(this).click(function() {
            changeTab($(this));
        });
    });
    
    //DD_roundies.addRule('.roundify', '5px', true);

    // add to wishlist button
    $("#add_to_wishlist").live('click', function() {
        setupPopup('');
        
        if ($("#wishlist-add").size() == 0) {
            $("body").append('<div id="wishlist-add" class="clearfix"></div>');
        }

        if (validateProductQuantities()) {
            $("#wishlist-add").load("/account/login_product/format/html", 
                null, 
                function() {
                    showPopup("#wishlist-add");
                    $("#overlay").click(function() {
                        $("#wishlist-add").hide();
                        destroyPopup();
                    });

                    // replace 'this item' with 'these items' if necessary
                    if (objSize(getProductQuantities()) > 1) {
                        $("#wishlist-add .count-desc").html("these items");
                    }
                });
        } else {
            destroyPopup();
        }
    });
    
    // add product login bindings
    $("#login-product form").livequery(function() {
        $(this).ajaxForm({ 
            url:    '/account/login_product/format/html',
            target: '#wishlist-add',
            beforeSubmit: function() {
                $("#loading").css('z-index', '10100').show();
            },
            success: function() {
                $("#loading").css('z-index', '10000').hide();
            }
        });
    });

    // add product to wish list form bindings
    $("#wishlist-product form").livequery(function() {
        $("#product_quantities").val(JSON.stringify(getProductQuantities()));

        $(this).ajaxForm({
            url: $(this).attr('action') + '/format/html',
            target: '#wishlist-add',
            beforeSubmit: function() {
                $("#loading").css('z-index', '10100').show();
            },
            success: function() {
                $("#loading").css('z-index', '10000').hide();
            }
        });
    });
    
    // create wish list image bindings
    $("#wishlist-product .create-wishlist").live('click', function() {
        $("#loading").css('z-index', '10100').show();
        $("#wishlist-add").load('/account/create-add-product/format/html',
            null, 
            function() {
                $("#loading").css('z-index', '10000').hide();
            });
    });

    // add product to new wish list form bindings
    $("#wishlist-create-add-prod form").livequery(function() {
        $("#product_quantities").val(JSON.stringify(getProductQuantities()));

        $(this).ajaxForm({
            url: $(this).attr('action') + '/format/html',
            target: '#wishlist-add',
            beforeSubmit: function() {
                $("#loading").css('z-index', '10100').show();
            },
            success: function() {
                $("#loading").css('z-index', '10000').hide();
            }
        });
    });

    // close add product to wish list window
    $("#wishlist-add .wishlist-close").live('click', function() {
        $("#wishlist-add").hide();
        destroyPopup();
    });

    //edit qty/personalization for more products
    $('.middle_product_box .edit_personalization').live('click', function() {
        var data = $(this).parents('.coordinating_product_details').find('.select-input');
        var qty = $(this).parent().find('.psQuantity').html();
        coordinatingPopup(data, qty);
    });

    //toggle/launch more products
    $(".middle_product_box .checkbox").live('click', function() {
        var id = '#' + $(this).attr('id').replace('-box-', '-input-');
        var product_type = 'coordinating';

        if ($(id).val() == 1) {
            $(id).val(0);
            $(this).css('backgroundImage', box_off);
            var productcode = $(this).attr('productcode');
            var productDiv = $(this).parent().parent().parent();
            var parent_id = $("#content #product_id").attr('value');

            // check if product is an additional product
            if (productDiv.attr("id").indexOf('additional') == 0) {
                product_type = 'additional';
            }

            // remove personalized product
            $.post('/ajax/psremove/', 
                {
                    productcode:  productcode,
                    product_type: product_type,
                    parent_id: parent_id
                }, 
                function(data) { 
                    $('#ps_container').fadeOut(function() {
                        $(this).replaceWith(data).fadeIn();
                    });
                }
            );

        } else {
            var edit = $(this).parent().parent().find('.edit_personalization');
            if (edit.html() != null) {
                $(id).val(1);
                $(this).css('backgroundImage', box_on);
            } else {
                coordinatingPopup($(this));
            }
        }
        return false;
    });

    //remove additional product
    $('.remove_psProduct').live('click', function() {
        var productcode = $(this).parent().attr('productcode');
        var parent_id = $("#content #product_id").attr('value');

        $.post('/ajax/psremove/', 
            {
                productcode:  productcode,
                product_type: 'additional',
                parent_id: parent_id
            }, 
            function(data) { 
                $('#ps_container').fadeOut(function() {
                    $(this).replaceWith(data).fadeIn();
                });
            }
        );
        $(this).parent().slideUp('slow', function() {
            $(this).remove();
        });
    });
    
    // add ribbon 
    $("#personalize-ribbon").live('click',function() {
        updatePersonalizationProduct('228', '1894', -1, false, {
            parent_id: $(this).attr('parent_product_id')
        });
    });

    // add punch
    $("#personalize-punch").live('click',function() {
        updatePersonalizationProduct('8426', '1828', -1, false, {
            parent_id: $(this).attr('parent_product_id')
        });
    });

    // open personalization studio for selected items type
    $(".personalization_studio_button").live('click', function() {
        var category = $(this).attr('category');
        var product = $(this).attr('product');
        var product_id = $(this).attr('product_id');
        var productcode = $(this).attr('productcode');
        var parent_product_id = $(this).attr('parent_product_id');
        
        if(!category ) {
            category = '';
        }
        if(!product) {
            product = '';
        }
        if(!product_id) {
            product_id = '';
        }
        if(!parent_product_id) {
            parent_product_id= '';
        }
        if(! productcode) {
            productcode = '';
        }
        // in case there are previous ones
        if(!$('#shopbymag_popup')){
            destroyPopup();
        }
        $("#tipsPopup").remove();
                
        setupPopup('');                
        $('#personalizationStudioPopup').remove(); 
        
        $("body").append('<div id="personalizationStudioPopup" class="hidden" category="' 
            + category 
            + '" product="' + product 
            + '" product_id="' + product_id
            + '" parent_product_id="' + parent_product_id 
            + '" productcode="' + productcode
            + '"></div>'
            );
        $('#personalizationStudioPopup').load('/ajax/personalizationstudio/', {
            category: category,
            product: product,
            parent_product_id: parent_product_id,
            selectedProductId:product_id,
            selectedProductCode:productcode
        }, function() {
            showPopup('#personalizationStudioPopup');
            products_personalizationStudioInit(category, product, parent_product_id);  
            if(product_id && productcode) {
                $('#submit-next').click();
            }
        });
        
    });        
    
    //xml text entered into xml personalization text
    $('#personalize-xml-text').focusout(function(){
        if  ($('#personalize-xml-text').val() != '' &&
             $('#personalize-xml-text').val().indexOf('<code>') >= 0){
            var pCodeFound = false;
            var container = containerId();
            var codesOnPage = $(container).find('.productCodesOnPage li');              
            var productCode = $('#personalize-xml-text').val().split('code');
            productCode = productCode[1].replace('>','').replace('/','').replace('<','');
            $(codesOnPage).each(function () {
                if ($(this).attr('id') == productCode) {
                    pCodeFound = true;
                }
            });
            if (pCodeFound){
                updatePageForSelectedProduct(productCode,true);
            } else {
                $('#personalize-xml-errors').html('The XML product code that you entered is not compatible with this product.\n\
                                                   Please make sure that the product code is correct.');
                $('#personalize-xml-text').val('');
            }
        } else if ($('#personalize-xml-text').val() != ''){
             $('#personalize-xml-errors').html('The XML that you entered, doesn\'t\n\
                                                seem to have a valid product code. Please\n\
                                                make sure you enter a valid product code.');
        } else {
             $('#personalize-xml-errors').html('');
        }
    });
    
    //add to tote button
    $("#add_button").livequery("click",function() {
        var retValues = new Object();
        var has_personalize_prods = false;
        var coordinating_required = $('#coordinating_required').size() == 1;

        retValues.productcodeArray = new Array();
                
        buildProductCodeArray(retValues, false);

        // check if there are any selected personalization products
        $("[id*=coordinating-select-box]").each(function() {
            if ($(this).hasClass("checkbox_on")) {
                has_personalize_prods = true;
            }
        });

        // display confirmation popup if main product not selected
        if (!retValues.doPost && has_personalize_prods && !coordinating_required) {
            var message = 'You have ordered additional items on this page '
                + 'without the original favor, do you wish to continue?';

            confirmationDialog(message, function() {
                $('.error').html('');
                sendData(retValues);
            });
        } else if (coordinating_required && !has_personalize_prods) {
            $('.error').html('You must personalize this item');
            return;
        } else if (retValues.doPost) {
            sendData(retValues);                                    
        } else {
            $('.error').prev().focus();
        }
    });

    //email a friend button
    $('.email_friend').live('click', function() {
        emailFriend();
    });

    //add sample button
    $('.add_sample, .add_shared_sample').click(function() {
        var container = $(this);
        container.html('adding sample...');
        var code = new Array();
        code[0] = $(this).attr('productcode') + '_1';
        $.post('/ajax/addtotote', {product_info: JSON.stringify(code),
            design_code: $('#product_design_style').val()
            }, function(json) {
            handleCartPopup(json.added);
            toteRefresh(json.tote);
            container.html('sample added');
        }, 'json');
    });

    //notify in stock button
    $('.notify_in_stock').click(function() {
        notifyInStock($(this));
    });    
    
    //simulate a swatch click whenever new personalization has colour (swatch) options
    $('select[id*="swatch_colour"]').live('change',function(){
       var code = $(this).attr('value'); 
       $('[product_code = ' + code + ']').click();       
    });

    $('.master_swatch').livequery(function() {
        // do not set up bindings for out of stock items
        if ($(this).hasClass('out-of-stock')) {
            return;
        }

        var updateMainImage = function(swatch) {
            var src = $(swatch).find('img').attr('src');
            var container = containerId();

            if (src.indexOf('/minithumb/') != -1) {
                var medium_src = $(swatch).find('img').attr('medium_src');
                var large_src = $(swatch).find("img").attr("largeimg");
                var zoom_power = $(swatch).find("img").attr("zoomPower");

                if(medium_src != ''){
                    $(container).find('#image #mainImage').attr('src', medium_src);
                }
                addpowerZoom(large_src,zoom_power);
            }
        };

        $(this).click(function() {
            var image = $(this).find('img');
            var product_code = image.attr('product_code');
            var container = containerId();

            // update selected product codes
            if ($('.table-numbers').size() > 0) {
                // get product code prefix using swatch image names
                var src = image.attr('src');
                var src_parts = src.split('/');
                var file_name = src_parts.pop();
                var name_parts = file_name.split('.');
                var new_code = '';

                // update quantity inputs on table number pages
                $('.pp_quantity input').each(function() {
                    // get new product code
                    var code_parts = $(this).attr('productcode').split('-');
                    //handles laser stationery table number products
                    if ((code_parts[2].substring(0,2).toUpperCase() == 'PC') || (code_parts[2].substring(0,2).toUpperCase() == 'PT')) {
                        var colour = name_parts[0].substring(0,4).toUpperCase();
                        new_code = code_parts[0] + '-' + code_parts[1] + '-' + colour + '-' + code_parts[3];
                    } else {                    
                        var number_code = code_parts[code_parts.length - 1];
                        var temp_code = name_parts[0];
                        var code_length = temp_code.length;
                        if (code_length > 32){
                            var code_new_length = code_length - 32;
                            new_code = temp_code.substring(0, code_new_length) + '-' + number_code;
                        } else {
                            new_code = temp_code + '-' + number_code;
                        }
                    }

                    // update product code
                    $(this).attr('productcode', new_code);
                    $(this).parent().parent().find('.productcode')
                        .text('#' + $(this).attr('productcode'));
                });
            } else {
                // update quantity inputs on regular pages
                if(product_code != ''){
                    $(container).find('.quantity_box').attr('productcode', product_code);
                    $(container).find('#quantity .error').html('');
                }
                updateProductCodes();
            }

            $(this).siblings().removeClass('selected');
            $(this).addClass('selected');
            //removes border around 'other images' when a swatch gets selected
            var mainImageSelect = $("#other_images").find('.image_container');
            $(mainImageSelect).removeClass('image_border').removeClass('selected');
            updateMainImage(this);
            updatePrices(product_code);
        });
    });
    
    $('img[fullsize_src]').livequery(function(){ 
        // use the helper function hover to bind a mouseover and mouseout event
        var dir_vert = 'top';
        var dir_horz = 'left';
        $(this).mouseover(function(e) {                            
            $('body').append('<div id="zoomImg" class="imageZoom" fullsize_for="'+$(this).attr('fullsize_src')+'"><img src="'+$(this).attr('fullsize_src')+'"></div>');
            
            var start = $(this).offset();
            
            $('#zoomImg').fadeIn('500');
            
            $('#zoomImg').css(dir_vert, e.pageY - 125);
            $('#zoomImg').css(dir_horz, e.pageX + 20);
                            
            // when click on zoomed img make it work like click on original img parent
            $('#zoomImg').click(function() {
                $('img[fullsize_src='+$(this).attr('fullsize_for')+']').parent().click();                    
                $('#zoomImg img').addClass('selected');
            });
        }).mousemove(function(e) {
            $('#zoomImg').css(dir_vert, e.pageY - 125);
            $('#zoomImg').css(dir_horz, e.pageX + 20);
        }).mouseout(function(e) {
            $('#zoomImg').remove();
        }); 
    }, function() { 
        // unbind the mouseover and mouseout events 
        $(this) 
        .unbind('mouseover')
        .unbind('mouseout');
    }); 

    $('.personalization_studio_items div.product').livequery(function() {
        var product_id = $(this).attr('product_id');
        var productcode = $(this).attr('productcode');
        $(this).click(function() {
            if($(this).hasClass('selected')) {
                // unselect
                $(this).removeClass('selected');
                $('#submit-next').attr('disabled', true);
                $('#submit-next').addClass('disabled');
                if(product_id) {
                    $('#selectedProductId').val(0);
                }
                if(productcode) {
                    $('#selectedProductCode').val(0);
                }
            } else {
                // unselect all
                $('.personalization_studio_items div.selected').removeClass('selected');

                // select
                $(this).addClass('selected');
                $('#submit-next').attr('disabled', false);
                $('#submit-next').removeClass('disabled');
                if(product_id) {
                    $('#selectedProductId').val(product_id);
                }
                if(productcode) {
                    $('#selectedProductCode').val(productcode);
                }
            }
        });
        $(this).dblclick(function() {
            // unselect all
            $('.personalization_studio_items div.selected').removeClass('selected');

            // select
            $(this).addClass('selected');
            $('#submit-next').attr('disabled', false);
            $('#submit-next').removeClass('disabled');
            if(product_id) {
                $('#selectedProductId').val(product_id);
            }
            if(productcode) {
                $('#selectedProductCode').val(productcode);
            }
            $("#submit-next").click();
        });
    });
    //productcode specific display elements
    if ($('.add_sample').length || $('.quantityLabel').length) {
        updateProductCodes();
    }

    // set up custom personalization checkbox
    $('#personalize_yes').livequery(function() {
        $(this).ezMark();
    });

    // old personalization system bindings
    $('#personalize_yes.legacy-system').personalize();

    // automated personalization stationery
    $('#personalize_yes.as-system').as();

    // new personalization system bindings
    $('#personalize_yes.new-system').live('click',function() {
         // use new personalization system
         var container = containerId();
         var quantityElement = $(container).find('.quantity_box');
         var quantity = quantityElement.val();
         var product_code = quantityElement.attr('productcode');
         var product_id = $(container).find('#product_id').val();
         
         // display/hide personalization data
         if ($('#product_details #personalization-data').html() == '') {
             // show loading image
             $('#loading-personalization').show();

             $.post('/personalization/index/format/html', {
                     product_id : product_id,
                     personalize_quantity: quantity,
                     product_code: product_code,
                     design_style: $(container).find('#product_design_style').val()
                 }, 
                 function(response) {
                     // hide loading image
                     $('#loading-personalization').hide();

                     $('#product_details #personalization-data').html(response);
                 });
                 
                // if goodie/merchandise bag update minimum qty to 2 for personalization
                if(product_id == '3388' || product_id == '3389') {
                    $('#product_details #product_min_quantity').val(2).change();                    
                } 
                
         } else {
             $('#product_details #personalization-data').empty();
             // if goodie/merchandise bag update minimum qty to 1 for
             // non-personalization
             if(product_id == '3388' || product_id == '3389') {
                 $('#product_details #product_min_quantity').val(1).change();                    
             } 
         }
    });

    // update personalization quantity when quantity changes
    $('.quantity_box').live('keyup', function() {
        var quantity = parseInt($(this).val());

        // update personalization quantity
        if (!isNaN(quantity) && quantity > 0) {
            $(this).stopTime();

            $(this).oneTime(500, function() {
                var container = containerId();
                $('#product_details #personalization-data #personalize_quantity', container).val(quantity)
                    .change();
            });
        }
    });

    // personalization form bindings
    $('#product_details #personalization-data form').livequery(function() {
        $(this).personalization();
    });
    
    $(".uppercase").live('keyup', function() {
        $(this).val($(this).val().toUpperCase());
    });
    
    //personalize yes/no - productPopup
    $('#productPopup #personalize_yes.legacy-system').live('click', function() {
        // never hide personalization div if it personalization is required
        if (!$(this).hasClass('required')) {
            $('#productPopup #ps_personalize').slideToggle();
            $('#productPopup #productpage_bottom #apply_button').toggle();
        } else if (!$(this).is(':checked')) {
            // checkbox must stay selected if personalization required
            $(this).parent().ezToggle();
        } else {
            /* 
             * Make sure that personalization div is shown if checkbox is
             * selected and personalization is required
             */
            $('#productPopup #ps_personalize').show();
            $('#productPopup #productpage_bottom #apply_button').hide();
        }
            
    });
        
    $("#productPopup #apply_button").live('click', product_applyPersonalization);

    /* 
     * Hide the apply button if the ps_personalize div is visible.  This
     * causes the apply button to be hidden when a customer clicks
     * "Edit Personalization" on a personalized product.
     */
    $('#productPopup #ps_personalize').livequery(function() {
        if ($(this).css('display') != 'none') {
            $('#productPopup #productpage_bottom #apply_button').hide();
            $('#productPopup #personalize_yes').parent().ezToggle();
        }
    });

    // add apply button when waiver checkbox clicked
    $('#ps_personalize #waiver .checkbox').live('click', function() {
        var apply_button = $('#ps_personalize #apply_button');

        if (apply_button.size() < 1) {
            $('#productPopup #productpage_bottom #apply_button')
                .clone()
                .css('float', 'none')
                .appendTo('#ps_personalize #navigation_buttons');

            apply_button = $('#ps_personalize #apply_button');
        }

        apply_button.toggle();
    });

    // coordinating items checkbox bindings
    $('#coordinate_yes').livequery(function() {
        $(this).ezMark();
    }).livequery('click', function() {
        $('#ps_container').toggle();

        // remove items from personalization cart when check box is unchecked
        if (!$(this).is(':checked')) {
            if ($("#content #product_id").attr('value')){
                var product_id = $("#content #product_id").attr('value');
            } else if ($("#shopbymag_popup #product_id").attr('value')){
                var product_id = $("#shopbymag_popup #product_id").attr('value');
            }
            
            $.post('/ajax/psremoveall', {product_id : product_id}, function(data) {
                $("#ps_container").replaceWith(data);
            });
        }
    });
    
    //gets the large image and zoompower defined for the first main Image on the product page
    var large_src = $('img#mainImage').attr('largeimg');
    var zoom_power = $('img#mainImage').attr("zoomPower");
    addpowerZoom(large_src,zoom_power);

    // alternative image bindings
    $(".image_container").livequery(image_setup);

    $('#sandceremony-instructions').click(function() {
        dialog("", "/sandceremony", {}, "#sand-ceremony-close");
    }, 'json');

    //watch video button
    $('.watch_video').live('click',function() {
        watchVideo();
    });
    
    $("#slideshow-previous").click(showPreviousSlide);
    $("#slideshow-next").click(showNextSlide);

    var totalWidth = 0;
    contentSlides = $(".slideshow-content");
    contentSlides.each(function(){
        totalWidth += this.clientWidth;
        totalSlides++;
    });
    $("#slideshow-holder").width(totalWidth);
    $("#slideshow-scroller").attr({scrollLeft: 0});
    updateButtons();

    // show suggested product details
    $('.suggested-product').hover(function() {
        $(this).find('.suggested-product-desc').show();
    }, function() {
        $(this).find('.suggested-product-desc').hide();
    });

    // design design room div when design studio button clicked
    $('#design-studio-button').live('click', function(event) {
        event.preventDefault();
        // display design room / first tab
        openDesignRoom();
    });

    // set up design room dialog
    $('#design-room-product').livequery(function(){
        $(this).dialog({
            autoOpen: false,
            draggable: true,
            resizable: true,
            title: 'Personalization Design Studio',
            width: 860,
            height: 570,
            dialogClass: 'design-room-popup',
            zIndex: 10000 // ensures that dialog is displayed over image zoomer
        });
    });

    $('#design-room-product').livequery(function(){
        $(this).designstudio();
    });
});

/**
 * Displays the design room and goes to the first tab
 */
function openDesignRoom()
{
    // display design room
    $('#design-room-product').dialog('open');

    // display first tab
    $('#design-room-product #design-tab1').click();
}

/**
 * returns the correct container (popup or main page)
 */
function containerId()
{
    var container = 'body ';
    if ($('#productPopup').css('display') == 'block') {
        container = '#productPopup ';
    }
    return container;
}

/*
 * updateAvailabilityInfo
 *
 * Update the product availabitily info
 *
 * product_code - product code
 */
function updateAvailabilityInfo(product_code)
{
    var availability_summary = 'all items in stock';

    $('.product-availability [class^="status-"]').hide();
    
    if (product_code == 'choose' || product_code == 'oos') {
        $('.product-availability [class^="status-"]').show();                
    } else {
        $('.product-availability .status-' + product_code).show();
    }

    if ($('.product-availability [class^="status-"]:visible').size() > 0) {
        availability_summary = 'all other items in stock';
    }
    
    $('.product-availability .summary-info').text(availability_summary); 
    $('.product-availability .status-summary').show(); 
}

/**
 *  outOfStockHide
 *  
 *  Outof stock products have become clickable to the 'notify when back in stock' link
 *  can be found for these products.
 *  
 *  vat toggle = boolean
 *
 */
function outOfStockDivToggle(toggle)
{
    //turn off certain div if product is out of stock, turn them on or make sure 
    //they are on otherwise
    if (toggle) {
        $('#notes').parent().hide();
        $('#quantity').hide();
        $('#add_button').hide();
    } else {
        $('#notes').parent().show();
        $('#quantity').show();
        if (!$('#add_button').hasClass('hidden')){
            $('#add_button').show();
        }
    }
}

/**
 * show corresponding color menu for size
 * 
 * productId        - ID to be used for color update
 * product_menu     - Indicates if the drop-down menu should update the product code in the quantity box
 */
function updateColorMenu(productId, product_menu)
{
    var container = containerId();
    
    if ($("#all_colors_menu").size() > 0) { //If the color selection is completed via drop-down
        //Update color menu only if the parent menu has been changed
        if(!product_menu){
            // display correct color dropdown
            $("select[id^=color_]").hide();
            $("#color_menus").show();

            if (productId == 'choose') {
                $("#all_colors_menu").show();            
            } else {
                $("#all_colors_menu").hide();
                $("#color_" + productId).show();
                //Set the product code to the current value of the color selection drop down.  This "must" happen
                //in case the customer has selected a value for the current color menu in the past.
                $(container + '.quantity_box').attr('productcode', $("#color_" + productId).val());
            }
        }
    } else { //Swatch selection
        // display correct color swatch selection dialog
        if (productId == 'choose') {
            $(container + '#all_colors').show();            
        } else {
            $(container + '#all_colors').hide();
        }

        $(container + '#color-selector [id^=colors]').hide();
        var product_code = $(container + '#colors_' + productId).show()
            .find('.selected img').attr('product_code');

        if (product_code == undefined) {
            /*Find the first color in the list and select it.  If the product has two drop-downs and the first
             * drop-down was selected, there will be no "first_swatch" and the product code will remain set to "choose"
             */
            var first_swatch = $(container + '#colors_' + productId).children('.master_swatch:first');
            
            if (first_swatch.length > 0) {
                $(container + '#colors_' + productId).children('.master_swatch:first').click();
            }
        }else{
            // At this point the product code is defined (a swatch is selected), so set the product code in the quantity field.
            $(container + '.quantity_box').attr('productcode', product_code);
        }
        
        updateProductCodes();
    }
    if ($("#subform_item_1-swatch_colour").length) {
        $("#subform_item_1-swatch_colour option").each(function() {
            var pc = $(this).val().split('-');
            if (pc[0] != 'none') {
                var pcNew = productId.split('-');
                pc[0] = pcNew[0];
                pc = pc.join('-');
                $(this).val(pc);
                var hi=1; 
            }
        });
    }
}

/*
 * updatePrices
 *
 * Update product price info
 *
 * product_code - product code
 */
function updatePrices(product_code)
{
    
    $('[id^=price-]').hide();
    if (product_code == 'choose') {
        $('#price-all').show();
    } else {
        var selected = $('#price-' + product_code);
        if (selected.length == 0) {
            //check to see if the base part of the code is what we should be looking for,
            //this affects ribbons pages ex. 232 price div should be shown, not 232-01 which
            //is what is technically being selected, but doesnt have a price div to show.
            var search = product_code.indexOf('-');            
            var product_code_base = product_code.substring(0, search != -1 ? search : product_code.length);
            var selectedBase = $('#price-' + product_code_base);
            selectedBase.show();
            
            if (selectedBase.length == 0) {
                $('#price-all').show();
            }
        } else {
            selected.show();
        }
    }
}

/*
 * updateBulkPrices
 *
 * Update bulk price info
 *
 * product_code - product code
 */
function updateBulkPrices(product_code)
{
    if (product_code != 'choose'){
        $('table.bulkPrice').hide();
        var selected = $('table.bulkPrice[bulkCode="' + product_code + '"]');
        if (selected.length == 0) {
            var base = product_code.split('-');
            product_code = base[0];
            selected = $('table.bulkPrice[bulkCode="' + product_code + '"]');
        }
        if (selected.length == 0){
            selected = $('table.bulkPrice');
        }
        selected.show();
    }
}

/**
 * shows corresponding sample order link, package quantity label
 */
function updateProductCodes()
{
    var container = containerId();
    var pc = $('.quantity_box', container).attr('productcode');
    $('.add_sample').hide();
    $('#sample_' + pc).show();
    $('.quantityLabel').hide();
    $('#quantityLabel_' + pc).show();

    // update the personalization product code
    if (pc != 'choose') {
        $('#product_details #personalization-data #product_code', container).val(pc).change();
    } else {
        $('#quantityLabelTemp').show();
    }
}

/*
 * updateSizeInfo
 *
 * Update the size information for a product
 *
 * product_code - product code
 */
function updateSizeInfo(product_code)
{
    // update size information
    $('.product-sizes > *').hide();
    if (product_code == 'choose') {
        $('.product-sizes .product-size-all').show();
    } else {
        $('.product-sizes .product-size-' + product_code).show();
    }
}

/*
 * getProductQuantities
 *
 * Get the list of product quantities pairs from a product page.
 *
 * returns Object 
 */
function getProductQuantities()
{
    var productQuantities = new Object();

    // check productpage type (dropdown or input)  
    var type = $('#productpage_type').val();
    if (type == 'input') {
        $("input[name='quantity']").each(function() {
            if ($(this).val() != '') {
                productQuantities[$(this).attr('productcode')] = $(this).val();
            }
        });
    } else if (type == 'dropdown') {
        $('.quantity_box').each(function() {
            if ($(this).val() != '') {
                productQuantities[$(this).attr('productcode')] = $(this).val();
            }
        });
    }
    
    return productQuantities;
}

/*
 * validateProductQuantities 
 *
 * Validate product quantities
 *
 * return boolean
 */
function validateProductQuantities()
{
    var valid = true;
    var productQuantities = getProductQuantities();

    clearQuantityErrorMessages();

    if (isEmpty(productQuantities)) {
        $("#quantity span.error").html(qty_0);
        valid = false;
    } else {
        $.ajax({
            url: "/ajax/validate_quantities/format/json", 
            data: {
                product_quantities: JSON.stringify(productQuantities)
                },
            dataType: 'json',
            success: function(data) {
                $.each(data, function(code, message) {
                    addQuantityErrorMessage(code, message);
                    valid = false;
                });
            },
            async: false
        });
    }

    return valid;
}


/*
 * clearQuantityErrorMessages 
 *
 * Remove all quantity error messages
 * 
 */
function clearQuantityErrorMessages()
{
    $("input[name='quantity']").next().html('');

    $("#quantity_box").next().html('');

    $("#page_errors").html('')
    .css('padding-bottom', '0');
}


/*
 * addQuantityErrorMessage 
 * 
 * Add quantity error message to the product page
 *
 * code    - product code
 * message - error message
 * return void
 */
function addQuantityErrorMessage(code, message)
{
    var type = $('#productpage_type').val();
    if (type == 'input') {
        $("input[productcode='" + code + "']").next().html(message);
    }
    else if (type == 'dropdown') {
        $("#quantity_box").parent().find('.error').html(message);
    }
}

/**
 * Load email a friend dialog
 */
function emailFriend()
{
    //loader
    setupPopup('');
    if (!$('#email_friend').length) {
        //create document and bind events once
        $('body').append('<div id="email_friend"></div>');
        $.post('/ajax/emailfriend', {
            init: true,
            product_id: $('#product_id').val()
            }, function(html) {
            $('#email_friend').html(html);

            //submit
            $('#email_friend_submit').live('click', function() {
                setupPopup('Sending Email...');
                $.post('/ajax/emailfriend', $('#email_friend_form').formSerialize(), function(html) {
                    $('#email_friend').html(html);
                    $('#loading').fadeOut();
                });
            });

            //close
            $("#overlay, #email_friend_close").live('click', function() {
                $('#email_friend').fadeOut();
                if($('#shopbymag_popup').length == 0){
                    $('#overlay').fadeOut();
                }
                
            });

            positionPopup('#email_friend');
            $('#loading').fadeOut();
            $('#email_friend').fadeIn();
        });
    } else {
        //simply re-center and show the form again
        positionPopup('#email_friend');
        $('#loading').fadeOut();
        $('#email_friend').fadeIn();
    }
}

/**
 * Load email a friend dialog
 */
function notifyInStock(button)
{
    var productcode = button.attr('id').replace('nis_', '');
    $.post('/ajax/notifyinstock', {
        productcode: productcode
    }, function(json) {
        if (json.added) {
            button.fadeOut().html('you will be notified').fadeIn();
        } else if (!$('#notify_in_stock').length) {
            setupPopup();
            //create document and bind events once
            $('body').append('<div id="notify_in_stock"></div>');
            positionPopup('#notify_in_stock');
            $('#notify_in_stock').html(json.form);

            //submit
            $('#notify_in_stock_submit').live('click', function() {
                $(this).remove();
                $.post('/ajax/notifyinstocksubmit', $('#notify_in_stock_form').formSerialize(), function(json) {
                    if (json.added) {
                        $('#notify_in_stock').fadeOut();
                        $('#overlay').fadeOut();
                        button.fadeOut().html('you will be notified').fadeIn();
                    } else {
                        $('#notify_in_stock').html(json.form);
                    }
                }, 'json');
            });

            //close
            $("#overlay, #notify_in_stock_close").live('click', function() {
                $('#notify_in_stock').fadeOut();
                $('#overlay').fadeOut();
            });

            positionPopup('#notify_in_stock');
            $('#loading').fadeOut();
            $('#notify_in_stock').fadeIn();
        } else {
            //simply re-center and show the form again
            positionPopup('#notify_in_stock');
            $('#loading').fadeOut();
            $('#notify_in_stock').fadeIn();
        }
    }, 'json');
}

/*
 * changeTab
 *
 * Change currently displayed tab
 */
function changeTab(newTab)
{
    var container = containerId();
    var details_name = newTab.attr('id').slice(0, -4);

    if (newTab.hasClass('active_tab'))
        return;

    $(newTab).parent().parent().children('#tab_contents_container').children('[tab]').hide();
    $(newTab).parent().parent().children('#tab_contents_container').children('[tab="' + $(newTab).attr('id') + '"]').toggle();
    
    // change active tab
    newTab.removeClass('inactive_tab');
    newTab.addClass('active_tab');

    newTab.siblings().each(function() {
        $(this).removeClass('active_tab');
        $(this).addClass('inactive_tab');
    });

    // change active tab contents
    $(container).find(".product_tab_text").each(function() {
        if ($(this).attr('id') == details_name) {
            $(this).show();
        } else {
            $(this).hide();
        }
    });
    
    if($("#overlay")){
        $("#overlay").css('height', $(document).height());
    }
}

/*
 * displayReviewForm
 *
 * Show the review product form
 */
function displayReviewForm()
{
    changeTab($("#product_reviews_tab"));
    
    $("#product_reviews_container").hide();
    $("#product_reviews_container span.rating_header").hide();
    $("#outer_review_header").hide();
    $("#initial_review").hide();
    $("#read_all_section").hide();
    $("#review_list").hide();
    $("#review_form_subcontainer").show();
    $("#button_container").show();
    $("#review_header_container").show();
    $("#product_reviews_container").show();
}


function coordinatingPopup(selectBox, qty)
{
    var product_id = selectBox.attr('product_id');
    var productcode = selectBox.attr('productcode');
    var parent_id = $("#content #product_id").attr('value');
        
    var design_code = selectBox.attr('design_code');
    var category = selectBox.attr('category');

    var productDiv = undefined;
    if (selectBox.hasClass('middle_product_box')) {
        productDiv = selectBox;
    } else {
        productDiv = selectBox.parents('.middle_product_box');
    }
        
    if (!category) {
        category = productDiv.attr('category');
    }
    if (!design_code) {
        design_code = productDiv.attr('design_code');
    }
        
    if (selectBox.hasClass('personalized')) {
        if(productDiv.find('.select-input').val() > 0) {
            // selected product - unselect
            $('#coordinating-select-box-'+product_id).css('backgroundImage', box_off);
            productDiv.find('.select-input').val(0);
        } else {
            // selected product - unselect
            $('#coordinating-select-box-'+product_id).css('backgroundImage', box_on);
            productDiv.find('.select-input').val(1);
        }
        return true;
    }
        
    var data = {};
    if( category ) {
        data.category = category;
    }
    data.qty = qty;

    data.parent_id = parent_id;
    
    updatePersonalizationProduct(productcode, product_id, 
            productDiv.attr('id'), true, data);

                
    return true;
}

/*
 * updatePersonalizationProduct
 *
 * Modify personalization product
 *
 * productcode        - product code
 * product_id         - products table row id
 * div_id             - id of personalization product div, set to -1 if
 *                      product has not been added yet
 * populate_dropdowns - specify if product info dropdowns should be populated
 * params             - parameters used in post to update product action
 */
function updatePersonalizationProduct(productcode, product_id, div_id, populate_dropdowns, params)
{
    var parent_id = $("#content #product_id").attr('value');

    // not selected product - display popup
    setupPopup('');
    $('#productPopup').remove();
    $("body").append('<div id="productPopup" class="hidden" productcode="' 
            + productcode + '" product_id="'+product_id+'"></div>');
        
    if (div_id != -1) {
        $('#productPopup').attr('productDiv', div_id) ;
    }

    $('#productPopup').load('/product/ajax/' + productcode, params, function() {
        showPopup('#productPopup');
                                    
        $("#overlay, #productPopup .btnClosePopup").click(function() {
            $("#productPopup").remove();
           
            if($('#shopbymag_popup').length > 0){
                $(document).scrollTo( $('#shopbymag_popup'), 200, {queue:true} );
                
            }else{
                destroyPopup();
            }
            
        });
            
        $.setupPersonalizationBindings({
            productElement:     '#productPopup',
            personalizeElement: '#ps_personalize',
            usePopup:           false
        });

        if (populate_dropdowns) {
            var code_parts = productcode.split('-');
            var code_root = code_parts[0];

            if ($('#productPopup #sizeMenu').size() > 0) {
                $('#productPopup #sizeMenu option[value=' + code_root + ']').select();
                updateColorMenu(code_root, false);
            }

            $('#productPopup select[id*=color_]').val([productcode]);
        }
    });
}

// apply button in the personalization popup
// also next button for the last step in personalization studio
function product_applyPersonalization()
{        
    var container = containerId();

    // product detail tab must be displayed is order to add product
    if (!$(container).find(' #product_details').is(':visible')) {
        changeTab($(container).find("#product_details_tab"));
        return;
    }

    // check qty and build array of items
    var retValues = new Object();
    retValues.productcodeArray = new Array();
    buildProductCodeArray(retValues, false, '#productPopup');
    var product_type = 'additional';
    var product_div_exists = false;
    var is_personalized = false;
        
    var type = $("#productPopup").find('#productpage_type').val();
        
    if (!retValues.doPost) {
        return false;
    }
                                
    // get product id and product code for item edited
    var product_id = $("#productPopup").attr('product_id');
    if (!product_id) {
        product_id = $("#selectedProductId").val();
    }
    var productcode = $("#productPopup").attr('productcode');
    var selectedCode = '';
    var product_div_id = '';
                
    if (type=='dropdown' && !$("#productPopup").attr('productdiv')) {
        product_div_id = product_id + '_' + productcode;
    } else {
        // when select with code present, use selected code
        if ($("#productPopup").find('select[name=code]').val()) {
            productcode = $("#productPopup").find('select[name=code]').val();
            selectedCode = productcode;
        }
        if ($("#productPopup").attr('productdiv')) {
            product_div_id = $("#productPopup").attr('productdiv');
            product_div_exists = true;
        } else {
            product_div_id = product_id + '_' + productcode ;
        }
    }
        
    // for coordinating product find div on the main page for product box
    var productDiv = undefined;
    if (product_div_exists) {
        var split = product_div_id.split('_');
        product_type = split[0];
        productDiv = $('#' + product_div_id);
    } else {
        // check if product div already on the main page, if not move it there
        productDiv = $('#more_options_items_middle').find('#additional_product_box_' + product_div_id);
        if (productDiv.length == 0) {
            $('#more_options_items_middle').append('<div id="additional_product_box_' + product_div_id + '"></div>');
            productDiv = $('#more_options_items_middle').find('#additional_product_box_' + product_div_id);
        }
    }

    is_personalized = $('#personalize_box #personalize_yes').is(':checked');
    
    var parent_id = $("#content #product_id").attr('value');

    // set up post data
    post_data = {
        product_info: JSON.stringify(retValues.productcodeArray), 
        product_type: product_type, 
        productcode: productcode,
        parent_id: parent_id,
        is_personalized: (is_personalized) ? 1 : 0
    }

    // merge personalization form data with other info
    var form_data = $('#productPopup #personalization-data form').formSerialize();

    if (form_data != '') {
        // add form field to data
        post_data = $.param(post_data) + '&' + form_data;
    }

    $('#productPopup #apply_button').hide();
    $('#productPopup #apply_loading').show();

    $.post('/ajax/psadd', post_data, function(response) {
        var error_num = $(response).find('.errors').size();
        if (error_num > 0) {
            $('#productPopup #personalization-data').html(response);
            $('#productPopup #apply_loading').hide();
            $('#productPopup #apply_button').show();
        } else {
            // close popup
            if(!$('#shopbymag_popup').length > 0){
                destroyPopup();
            }

            $("#productPopup").remove();
            $("#tipsPopup").remove();
            $("#personalizationStudioPopup").remove();
            $('#ps_container').fadeOut(function() {
                $(this).replaceWith(response).fadeIn();
            });
        }
    });

    return true;
}

function personalizationstudio_copyHiddenFields(fieldsDiv, code, product_id, productcode, isPersonalized, personalizedata)
{                
    // copy hidden fields
    $("#productPopup").find('input[type=hidden]').each(function() {
        var fieldName = $(this).attr('name');
        var fieldId = $(this).attr('id');
        if(!fieldName) {
            fieldName = fieldId;
        }
        if(fieldName == 'product_multiples_of'
            || fieldName=='product_min_quantity'
            || fieldName=='personalize_min_quantity'
            ) {
            fieldsDiv.append('<input type="hidden" name="'
                + fieldName + '_' + code
                + '"  id="'+ fieldName + '_' +  code
                + '" value="' + $(this).val()
                + '" product_id="' + product_id
                + '" productcode="'+ productcode +'">'
                );
        }
    });
                
    if(isPersonalized ) {
        // create and fill special field for personalization data in json format
        fieldsDiv.append('<input type="hidden" name="personalizedata_'
            + code + '"  id="personalizedata_' + code
            + '"  value="" product_id="' + product_id
            + '" productcode="'+ productcode +'">'
            );
        //personalizedata.code = productcode;
        fieldsDiv.find("#personalizedata_" + code).val(
            JSON.stringify(personalizedata)
            );
    }
}        
    
function products_personalizationStudioInit(category, product, parent_product_id)
{
    if(!category ) {
        category = '';
    }
    if(!product) {
        product = '';
    }  
    
    if(!parent_product_id) {
        parent_product_id = '';
    }  
        
    if($('#selectedProductId').val()) {
        $('#step_2 img').attr('src', '/images/button/personalizationstudio_step2_active.png');
        $('#step_1 img').attr('src', '/images/button/personalizationstudio_step1_visited.png');
        $('#submit-prev').attr('disabled', false);        
        $('#submit-prev').removeClass('disabled');
    } 
    
    $('#personalizationStudioPopup #productPopup').attr('category', category);       
    
    if(!$('#selectedProductId').val()) {
        $('#submit-prev').attr('disabled', true);
        $('#submit-prev').addClass('disabled');
    }
    
    $("#overlay,#personalizationStudioPopup .btnClosePopup").click(function() {
        $("#personalizationStudioPopup").remove();
        if($('#shopbymag_popup').length > 0){
            $(document).scrollTo( $('#shopbymag_popup'), 200, {queue:true} );
        }else{
            destroyPopup();
        }
            
    });      

    $('form#PersonalizationStudioSearch').ajaxForm({
        target: '#personalization_studio_items_category',
        success: function() {
            $('#personalization_studio_items_category').removeClass('loading');
        },
        beforeSubmit: function() {
            $('#personalization_studio_items_category').html($('div.loading').html());    
            $('#personalization_studio_items_category').addClass('loading');
        }
    });   
    
    var selectedColor = $('#personalizationStudioPopup').attr('selectedcolor');
    if(selectedColor) {
        //$('div.product[subname='+selectedColor+']').click();            
        $('div.product[subname='+selectedColor+']').addClass('selected');
        $('#submit-next').attr('disabled', false);
        $('#submit-next').removeClass('disabled');
        $('#selectedProductCode').val($('div.product[subname='+selectedColor+']').attr('productcode'));            
    }
    
    $('#submit-prev').unbind('click');
    $('#submit-prev').click(function() {
        var selectedProductCode = $('#selectedProductCode').val();
        var selectedProductId = $('#selectedProductId').val();
        
        // if personalization popup loaded
        if($('#productPopup').children().length > 0) {
            // personalization page
            // this makes it step 3, so move to step 2
            $('#personalizationStudioPopup').html($('div.loading').html());    
            $('#personalizationStudioPopup').addClass('loading');
        
            $('#personalizationStudioPopup').load('/ajax/personalizationstudio/', {
                category: category,
                product: product,
                parent_product_id: parent_product_id,
                selectedProductId:  selectedProductId
            }, function() {
                $('#personalizationStudioPopup').removeClass('loading');
                products_personalizationStudioInit(category, product, parent_product_id);
                // pre-select prev product
                $('#selectedProductId').val(selectedProductId);
                $('#selectedProductCode').val(selectedProductCode);                
            });
        
        } else {
            // move to step 1
            $('#personalizationStudioPopup').html($('div.loading').html());    
            $('#personalizationStudioPopup').addClass('loading');
        
            $('#personalizationStudioPopup').load('/ajax/personalizationstudio/', {
                category: category,
                product: product,
                parent_product_id:parent_product_id
            }, function() {
                $('#personalizationStudioPopup').removeClass('loading');
                products_personalizationStudioInit(category, product, parent_product_id);
                
                // pre-select prev product
                $('#selectedProductId').val(selectedProductId);                
                $('div.product[product_id='+selectedProductId+']').addClass('selected');
            });
        }
        
    });
    
    // remove old one
    $('#submit-next').unbind('click');
    // add new event    
    $('#submit-next').click(function() {
        
        var selectedProductId = $('#selectedProductId').val();
        var selectedProductCode = $('#selectedProductCode').val();
        var parent_id = $("#content #product_id").attr('value');

        if($('#color').val()) {
            $('#personalizationStudioPopup').attr('selectedcolor',  $('#color').val());            
        }
                
        if (selectedProductCode) {
            $('#submit-prev').attr('disabled', false);
            $('#submit-prev').removeClass('disabled');
        
            // load product page
            $('.personalization_studio_items').hide();
            $('#instructions').hide();
            
            $('#productPopup').show();            
            $('#productPopup').attr('productcode', selectedProductCode);
            $('#productPopup').html($('div.loading').html());
            $('#productPopup').addClass('loading');            
            
            $('#productPopup').load('/product/ajax/' + selectedProductCode, {
                parent_id: parent_id
            }, function() {
                $('#productPopup').removeClass('loading');
                $('#step_2 img').attr('src', '/images/button/personalizationstudio_step2_visited.png');
                $('#step_3 img').attr('src', '/images/button/personalizationstudio_step3_active.png');
                
                var selectedProductId = $('#selectedProductId').val();
                var selectedProductCode = $('#selectedProductCode').val();
                
                var data = {
                    id: selectedProductId,
                    product_info: JSON.stringify([selectedProductCode])
                };

                /*
                 * Hide submit next button and move the submit previous button 
                 * to the correct place.
                 */
                $('#submit-next').hide();
                $('#submit-prev').insertAfter('#productPopup #productpage_bottom #apply_button');
                $('#productPopup #productpage_bottom #apply_button').css('display', 'block')
                    .css('float', 'right')
                    .css('width', 'auto');

                $.setupPersonalizationBindings({
                    productElement:     '#productPopup',
                    personalizeElement: '#ps_personalize',
                    usePopup:           false
                });
            });
                
        } else if(selectedProductId) {            
            // load productcodes to select color
            $('#personalizationStudioPopup').html($('div.loading').html());    
            $('#personalizationStudioPopup').addClass('loading');
                        
            $('#personalizationStudioPopup').load('/ajax/personalizationstudio/', {
                category: category,
                product: product,
                parent_product_id: parent_product_id,
                selectedProductId:  selectedProductId,
                selectedProductCode:selectedProductCode
            }, function() {
                $('#personalizationStudioPopup').removeClass('loading');
                products_personalizationStudioInit(category, product, parent_product_id);
            });
        }        
    });             
}

function sendData(retValues)
{
    var prior = $('#add_button').html();
    $('#add_button').html(load_small);

    // main product
    var data = {
        product_info: JSON.stringify(retValues.productcodeArray),
        design_code: $('#product_design_style').val(),
        product_id: $('#product_id').val(),
        referral: $('#add_button').attr('referral')
    };

    // add xml personalization data if the xml field exists
    if ($('#personalize-xml-text').length == 1) { 
        data.personalize_xml = $('#personalize-xml-text').val().replace(/&/g,'&amp;');
    }

    // merge personalization form data with other info
    var form_data = $('#product_details #personalization-data form').formSerialize();

    if (form_data != '') {
        // set personalized data indicator
        data.personalized = 1;

        // add form field to data
        data = $.param(data) + '&' + form_data;
    }

    // add products to tote
    $.post('/ajax/addtotote', data, function(json) {
        if($('#shopbymag_popup').length > 0){
            //$('#shopbymag_popup').animate({'top':'200px'},'slow');
            removeShopByMag();
            handleCartPopup(json.added);
            toteRefresh(json.tote);
            $('#add_button').html(prior);
         
            // clear out the quantity box
            $('input[name=quantity]').val('');

            // hide personalization product area
            $('#coordinate_no').click();
             
            // clear out personalization studio items.
            $('.additional_product_box').remove();

            // update coordinating product info
            $.each(json.coordinating_products, function(code, prod_html) {
                 $('.coordinating_product_box').filter('[productcode=' + code + ']').replaceWith(prod_html);
            });
        }else{
            /* 
             * If the personalization form is returned, the form data was not 
             * filled out correctly.
             */
            if (json.personalize_form != undefined) {
                $('#product_details #personalization-data').html(json.personalize_form);
                $('#add_button').html(prior);
            } else if (json.xml_error != undefined) {
                // display personalization xml error messages
                $('#personalize_box #personalize-xml-errors').text(json.xml_error);
                $('#add_button').html(prior);
            } else {

                $.scrollTo('0', 2000, function() {
                    handleCartPopup(json.added);
                    toteRefresh(json.tote);

                    // clear personalization xml and associated error messages
                    $('#personalize_box #personalize-xml-errors').empty();
                    $('#personalize_box #personalize-xml-text').val('');

                    // clear personalization form
                    $('#personalize_yes:checked').click()
                        .parent()
                        .removeClass('ez-checked');

                    // reset add to tote button
                    $('#add_button').html(prior);
                
                    // clear out the quantity box
                    $('input[name=quantity]').val('');
                    
                    // clear out personalization studio items.
                    $('.additional_product_box').remove();

                    // hide personalization product area
                    $('#coordinate_no').click();

                    // update coordinating product info
                    $.each(json.coordinating_products, function(code, prod_html) {
                        $('.coordinating_product_box').filter('[productcode=' + code + ']').replaceWith(prod_html);
                    });
                    
                });
            }
        }
        
    }, 'json');
    
    
}

/**
 * Load video dialog
 */
function watchVideo()
{
    dialog('','/ajax/video',{video_youtube: $('#video_youtube_http').val(), video_title: $('#video_title').val()},'#show_video_close');
}

/**
 * Load video dialog
 */
function magWatchVideo(title,url)
{
    dialog('','/ajax/video',{video_youtube: url, video_title: title},'#show_video_close');
}

/*
 * changeReviewPage
 *
 * Change the currently displayed product review page
 *
 * new_page     - number of the page that is to be displayed
 * current_page - number of the currently display page
 */
function changeReviewPage(new_page, current_page)
{
    var page1 = "#review_list_page" + current_page;
    var page2 = "#review_list_page" + new_page;

    $.scrollTo('#product_reviews', '1000', {
        axis: 'y',
        onAfter: function() {
            $(page1).hide();
            $(page2).show();

            if (new_page == 1)
                $("#review_list_page_prev").hide();
            else
                $("#review_list_page_prev").show();

            if (new_page == $(".review_list_page").length)
                $("#review_list_page_next").hide();
            else
                $("#review_list_page_next").show();

            // add selected class to the appropriate page number
            $('.review_list_page_number').each(function() {
                if ($(this).html() == new_page) {
                    $(this).addClass('selected');
                } else {
                    $(this).removeClass('selected');
                }
            });
        }
    });
}

/*
 * getCurrentReviewPageNumber
 *
 * Get the number of the review page that is being displayed
 */
function getCurrentReviewPageNumber()
{
    var visible_id = $('.review_list_page:visible').attr('id');

    return parseInt(visible_id.charAt(visible_id.length - 1));
}

// This function sets up the functionality for the other images on the productpage
// refactored here, so it can be called by the shopbymagazine.js file.
function image_setup() {

    // we do not want to apply these bindings to the design studio button
    if ($(this).find('a').is('#design-studio-button')) {
        return;
    }

    $(this).unbind('hover').hover(function() {
        $(this).addClass('image_border');
    }, function() {
        if (!$(this).hasClass('selected')) {
            $(this).removeClass('image_border');
        }
    }).unbind('click').click(function() {
        var img_container = $('#left_column #image');
        //var img_container = $(this).parent().parent().find("#image");
        var medium_src = $(this).find("img").attr('medium_src');
        var link = $(this).find("img").attr('link');
        var large_src = $(this).find("img").attr("largeimg");
        var zoom_power = $(this).find("img").attr("zoomPower");

        $('.image_container').siblings().removeClass('image_border').removeClass('selected');
        $(this).addClass('image_border').addClass('selected');

        //removes border around swatches when a 'other image' gets selected
        var swatches = $("#color-selector").find('.master_swatch');
        $(swatches).siblings().removeClass('image_border').removeClass('selected');            

        var img = new Image();
        img.onload = function() {
            img_container.find("#mainImage").attr('src', medium_src);
            img_container.find("#mainImage").attr('largeimg', large_src);
            img_container.find("#mainImage").attr('zoomPower', zoom_power);
            img_container.find("#mainImage").height(img.height);
            addpowerZoom(large_src,zoom_power);
        };
        img.src = medium_src;
        img_container.find(".preview_image").attr('href', link);
    });
}

//made this into a function that can be called everytime a new otherImage is selected.
//will get the proper large_image this way
function addpowerZoom(largeImage, ZoomPower)
{
    if (largeImage == undefined)
        return;
    $('img#mainImage').addpowerzoom({
            defaultpower: 2,
            powerrange: [2,ZoomPower],
            largeimage: largeImage,
            magnifiersize: [165,165] //<--no comma following last option!
    });
}

function showPreviousSlide()
{
    if(currentSlide > 1) {
        currentSlide--;
        updateContentHolder();
        updateButtons();
    }
}

function showNextSlide()
{
    if( currentSlide < totalSlides)
    {
        currentSlide++;
        updateContentHolder();
        updateButtons();
    }
}

function updateContentHolder()
{
  var scrollAmount = 0;
  contentSlides.each(function(i){
    if(currentSlide - 1 > i) {
      scrollAmount += this.clientWidth;
    }
  });
  $("#slideshow-scroller").animate({scrollLeft: scrollAmount}, 1000);
}

function updateButtons()
{
  if(currentSlide < totalSlides) {
    //$("#slideshow-next").show();
    $("#slideshow-next").css({'opacity': '1', 'filter': 'alpha(opacity=100)'});
  } else {
    //$("#slideshow-next").hide();
    $("#slideshow-next").css({'opacity': '0.3', 'filter': 'alpha(opacity=30)'});
  }
  if(currentSlide > 1) {
    //$("#slideshow-previous").show();
    $("#slideshow-previous").css({'opacity': '1', 'filter': 'alpha(opacity=100)'});
  } else {
    //$("#slideshow-previous").hide();
    $("#slideshow-previous").css({'opacity': '0.3', 'filter': 'alpha(opacity=30)'});
  }
}

function updatePersonalizeForm(productcode,designStyle)
{
    $('#loading-personalization').show();
    $.post('/personalization/load-ajax-form/format/json', {product_code: productcode,design_style: designStyle}, function(data) {
        if(data.error == 'false'){
            $('#personalization-data').html(data.html);
        }
    }, 'json');
    $('#loading-personalization').hide();
}

function productDropDownChange()
{
    updatePageForSelectedProduct($(this).val(),$(this).hasClass('product-menu'));
}
    
function updatePageForSelectedProduct(selected, product_menu)
{
    var container = containerId();
    var wrapper = $(container).find('#product_info_wrapper');    
    var tempDiv = $(container).find("#please_select");
    var design_style = $(container).find('#product_design_style').val();
    if ($('#personalize_yes').parent().hasClass('ez-checked')) {
        $('#personalize_yes').click();
    }
    tempDiv.show();
    if (selected != 'choose') {
        //Only update the product code for product menu items (products with swatch color selections use different code to update the product code)
        if(product_menu){
            $(container + '.quantity_box').attr('productcode', selected);
            
        }
        $('#purchase_container').show();
        $('#add_to_wishlist').show();
        updateColorMenu(selected, product_menu);
        updatePrices(selected);
        updateSizeInfo(selected);
        updateAvailabilityInfo(selected);
        updateProductCodes();
        if (selected != 'oos') {
            $(container + '#quantity .error').html('');
            outOfStockDivToggle(false);
        }
        if (selected == 'oos') {
            outOfStockDivToggle(true);
        }        
        //this is a special case for product ID 1888 (8450 & 8540)
        //one cake topper can be personalized, while the other can't
        if ($('#color_8450').length && $('#color_8450').val() == '8450'){
            $('#personalize_box').hide();       
        } else {
            $('#personalize_box').show();
        }        
        // update product popup personalization code
        if($('#ps_personalize #code').length) {
            $('#ps_personalize #code').val(selected);
        }
        if($('#personalization-data').html() != '' && $('#personalization-data').length > 0){
            updatePersonalizeForm(selected,design_style);
        }
        updateBulkPrices(selected);
        wrapper.show();
        if (!$('#color-selector').hasClass('hide')){
            $('#color-selector').show(); 
        }
        tempDiv.hide();
        
        //Bug 6212: Added fix for Candles (productcode 1028 page)
        var sizeSelected = $(container).find('#sizeMenu').attr('value');
        
        if ($(container).find('select#color_' + sizeSelected).attr('value') == 'choose' || 
            $(container).find('#sizeMenu').attr('value') == 'choose'){
            $('.product-size-all').show();
            $('#please_select').show();
            $('#purchase_container').hide();
            $('#add_to_wishlist').hide();   
            $(container + '#personalize_box').hide();
            $(container + '#quantity').hide();
            updateAvailabilityInfo('choose');
        }
    }else{
        $('#product_info_wrapper').show();
        $('#please_select').show();
        $(container + '#quantity').hide();
        $(container + '#personalize_box').hide();
        $('#purchase_container').hide();
        $('#add_to_wishlist').hide();
        $('#color-selector').hide();        
        $(container + '.quantity_box').attr('productcode', 'choose');
        updateColorMenu(selected, product_menu);
        updatePrices(selected);
        updateSizeInfo(selected);
        updateAvailabilityInfo(selected);
    }
}

