////////////////////////////////////////////////////////////////////////////////
///                     DSImageViewer (DSImageViewer.js)                     ///
///                             Version: 1.0.7                               ///
///                               12.05.2011                                 ///
///                Copyright © 2007-2011 by Daniel Seichter                  ///                          
///                                                                          ///
///--------------------------------------------------------------------------///
///                                                                          ///
/// -> License/Lizenz <-                                                     ///
///                                                                          ///
/// You can modify and use this script in your own homepages/scripts for     ///
/// free, but if you use it or only parts of it, you have to add the name    ///
/// and the author of the following script in your homepages/scripts.        ///
///                                                                          ///
/// Sie dürfen dieses Script nach belieben modifizieren und benutzten,       ///
/// unter der Bedienung, dass eine Erwähnung des Scriptes inkl. Autor        ///
/// innerhalb des Programms erfolgt, wenn das Script in irgendeiner          ///
/// Art und Weise benutzt wird.                                              ///
///                                                                          ///
///--------------------------------------------------------------------------///
///                                                                          ///
/// -> ChangeLog <-                                                          ///
///                                                                          ///
///  02.02.2011: First Release (Version 1)                                   ///
///  03.02.2011: NEW: Add closebutton                                        ///
///  04.02.2011: NEW: Add support for grouped images                         ///
///  05.02.2011: NEW: ADD "cangeImage"                                       ///
///  07.02.2011: NEW: new open effect                                        ///
///  23.02.2011: FIX: bug on close while loading fixed                       ///
///  11.05.2011: NEW: possibility to set max image size                      ///
///  12.05.2011: FIX: screen resolution 1024x768 -> max size 600x450         ///
///                                                                          ///
////////////////////////////////////////////////////////////////////////////////

$(document).ready(function() {
    ImageViewer = new DSImageViewer();
});

/*******************************************************************************
* Configuration
*/
    var DSImageViewerFileLoadingImage = "../inc/images/loading.gif";	
    var DSImageViewerFileCloseImage = "../inc/images/close.png";	
    var DSImageViewerFileNextImage = "../inc/images/next.png";
    var DSImageViewerFilePrevImage = "../inc/images/prev.png";
    var DSImageViewerReferencedObject = null;
    var DSImageViewerReferencedGroup = null;	
    var DSImageViewerCurrentGroupIndex = 0;	
    var DSImageViewerCurrentGroupCount = 0;
    
    var DSImageViewerImageMaxWidth = 800;
    var DSImageViewerImageMaxHeight = 600;
      
    if ((screen.width < 1025) || (screen.height < 769)) {
        DSImageViewerImageMaxWidth = 600;
        DSImageViewerImageMaxHeight = 450;
    }
    
    
/*******************************************************************************
* class DSImageViewer
* @access public
*/
    function DSImageViewer() {  
        this._group = null;                        
        $('a[rel~="DSImageViewer"]').click(function () {       
            if ($(this).attr("rel") == "DSImageViewer") { 
                ImageViewer.open($(this));
            } else {
                ImageViewer.open($(this),String($(this).attr("rel")).split(" ")[1]);
            }    
            return false;
        });               
    }
    /***************************************************************************
    * Open 
    * @access public 
    */
        DSImageViewer.prototype.open = function(reference,group) {
            DSImageViewerReferencedObject = reference;;
            DSImageViewerReferencedGroup = group;
            if (DSImageViewerReferencedGroup) {
                DSImageViewerCurrentGroupCount = $('a[rel="DSImageViewer '+ DSImageViewerReferencedGroup +'"]').length;
                $('a[rel="DSImageViewer '+ DSImageViewerReferencedGroup +'"]').each(function (index) {
                    if ($(this).get(0) == DSImageViewerReferencedObject.get(0))
                        DSImageViewerCurrentGroupIndex = index;
                });
            }    
            $("<div>", {id: "DSIM_OverlayWindow"}).appendTo("body");
            $("#DSIM_OverlayWindow").click(function () {
                ImageViewer.close();
            });
            $("<div>", {id: "DSIM_Pixel"}).appendTo("body"); 
            $("<div>", {id: "DSIM_Window"}).appendTo("#DSIM_Pixel"); 
            $("<div>", {id: "DSIM_Pixel2"}).appendTo("body");
            $("<div>", {id: "DSIM_NavControls"}).appendTo("body"); 
            $("<img>", {
                src: DSImageViewerFileLoadingImage,
                id: "DSIM_LoadingImage"
            }).appendTo("#DSIM_Pixel2"); 
            
            var offsetPixel = $("#DSIM_Pixel").offset();
            var offsetReferencedObject = DSImageViewerReferencedObject.children(":first-child").offset();
           
            $("#DSIM_Window").css({
                left: offsetReferencedObject.left-offsetPixel.left+"px",
                top: offsetReferencedObject.top-offsetPixel.top+"px",
                height: DSImageViewerReferencedObject.children(":first-child").css("height"),
                width: DSImageViewerReferencedObject.children(":first-child").css("width"),
                opacity: 0,
                display: "block"
            });
            $("#DSIM_OverlayWindow").fadeTo("slow",0.7, function () {
            $("#DSIM_Window").animate({
                    opacity: 1,
                    top: "-75px",
                    left: "-100px",
                    width: "200px",
                    height: "150px"                                     
                }, "slow", function (){
                    $("#DSIM_LoadingImage").fadeIn("fast");
                    var preloadedImage = new Image();
                    preloadedImage.onload = function() {
                        var imageWidth = this.width;
                        var imageHeight = this.height;
    
		                if ((DSImageViewerImageMaxWidth < imageWidth) || (DSImageViewerImageMaxHeight < imageHeight)) {
                            var ratioOriginal = imageWidth/imageHeight;
                            if (DSImageViewerImageMaxWidth/DSImageViewerImageMaxHeight > ratioOriginal) {
                                imageWidth = DSImageViewerImageMaxHeight*ratioOriginal;
                                imageHeight = DSImageViewerImageMaxHeight;
                            } 
                            else {
                                imageHeight = DSImageViewerImageMaxWidth/ratioOriginal;
                                imageWidth = DSImageViewerImageMaxWidth;
                            }
                        }    
                        ImageViewer.show(imageWidth,imageHeight);
                    };  
                    preloadedImage.src = DSImageViewerReferencedObject.attr("href");   
                    $("<img>", {
                        id: "DSIM_Image",
                        src: DSImageViewerReferencedObject.attr("href")
                    }).appendTo("#DSIM_Window");
                });    
            });
        }   
        DSImageViewer.prototype.show = function(imageWidth, imageHeight) {           
            $("#DSIM_Image").attr("height",imageHeight);
            $("#DSIM_Image").attr("width", imageWidth);
            $("#DSIM_LoadingImage").animate({"top": "-35px"}, { duration: 1500, queue: false });
            $("#DSIM_Window").animate({
                width: (imageWidth+60)+"px",
                left: (imageWidth+60)/-2+"px",
                height: (imageHeight+120)+"px",
                top: (imageHeight+120)/-2+"px"
            }, 1500, function (){
                $("<div>", {
                    id: "DSIM_Text",
                    style: "width: "+imageWidth+"px"
                }).appendTo("#DSIM_Window");
                $("#DSIM_Text").html("<h1>"+DSImageViewerReferencedObject.attr("name")+"</h1><p>"+DSImageViewerReferencedObject.attr("title")+"</p>");
                $("#DSIM_LoadingImage").fadeOut("fast", function () {
                    $("#DSIM_Image").fadeIn("fast", function () {
                        $("#DSIM_Text").fadeIn("fast");
                        $("<img>", {
                            id: "DSIM_CloseImage",
                            src: DSImageViewerFileCloseImage,
                            style: "left: "+((imageWidth+60)/2-14)+"px; top: -"+((imageHeight+120)/2+10)+"px;"                        
                        }).appendTo("#DSIM_NavControls");
                        $("#DSIM_CloseImage").click(function (){
                            ImageViewer.close();
                        }); 
                        if (DSImageViewerReferencedGroup) {
                            $("<img>", {
                                id: "DSIM_NextImage",
                                src: DSImageViewerFileNextImage,
                                style: "left: "+((imageWidth+60)/2-18)+"px; top: -35px;"
                            }).appendTo("#DSIM_NavControls");
                            $("#DSIM_NextImage").click(function () {
                                DSImageViewerCurrentGroupIndex = ((DSImageViewerCurrentGroupIndex+1) < DSImageViewerCurrentGroupCount) ? DSImageViewerCurrentGroupIndex+1 : 0;
                                DSImageViewerReferencedObject = $('a[rel="DSImageViewer '+ DSImageViewerReferencedGroup +'"]').filter(":eq("+DSImageViewerCurrentGroupIndex+")");
                                ImageViewer.changeImage();
                            });                             
                            $("<img>", {
                                id: "DSIM_PrevImage",
                                src: DSImageViewerFilePrevImage,
                                style: "left: "+((imageWidth+60)/-2+9)+"px; top: -35px;"
                            }).appendTo("#DSIM_NavControls");
                            $("#DSIM_PrevImage").click(function (){
                                DSImageViewerCurrentGroupIndex = ((DSImageViewerCurrentGroupIndex-1) < 0) ? DSImageViewerCurrentGroupCount-1 : DSImageViewerCurrentGroupIndex-1;
                                DSImageViewerReferencedObject = $('a[rel="DSImageViewer '+ DSImageViewerReferencedGroup +'"]').filter(":eq("+DSImageViewerCurrentGroupIndex+")");
                                ImageViewer.changeImage();
                            });                                                                                
                        }
                        $("#DSIM_NavControls").fadeIn("fast"); 
                    });
                });
            } );  
        }           
        DSImageViewer.prototype.changeImage = function() { 
            $("#DSIM_Image").fadeOut("slow");
            $("#DSIM_Text").fadeOut("slow");
            $("#DSIM_NavControls").fadeOut("slow", function () {
                $("#DSIM_LoadingImage").fadeIn("fast", function () {
                    $("#DSIM_Image").remove();
                    $("#DSIM_Text").remove();
                    $("#DSIM_NavControls").remove();
                    $("<div>", {id: "DSIM_NavControls"}).appendTo("body");
                    var preloadedImage = new Image();
                    preloadedImage.onload = function() {    
                        var imageWidth = this.width;
                        var imageHeight = this.height;
    
		                if ((DSImageViewerImageMaxWidth < imageWidth) || (DSImageViewerImageMaxHeight < imageHeight)) {
                            var ratioOriginal = imageWidth/imageHeight;
                            if (DSImageViewerImageMaxWidth/DSImageViewerImageMaxHeight > ratioOriginal) {
                                imageWidth = DSImageViewerImageMaxHeight*ratioOriginal;
                                imageHeight = DSImageViewerImageMaxHeight;
                            } 
                            else {
                                imageHeight = DSImageViewerImageMaxWidth/ratioOriginal;
                                imageWidth = DSImageViewerImageMaxWidth;
                            }
                        }    
                        ImageViewer.show(imageWidth,imageHeight);
                    };  
                    preloadedImage.src = DSImageViewerReferencedObject.attr("href");   
                    $("<img>", {
                        id: "DSIM_Image",
                        src: DSImageViewerReferencedObject.attr("href")
                    }).appendTo("#DSIM_Window");                      
                });                
            });         
        }      
        DSImageViewer.prototype.close = function() {
            $("#DSIM_NavControls").fadeOut("fast");
            $("#DSIM_Pixel2").fadeOut("fast");
            $("#DSIM_Pixel").fadeOut("slow", function () {
                $("#DSIM_OverlayWindow").fadeOut("slow", function (){
                    $("#DSIM_OverlayWindow").remove();
                    $("#DSIM_Pixel").remove();
                    $("#DSIM_Pixel2").remove();
                    $("#DSIM_NavControls").remove();
                });
            });
        }        
////////////////////////////////////////////////////////////////////////////////
///                     DSImageViewer (DSImageViewer.js)                     ///
///                Copyright © 2007-2011 by Daniel Seichter                  ///                        
////////////////////////////////////////////////////////////////////////////////
