var ProductPop = {
    lastTarget:null,
    lastItemNo:null,
    activeTarget:null,
    hoverMS:2000,
    contentContainerId: "ajaxPopup",
    
    show: function(target,itemno) {
        try {
            if(this.lastTarget != target) {
                this.lastTarget = target;    
                this.lastItemNo = itemno;
                target.onmouseout = ProductPop.cancelShow;
                setTimeout("ProductPop.hover()", this.hoverMS);
            } else {
                JBSPopup.hide();
            }
        } catch (e) {
            ProductPop.logit("error show:" + e);    
        }
    },
    cancelShow: function(event) {
        if(ProductPop.lastTarget)
            ProductPop.lastTarget.onmouseout=null;
        if(document.getElementById(ProductPop.contentContainerId))
            document.getElementById(ProductPop.contentContainerId).onmouseout = null;
        if(ProductPop.activeTarget)
            ProductPop.activeTarget.onmouseout = null;
        ProductPop.lastTarget=null;
        ProductPop.lastItemNo=null;
    },
    hover: function() {
        try {
            JBSPopup.hide();
            if(this.lastItemNo && this.lastTarget) {
                JBS.SiteManager.UI.Public.Ajax.Product.Listing.ProductUtility.getProductOverviewPopup(this.lastItemNo, ProductPop.showCallback);
                this.activeTarget = this.lastTarget; // remember
                this.cancelShow(null);
	        }
	    } catch (e) {
	        ProductPop.logit("error hover:" + e);
	    }
    },
    setupPopup: function() {
        JBSPopup.pendingMessage = "";
        JBSPopup.parseIFrameScript=false;
        JBSPopup.displayType = JBSPopup.DIV_POPUP;
        JBSPopup.useIFrameBelow=true;
        JBSPopup.startHidden=true;
        JBSPopup.initialize( ProductPop.activeTarget, 0, 0); //
        JBSPopup.useAutoHeight=true;
        JBSPopup.useAutoWidth=true;
    },
    showCallback: function(response) {
        try {
            if(response!=null&&response!="") {
                JBSPopup.addMouseOut = false;
                
                ProductPop.setupPopup();
                var top = JBSPopup.top;
                var left = JBSPopup.left;
                JBSPopup.move(-500, -500);
                
                JBSPopup.display(response);
                JBSPopup.setVisibility(true);
                // get the size of the output:
                var h = document.getElementById(ProductPop.contentContainerId).offsetHeight;
                var w = document.getElementById(ProductPop.contentContainerId).offsetWidth;
                JBSPopup.setVisibility(false);
                JBSPopup.top = top;
                JBSPopup.left = left;
                
                // adjust if scrolling/window position a problem
                if( (JBSPopup.top + h) > ( f_clientHeight() + f_scrollTop() )) {
                    JBSPopup.top = ( f_clientHeight() + f_scrollTop() ) - h;
                }
                if( (JBSPopup.left + w) > ( f_clientWidth() + f_scrollLeft() )) {
                    JBSPopup.left = ( f_clientWidth() + f_scrollLeft() ) - w;
                }
                ProductPop.logit(JBSPopup.top);
                ProductPop.logit("left=" + JBSPopup.left);
                
                JBSPopup.moveWithIFrameUnderBuffer(JBSPopup.left,JBSPopup.top,w,h,20,0,5,10);
                JBSPopup.setVisibility(true);
                
                document.getElementById(ProductPop.contentContainerId).onmouseout = ProductPop.mouseOutCheck;
                ProductPop.activeTarget.onmouseout = ProductPop.mouseOutCheck;
                
            }
        } catch (e) {
            ProductPop.logit("error showCallback:" + e.message);
        }
    
    },
    mouseOutCheck: function(evt) {
        try {
            var current, related;
            if (window.event && document.all) {
                current = this;
                related = window.event.toElement;
            } else {
                current = evt.currentTarget;
                related = evt.relatedTarget;
            }
            if(related == ProductPop.activeTarget || related == document.getElementById(ProductPop.contentContainerId) || ProductPop.contains(ProductPop.activeTarget,related) || ProductPop.contains(document.getElementById(ProductPop.contentContainerId),related) ) {
            } else {
                ProductPop.cancelShow(null);
                JBSPopup.hide();
            }
        } catch(e) {
            ProductPop.logit("mouseOutCheckException: " + e);
        }
    },
    contains: function(a, b) {
        // Return true if node a contains node b.
        while (b.parentNode)
            if ((b = b.parentNode) == a)
                return true;
        return false;
    },
    logit: function(msg) {
        //populate in debug
        //document.getElementById("logme").innerHTML += msg;
    }

};
function f_clientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function f_clientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function f_scrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function f_scrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}
