/**
* Name: piroBox v.1.2.2
* Date: May 2010
* Autor: Diego Valobra (http://www.pirolab.it),(http://www.diegovalobra.com)
* Version: 1.2.2
* Licence: CC-BY-SA http://creativecommons.org/licenses/by-sa/2.5/it/
**/
(function($){$.fn.piroBox=function(opt){opt=jQuery.extend({my_speed:null,close_speed:300,bg_alpha:0.5,close_all:".piro_close,.piro_overlay",slideShow:null,slideSpeed:null},opt);function start_pirobox() {
    var corners = "<tr>" + '<td colspan="3" class="pirobox_up"></td>' + "</tr>" + "<tr>" + '<td class="t_l"></td>' + '<td class="t_c"></td>' + '<td class="t_r"></td>' + "</tr>" + "<tr>" + '<td class="c_l"></td>' + '<td class="c_c"><span><span></span></span><div></div></td>' + '<td class="c_r"></td>' + "</tr>" + "<tr>" + '<td class="b_l"></td>' + '<td class="b_c"></td>' + '<td class="b_r"></td>' + "</tr>" + "<tr>" + '<td colspan="3" class="pirobox_down"></td>' + "</tr>";
    var window_height = $(document).height();
    var bg_overlay = $(jQuery('<div class="piro_overlay"></div>').hide().css({"opacity":+opt.bg_alpha,"height":window_height + "px"}));
    var main_cont = $(jQuery('<table class="pirobox_content" cellpadding="0" cellspacing="0"></table>'));
    var caption;
    caption = $(jQuery('<div class="caption"></div>'));
    var piro_nav = $(jQuery('<div class="piro_nav"></div>'));
    var piro_close = $(jQuery('<a href="#close" class="piro_close" title="close"></a>'));
    var piro_play = $(jQuery('<a href="#play" class="play" title="play slideshow"></a>'));
    var piro_stop = $(jQuery('<a href="#stop" class="stop" title="stop slideshow"></a>'));
    var piro_prev = $(jQuery('<a href="#prev" class="piro_prev" title="previous image"></a>'));
    var piro_next = $(jQuery('<a href="#next" class="piro_next" title="next image"></a>'));
    $("body").append(bg_overlay).append(main_cont);
    main_cont.append(corners);
    $(".pirobox_up").append(piro_close);
    $(".pirobox_down").append(piro_nav);
    $(".pirobox_down").append(piro_play);
    piro_play.hide();
    $(".pirobox_down").append(piro_prev).append(piro_next);
   // piro_nav.append(caption);
    var my_nav_w = piro_prev.width();
    main_cont.hide();
    var my_gall_classes = $("a[class^='pirobox']");
    var map = new Object();
    for (var i = 0; i < my_gall_classes.length; i++) {
        var it = $(my_gall_classes[i]);
        map["a." + it.attr("class")] = 0;
    }
    var gall_settings = new Array();
    for (var key in map) {
        gall_settings.push(key);
    }
    for (var i = 0; i < gall_settings.length; i++) {
        $(gall_settings[i]).each(function(rel) {
            this.rel = rel + 1 + "&nbsp;of&nbsp;" + $(gall_settings[i]).length;
        });
        var add_first = $(gall_settings[i] + ":first").addClass("first");
        var add_last = $(gall_settings[i] + ":last").addClass("last");
    }
    $(my_gall_classes).each(function(rev) {
        this.rev = rev + 0;
    });
    var imgCache = $(my_gall_classes).each(function() {
        this.href;
    });
    var hidden = $("body").append('<div id="imgCache" style="display:none"></div').children("#imgCache");
    $.each(imgCache, function(i, val) {
        $("<div/>").css({"background":"url(" + val + ")"}).appendTo(hidden);
    });
    var piro_gallery = $(my_gall_classes);
    $.fn.fixPNG = function() {
        return this.each(function() {
            var image = $(this).css("backgroundImage");
            if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
                image = RegExp.$1;
                $(this).css({"backgroundImage":"none","filter":"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=" + ($(this).css("backgroundRepeat") == "no-repeat" ? "crop" : "scale") + ", src='" + image + "')"}).each(function() {
                    var position = $(this).css("position");
                    if (position != "absolute" && position != "relative") {
                        $(this).css("position", "relative");
                    }
                });
            }
        });
    };
    $.browser.msie6 = ($.browser.msie && /MSIE 6\.0/i.test(window.navigator.userAgent));
    if ($.browser.msie6 && !/MSIE 8\.0/i.test(window.navigator.userAgent)) {
        $(".t_l,.t_c,.t_r,.c_l,.c_r,.b_l,.b_c,.b_r,a.piro_next, a.piro_prev,a.piro_prev_out,a.piro_next_out,.c_c,.piro_close,a.play,a.stop").fixPNG();
        var ie_w_h = $(document).height();
        bg_overlay.css("height", ie_w_h + "px");
    }
    if ($.browser.msie) {
        opt.close_speed = 0;
    }
    $(window).resize(function() {
        var new_w_bg = $(document).height();
        bg_overlay.css({"visibility":"visible","height":+new_w_bg + "px"});
    });
    piro_prev.add(piro_next).bind("click", function(c) {
        c.preventDefault();
        var image_count = parseInt($(piro_gallery).filter(".item").attr("rev"));
        var start = $(this).is(".piro_prev_out,.piro_prev") ? $(piro_gallery).eq(image_count - 1) : $(piro_gallery).eq(image_count + 1);
        if (!start.size()) {
            start = $(this).is(".piro_prev_out,.piro_prev") ? $(piro_gallery).eq($(piro_gallery).size() - 1) : $(piro_gallery).eq(0);
        }
        start.click();
        piro_close.add(caption).add(piro_next).add(piro_prev).css("visibility", "hidden");
    });
    $(piro_gallery).each(function(array) {
        var item = $(this);
        item.unbind();
        item.bind("click", function(c) {
            c.preventDefault();
            piro_open(item.attr("href"));
            var this_url = item.attr("href");
            var descr = item.attr("title");
            var number = item.attr("rel");
            if (descr == "") {
                caption.html("<p>" + this_url + '<em class="number">' + number + "</em><a href=" + this_url + ' class="link_to" target="_blank" title="Open Image in a new window"></a></p>');
            } else {
                caption.html("<p>" + descr + '<em class="number">' + number + "</em><a href=" + this_url + ' class="link_to" target="_blank" title="Open Image in a new window"></a></p>');
            }
            if (item.is(".last")) {
                $(".number").css("text-decoration", "underline");
            } else {
                $(".number").css("text-decoration", "none");
            }
            if (item.is(".first")) {
                piro_prev.hide();
                piro_next.show();
            } else {
                piro_next.add(piro_prev).show();
            }
            if (item.is(".last")) {
                piro_prev.show();
                piro_next.hide();
                piro_play.css("width", "0");
            } else {
                piro_play.css("width", "40px");
            }
            if (item.is(".last") && item.is(".first")) {
                piro_prev.add(piro_next).hide();
                $(".number").hide();
                piro_play.remove();
            }
            $(piro_gallery).filter(".item").removeClass("item");
            item.addClass("item");
            $(".c_c").removeClass("unique");
        });
    });
    var piro_open = function(my_url) {
        piro_play.add(piro_stop).hide();
        piro_close.add(caption).add(piro_next).add(piro_prev).css("visibility", "hidden");
        if (main_cont.is(":visible")) {
            $(".c_c div").children().fadeOut(300, function() {
                $(".c_c div").children().remove();
                load_img(my_url);
            });
        } else {
            $(".c_c div").children().remove();
            main_cont.show();
            bg_overlay.fadeIn(300, function() {
                load_img(my_url);
            });
        }
    };
    var load_img = function(my_url) {
        if (main_cont.is(".loading")) {
            return;
        }
        main_cont.addClass("loading");
        var img = new Image();
        img.onerror = function() {
            var main_cont_h = $(main_cont).height();
            main_cont.css({marginTop:parseInt($(document).scrollTop()) - (main_cont_h / 1.9)});
            $(".c_c div").append('<p class="err_mess">There seems to be an Error:&nbsp;<a href="#close" class="close_pirobox">Close Pirobox</a></p>');
            $(".close_pirobox").bind("click", function(c) {
                c.preventDefault();
                piro_close.add(bg_overlay).add(main_cont).add(caption).add(piro_next).add(piro_prev).hide(0, function() {
                    img.src = "";
                });
                main_cont.removeClass("loading");
            });
        };
        img.onload = function() {
            var imgH = img.height;
            var imgW = img.width;
            var main_cont_h = $(main_cont).height();
            var w_H = $(window).height();
            var w_W = $(window).width();
            $(img).height(imgH).width(imgW).hide();
            $(".c_c div").animate({height:imgH + "px",width:imgW + "px"}, opt.my_speed);
            var fix = imgH / w_H * 2.3;
            if (w_H < imgH) {
                h_fix = fix;
            } else {
                h_fix = 2;
            }
            main_cont.animate({height:(imgH + 40) + "px",width:(imgW + 40) + "px",marginLeft:"-" + ((imgW) / 2 + 20) + "px",marginTop:parseInt($(document).scrollTop()) - (imgH / h_fix)}, opt.my_speed, function() {
                $(".piro_nav,.caption").css({width:(imgW) + "px","margin-bottom":"10px"});
                $(".piro_nav").css("margin-left", "-" + (imgW) / 2 + "px");
                var caption_height = caption.height();
                $(".c_c div").append(img);
                piro_close.css("display", "block");
                piro_next.add(piro_prev).add(piro_close).css("visibility", "visible");
                caption.css({"visibility":"visible","display":"block","opacity":"0.8","overflow":"hidden"});
                main_cont.hover(function() {
                    caption.stop().fadeTo(200, 0.8);
                }, function() {
                    caption.stop().fadeTo(200, 0);
                });
                $(img).fadeIn(300);
                main_cont.removeClass("loading");
                if (opt.slideShow === true) {
                    piro_play.add(piro_stop).show();
                } else {
                    piro_play.add(piro_stop).hide();
                }
            });
        };
        img.src = my_url;
        $("html").bind("keyup", function(c) {
            if (c.keyCode == 27) {
                c.preventDefault();
                if ($(img).is(":visible") || $(".c_c>div>p>a").is(".close_pirobox")) {
                    $(piro_gallery).removeClass("slideshow").removeClass("item");
                    piro_close.add(bg_overlay).add(main_cont).add(caption).add(piro_next).add(piro_prev).hide(0, function() {
                        img.src = "";
                    });
                    main_cont.removeClass("loading");
                    clearTimeout(timer);
                    $(piro_gallery).children().removeAttr("class");
                    $(".stop").remove();
                    $(".c_c").append(piro_play);
                    $(".sc_menu").css("display", "none");
                    $("ul.sc_menu li a").removeClass("img_active").css("opacity", "0.4");
                    piro_next.add(piro_prev).show().css({"top":"50%"});
                    $(piro_gallery).children().fadeTo(100, 1);
                }
            }
        });
        $("html").bind("keyup", function(e) {
            if ($(".item").is(".first")) {
            } else {
                if (e.keyCode == 37) {
                    e.preventDefault();
                    if ($(img).is(":visible")) {
                        clearTimeout(timer);
                        $(piro_gallery).children().removeAttr("class");
                        $(".stop").remove();
                        $(".c_c").append(piro_play);
                        piro_prev.click();
                    }
                }
            }
        });
        $("html").bind("keyup", function(z) {
            if ($(".item").is(".last")) {
            } else {
                if (z.keyCode == 39) {
                    z.preventDefault();
                    if ($(img).is(":visible")) {
                        clearTimeout(timer);
                        $(piro_gallery).children().removeAttr("class");
                        $(".stop").remove();
                        $(".c_c").append(piro_play);
                        piro_next.click();
                    }
                }
            }
        });
        var win_h = $(window).height();
        piro_stop.bind("click", function(x) {
            x.preventDefault();
            clearTimeout(timer);
            $(piro_gallery).removeClass("slideshow");
            $(".stop").remove();
            $(".pirobox_down").append(piro_play);
            piro_next.add(piro_prev).css("width", my_nav_w + "px");
        });
        piro_play.bind("click", function(w) {
            w.preventDefault();
            clearTimeout(timer);
            if ($(img).is(":visible")) {
                $(piro_gallery).addClass("slideshow");
                $(".play").remove();
                $(".pirobox_down").append(piro_stop);
            }
            piro_next.add(piro_prev).css({"width":"0px"});
            return slideshow();
        });
        $(opt.close_all).bind("click", function(c) {
            $(piro_gallery).removeClass("slideshow");
            clearTimeout(timer);
            if ($(img).is(":visible")) {
                c.preventDefault();
                piro_close.add(bg_overlay).add(main_cont).add(caption).add(piro_next).add(piro_prev).hide(0, function() {
                    img.src = "";
                });
                main_cont.removeClass("loading");
                $(piro_gallery).removeClass("slideshow");
                piro_next.add(piro_prev).css("width", my_nav_w + "px").hide();
                $(".stop").remove();
                $(".pirobox_down").append(piro_play);
                piro_play.hide();
            }
        });
        if (opt.slideShow === true) {
            function slideshow() {
                if ($(piro_gallery).filter(".item").is(".last")) {
                    clearTimeout(timer);
                    $(piro_gallery).removeClass("slideshow");
                    $(".stop").remove();
                    $(".pirobox_down").append(piro_play);
                    piro_next.add(piro_prev).css("width", my_nav_w + "px");
                } else {
                    if ($(piro_gallery).is(".slideshow") && $(img).is(":visible")) {
                        clearTimeout(timer);
                        piro_next.click();
                    }
                }
            }

            var timer = setInterval(slideshow, opt.slideSpeed * 1000);
        }
    };
}start_pirobox();};})(jQuery);
