/*
*   Written By: Björn Olsson
*   Sublime Consulting
*/
var _currentGallery;
var _navigationLegendElement;
var _currentPage;
var _currentImageIndex;

function ShowGallery(virtualPath, initialPage) {
    if(_IE6)
        hideDropDownLists();
        
    $("BackToThumbnails").update("");
    Position.center($("GalleryOverlay"));
    Position.center($("Gallery"));
    
    if(virtualPath.length > 0) {
        new Effect.Opacity($("GalleryOverlay").setOpacity(0.0).show(), { duration:0.5, from:0.0, to:0.85, afterFinish: function() { //Fade background
                LoadGallery(virtualPath, initialPage);
            }
        });
    }
    else
        LoadGallery(virtualPath, initialPage);
}

function LoadGallery(virtualPath, initialPage) {
    _currentPage = initialPage;
    
    if(virtualPath.length > 0) {
        _currentGallery = new ImageGallery(virtualPath, 12, LoadGalleryCallback);
        _navigationLegendElement = $("NavigationLegend");
    }
    else
        LoadGalleryCallback();
}

function LoadGalleryCallback() {
    _currentGallery.ShowingThumbnails = true;
    $("Gallery").setOpacity(1.0).show();
    RenderThumbnails();
}

function RenderThumbnails() {
    RenderPagerLegend();
    
    RenderProgress();
    
    _currentGallery.GetThumbnails(_currentPage, RenderThumbnailsCallback);
}

function RenderThumbnailsCallback(thumbnails) {
    var result = "<table class=\"gallery\">";
    var columns = 4;
    
    for(var i = 0; i < thumbnails.length; i++)
    {
        if(i == 0 || i % columns == 0)
            result += "<tr>";
    
        result += "<td><a href=\"javascript:ShowImage(" + thumbnails[i].Index + ");\"><img src=\"" + thumbnails[i].ThumbnailUrl + "\" alt=\"\" /></a></td>";
        
        if(i != 0 && (i + 1) % columns == 0)
            result += "</tr>";
    }
    
    result += "</table>";
    
    $("GalleryContentContainer").update(result);
}

function HideGallery() {
    if(_IE6) {
        $("Gallery").hide();
        $("GalleryOverlay").hide();
        showDropDownLists();
        return;
    }
    
    new Effect.Opacity($("Gallery"), { duration:0.1, from:1.0, to:0.0, afterFinish: function() { //Fade gallery
            $("Gallery").hide(); //Hide gallery
            new Effect.Opacity($("GalleryOverlay"), { duration:0.5, from:0.85, to:0.0, afterFinish: function() { //Fade background
                    $("GalleryOverlay").hide(); //Hide background
                }
            });
        }
    });
}

function RenderPagerLegend() {
    _navigationLegendElement.update(_LOC_STRING_PAGE + " " + _currentPage + " " + _LOC_STRING_LEGEND_SEPARATOR + " " + _currentGallery.TotalPageCount);
}

function RenderImageLegend() {
    _navigationLegendElement.update(_LOC_STRING_IMAGE + " " + (_currentImageIndex + 1) + " " + _LOC_STRING_LEGEND_SEPARATOR + " " + _currentGallery.TotalCount);
}

function Next() {
    if(_currentGallery.ShowingThumbnails) {
        if(_currentGallery.TotalPageCount == 1)
            return;

        if(_currentPage >= _currentGallery.TotalPageCount) _currentPage = 1; else _currentPage++; RenderThumbnails();
    }
    else {
        if(_currentGallery.TotalCount == 1)
            return;

        if(_currentImageIndex >= (_currentGallery.TotalCount - 1)) _currentImageIndex = 0; else _currentImageIndex++; RenderImage();
    }
}

function Previous() {
    if(_currentGallery.ShowingThumbnails) {
        if(_currentGallery.TotalPageCount == 1)
            return;
    
        if(_currentPage <= 1) _currentPage = _currentGallery.TotalPageCount; else _currentPage--; RenderThumbnails();
    }
    else {
        if(_currentGallery.TotalCount == 1)
            return;
    
        if(_currentImageIndex <= 0) _currentImageIndex = (_currentGallery.TotalCount - 1); else _currentImageIndex--; RenderImage();
    }
}

function RenderImage() {
    RenderImageLegend();
    
    RenderProgress();
    
    _currentGallery.GetImage(_currentImageIndex, RenderImageCallback);
}

function RenderImageCallback(image) {
    $("GalleryContentContainer").update("<table class=\"galleryImage\"><tr><td><table style=\"margin-left: auto; margin-right: auto;\"><tr><td><img src=\"" + image.FullSizeUrl + "\" alt=\"\" /><div class=\"imagetext\">" + image.Owner + "</div></td></tr></table></td></tr></table>");
    $("BackToThumbnails").update("<a href=\"javascript:ShowGallery(''," + image.Page + ");\" title=\"" + _LOC_STRING_BACK_TO_THUMBS + "\"><img src=\"/Layout/IfStockholmOpen/gallery-thumbnails.gif\" alt=\"\" /></a>");
}

function ShowImage(index) {
    _currentGallery.ShowingThumbnails = false;
    _currentImageIndex = index;
    
    RenderImage();
}

function RenderProgress() {
    $("GalleryContentContainer").update("<table class=\"galleryProgress\"><tr><td><img src=\"/Layout/IfStockholmOpen/gallery-progress.gif\" alt=\"\" /></td></tr></table>");
}

function RenderRandomThumbnail(virtualPath, element) {
    RenderRandomThumbnailCallback(virtualPath, element, true);
    
    new PeriodicalExecuter(function(pe) {
        RenderRandomThumbnailCallback(virtualPath, element, false);
    }, 8);
}

function RenderRandomThumbnailCallback(virtualPath, element, skipFade) {
    var ajaxRequestUrl = "/Ajax/ImageGallery.ashx?m=true&v=" + virtualPath;
    
    new Ajax.Request(ajaxRequestUrl, {
        method: "get",
        requestHeaders: { Accept: "application/json" },
        onSuccess: function(transport) {
            var result = transport.responseText.evalJSON(true);
            
            if(result.Images.length > 0)
            {
                if(skipFade) {
                    element.update("<a href=\"javascript:ShowGallery('" + virtualPath + "', 1);\"><img src=\"" + result.Images[0].ThumbnailUrl + "\" alt=\"\" /></a>");
                }
                else {
                    new Effect.Opacity(element, { duration:1.0, from:1.0, to:0.0, afterFinish: function() { //Fade out
                            element.update("<a href=\"javascript:ShowGallery('" + virtualPath + "', 1);\"><img src=\"" + result.Images[0].ThumbnailUrl + "\" alt=\"\" /></a>");     
                            
                            new Effect.Opacity(element, { duration:1.0, from:0.0, to:1.0 }); //Fade in
                        }
                    });
                }
            }
        }
    });
}