﻿if (!window.ImageGallery)
	var ImageGallery = new Object();


Object.extend(ImageGallery, {
    imageGalleryImages: [],
    galleryImageDisplay: [],
    resetLinks: function()
    {
        var ImageLinks = $$('a.ImageGalleryThumbnail');
        ImageLinks = ImageLinks.concat($$('a.GalleryImageLink'));
        ImageLinks = ImageLinks.concat($$('a.GalleryBack'));
        ImageLinks = ImageLinks.concat($$('a.GalleryNext'));

        for(var i=0;i<ImageLinks.length;i++)
            if(ImageGallery.galleryImageDisplay.length > 0)
                for(var j=0; j<ImageGallery.galleryImageDisplay[0].images.length;j++)
                    if(ImageGallery.galleryImageDisplay[0].images[j].href == ImageLinks[i].href)
                    {
                        ImageLinks[i].observe('click', ImageGallery.imageGalleryClick);
                        break;
                    }
    },

    getImageIndex: function(href)
    {
        var index = -99;
        if(ImageGallery.galleryImageDisplay.length > 0)
            for(var i=0;i<ImageGallery.galleryImageDisplay[0].images.length;i++)
                if(ImageGallery.galleryImageDisplay[0].images[i].href == href)
                {
                    index = i;
                    break;
                }
            
        return index;
    },
    
    displayImage: function(href)
    {
        var current = ImageGallery.getImageIndex(href);

        if(current > -99)
        {
            var popupDisplay = null;

            for(var i=0; i<ImageGallery.galleryImageDisplay.length; i++)
            {
                var next = current == ImageGallery.galleryImageDisplay[i].images.length - 1 ? 0 : current + 1;
                var previous = current == 0 ? ImageGallery.galleryImageDisplay[i].images.length - 1 : current - 1;

                if($(ImageGallery.galleryImageDisplay[i].image) != null) 
                {
                    $(ImageGallery.galleryImageDisplay[i].next).href = ImageGallery.galleryImageDisplay[i].images[next].href;
                    $(ImageGallery.galleryImageDisplay[i].back).href = ImageGallery.galleryImageDisplay[i].images[previous].href;

                    $(ImageGallery.galleryImageDisplay[i].title).innerHTML = ImageGallery.galleryImageDisplay[i].images[current].title;

                    if($(ImageGallery.galleryImageDisplay[i].description) != null)
                        $(ImageGallery.galleryImageDisplay[i].description).innerHTML = ImageGallery.galleryImageDisplay[i].images[current].description;
                    
                    if($(ImageGallery.galleryImageDisplay[i].hires) != null)
                        $(ImageGallery.galleryImageDisplay[i].hires).href = ImageGallery.galleryImageDisplay[i].hirespath + '?f=' + ImageGallery.galleryImageDisplay[i].images[current].filename + '&n=' + ImageGallery.galleryImageDisplay[i].images[current].encodedtitle;
                    
                    $(ImageGallery.galleryImageDisplay[i].image).src = ImageGallery.galleryImageDisplay[i].images[current].file;
                    
                    if($(ImageGallery.galleryImageDisplay[i].price) != null)
                    {
                        if(ImageGallery.galleryImageDisplay[i].images[current].price == '')
                            $(ImageGallery.galleryImageDisplay[i].price).style.display = 'none';
                        else
                        {
                            $(ImageGallery.galleryImageDisplay[i].price).innerHTML = ImageGallery.galleryImageDisplay[i].images[current].price;
                            $(ImageGallery.galleryImageDisplay[i].price).style.display = 'block';
                        }
                    }

                    if($(ImageGallery.galleryImageDisplay[i].keywords) != null)
                    {
                        if(ImageGallery.galleryImageDisplay[i].images[current].keywords == '')
                            $(ImageGallery.galleryImageDisplay[i].keywords).style.display = 'none';
                        else
                        {
                            $(ImageGallery.galleryImageDisplay[i].keywords).innerHTML = ImageGallery.galleryImageDisplay[i].images[current].keywords;
                            $(ImageGallery.galleryImageDisplay[i].keywords).style.display = 'block';
                        }
                    }

                    if($(ImageGallery.galleryImageDisplay[i].isnew) != null)
                    {
                        if(ImageGallery.galleryImageDisplay[i].images[current].isnew)
                            $(ImageGallery.galleryImageDisplay[i].isnew).style.display = 'block';
                        else
                            $(ImageGallery.galleryImageDisplay[i].isnew).style.display = 'none';
                    }

                    if(ImageGallery.galleryImageDisplay[i].popup.length > 0)
                    {
                        popupDisplay = ImageGallery.galleryImageDisplay[i];
                        if(ImageGallery.galleryImageDisplay[i].popupheight == 0)
                        {
                            if(!Modalbox.initialized)
                                Modalbox.show($(popupDisplay.popup), 
                                         {title: ImageGallery.galleryImageDisplay[i].images[current].title, 
                                            width: popupDisplay.popupwidth, 
                                            autoFocusing: false,
                                            afterLoad: function(event) { ImageGallery.resetLinks(); ImageGallery.setImageObserver(Modalbox.content); },
                                            afterHide: function(event) { ImageGallery.resetLinks(); }
                                            });
                            else
                                ImageGallery.setImageObserver(popupDisplay.popup);
                        }
                        else
                        {
                            if(!Modalbox.initialized)
                                Modalbox.show($(popupDisplay.popup), 
                                         {title: ImageGallery.galleryImageDisplay[i].images[current].title, 
                                            width: popupDisplay.popupwidth, 
                                            height: popupDisplay.popupheight,
                                            autoFocusing: false,
                                            afterLoad: function(event) { ImageGallery.resetLinks(); },
                                            afterHide: function(event) { ImageGallery.resetLinks(); }
                                            });
                        }
                    }
                }
            }
        }
    },
    
    setImageObserver: function (popup)
    {
        var imagesObserver = new ImagesObserver(popup, { onImagesLoaded: function() { Modalbox.resizeToContent(); }});
    },
                   
    imageGalleryClick: function (event) 
    {
        var element = Event.findElement(event, 'a');
        ImageGallery.displayImage(element.href);
        Event.stop(event);
    },
    
    getImageSize: function(width, height)
    {
        var widthRatio = width / ImageGallery._popupWidth;
        var heightRatio = height / ImageGallery._popupWidth;
        var ratio = (widthRatio > heightRatio) ? widthRatio : heightRatio;

        return {width: width / ratio, height: height / ratio};
    },
    
    showMouseOverPopup: function(event)
    {
        if(ImageGallery._popupContainer != null && ImageGallery._popupImage != null)
        {
            var element = Event.findElement(event, 'a');
            
            var images  = element.select('img');
            if(images.length > 0)
            {
                ImageGallery._popupImage.src = images[0].src.replace(/w=[0-9]+/, 'w=' +  ImageGallery._popupWidth).replace(/h=[0-9]+/, 'h=' +  ImageGallery._popupHeight);


                var imagesObserver = new ImagesObserver(ImageGallery._popupContainer, 
                    { onImagesLoaded: function() { 
                    
                        ImageGallery._popupContainer.style.width = (ImageGallery._popupImage.width) + 'px';
                        ImageGallery._popupContainer.style.height = (ImageGallery._popupImage.height) + 'px';
                    
                    }});
                    
                ImageGallery._popupContainer.show();
                element.observe('mouseout', ImageGallery.hideMouseOverPopup);
                element.observe('mousemove', ImageGallery.moveMouseOverPopup);
            }
        }
    },
    
    hideMouseOverPopup: function(event)
    {
        var element = Event.element(event);
        ImageGallery._popupContainer.hide();
        element.stopObserving('mouseout');
        element.stopObserving('mousemove');
    },
    
    moveMouseOverPopup: function(event)
    {
        var xcoord = 50;
        var ycoord= -25;

        var scrollOffsets = document.viewport.getScrollOffsets();

	    var viewportWidth = document.viewport.getWidth();
	    var viewportHeight = document.viewport.getHeight();

        var pointerX = Event.pointerX(event) - scrollOffsets.left;
        var pointerY = Event.pointerY(event) - scrollOffsets.top;

        var containerWidth = ImageGallery._popupContainer.getWidth();
        var containerHeight = ImageGallery._popupContainer.getHeight();

        if((pointerX + xcoord + containerWidth) > viewportWidth) 
            xcoord = 0 - (xcoord + containerWidth);
            
        if((pointerY + ycoord + containerHeight) > viewportHeight) 
            ycoord = 0 - (ycoord + containerHeight);

        ImageGallery._popupContainer.style.left = (Event.pointerX(event) + xcoord) + "px";
        ImageGallery._popupContainer.style.top = (Event.pointerY(event) + ycoord) + "px";
    },
    
    _popupContainer: null,
    _popupImage: null,
    _popupWidth: 150,
    _popupHeight: 150,
    
    setMouseOverLinks: function(popupContainer, popupImage, popupWidth, popupHeight, linkClass)
    {
    
        
        ImageGallery._popupContainer = $(popupContainer);
        
        if(ImageGallery._popupContainer !=null)
        {
            var container = ImageGallery._popupContainer.cloneNode(true);
            container.id = popupContainer;
            ImageGallery._popupContainer.remove();
            document.body.appendChild(container);
            ImageGallery._popupContainer = $(popupContainer);
        }

        ImageGallery._popupContainer.absolutize();
        ImageGallery._popupImage = $(popupImage);
        ImageGallery._popupWidth = popupWidth;
        ImageGallery._popupHeight = popupHeight;
        
        if(ImageGallery._popupContainer != null && ImageGallery._popupImage != null)
        {
            ImageGallery._popupContainer.hide();
            
            var ImageLinks = $$('a.' + linkClass);
            
            for(var i=0;i<ImageLinks.length;i++)
                ImageLinks[i].observe('mouseover', ImageGallery.showMouseOverPopup);
        }
    }    
});
