var ImagesLightbox = {
    Display: function() {
        var private = {
            images: [], 
            title: "No Window Title", 
            preload: [], 
            width: 400, 
            height: 400, 
            currentImageIndex: 0, 
            headerContentElem: null, 
            
            PositionDialog: function(wrapper) { 
	            wrapper.style.top = GetScreenCenteredY(private.height + 40) + "px";
	            wrapper.style.left = GetScreenCenteredX(private.width) + "px";
            }, 
            
            ReziseDialogFrame: function(wrapper, imageContainer, leftArrow, rightArrow, newWidth, newHeight, framesLeft) { 
                private.width = private.width + Math.ceil((newWidth - private.width) / framesLeft);
                private.height = private.height + Math.ceil((newHeight - private.height) / framesLeft);
                
                wrapper.style.width = private.width + "px";
                wrapper.style.height = private.height + "px";
                
	            imageContainer.style.width = ((private.width - 26) + (private.images.length == 1 ? 46 : 0)) + "px";
	            imageContainer.style.height = (private.height - 34) + "px";
	            
	            leftArrow.style.top = Math.floor((private.height - 38) / 2) + "px";
	            rightArrow.style.top = Math.floor((private.height - 38) / 2) + "px";
	            
	            private.PositionDialog(wrapper);
                
                if (framesLeft > 1)
                    setTimeout(function() { private.ReziseDialogFrame(wrapper, imageContainer, leftArrow, rightArrow, newWidth, newHeight, framesLeft - 1); }, 50);
            }
        };
        
        var public = {
            AddImage: function(newImage) { 
                private.images[private.images.length] = newImage;
            }, 
            
            SetTitle: function(newTitle) { 
                private.title = newTitle;
            }, 
            
            SetHeaderContentElem: function(newElem) { 
                private.headerContentElem = newElem;
            }, 
            
            ShowDialog: function() { 
                if (private.images.length <= 0) return;
            
                var pageWidth = ((document.width) ? document.width : document.body.offsetWidth) + 20;
                var pageHeight = ((document.height) ? document.height : document.body.offsetHeight) + 20;
                
                if (document.documentElement.clientHeight > pageHeight) 
                    pageHeight = document.documentElement.clientHeight;
                    
                var closureThis = this;
            
                // display the window elements
	            var curtain = document.createElement("div");
                curtain.style.display = "block";
                curtain.style.position = "absolute";
                curtain.style.top = "0px";
                curtain.style.left = "0px";
                curtain.style.backgroundColor = "#000000";
	            curtain.style.opacity = 0.8;
	            curtain.style.filter  = "alpha(opacity=80)";
                curtain.style.height = Math.ceil(pageHeight) + "px";
                curtain.style.width = Math.ceil(pageWidth) + "px";
                curtain.style.margin = "0px auto";
                curtain.style.zIndex = 125;
                curtain.style.cursor = "pointer";
                curtain.style.cursor = "hand";
	            curtain.appendChild(document.createTextNode(" "));
	            Get("ElementDropBox").appendChild(curtain);
	            
	            var wrapper = document.createElement("div");
	            wrapper.className = "Dialog";
	            wrapper.style.width = "400px";
	            wrapper.style.height = "400px";
	            wrapper.style.zIndex = 126;
        	    
	            private.PositionDialog(wrapper);
	            
	            var close = document.createElement("a");
	            close.href = "#";
	            close.onclick = function() { closureThis.HideDialog(wrapper, curtain); return false; };
	            close.style.display = "block";
	            close.style.margin = "-5px -15px 0 0";
                if (typeof(close.style.cssFloat) != "undefined") close.style.cssFloat = "right";
                else close.style.styleFloat = "right";
	            var img = document.createElement("img");
	            img.src = "/images/layout2009/curtain_close.gif";
	            img.width = 26;
	            img.height = 26;
	            img.alt = "Close";
                close.appendChild(img);
                wrapper.appendChild(close);
                
                var headerContentParent = Get(private.headerContentElem);
                if (headerContentParent) { 
                    var headerContent = document.createElement("div");
                    headerContent.style.margin = "1px 4px 0 0";
                    if (typeof(headerContent.style.cssFloat) != "undefined") headerContent.style.cssFloat = "right";
                    else headerContent.style.styleFloat = "right";
                    headerContent.innerHTML = headerContentParent.innerHTML;
                    wrapper.appendChild(headerContent);
                }
	            
	            var header = document.createElement("h1");
	            wrapper.appendChild(header);
	            
	            var leftArrow = document.createElement("a");
	            leftArrow.href = "#";
	            leftArrow.className = "BigArrowLeft";
	            leftArrow.style.position = "absolute";
	            leftArrow.style.left = "10px";
	            leftArrow.style.top = Math.floor((private.height - 38) / 2) + "px";
	            leftArrow.onclick = function() { closureThis.ShowImage(wrapper, private.currentImageIndex - 1, imageContainer, leftArrow, rightArrow, header); this.blur(); return false; };
	            leftArrow.appendChild(document.createTextNode(" "));
	            wrapper.appendChild(leftArrow);
	            
	            var rightArrow = document.createElement("a");
	            rightArrow.href = "#";
	            rightArrow.className = "BigArrowRight";
	            rightArrow.style.position = "absolute";
	            rightArrow.style.right = "10px";
	            rightArrow.style.top = Math.floor((private.height - 38) / 2) + "px";
	            rightArrow.onclick = function() { closureThis.ShowImage(wrapper, private.currentImageIndex + 1, imageContainer, leftArrow, rightArrow, header); this.blur(); return false; };
	            rightArrow.appendChild(document.createTextNode(" "));
	            wrapper.appendChild(rightArrow);
	            
	            var imageContainer = document.createElement("div");
	            imageContainer.style.width = ((private.width - 26) + (private.images.length == 1 ? 46 : 0)) + "px";
	            imageContainer.style.height = (private.height - 34) + "px";
	            imageContainer.style.overflow = "auto";
	            imageContainer.style.position = "absolute";
	            imageContainer.style.left = (10 + (private.images.length == 1 ? 0 : 22)) + "px";
	            imageContainer.style.top = "40px";
	            imageContainer.style.border = "1px solid #CCCCCC";
	            imageContainer.style.textAlign = "center";
	            wrapper.appendChild(imageContainer);
	            
	            Get("ElementDropBox").appendChild(wrapper);
	            curtain.onclick = function() { closureThis.HideDialog(wrapper, curtain); };
                
                // show the first image
                this.ShowImage(wrapper, 0, imageContainer, leftArrow, rightArrow, header);
            }, 
            
            HideDialog: function(wrapper, curtain) { 
                // remove the window elements from the page
                Get("ElementDropBox").removeChild(wrapper);
                Get("ElementDropBox").removeChild(curtain);
                
                private.width = private.height = 400;
            }, 
            
            ShowImage: function(wrapper, imageIndex, imageContainer, leftArrow, rightArrow, header) { 
                // set the next/prev button visibility
                leftArrow.style.display = (imageIndex <= 0) ? "none" : "block";
                rightArrow.style.display = (imageIndex >= private.images.length - 1) ? "none" : "block";
                private.currentImageIndex = imageIndex;
                
                // update the header
                ClearChildNodes(header);
                header.appendChild(document.createTextNode(private.title));
                
                if (private.images.length > 1) 
                    header.appendChild(document.createTextNode(" " + (imageIndex + 1) + " of " + private.images.length));
                
                // display an image (pre-loading it if needed)
                ClearChildNodes(imageContainer);
                
                if (typeof(private.images[imageIndex]) == "string") { // need to preload
                    // display the loading image
                    imageContainer.style.background = "#FFFFFF url(/images/ajax-loader.gif) no-repeat scroll center center";
                    
                    // setup the preloader
                    var loadedImage = new Image();
                    var closureThis = this;
                    
                    loadedImage.onload = function() { 
                            private.images[imageIndex] = loadedImage;
                            closureThis.ShowImage(wrapper, imageIndex, imageContainer, leftArrow, rightArrow, header);
                            closureThis = null;
                        };
                    loadedImage.src = private.images[imageIndex];
                }
                else { // already preloaded
                    // clear the loading image
                    imageContainer.style.backgroundImage = "none";
                    
                    // do the resizing
                    var availableHeight = document.documentElement.clientHeight - 60;
                    var availableWidth = document.documentElement.clientWidth - 80;
                    var containerHeight = Math.min(private.images[imageIndex].height + 34, availableHeight);
                    var containerWidth = Math.min(private.images[imageIndex].width - 16 + (private.images.length == 1 ? 0 : 46) + (containerHeight == availableHeight ? 15 : 0), availableWidth);
                    
                    private.ReziseDialogFrame(wrapper, imageContainer, leftArrow, rightArrow, containerWidth, containerHeight, 5);
                    
                    // display the image element
                    var closureThis = this;
                    setTimeout(function() { 
                            var loadedImage = document.createElement("img");
                            loadedImage.src = private.images[imageIndex].src;
                            loadedImage.width = private.images[imageIndex].width;
                            loadedImage.height = private.images[imageIndex].height;
                            if (document.getElementById && !document.all) loadedImage.oncontextmenu = function(e) { closureThis.BlockRightClick(e); };
                            else loadedImage.onmousedown = function(e) { closureThis.BlockRightClick(e); };
                            imageContainer.appendChild(loadedImage);
                        }, 750);
                }
            }, 
            
            BlockRightClick: function(e) {
	            if ((document.all && (event.button == 2 || event.button == 3)) || (!document.all && (document.layers || document.getElementById) && e.which == 3)) {
		            alert("Right click is disabled on this image.  If you want to print a copy of this document, please close this preview "
		                + "picture and follow the instructions found on this page to sign up, log in, and create the full document.  "
		                + "This image is only a sample preview.");
		                
                    if (e.preventDefault) e.preventDefault();
		            return false;
	            }
            }
        };
        
        private.preload[private.preload.push(new Image()) - 1].src = "/images/layout2009/forms/forms_arrows_left_off.jpg";
        private.preload[private.preload.push(new Image()) - 1].src = "/images/layout2009/forms/forms_arrows_left_on.jpg";
        private.preload[private.preload.push(new Image()) - 1].src = "/images/layout2009/forms/forms_arrows_right_off.jpg";
        private.preload[private.preload.push(new Image()) - 1].src = "/images/layout2009/forms/forms_arrows_right_on.jpg";
        private.preload[private.preload.push(new Image()) - 1].src = "/images/ajax-loader.gif";
        
        return public;
    }
};