var eslRevertTimeout = null;
var eslRevertDelay = .1; // seconds
eslRevertDelay = eslRevertDelay * 1000; // convert to miliseconds

function initExpressShopLink( options ) {
    if(typeof options == 'undefined') options = {};
    
    var prodLink = $(options.prodLink);
    
    prodLink.bind('mouseover', function() {
        showExpressShopLink(options);
        clearEslRevertTimeout();  // make sure box doesn't revert back
    });
    prodLink.bind('mouseout', {'prodId': options.prodId}, setEslRevertTimeout); // to revert back
    
    preLoadLoadingImg();
}

function preLoadLoadingImg() {
    var tempModal = $('<div id="qvModal"><div style="display: none;" class="esWindow"><div class="esFrame"><div class="esContent"></div></div></div></div>').appendTo('body'),
    tempSrc = tempModal.find('.esContent').css('background-image').replace(/^url\(\"?([^\)]+?)\"?\)$/, '$1');
    (new Image()).src = tempSrc;
    tempModal.remove();
}

function showExpressShopLink( options ) {
	lastUsedPDPDetailView = 0; // clear to first view
    if(typeof options == 'undefined') options = {};
    
    var prodLink = options.prodLink;
    var catId = options.catId;
    var prodId = options.prodId;
    
    if(typeof options.useAnimation == 'undefined') options.useAnimation = true;
    if(typeof options.showId == 'undefined') options.showId = '';
    if(typeof options.position == 'undefined') options.position = true;
    if(typeof options.left == 'undefined') options.left = false;
    if(typeof options.top == 'undefined') options.top = false;
    if(typeof options.noCartDD == 'undefined') options.noCartDD = false;
    if(typeof options.positionToOffsetParent == 'undefined') options.positionToOffsetParent = false;
    
    var leftMargin = 5;
    var topMargin = 5;
    
    var esLinkId = 'esl-'+prodId;
    options.esLink = esLinkId;
    var esContent = 'esc-'+prodId;
    options.esContent = esContent;
    
    var esLink = $('#' + esLinkId);
    if(!!esLink.length) {
        esLink.remove(); // remove link if already in page.  need to always create again because could be more than one of the same item in cross sells
    }
    
    $(prodLink).after('<a id="'+esLinkId+'" style="display: none;" class="esLink" href="#'+esContent+'">Quick&nbsp;View</a>');
    esLink = $('#' + esLinkId);
    esLink.bind('click', options, showExpressShop);
    esLink.mouseover(clearEslRevertTimeout);
    
    var pos = (options.positionToOffsetParent) ? $(prodLink).position() : $(prodLink).offset();
    
    if(options.position) esLink.css({left:(pos.left+leftMargin)+'px', top:(pos.top+topMargin)+'px'}); // if you are letting js position for you
    else{
        if(options.left !== false) esLink.css({left:options.left}); // if you are manually setting the left value
        if(options.top !== false) esLink.css({top:options.top}); // if you are manually setting the top value
    }
    
    $('.esLink').hide(); // hide others
    esLink.show();
}

function hideExpressShopLink( prodId ) {
    $('#esl-' + prodId).hide();
}

function setEslRevertTimeout( event ) {
    eslRevertTimeout = window.setTimeout('hideExpressShopLink("'+event.data.prodId+'")', eslRevertDelay);
}
function clearEslRevertTimeout() {
    clearTimeout(eslRevertTimeout);
}

var dumpLock = false,
dumpFunc = function(){};

function dumpContent( text, textStatus ) {
    var dumpThis = this,
    dumpArray = $.makeArray(arguments);
    dumpFunc = function() {
        dumpContent.apply(dumpThis, dumpArray);
    };
    if (dumpLock) {
        return false;
    }
    
    var modalObj = $('#qvModal'),
    qvModal = modalObj[0].modalRef,
    modalBody = modalObj.find('.esFrame');
    if (!!modalBody.length) {
        var modalChildren = modalBody.children();
        window.products = null;
        modalBody.append(text);
        
        if (!!window.products) {
            try {
                product.config.page = 'pdp';
                product.config.quickView = true;
                product.config.pageWrapper = $('#content-'+products[0].classStyle);
                product.init();
            } catch (err) {}
            
            modalBody.find('form#addtoCart').attr('target', 'cartAddition');
            
            var sizeChartBlob = modalBody.find('.product_size_chart_link');
            if (!!sizeChartBlob) {
                var sizeChartLink = sizeChartBlob.children('a.pdp_sizeChartPopup'),
                sizeChartCategory = sizeChartLink.attr('href').replace(/^.*\#([^\#]+)$/, '$1');

                sizeChartLink.unbind('click');
                sizeChartLink.click(function( event ) {
                    event.preventDefault();
                    setTimeout(function() {
                        $.ajax({
                            error: function() {},
                            timeout: function() {},
                            cache: true,
                            dataType: 'html',
                            url: '/' + jsContextRoot + '/browse/common/sizeChart_popup.jsp?sizeChartCSS=pdp_&mainCategory=' + sizeChartCategory,
                            success: function( text, textStatus ) {
                                qvModal.transform({
                                    html: text,
                                    height: 520,
                                    width: 429,
                                    openCb: function() {
                                        var closeLink = modalObj.find('.popupHeader a');
                                        closeLink.click(function( event ) {
                                            event.preventDefault();
                                            setTimeout(qvModal.retransform, 0);
                                        });
                                        initSectionLinkJumps(modalObj);
                                    }
                                });
                            }
                        });
                    }, 0);
                });
            }
        } else {
            qvModal.transform({
                height: 140,
                width: 455,
                openCb: function() {
            		modalObj.find(':first').addClass('esApology');
                    //modalObj.find('#qvCloseLink').css({backgroundPosition:'406px center'});
                    //modalObj.css({borderRight:'1px solid #036', borderBottom:'1px solid #036'});
                }
            });
        }
        
        modalChildren.remove();
    }
}

var hideExpressShop = function() {};

function showExpressShop( event ) {
    var options = {};
    if (typeof event == 'string') {
        //// Legacy compatibility ////
        options = arguments[2];
        if (!options) options = {};
        options.catId = arguments[0];
        options.prodId = arguments[1];
    } else {
        event.preventDefault();
        options = event.data;
    }
    
    setTimeout(function() {
        var paramData = { 'catId': options.catId, 'productId': options.prodId };
        
        var ajaxOpts = {
            error: quickViewAJAXError,
            timeout: quickViewAJAXError,
            cache: true,
            dataType: 'html',
            url: '/' + jsContextRoot + '/browse/quickView.jsp',
            data: paramData, 
            success: dumpContent
        };
        
        dumpLock = true;
        dumpFunc = function(){};
        var qvModal = new Modal({
            id: 'qvModal',
            html: '<div class="esWindow" id="esWindow-' + options.prodId + '"><div class="esHeader"><span id="qvAllSalesFinalMessage" class="allSalesFinalMessage">All Sales Final</span><a id="qvCloseLink" href="javascript:;">Close</a></div><div class="esFrame" id="esFrame-' + options.prodId + '"><div class="esContent"></div></div></div>',
            height: 455,
            width: 745,
            shadow: true,
			overlay:false,
            clean: true,
            openCb: function() {
                dumpLock = false;
                dumpFunc();
                
                hideExpressShop = function() { // stored for addtocart reuse
                    qvModal.close();
                };
                
                $('#qvCloseLink').click(function( event ) {
                    event.preventDefault();
                    setTimeout(hideExpressShop, 0);
                });
            }
        });
        qvModal.open();
        
        $.ajax(ajaxOpts);
    }, 0);
}

function quickViewAJAXError( XMLHttpRequest, textStatus, errorThrown ) {
    alert("Error making AJAX request:" + textStatus); // to do: handle properly
    hideExpressShop();
}

function qvSwapTabs( newTab ) {
    var parent = $('ul.qvTabs');
    parent.children('li').removeClass('selected');
    parent.children('li.'+newTab).addClass('selected');
    parent.nextAll('.qvTabContent').hide();
    parent.nextAll('.product_'+newTab).show();
}
