/* Copyright (c) 2003-2011, SearchFit, Inc. All Rights Reserved. */
if (typeof SFUI == "undefined" || !SFUI) { var SFUI = {}; }

SFUI.productQuickLook = {

    panels: {},

    show: function(e, isDynamicPage, wsWebsiteEndpoint, userId, productId, additionalParams) {
        // construct and show the dynamic panel with ajax content
        if (SFUI.productQuickLook.panels[productId] == null) {

            var eventXY = YAHOO.util.Event.getXY(e);
            showLoadingWindow("Loading Quick Look...", { modal:false });

            // construct the web service request
            var wsRequest = "action=getProductQuickLookContent&wsParams[multipart_result]=isDynamicPage=" + isDynamicPage;
            wsRequest += ",clientWidth=" + YAHOO.util.Dom.getViewportWidth() + ",clientHeight=" + YAHOO.util.Dom.getViewportHeight();
            wsRequest += ",uid=" + userId + ",pid=" + productId;
            if (additionalParams != null && additionalParams != "") { wsRequest += "," + additionalParams.replace("&", ","); }

            // construct the callback
            var asyncResponseCallback_showQuickLookPanel = {
                success: function(o) {
                    var resultContent = getMultipartResultById(o.responseText, "multipart_result");
                    if (resultContent == "") { resultContent = geWsErrorDescription(o.responseText, true); }

                    SFUI.productQuickLook.panels[productId] = new YAHOO.widget.Panel("SFUI.productQuickLook.panels["+productId+"]", { zindex:1001, visible:false, fixedcenter:true, draggable:true, close:true, modal:false, constraintoviewport:true, xy:eventXY} ); 
                    SFUI.productQuickLook.panels[productId].setHeader("Product Quick Look");
                    SFUI.productQuickLook.panels[productId].setBody(resultContent);
                    SFUI.productQuickLook.panels[productId].render(document.body);
                    var panelContainerRegion = YAHOO.util.Dom.getRegion("productQuickLookContainer" + productId);
                    if (panelContainerRegion && panelContainerRegion.height > Math.floor(YAHOO.util.Dom.getViewportHeight() * 0.8)) { YAHOO.util.Dom.setStyle(["productQuickLookContainer" + productId], 'height', Math.floor(YAHOO.util.Dom.getViewportHeight() * 0.8) + 'px'); SFUI.productQuickLook.panels[productId].render(document.body); }
                    SFUI.productQuickLook.panels[productId].show();
                    SFUI.productQuickLook.panels[productId].bringToTop();
                    YAHOO.util.Event.addListener("SFUI.productQuickLook.panels["+productId+"]", 'mousedown', function() { SFUI.productQuickLook.panels[productId].bringToTop(); });

                    // hide the progress panel
                    hideLoadingWindow();

                    // execute response JavaScript after the response text is shown
                    launchJavascript(o.responseText);

                    // process any unprocessed dynamic includes
                    processDynamicIncludes(SFUI.ThisWebsite.getPublicWebsiteService());
                },
                failure: function(o) { hideLoadingWindow(); alert("Failed SFUI.productQuickLook.show (" + o.status + " " + o.statusText + ")"); }
            }
            // make the AJAX call
            var transaction = YAHOO.util.Connect.asyncRequest('POST', wsWebsiteEndpoint, asyncResponseCallback_showQuickLookPanel, wsRequest);
            if (transaction == null) { hideLoadingWindow(); }
        } else {
            // we have already gotten this one, just show it again...
            //SFUI.productQuickLook.panels[productId].moveTo(YAHOO.util.Event.getPageX(e), YAHOO.util.Event.getPageY(e));
            SFUI.productQuickLook.panels[productId].show();
            SFUI.productQuickLook.panels[productId].bringToTop();
        }
    },

    pql_hidertask: {},

    mouseOver: function(e){
        var pid = YAHOO.util.Dom.getAttribute(YAHOO.util.Event.getTarget(e), 'pid');
        clearTimeout(SFUI.productQuickLook.pql_hidertask[pid]);
        YAHOO.util.Dom.setStyle('productQuickLook_linkContainer_'+pid, 'display', 'block');
        YAHOO.util.Dom.setXY('productQuickLook_linkContainer_'+pid, YAHOO.util.Dom.getXY(YAHOO.util.Event.getTarget(e)));
    },

    mouseOut: function(e){
        var pid = YAHOO.util.Dom.getAttribute(YAHOO.util.Event.getTarget(e), 'pid');
        SFUI.productQuickLook.pql_hidertask[pid] = setTimeout("YAHOO.util.Dom.setStyle('productQuickLook_linkContainer_"+pid+"', 'display', 'none');", 10);
    },

    linkMouseOver: function(e){
        var t = YAHOO.util.Event.getTarget(e);
        YAHOO.util.Dom.addClass(t, t.getAttribute('mouseOverClass'));
    },

    linkMouseOut: function(e){
        var t = YAHOO.util.Event.getTarget(e);
        YAHOO.util.Dom.removeClass(t, t.getAttribute('mouseOverClass'));
    },

    linkMouseDown: function(e){
        var t = YAHOO.util.Event.getTarget(e);
        YAHOO.util.Dom.addClass(t, t.getAttribute('mouseDownClass'));
    },

    linkMouseUp: function(e){
        var t = YAHOO.util.Event.getTarget(e);
        YAHOO.util.Dom.removeClass(t, t.getAttribute('mouseDownClass'));
    },

    register: function(pid, elementName){
        SFUI.productQuickLook.pql_hidertask[pid] = null;
        if (YAHOO.util.Dom.get(elementName) !== null) {
            YAHOO.util.Dom.get(elementName).setAttribute('pid', pid);
            YAHOO.util.Dom.get('productQuickLook_link_'+pid).setAttribute('pid', pid);
            YAHOO.util.Dom.get('productQuickLook_link_'+pid).setAttribute('mouseOverClass', 'productQuickLook_link_hover');
            YAHOO.util.Dom.get('productQuickLook_link_'+pid).setAttribute('mouseDownClass', 'productQuickLook_link_down');
            YAHOO.util.Dom.get('productQuickLook_linkContainer_'+pid).setAttribute('pid', pid);
            YAHOO.util.Event.addListener([elementName, "productQuickLook_linkContainer_"+pid], "mouseover", SFUI.productQuickLook.mouseOver);
            YAHOO.util.Event.addListener([elementName, "productQuickLook_linkContainer_"+pid], "mouseout", SFUI.productQuickLook.mouseOut);
        } else {
            var attempt = ['img_product_small_'+pid, 'img_product_tiny_'+pid, 'img_product_thumbnail_'+pid];
            var imgObjs = null;
            var imgName = false;
            for (var i = 0; i < attempt.length; i++) {
                imgObjs = getElementsByName(attempt[i]);
                if (imgObjs !== null) {
                    for (var j = 0; j < imgObjs.length; j++) {
                        imgObj = imgObjs[j];
                        if ( ! imgName) { imgName = attempt[i]; }
                        YAHOO.util.Dom.setAttribute(imgObj, 'pid', pid);
                        YAHOO.util.Dom.get('productQuickLook_link_'+pid).setAttribute('pid', pid);
                        YAHOO.util.Dom.get('productQuickLook_link_'+pid).setAttribute('mouseOverClass', 'productQuickLook_link_hover');
                        YAHOO.util.Dom.get('productQuickLook_link_'+pid).setAttribute('mouseDownClass', 'productQuickLook_link_down');
                        YAHOO.util.Dom.get('productQuickLook_linkContainer_'+pid).setAttribute('pid', pid);
                        YAHOO.util.Event.addListener([imgObj, "productQuickLook_linkContainer_"+pid], "mouseover", SFUI.productQuickLook.mouseOver);
                        YAHOO.util.Event.addListener([imgObj, "productQuickLook_linkContainer_"+pid], "mouseout", SFUI.productQuickLook.mouseOut);
                    }
                }
            }
            if (imgName == false) {
                // didn't find an image so lets just display the link.
                YAHOO.util.Dom.get('productQuickLook_link_'+pid).setAttribute('mouseOverClass', 'productQuickLook_linkOnly_hover');
                YAHOO.util.Dom.addClass('productQuickLook_link_'+pid, 'productQuickLook_linkOnly');
                YAHOO.util.Dom.addClass('productQuickLook_linkContainer_'+pid, 'productQuickLook_linkContainerOnly');
                YAHOO.util.Dom.get('productQuickLook_link_'+pid).setAttribute('mouseDownClass', 'productQuickLook_linkOnly_down');
                setTimeout("YAHOO.util.Dom.setStyle('productQuickLook_linkContainer_"+pid+"', 'display', 'block');", 10);
            }
        }
        YAHOO.util.Event.addListener("productQuickLook_link_"+pid, "mouseover", SFUI.productQuickLook.linkMouseOver);
        YAHOO.util.Event.addListener("productQuickLook_link_"+pid, "mouseout", SFUI.productQuickLook.linkMouseOut);
        YAHOO.util.Event.addListener("productQuickLook_link_"+pid, "mousedown", SFUI.productQuickLook.linkMouseDown);
        YAHOO.util.Event.addListener("productQuickLook_link_"+pid, "click", SFUI.productQuickLook.linkMouseUp);
        YAHOO.util.Event.addListener("productQuickLook_link_"+pid, "mouseup", SFUI.productQuickLook.linkMouseUp);
        YAHOO.util.Event.addListener("productQuickLook_link_"+pid, "mouseout", SFUI.productQuickLook.linkMouseUp);
    }
};
