var JBSPopup = {
    DIV_POPUP: 1,
    IFRAME_POPUP: 2,

    POSITION_CENTER: 1,
    POSITION_RELATIVE: 2,

    IFRAME_POPUP_ID: "_jbs_iframe_popup_",
    DIV_POPUP_ID: "_jbs_div_popup_",
    displayType: 2/*DIV_POPUP*/,
    parseIFrameScript: true,
    iFrameScrollbars: false,
    addMouseOut: true,
    useIFrameBelow: false, /* If displayType=DIV_POPUP - set this to true to paint an iframe below - necessary if you need to overlay window'd controls */
    positionType: 2, /*POSITION_RELATIVE*/
    top: -1,
    left: -1,
    frameSource: "javascript:void(0)",
    frameborder: 1,
    pendingMessage: "Fetching...",
    useAutoHeight: false,
    useAutoWidth: false,
    startHidden: false,

    /* call from initial call -*/
    initialize: function(EventElement, Width, Height, Top, Left) {
        this.eventElement = EventElement;
        this.width = Width;
        this.height = Height;
        if (Top)
            this.top = Top;
        else
            this.top = -1;
        if (Left)
            this.left = Left;
        else
            this.left = -1;
        this.showPending(this.pendingMessage);
    },
    showPending: function(msg) {


        if (this.top == -1)
            if (this.positionType == JBSPopup.POSITION_RELATIVE) {
            var ct = document.all ? this.eventElement.clientTop : 0;
            this.top = ct + this.eventElement.clientHeight + this.eventElement.offsetHeight + getElementOffsetY(this.eventElement);
        } else {
            this.top = (getBrowserHeight() / 2) - (this.height / 2);
        }

        if (this.left == -1)
            if (this.positionType == JBSPopup.POSITION_RELATIVE) {
            var cl = document.all ? this.eventElement.clientLeft : 0;
            this.left = cl + getElementOffsetX(this.eventElement);
        } else {
            this.left = (getBrowserWidth() / 2) - (this.width / 2);
        }


        var sWidth = this.width + "px";
        var sHeight = this.height + "px";
        var sDisplay = "";
        if (this.useAutoHeight)
            sHeight = "auto";
        if (this.useAutoWidth)
            sWidth = "auto";
        if (this.startHidden)
            sDisplay = "none";
        if (JBSPopup.displayType == JBSPopup.IFRAME_POPUP || this.useIFrameBelow == true) {
            // create an iframe if iframe or using as backdrop
            var scroll = JBSPopup.iFrameScrollbars ? "yes" : "no";
            var iframe = document.getElementById(JBSPopup.IFRAME_POPUP_ID);
            if (iframe == null) {
                iframe = document.createElement("iframe");
                iframe.id = JBSPopup.IFRAME_POPUP_ID;
                iframe.style.display = "none";
                iframe.style.position = "absolute";
                iframe.style.left = "0px";
                iframe.style.top = "0px";
                iframe.setAttribute("src", this.frameSource);
                iframe.setAttribute("scrolling", scroll);
                iframe.setAttribute("frameBorder", this.frameBorder);
                document.body.insertBefore(iframe, null);
            }
            iframe.style.zIndex = 1;

            // need to show regardless
            iframe.style.top = this.top;
            iframe.style.left = this.left;
            iframe.style.width = sWidth;
            iframe.style.height = sHeight;
            iframe.style.display = sDisplay;
        }

        if (JBSPopup.displayType == JBSPopup.DIV_POPUP) {
            var div = document.getElementById(JBSPopup.DIV_POPUP_ID);
            if (div == null) {
                div = document.createElement("div");
                div.id = JBSPopup.DIV_POPUP_ID;
                div.style.display = "none";
                div.style.position = "absolute";
                div.style.left = "0px";
                div.style.top = "0px";

                document.body.insertBefore(div, null);
            }

            div.style.zIndex = 1;
            div.style.top = this.top + 'px';
            div.style.left = this.left + 'px';
            div.style.height = sHeight;
            div.style.width = sWidth;
            div.innerHTML = msg;
            div.style.display = sDisplay;


            if (this.addMouseOut)
                div.onmouseout = function() { JBSPopup.hide(); };
        } else {
            //iframe.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
            var iframeDiv = "<div id='" + JBSPopup.DIV_POPUP_ID + "'>" + msg + "</div>";
            document.frames[iframe.id].document.write(iframeDiv);

            if (this.addMouseOut)
                iframe.onmouseout = function() { JBSPopup.hide(); };
        }
    },
    display: function(DisplayHtml) {
        if (JBSPopup.displayType == JBSPopup.DIV_POPUP) {
            var div = document.getElementById(JBSPopup.DIV_POPUP_ID);
            div.innerHTML = DisplayHtml;
        } else {
            var sOutput = this.parseIFrameScript ? JBSPopup.parseResponse(DisplayHtml) : DisplayHtml;
            document.frames[JBSPopup.IFRAME_POPUP_ID].document.body.removeChild(document.frames[JBSPopup.IFRAME_POPUP_ID].document.getElementById(JBSPopup.DIV_POPUP_ID));
            document.frames[JBSPopup.IFRAME_POPUP_ID].document.write(sOutput);
        }
    }, // Alternative to Hide - keeps control alive
    setVisibility: function(bVisible) {
        if (JBSPopup.displayType == JBSPopup.IFRAME_POPUP || this.useIFrameBelow == true) {
            var iframe = document.getElementById(JBSPopup.IFRAME_POPUP_ID);
            bVisible ? iframe.style.display = '' : iframe.style.display = 'none';
        }
        if (JBSPopup.displayType == JBSPopup.DIV_POPUP) {
            var div = document.getElementById(JBSPopup.DIV_POPUP_ID);
            bVisible ? div.style.display = '' : div.style.display = 'none';
        }
    },
    move: function(x, y) {
        this.top = y;
        this.left = x;
        if (JBSPopup.displayType == JBSPopup.IFRAME_POPUP || this.useIFrameBelow == true) {
            var iframe = document.getElementById(JBSPopup.IFRAME_POPUP_ID);
            iframe.style.top = this.top;
            iframe.style.left = this.left;
        }
        if (JBSPopup.displayType == JBSPopup.DIV_POPUP) {
            var div = document.getElementById(JBSPopup.DIV_POPUP_ID);
            div.style.top = this.top;
            div.style.left = this.left;
        }
    },
    moveWithIFrameUnderBuffer: function(x, y, w, h, leftBuffer, rightBuffer, topBuffer, bottomBuffer) { /* when using iframebelow - keeps a specified buffer border*/
        JBSPopup.move(x, y);
        if (this.useIFrameBelow == true) {
            var iframe = document.getElementById(JBSPopup.IFRAME_POPUP_ID);
            iframe.style.width = (w - leftBuffer - rightBuffer);
            iframe.style.height = (h - topBuffer - bottomBuffer);
            iframe.style.top = y + topBuffer;
            iframe.style.left = x + leftBuffer;
        }
    },
    resize: function(width, height) {
        if (JBSPopup.displayType == JBSPopup.IFRAME_POPUP || this.useIFrameBelow == true) {
            var iframe = document.getElementById(JBSPopup.IFRAME_POPUP_ID);
            iframe.style.width = width;
            iframe.style.height = height;
        }
        if (JBSPopup.displayType == JBSPopup.DIV_POPUP) {
            var div = document.getElementById(JBSPopup.DIV_POPUP_ID);
            div.style.width = width;
            div.style.height = height;
        }
    },
    parseResponse: function(DisplayHtml) {
        // cheaped out here, but easier
        var s = new String(DisplayHtml);
        var re = /javascript:parent./gi;
        var sClean = s.replace(re, "javascript:");
        // then one more
        re = /javascript:/gi;
        return sClean.replace(re, "javascript:parent.");
    },
    hide: function() {
        var element = document.getElementById(JBSPopup.IFRAME_POPUP_ID);
        if (element)
            document.body.removeChild(document.getElementById(JBSPopup.IFRAME_POPUP_ID));
        element = document.getElementById(JBSPopup.DIV_POPUP_ID);
        if (element)
            document.body.removeChild(document.getElementById(JBSPopup.DIV_POPUP_ID));
    }

}
function getElementOffsetY(element) {
	var totalOffset = 0;
	if (element.offsetTop != null) {
        totalOffset += element.offsetTop;
		while (element.offsetParent) {
			totalOffset += element.offsetParent.offsetTop;
			element = element.offsetParent;
		}
	}
	return totalOffset;
}
function getElementOffsetX(element) {
	var totalOffset = 0;
	if (element.offsetLeft != null) {
        totalOffset += element.offsetLeft;
		while (element.offsetParent) {
			totalOffset += element.offsetParent.offsetLeft;
			element = element.offsetParent;
		}
	}
	return totalOffset;
}
function getBrowserHeight(){

  if( typeof( window.innerWidth ) == 'number' ) {
    return window.innerHeight;
  } else if( document.documentElement &&
      ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    return document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    return document.body.clientHeight;
  }

}

function getBrowserWidth(){
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    return window.innerWidth;
  } else if( document.documentElement &&
      ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    return document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    return document.body.clientWidth;
  }
}
