(function($){

    $.fn.kviewer = function(vars) {


        $(document).keydown( function( e ) {
            if( e.which == 27) {  // escape, close box
                removerX();
            }
        });

        var remover = function()
        {
            $("#kviewer_view").remove();
        }

        var removerX = function()
        {
            $("#kviewer_view").remove();
            $("#kviewer_back").remove();
            $('iframe').show();
        }

        var create_kviewer_iframe = function (div,w,h,url)
        {
            remover();
            var width = w;
            var height = h;

            $('iframe').hide();

            var close = $("<div/>");
            close.addClass("kclose");
            $(close).click(function(){
                remover();
            });

            var kviewer = $("<div/>");
            var iframe = $("<iframe/>");
            iframe.attr("width","100%");
            iframe.attr("height", h);
            iframe.attr("src",url);
            iframe.html("<p>Your browser does not support iframes.</p>");
            kviewer.attr("id", "kviewer_view");
            kviewer.css("width", width+"px");
            kviewer.css("height", height+"px");
            kviewer.css("margin-left", "-"+(width/2)+"px");
            kviewer.css("margin-top", "-"+(height/2)+"px");
            kviewer.append(iframe);
            kviewer.append(close);


            $('body').append(kviewer);
        }

        var create_kviewer_div = function (div,w,h)
        {
            remover();
            var width = w;
            var height = h;

            $('iframe').hide();

            var close = $("<div/>");
            close.addClass("kclose");
            $(close).click(function(){
                remover();
            });

            var kviewer = $("<div/>");
            kviewer.html(div);
            kviewer.attr("id", "kviewer_view");
            kviewer.css("width", width+"px");
            kviewer.css("height", height+"px");
            kviewer.css("margin-left", "-"+(width/2)+"px");
            kviewer.css("margin-top", "-"+(height/2)+"px");
            kviewer.append(close);
            $('body').append(kviewer);
        }

        var create_kviewer = function(position,href,alt,rel)
        {
            $('iframe').hide();

            var y = ($(window).height()/2);
            var gallery = $(".kviewer[rel="+rel+"]");
            //alert (gallery.lenght);
            remover();
            var oki = false;
            var img = new Image();
            img.src = href;
            var width = 870;
            var height = 650;
            //
            var intervalId = setInterval(
                function()
                {
                    if(img.complete)
                    {
                        remover();
                        clearInterval(intervalId);

                        if (alt != '' && alt != ' ' && alt != '&nbsp;')
                        {
                            if(alt.length <= 50)
                                var add = 30;
                            else
                                var add = 60;
                        }
                        else
                        {
                            var add = 0;
                        }

                        if (img.width > width || img.height > height)
                        {
                            if (img.width>img.height)
                            {
                                var ratio = width/img.width;
                                img.width = width = img.width*ratio;
                                img.height = height = (img.height*ratio);
                            }
                            else
                            {
                                var ratio = height/img.height;
                                //var ratio = img.width/img.height;
                                img.width = width = img.width*ratio;
                                img.height = height = (img.height*ratio);
                            }
                        }
                        else
                        {
                            width = img.width;
                            height = img.height;
                            height += add;
                        }
                        
                        if (alt != '' && alt != ' ' && alt != '&nbsp;')
                        {
                            var altDiv = $("<div/>");
                            altDiv.addClass("kalt");
                            altDiv.css("width",(width-10)+"px");
                            altDiv.html(alt);
                        }

                        var close = $("<div/>");
                        close.addClass("kclose");
                        $(close).click(function(){
                            removerX();
                        });


                        var img_div = $("<span/>");
                        img_div.addClass("kspan");
                        img_div.append(img);
                        
                        var kviewer = $("<div/>");
                        kviewer.html(img_div);
                        kviewer.attr("id", "kviewer_view");
                        kviewer.css("width", (width+20)+"px");
                        kviewer.css("height", (height+20)+"px");
                        kviewer.css("top", y+"px");
                        kviewer.css("margin-left", "-"+(width/2)+"px");
                        kviewer.css("margin-top", "-"+(height/2)+"px");
                        kviewer.append(close);

                        
                        if (position > -1 && gallery.length > 1)
                        {
                            var left = $("<div/>");
                            left.addClass("kleft");
                            left.css("height",height+"px");
                            var right = $("<div/>");
                            right.addClass("kright");
                            right.css("height",height+"px");
                            kviewer.append(left);
                            kviewer.append(right);
                        }

                        if (alt != '' && alt != ' ')
                        {
                            kviewer.append(altDiv);
                        }

                        if ($('#kviewer_back').attr('id') != null)
                        {
                            var backgnd = $('#kviewer_back');
                        }
                        else
                        {
                            var backgnd = $("<div/>");
                            backgnd.attr("id","kviewer_back");
                            backgnd.css("width","100%");
                            backgnd.css("height","100%");
                            backgnd.css("position","fixed");
                            backgnd.css("_position","absolute");
                            backgnd.css("top","0px");
                            backgnd.css("z-index","200");
                            backgnd.css("left","0px");
                            $(backgnd).click( function(){
                                removerX();
                            });
                        }



                        //if (! $('body #kviewer_back'))
                        $('body').append(backgnd);
                        kviewer.hide();
                        $('body').append(kviewer);
                        kviewer.fadeIn(500);

                        if (position > -1 && gallery.length > 1)
                        {
                            $("#kviewer_view .kright").click( function (){
                                position++;

                                if (position >= gallery.length)
                                    position = 0;

                                var href = $(".kviewer[rel="+rel+"]").eq(position).get();
                                var alt_i = $(".kviewer[rel="+rel+"] img").eq(position).get();
                                alt = $(alt_i).attr('alt');

                                create_kviewer(position,href,alt,rel);
                            });

                            $("#kviewer_view .kleft").click( function (){
                                position--;

                                if (position < 0)
                                    position = gallery.length-1;

                                var href = $(".kviewer[rel="+rel+"]").eq(position).get();
                                var alt_i = $(".kviewer[rel="+rel+"] img").eq(position).get();
                                alt = $(alt_i).attr('alt');

                                create_kviewer(position,href,alt,rel);
                            });
                        }
                    }
                    else
                    {
                        if (oki == false)
                        {
                            oki = true;
                            var kviewer = $("<div/>");
                            kviewer.attr("id","kviewer_view");
                            kviewer.html('<div class="loading"><img src="http://lib.ceskyinternet.cz/img/kviewer/loading.gif" alt="Nahravam"/></div>');
                            $('body').append(kviewer);
                        }
                    }
                },
                100);
            return false;
        }

        $(".kviewer").each( function() {
            $(this).click(function(e){
                if (this.rel != '')
                    var rel = this.rel;

                var position = $(".kviewer[rel="+rel+"]").index(this);
                var alt = $(this).find('span').html();
                var href = this.href;

                if ((/#div.*/).test(href))
                {
                    var split = href.split("&");
                    var w = split[1].split("=")[1];
                    var h = split[2].split("=")[1];
                    var div = $(this).children().html();
                    create_kviewer_div(div,w,h);
                }
                else
                if ((/#iframe.*/).test(href))
                {
                    var split = href.split("&");
                    var w = split[1].split("=")[1];
                    var h = split[2].split("=")[1];
                    var url = split[3].split("=")[1];
                    create_kviewer_iframe(div,w,h,url);
                }
                else
                {
                    create_kviewer(position,href,alt,rel);
                }

                return false;
            });
        });
    }
})(jQuery);
