jQuery.iPikaChoose = {
    build: function(user_options){
        var defaults = {
            show_captions: true,
            slide_enabled: true,
            auto_play: false,
            show_prev_next: true,
            slide_speed: 5000,
            thumb_width: 78,
            thumb_height: 115,
            buttons_text: {
                play: "",
                stop: "",
                previous: "Poprzednie",
                next: "Następne"
            },
            delay_caption: true,
            user_thumbs: false
        };
        return jQuery(this).each(function(){
            function LoadImages(){
                jQuery(this).bind("load", function(){
                    jQuery(this).parent('div').prev().remove();
                    images = jQuery(this).parents('ul').find('img');
                    var w = jQuery(this).width();
                    var h = jQuery(this).height();
                    if (w === 0) {
                        w = jQuery(this).attr("width")
                    }
                    if (h === 0) {
                        h = jQuery(this).attr("height")
                    }
                    var rw = options.thumb_width / w;
                    var rh = options.thumb_height / h;
                    var ratio;
                    if (rw < rh) {
                        ratio = rh;
                        var left = ((w * ratio - options.thumb_width) / 2) * -1;
                        left = Math.round(left);
                        jQuery(this).css({
                            left: left
                        })
                    }
                    else {
                        ratio = rw;
                        var top = 0;
                        jQuery(this).css({
                            top: top
                        })
                    }
                    var width = Math.round(w * ratio);
                    var height = Math.round(h * ratio);
                    jQuery(this).css("position", "relative");
                    jQuery(this).width(width).height(height);
                    var imgcss = {
                        width: width,
                        height: height
                    };
                    jQuery(this).css(imgcss);
                    jQuery(this).hover(function(){
                        jQuery(this).fadeTo(250, 1)
                    }, function(){
                        if (!jQuery(this).hasClass("pika_selected")) {
                            jQuery(this).fadeTo(250, 0.4)
                        }
                    });
                    jQuery(this).fadeTo(250, 0.4);
                    if (jQuery(this).hasClass('pika_first')) {
                        jQuery(this).trigger("click", ["auto"])
                    }
                });
                var newImage = jQuery(this).clone(true).insertAfter(this);
                jQuery(this).hide();
                images = ulist.children('li').children('img')
            }
            var options = jQuery.extend(defaults, user_options);
            var images = jQuery(this).children('li').children('img');
            images.fadeOut(1);
            var ulist = jQuery(this);
            images.each(LoadImages);
            jQuery(this).before("<div class='pika_main'></div>");
            var main_div = jQuery(this).prev(".pika_main");
            if (options.slide_enabled) {
                main_div.append("<div class='pika_play'></div>");
                var play_div = jQuery(this).prev(".pika_main").children(".pika_play");
                play_div.html("<a class='pika_play_button'>" + options.buttons_text.play + "</a><a class='pika_stop_button'>" + options.buttons_text.stop + "</a>");
                play_div.fadeOut(1);
                var play_anchor = play_div.children('a:first');
                var stop_anchor = play_div.children('a:last')
            }
            main_div.append("<div class='pika_subdiv'></div>");
            var sub_div = main_div.children(".pika_subdiv");
            sub_div.append("<img class='pika_back_img'/><img class='pika_main_img' />");
            var main_img = sub_div.children("img:last");
            var back_img = sub_div.children("img:first");
            sub_div.append("<div class='pika_prev_hover'></div><div class='pika_next_hover'></div>");
            var prevHover = sub_div.find('.pika_prev_hover');
            var nextHover = sub_div.find('.pika_next_hover');
            prevHover.hide();
            nextHover.hide();
            if (options.show_captions) {
                main_div.append("<div class='pika_caption'></div>");
                var caption_div = main_div.children(".pika_caption")
            }
            jQuery(this).after("<div class='pika_navigation'></div>");
            var navigation_div = jQuery(this).next(".pika_navigation");
            navigation_div.prepend("<a>" + options.buttons_text.previous + "</a> :: <a>" + options.buttons_text.next + "</a>");
            var previous_image_anchor = navigation_div.children('a:first');
            var next_image_anchor = navigation_div.children('a:last');
            if (!options.show_prev_next) {
                navigation_div.css("display", "none")
            }
            var playing = options.auto_play;
            main_img.wrap("<a></a>");
            var main_link = main_img.parent("a");
            function activate(){
                images.bind("click", image_click);
                if (options.slide_enabled) {
                    if (options.auto_play) {
                        playing = true;
                        play_anchor.hide();
                        stop_anchor.show()
                    }
                    else {
                        play_anchor.show();
                        stop_anchor.hide()
                    }
                }
                ulist.children("li:last").children("img").addClass("pika_last");
                ulist.children("li:first").children("img").addClass("pika_first");
                ulist.children("li").each(function(){
                    jQuery(this).children("span").hide()
                });
                var divcss = {
                    width: options.thumb_width + "px",
                    height: options.thumb_height + "px",
                    "list-style": "none",
                    overflow: "hidden"
                };
                var licss = {
                    "list-style": "none",
                    overflow: "hidden"
                };
                images.each(function(){
                    jQuery(this).parent('li').css(licss);
                    jQuery(this).wrap(document.createElement("div"));
                    jQuery(this).parent('div').css(divcss);
                    if (jQuery(this).attr('complete') === true && jQuery(this).css('display') == "none") {
                        jQuery(this).css({
                            display: 'inline'
                        })
                    }
                });
                previous_image_anchor.bind("click", previous_image);
                prevHover.bind("click", previous_image);
                next_image_anchor.bind("click", next_image);
                nextHover.bind("click", next_image);
                sub_div.mousemove(function(e){
                    var w = sub_div.width();
                    var x = e.pageX - sub_div.offset().left;
                    if (x < w * 0.3) {
                        prevHover.fadeIn('fast')
                    }
                    else {
                        prevHover.fadeOut('fast')
                    }
                    if (x > w * 0.7) {
                        nextHover.fadeIn('fast')
                    }
                    else {
                        nextHover.fadeOut('fast')
                    }
                });
                sub_div.mouseleave(function(){
                    prevHover.fadeOut('fast');
                    nextHover.fadeOut('fast')
                })
            }
            function image_click(event, how){
                if (how != "auto") {
                    if (options.slide_enabled) {
                        stop_anchor.hide();
                        play_anchor.show();
                        playing = false
                    }
                    main_img.stop();
                    main_img.dequeue();
                    if (options.show_captions) {
                        caption_div.stop();
                        caption_div.dequeue()
                    }
                }
                if (options.user_thumbs) {
                    var image_source = jQuery(this).attr("ref")
                }
                else {
                    var image_source = this.src
                }
                var image_link = jQuery(this).attr("rel");
                var image_caption = jQuery(this).parent().next("span").html();
                images.filter(".pika_selected").fadeTo(250, 0.4);
                images.filter(".pika_selected").removeClass("pika_selected");
                jQuery(this).fadeTo(250, 1);
                jQuery(this).addClass("pika_selected");
                if (options.show_captions) {
                    if (options.delay_caption) {
                        caption_div.fadeTo(800, 0)
                    }
                    caption_div.fadeTo(500, 0, function(){
                        caption_div.html(image_caption);
                        caption_div.fadeTo(800, 1)
                    })
                }
                var delay = 100;
                if (main_img.attr('opacity') < 0.8) {
                    delay = 500
                }
                back_img.attr("src", main_img.attr("src"));
                main_img.fadeTo(delay, 0.00, function(){
                    main_img.unbind('load');
                    main_img.bind('load', function(){
                        main_img.fadeTo(800, 1, function(){
                            if (playing) {
                                jQuery(this).animate({
                                    opactiy: 1
                                }, options.slide_speed, function(){
                                    if (playing) {
                                        next_image_anchor.trigger("click", ["auto"])
                                    }
                                })
                            }
                            back_img.attr("src", main_img.attr("src"))
                        })
                    });
                    main_img.attr("src", image_source);
                    main_link.attr("href", image_link)
                })
            }
            function next_image(event, how){
                if (images.filter(".pika_selected").hasClass("pika_last")) {
                    images.filter(":first").trigger("click", how)
                }
                else {
                    images.filter(".pika_selected").parents('li').next('li').find('img').trigger("click", how)
                }
            }
            function previous_image(event, how){
                if (images.filter(".pika_selected").hasClass("pika_first")) {
                    images.filter(":last").trigger("click", how)
                }
                else {
                    images.filter(".pika_selected").parents('li').prev('li').find('img').trigger("click", how)
                }
            }
            function play_button(){
                main_div.hover(function(){
                    play_div.fadeIn(400)
                }, function(){
                    play_div.fadeOut(400)
                });
                play_anchor.bind("click", function(){
                    main_img.stop();
                    main_img.dequeue();
                    if (options.show_captions) {
                        caption_div.stop();
                        caption_div.dequeue()
                    }
                    playing = true;
                    next_image_anchor.trigger("click", ["auto"]);
                    jQuery(this).hide();
                    stop_anchor.show()
                });
                stop_anchor.bind("click", function(){
                    playing = false;
                    jQuery(this).hide();
                    play_anchor.show()
                })
            }
            if (options.slide_enabled) {
                play_button()
            }
            activate()
        })
    }
};
jQuery.fn.PikaChoose = jQuery.iPikaChoose.build;

