(function($)
{

    /* --   WYŚWIETLENIE OBIEKTU   -- */

    // --   V.2

    $.fn.SHOWW = function(f)
    {
        this.removeClass("off");
        this.width();
        this.removeClass("hide");
        if (typeof f !== "undefined") {
            var t = parseInt(this.data("t"));
            var d = parseFloat(this.css("transition-duration")) * 1000;
            if (typeof t !== "undefined") d = t;
            setTimeout(function() {
                f();
            }, d);
        }
        return this;
    };

    // --   V.1

    $.fn.SHOW = function(t = 0, f)
    {
        this.removeClass("off");
        this.width();
        this.removeClass("hide");
        if (typeof f !== "undefined") {
            setTimeout(function() {
                f();
            }, t);
        }
        return this;
    };





    /* --   UKRYCIE OBIEKTU   -- */

    // --   V.2

    $.fn.HIDEE = function(f)
    {
        var obj = this;
        var d = parseFloat(obj.css("transition-duration")) * 1000;
        obj.addClass("hide");
        setTimeout(function() {
            obj.addClass("off");
            if (typeof f !== "undefined") {
                f();
            }
        }, d);
        return obj;
    };

    // --   V.1

    $.fn.HIDE = function(t = 0, f)
    {
        var obj = this;
        obj.addClass("hide");
        setTimeout(function() {
            obj.addClass("off");
            if (typeof f !== "undefined") {
                f();
            }
        }, t);
        return obj;
    };





    /* --   ZAZNACZENIE CHECKBOXA ".N-CHECKBOX"   -- */
    // --   PUNKTEM ODNIESIEINA JEST "INPUT"

    $.fn.CHECK = function()
    {
        this.VAL(1);
        this.parent(".n-checkbox").addClass("checked");
        return this;
    };

    /* --   ODZNACZENIE CHECKBOXA ".N-CHECKBOX"   -- */

    $.fn.UNCHECK = function()
    {
        this.VAL(0);
        this.parent(".n-checkbox").removeClass("checked");
        return this;
    };





    /* --   USTAWIENIE WARTOŚCI INPUTÓW   -- */

    $.fn.VAL = function(value)
    {
        this.val(value).attr("value", value);
        return this;
    };





    /* --   USTAWIENIE WARTOŚCI ATRYBUTÓW   -- */

    $.fn.DATA = function(attr, value)
    {
        this.data(attr, value).attr("data-" + attr, value);
        return this;
    };





    /*
     *   FUNKCJA: $.ACTIVATE_DROPZONE()
     *   ---------------------------------
     *   AKTYWACJA POLA DROPZONE DO PRZESYŁANIA PLIKÓW
     */

    $.fn.ACTIVATE_DROPZONE = function()
    {
        if (this.length)
        {
            var dropzone_id = this.attr("id");
            var dropzone_obj = $("#" + dropzone_id);
            var temporary_dir = $("#temporary_dir").val();
            var server_type = $("#server_type").val();
            var ftp_input = dropzone_obj.data("ftp-input");
            var upload_dir = dropzone_obj.data("upload-dir");
            var step = dropzone_obj.parents(".personalization-step");
            var block = step.parents(".personalization-block");
            var container = step.find(".container");

            dropzones[dropzone_id] = true;
            dropzone_obj.dropzone(
            {
                  paramName: "file",
            thumbnailMethod: "contain",
             thumbnailWidth: 200,
            thumbnailHeight: null,
              acceptedFiles: null,
                   maxFiles: null,
                        url: ".core/.php/upload.php",
                     params:
                {
                    temporary_dir: temporary_dir,
                       upload_dir: upload_dir,
                      server_type: server_type
                },
                init: function()
                {
                    this.on("drop", function()
                    {

                    });

                    this.on("addedfile", function()
                    {
                        dropzone_obj.find(".icon-send").addClass("hide");
                        dropzone_obj.find(".icon-sended").addClass("hide");
                        dropzone_obj.find(".icon-sending").removeClass("hide");
                        dropzone_obj.find(".start_info").HIDE(200);
                        dropzone_obj.find(".sending-info").SHOW();
                    });

                    this.on("uploadprogress", function(file, progress, bytesSent)
                    {
                        dropzone_obj.find(".sending-progress").find("p").css({"width": parseInt(progress) + "%"});
                    });

                    this.on("complete", function()
                    {

                    });

                    this.on("queuecomplete", function()
                    {
                        setTimeout(function()
                        {
                            dropzone_obj.find(".sending-progress").find("p").css({"width": 0});
                            dropzone_obj.find(".sended-actions").SHOW();
                            dropzone_obj.find(".dz-preview").HIDE();
                            if (typeof ftp_input !== "undefined")
                            {
                                $("#" + ftp_input).VAL(1);
                            }
                        }, 300);
                    });

                    this.on("success", function(file, response)
                    {
                        CREATE_DELETE_BUTTONS(dropzone_id);
                        dropzone_obj.find(".icon-sending").addClass("hide");
                        dropzone_obj.find(".icon-sended").removeClass("hide");
                        dropzone_obj.find(".sending-info").HIDE(200);
                        step.find(".sended-filename").html('<b>' + file['name'] + '</b>');
                        step.addClass("compress");

                     /* setTimeout(function()
                        {
                            dropzone_obj.find(".sending-progress").find("p").css({"width": 0});
                            dropzone_obj.find(".sended-actions").SHOW();
                        }, 300); */

                        container.DATA("value", file['name']);
                        UPDATE_PERSONALIZATION_PARAMETERS(block);

                     /* if (typeof ftp_input !== "undefined")
                        {
                            $("#" + ftp_input).VAL(1);
                        } */

                        // --   AKCJE DLA WYDRUKÓW

                     /* if (dropzone_id === "prints_files")
                        {
                            CREATE_AMOUNT_BUTTONS(dropzone_id);
                            COUNT_PRINTS_FILES(dropzone_id);
                        } */
                    });
                }
            });
        }
    }












    /*
     *   FUNKCJA: $.ACTIVATE_DROPZONE_V3()
     *   ------------------------------------
     *   AKTYWACJA POLA DROPZONE DO PRZESYŁANIA PLIKÓW
     *   Z PROJEKTEM KLIENTA W FORMULARZU ZAMÓWIEŃ
     */

    $.fn.ACTIVATE_DROPZONE_V3 = function()
    {
        var dropzone_thumbs = {};
        var dropzone_loader = $("#dropzone-loader");
        var progress_radial = dropzone_loader.find(".progress-radial-container");
        var sending_stats = dropzone_loader.find(".sending-stats");

        if (this.length) {
            var dropzone_id = this.attr("id");
            var dropzone_obj = $("#" + dropzone_id);
            var server_type = "localhost";
            var size = dropzone_obj.data("size");
            var upload_dir = dropzone_obj.data("upload-dir");
            var timeController;
            var timeStarted;
            var timeElapsed;
            var uploadSpeed;
            var sended_bytes = {};
            var sending_files_amount = 0;
            var total_bytes = 0;
            var total_bytes_sent = 0;

            dropzones[dropzone_id] = true;
            dropzone_obj.dropzone({
                paramName: "file",
                thumbnailMethod: "contain",
                thumbnailWidth: 200,
                thumbnailHeight: null,
                acceptedFiles: ".jpeg,.jpg,.psd,.zip,.cdr,.ai,.pdf,.ttf,.otf,.rar,.tif,.tiff,.svg,.png",
                maxFiles: null,
                url: ".core/.php/upload.php",
                params: {
                    server_type: server_type,
                    size: size,
                    upload_dir: upload_dir
                },
                init: function() {
                    this.on("drop", function() {
                        console.log("DROPZONE: DROP");
                    });

                    this.on("processingmultiple", function() {
                        console.log("DROPZONE: PROCESSINGMULTIPLE");
                    });

                    this.on("addedfiles", function() {
                        console.log("DROPZONE: ADDEDFILES");

                        progress_radial.removeClass("hide");
                        timeStarted = new Date();
                        timeController = setInterval(function() {
                            timeElapsed = (new Date()) - timeStarted;
                            uploadSpeed = total_bytes_sent / (timeElapsed / 1000);
                            $("#upload_speed").html(CONVERT_BYTES(uploadSpeed) + "/s");
                            $("#time_elapsed").html(parseInt((total_bytes - total_bytes_sent) / uploadSpeed) + " s");
                        }, 1000);

                        dropzone_loader.SHOW();
                        $("#top-layer-mask").SHOW();
                        $("#send-in-background").removeClass("off");
                    });

                    this.on("addedfile", function(file) {
                        console.log("DROPZONE: ADDEDFILE");

                        var lang = $("#lang").val();

                        var variants_arr_1 = {};
                        var variants_arr_2 = {};

                        variants_arr_1['pl'] = ["plik", "plików", "pliki"];
                        variants_arr_1['en'] = ["file", "files", "files"];
                        variants_arr_1['nl'] = ["bestand", "bestanden", "bestanden"];
                        variants_arr_1['de'] = ["datei", "dateien", "dateien"];
                        variants_arr_1['sv'] = ["fil", "filer", "filer"];

                        variants_arr_2['pl'] = ["pliku", "plików", "plików"];
                        variants_arr_2['en'] = ["file", "files", "files"];
                        variants_arr_2['nl'] = ["bestand", "bestanden", "bestanden"];
                        variants_arr_2['de'] = ["datei", "dateien", "dateien"];
                        variants_arr_2['sv'] = ["fil", "filer", "filer"];

                        sending_files_amount++;
                        total_bytes = total_bytes + file.size;
                        dropzone_thumbs[file.name] = $('<div class="file off"><p class="filename mhl"></p><p class="size mhl fr"></p></div>');

                        $("#uploaded_files_amount").html(sending_files_amount);
                        $("#sending_files_amount").html(sending_files_amount);

                        $("#uploaded_variant").html(FIND_VARIANT(sending_files_amount, variants_arr_1[lang]));
                        $("#sending_variant").html(FIND_VARIANT(sending_files_amount, variants_arr_2[lang]));
                        $("#total_bytes").html(CONVERT_BYTES(total_bytes));

                        // --   UPDATE ILOŚCI ODBITEK DO ILOŚCI PRZESŁANYCH PLIKÓW

                        if ($("#prints_amount").length) {
                            var product = $("#product").val();

                            if (product !== "box_prints") {
                                $("#prints_amount").VAL(sending_files_amount);
                                COUNT_PRICE();
                            }
                        }

                        // --   DODAWANIE ELEMENTU DO KONTENERA

                        $("#uploaded_files_list").removeClass('off').find(".files").prepend(dropzone_thumbs[file.name]);
                        sending_stats.removeClass("hide");
                    });

                    this.on("processing", function(file) {
                        console.log("DROPZONE: PROCESSING");
                        console.log(file);
                    });

                    // --   UPLOADPROGRESS - SINGLE FILE

                    this.on("uploadprogress", function(file, percent, bytes) {
                        console.log("DROPZONE: UPLOADPROGRESS");

                        sended_bytes[file.name] = bytes;
                        total_bytes_sent = 0;

                        $.each(sended_bytes, function(filename, bytes) {
                            total_bytes_sent = total_bytes_sent + bytes;
                        });

                        $("#total_bytes_sent").html(CONVERT_BYTES(total_bytes_sent));
                        percent = (total_bytes_sent / total_bytes) * 100;
                        UPDATE_UPLOAD_PROGRESS(percent);
                    });

                    // --   COMPLETE - SINGLE FILE

                    this.on("complete", function() {
                        console.log("DROPZONE: COMPLETE");
                    });

                    // --   SUCCESS - SINGLE FILE

                    this.on("success", function(file, response) {
                        console.log("DROPZONE: SUCCESS");

                        response = JSON.parse(response);
                        dropzone_thumbs[file.name].removeClass("off");
                        dropzone_thumbs[file.name].find(".filename").html(response['full_filename']);
                        dropzone_thumbs[file.name].find(".size").html(CONVERT_BYTES(response['size']));

                        V2_FIX_H();

                        // --   UPDATE LICZNIKA WYSŁANYCH PLIKÓW W KOSZYKU

                        var files_counter = dropzone_obj.parents(".product").find(".uploaded-files-amount");
                        COUNT_UPLOADED_FILES(upload_dir, files_counter);
                    });

                    // --   QUEUECOMPLETE - ALL FILES

                    this.on("queuecomplete", function() {
                        console.log("DROPZONE: QUEUECOMPLETE");

                        clearInterval(timeController);
                        progress_radial.addClass("upload-successful");
                        UPDATE_UPLOAD_PROGRESS(0);
                        sended_bytes = {};
                        sending_files_amount = 0;
                        total_bytes = 0;
                        total_bytes_sent = 0;
                        $("#send-in-background").addClass("off");
                        $(".to-cart").removeClass("disabled");
                    });

                    // --   ERROR

                    this.on("error", function(file, message, xhr) {
                        console.log("DROPZONE: ERROR");
                        console.log("FILE: " + file);
                        console.log("MESSAGE: " + message);
                        console.log("XHR: " + xhr);
                    });
                }
            });
        }
    }

}(jQuery));










/*
 *   CONSOLE.DEBUG
 *   ----------------
 *   WIZUALNE USUWANIE Z KONSOLI OBIEKTÓW __PROTO__
 */

console.debug = function()
{
    function clear(o) {
        var obj = JSON.parse(JSON.stringify(o));
        if (obj && typeof obj === 'object') {
            obj.__proto__ = null;
            for (var j in obj) {
                obj[j] = clear(obj[j]);
            }
        }
        return obj;
    }
    for (var i = 0, args = Array.prototype.slice.call(arguments, 0); i < args.length; i++) {
        args[i] = clear(args[i]);
    }
    console.log.apply(console, args);
};










/*
 *   FUNKCJA: COUNT_UPLOADED_FILES()
 *   ----------------------------------
 *   PRZELICZANIE ILOŚCI WYSŁANYCH PLIKÓW DO ZAMÓWIENIA
 */

function COUNT_UPLOADED_FILES(dir, target)
{
    $.ajax({
        type: "POST",
         url: ".core/.php/ajax.php?action=count_uploaded_files",
        data: {
            dir: dir
        },
        success: function(data) {
            if (parseInt(data) === 0) {
                target.html(data).addClass("no-files hollow");

                // --   UKRYWANIE LISTY PLIKÓW W SZCZEGÓŁACH PRODUKTU

                $("#product-details").find(".buttons-files, .files-list").addClass("off");
                $("#product-details").find(".no-file-uploaded").removeClass("off");
            } else {
                target.html(data).removeClass("no-files hollow");
            }
        }
    });
}










/*
 *   FUNKCJA: UPDATE_UPLOAD_PROGRESS()
 *   ------------------------------------
 *   LOADER PRZYSYŁANIA PLIKÓW W STYLU WETRANSFER
 */

function UPDATE_UPLOAD_PROGRESS(percent)
{
    var val = parseInt(percent) / 100;
    var percent_rounded = parseInt(percent);
    var progress_bar = $("#dropzone-loader").find(".progress-radial-container").find(".progress-bar");
    var progress_percent = $("#dropzone-loader").find(".progress-radial-container").find(".progress-percent");
    var r = progress_bar.attr("r");
    var c = 2 * Math.PI * r;
    var progress = c * (1 - val);

    progress_bar.css({strokeDashoffset: progress});
    progress_percent.html(percent_rounded + "<i>%</i>");
}










/*
 *   FUNKCJA: CONVERT_BYTES()
 *   ---------------------------
 *   KONWERSJA BAJTÓW AN MB, KB ITP.
 */

function CONVERT_BYTES(bytes, decimals = 2)
{
    if (!+bytes) return '0 Bytes';

    const k = 1024;
    const dm = decimals < 0 ? 0 : decimals;
    const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
    const i = Math.floor(Math.log(bytes) / Math.log(k));
    return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
}










/*
 *   FUNKCJA: PARSE_TO_PARAM()
 *   ----------------------------
 *   ZAMIANA PODANEJ FRAZY NA FORMAT PARAMETRU
 *   (MAŁE LITERY, BEZ ZNAKÓW SPECJALNYCH, SPACJI ITP.)
 *   UŻUCIE PRZEZ AJAXA FUNKCJI Z PHP
 */

function PARSE_TO_PARAM(phrase)
{
    var replace_from = " ĄÀÁÂÃÄąàáâãäĆĈĊČćĉċčĒĔĖĘĚēĕėęěĹĻĽŁĺļľłŃŅŇŊńņňŋÓŌŎŐóōŏőŚŜŞŠśŝşšŨŪŬŮŰŲũūŭůűųŹŻŽźżž!@#$%^&*()_+.,";
    var replace_to = "_aaaaaaaaaaaacccccccceeeeeeeeeellllllllnnnnnnnnoooooooossssssssuuuuuuuuuuuuzzzzzz______________";
    var return_phrase = STRTR(phrase, replace_from, replace_to);
    return return_phrase.toLowerCase();
}










// --   ILOŚĆ ZDJĘĆ

function CHECK_PRINTS_AMOUNT()
{
    var prints_amount = $("#prints_amount").val();
    if (typeof prints_amount !== "undefined") {
        if (parseInt(prints_amount) === 0) {
            $(".dependent_on-prints_amount").addClass("off");
            $(".dependent_on-prints_amount-reverse").removeClass("off");
        }
        else {
            $(".dependent_on-prints_amount").removeClass("off");
            $(".dependent_on-prints_amount-reverse").addClass("off");
        }

        var step_obj_id = current_parameter_obj.data("step-id");
        var step_obj = $("#step-" + step_obj_id);
        V2_UPDATE_PARAMETERS_LIST_MASK(step_obj);
    }
}

// --   ILOŚĆ PASSE-PARTOUT

function CHECK_PASSEPARTOUT_AMOUNT()
{
    var passepartout_amount = $("#passepartout_amount").val();
    if (typeof passepartout_amount !== "undefined") {
        if (parseInt(passepartout_amount) === 0) {
            $(".dependent_on-passepartout_amount").addClass("off");
            $(".dependent_on-passepartout_amount-reverse").removeClass("off");
        }
        else {
            $(".dependent_on-passepartout_amount").removeClass("off");
            $(".dependent_on-passepartout_amount-reverse").addClass("off");
        }

        var step_obj_id = current_parameter_obj.data("step-id");
        var step_obj = $("#step-" + step_obj_id);
        V2_UPDATE_PARAMETERS_LIST_MASK(step_obj);
    }
}










/*
 *   FUNKCJA: LOAD_PERSONALIZATION_QUALITY_TABLE_FOR_COLOR()
 *   ----------------------------------------------------------
 *   ŁADOWANIE TABELI JAKOŚCI PERSONALIZACJI DLA WYBRANEGO KOLORU POKRYCIA
 */

function LOAD_PERSONALIZATION_QUALITY_TABLE_FOR_COLOR(color_obj)
{
    var table_content = $("#personalization-table-quality-content").html();
    var quality_table = color_obj.find(".thumb-options-v2");
    var color_id = color_obj.data("form-value");
    var qualities = PRODUCT_FULL_JSON_FORM['COLORS_PERSONALIZATION'][color_id];
    if (!quality_table.length) {
        color_obj.find(".thumb-content").append(table_content);
        color_obj.find(".thumb-options-v2").width();
        quality_table = color_obj.find(".thumb-options-v2");
        quality_table.find(".quality-circle").addClass("off");
        quality_table.find(".quality-line").removeClass("off");
        quality_table.find(".quality-line, .quality-title").each(function() {
            var q = $(this);
            var parameter_id = parseInt(q.data("parameter-id"));
            if (typeof qualities[parameter_id] === "undefined") {
                qualities[parameter_id] = 0;
            }
            q.find(".q" + qualities[parameter_id]).removeClass("off");
        });
        color_obj.find(".thumb-options-v2").removeClass("appended");
    }
}










/*
 *   FUNKCJA: UPDATE_TABS_HOVERS()
 *   --------------------------------
 *   UPDATE TREŚCI HOVERÓW W KROKACH FORMULARZA
 */

function UPDATE_TABS_HOVERS()
{
    $("#product_steps").find(".step").each(function()
    {
        var step = $(this);
        var step_title = step.find("b:not(.off)").text();
        step.DATA("hover", step_title);
    });

    $(".filter-tabs .highlight-tab").each(function()
    {
        var tab = $(this);
        var tab_title = tab.find("b:not(.off)").text();
        tab.DATA("hover", tab_title);
    });
}










/*
 *   FUNKCJA: SHOW_VALIDATE_ALERT()
 *   ---------------------------------
 *   INFO Z WALIDACJĄ DO FORMULARZY
 */

function SHOW_VALIDATE_ALERT(input_id, attr, fn_success)
{
    var input_obj = $("#" + input_id);
    var x = parseInt(input_obj.offset().left);
    var y = parseInt(input_obj.offset().top);
    var w = parseInt(input_obj.outerWidth());
    var h = parseInt(input_obj.outerHeight());
    var validate_info = $("#validate-info");
    var alert = validate_info.find("." + attr).html();
    var main_margin_top = parseInt($("main").css("margin-top"));

    validate_info.find(".alert").html(alert);

    var alert_w = parseInt(validate_info.outerWidth());
    var move_by = (w - alert_w) / 2;

    validate_info.css({"left": (x + move_by) + "px", "top": ((y - main_margin_top) + h + 8) + "px"}).removeClass("hide");
    input_obj.addClass("fill");
    input_obj.focus();

    $("html, body").animate({scrollTop: (y - 180)}, 250, function()
    {
        $("#" + input_id).addClass("fill").focus();
    });

    if (!lock_hide)
    {
        $(window).bind("keyup", function(){ $("#validate-info").addClass("hide"); });
        $(window).bind("mouseup", function(){ $("#validate-info").addClass("hide"); });
    }

    if (typeof loader !== 'undefined')
    {
        loader.addClass("hide");
    }

    if (typeof fn_success !== "undefined")
    {
        fn_success();
    }
}










/*
 *   FUNKCJA: VALIDATE_EMAIL()
 *   ----------------------------
 *   WALIDACJA POPRAWNOŚCI ADRESU E-MAIL
 */

function VALIDATE_EMAIL(email)
{
    var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(String(email).toLowerCase());
}










/*
 *   FUNKCJA: SELECT_TAB()
 *   ------------------------
 *   ZAZNACZENIE WYBRANEJ ZAKŁADKI
 */

function SELECT_TAB(tab)
{
    var tabs = tab.parent(".tabs");
    var content = tab.data("content");
    var content_obj = $("." + content);
    var id = tab.attr("id");
    var default_tab = $("#" + id + "-steps").find(".default");

    tabs.find(".tab").removeClass("active");
    tab.addClass("active");

    var active_content_obj = tabs.next(".tabs-content").find(".tab-content.active");

    if (active_content_obj.length) {
        active_content_obj.removeClass("active").HIDE(0, function() {
            content_obj.addClass("active").SHOW(0, function() {
                default_tab.trigger("click");
                default_tab.removeClass("default");
            });
        });
    } else {
        content_obj.addClass("active").SHOW(0, function() {
            default_tab.trigger("click");
            default_tab.removeClass("default");
        });
    }
}










/*
 *   FUNKCJA: SELECT_FILTER_TAB()
 *   -------------------------------
 *   ZAZNACZENIE WYBRANEJ ZAKŁADKI
 */

function SELECT_FILTER_TAB(tab, fn)
{
    var tabs = tab.parents(".filter-tabs");
    var block = tab.parents(".form_block");
    var component = tab.parents(".component");
    var filter = tab.data("filter");
    var description = tab.data("description");
    var type = tabs.data("type");

    block.find('.collection-description').html(description);
    block.find('.description').html(description);

    if (type !== "switch") {
        block.find('.thumb').addClass("off");
        block.find('.thumbs-group').addClass("off");
    }

    block.find('.' + filter).removeClass("off back-off");
    block.find('.' + filter + ".details").trigger("click");

    if (filter === "all") {
        $('.filter-content').removeClass("off");
    }
    else {
        $('.filter-content').addClass("off");
        $('.flex-card.' + filter).removeClass("off");
    }

    if (typeof component !== "undefined") {
        component.find('.thumb').addClass("off");
        component.find('.thumbs-group').addClass("off");
        component.find('.' + filter).removeClass("off");
    }

    if (filter === "all") {
        tab.parent(".filter-tabs").find("li").each(function() {
            var filter = $(this).data("filter");
            var off = $(this).hasClass("off");

            if (!off && filter !== "all") {
                $(".thumbs-group." + filter).removeClass("off").find(".thumb").removeClass("off");
            }
        });
    }

    tab.parent(".filter-tabs").find("li").removeClass("active");
    tab.addClass("active");

    UPDATE_TAB_HIGHLIGHT(tab);
    V2_FIX_H();

    if (typeof fn !== "undefined") {
        fn();
    }



    // --   REAGOWANIE WSKAZANEGO OBIEKTU W "DATA-TARGET"
    // --   NA PRZEŁĄCZANIE ZAKŁADEK

    var target = tabs.data("target");
    var all_filters = tabs.data("all-filters");

    if (typeof target !== "undefined") {
        if (typeof all_filters === "undefined") {
            all_filters = "";
            tabs.find(".highlight-tab").each(function() {
                var f = $(this).data("filter");
                all_filters += f + " ";
            });
            tabs.DATA("all-filters", all_filters);
        }

        $(target).removeClass(all_filters).addClass(filter);
    }
}










/*
 *   FUNKCJA: SET_SESSION_VAR()
 *   -----------------------------
 *   DEFINIOWANIE ZMIENNEJ SESYJNEJ PRZEZ AJAXA
 */

function SET_SESSION_VAR(var_name, value, fn)
{
    $.post(".core/.php/ajax.php?action=set_session_var", {"var_name": var_name, "value": value}, function() {
        if (typeof fn !== "undefined") {
            fn();
        }
    });
}










/*
 *   FUNKCJA: CREATE_DELETE_BUTTONS()
 *   -----------------------------------
 *   UTWORZENIE PRZYCISKU USUWAJĄCEGO
 *   PRZESŁANY PLIK PRZEZ POLE DROPZONE
 */

function CREATE_DELETE_BUTTONS(dropzone_id)
{
    $("#send_" + dropzone_id).find(".dz-preview").each(function()
    {
        var is_delete_button = $(this).find(".delete_file").length;

        if (!is_delete_button)
        {
            var filename = $(this).find(".dz-image").find("img").attr("alt");
            $(this).append('<p class="delete_file" data-filename="' + filename + '">×</p>');
        }
    });
}










/*
 *   FUNKCJA: COUNT_SENDED_FILES()
 *   --------------------------------
 *   PRZELICZANIE ILOŚCI WYSŁANYCH PLIKÓW
 */

function COUNT_SENDED_FILES(dropzone_id)
{
    var all_sended = 0;

    if (dropzone_id === "all")
    {
        $(".dz-preview").each(function()
        {
            all_sended++;
        });

        // $("#ftp_is_any_files").val(all_sended).attr("value", all_sended);
    }
    else
    {
        $("#send_" + dropzone_id).find(".dz-preview").each(function()
        {
            all_sended++;
        });

        $("#ftp_" + dropzone_id).val(all_sended).attr("value", all_sended);
    }
}










/*
 *   FUNKCJA: PUSH_TO_ESC_HISTORY()
 *   ------------------------------
 *   DODAWANIE ELEMENTU DO HISTORII
 *   ZAMYKANIA KLAWISZEM ESC
 */

function PUSH_TO_ESC_HISTORY(id)
{
    esc_history.push(id);
}

/*
 *   FUNKCJA: SPLICE_FROM_ESC_HISTORY()
 *   ----------------------------------
 *   USUWANIE ELEMENTU Z HISTORII
 *   ZAMYKANIA KLAWISZEM ESC
 */

function SPLICE_FROM_ESC_HISTORY(id)
{
    esc_history.splice(esc_history.indexOf(id), 1);
}










/*
 *   FUNKCJA: EXPLODE_TO_ASOC()
 *   --------------------------
 *   ROZBICIE CIĄGU ZNAKÓW DO
 *   TABLICY ASOCJACYJNEJ
 */

function EXPLODE_TO_ASOC(string, first_separator, second_separator)
{
    var arr1 = [];
    var arr2 = [];

    string = string.split(first_separator);

    for (var z = 0; z < string.length; z++)
    {
        arr1 = string[z].split(second_separator);
        arr2[TRIM(arr1[0])] = TRIM(arr1[1]);
    }

    return arr2;
}










/*
 *   NIE UŻYWANA - WYŁĄCZONA
 *   =======================
 *   FUNKCJA: IS_NUMERIC()
 *   ---------------------
 *   SPRAWDZANIE CZY PODANY
 *   CIĄG ZNAKÓW JEST LICZBĄ
 */

/* function IS_NUMERIC(strString)
{
    if (strString)
    {
        var strValidChars = "0123456789.-";
        var strChar;
        var blnResult = true;

        if (strString.length === 0)
        {
            return false;
        }

        for (var i = 0; i < strString.length && blnResult === true; i++)
        {
            strChar = strString.charAt(i);

            if (strValidChars.indexOf(strChar) === -1)
            {
                blnResult = false;
            }
        }

        return blnResult;
    }
} */










/*
 *   FUNKCJA: COUNT_PRODUCT_PRICE()
 *   ------------------------------
 *   PRZELICZANIE CENY WSKAZANEGO
 *   PRODUKTU Z KOSZYKA
 */

function COUNT_PRODUCT_PRICE(product_form_link, product_id)
{
    var currency = $("#currency").val();

    $.ajax(
    {
           type: "POST",
            url: ".core/.sitemap.pages/" + product_form_link + "/_ajax.php?action=count_price",
           data:
           {
               product_id: product_id
           },
        success: function(data)
        {
            data = data.split("|");

            inp_price = data[0];
            inp_price_no_discounts = data[1];

            $("#record" + product_id).find(".price").find("span").html(data[0] + " " + currency);
        }
    });
}










/*
 *   FUNKCJA: CALCULATE_PRICE()
 *   --------------------------
 *   PRZELICZANIE CENY NA AKTUALNĄ
 *   WALUTĘ SERWISU I ODLICZENIE BONUSÓW
 */

/* function CALCULATE_PRICE(price, discounts, tax)
{
    if (price > 0)
    {
        var currency_ratio = parseFloat($("#currency_ratio").val());
        var currency_multiplier = $("#currency_multiplier").val();
        var user_vat = parseInt($("#user_vat").val());
        var user_discount = parseInt($("#user_discount").val());
        var user_level = parseInt($("#user_level").val());
        var user_retail_vat = parseInt($("#user_retail_vat").val());

        var coupon_value = parseInt($("#new_coupon_value").val());
        var value_type = parseInt($("#new_value_type").val());

        var discount_percent = 0;
        var vat = 0;



        // --   DODANIE VATU

        if (tax === "netto")
        {
            // --   DLA DETALISTÓW

            if (user_level === 0)
            {
                vat = (price * user_retail_vat) / 100;
            }

            // --   DLA KONTRAHENTÓW

            if (user_level !== 0)
            {
                vat = (price * user_vat) / 100;
            }

            price += vat;
        }



        // --   PRZELICZANIE WALUTY

        if (currency_ratio !== 0.0)
        {
            if (currency_multiplier === "dz") price = price / currency_ratio;
            if (currency_multiplier === "mn") price = price * currency_ratio;
        }



        // --   ODLICZANIE RABATÓW

        if (discounts)
        {
            // --   RABAT KLIENTA

            if (user_discount !== 0)
            {
                discount_percent = (price * user_discount) / 100;
            }



            // --   PROCENTOWY RABAT KODU PROMOCYJNEGO

            if (coupon_value !== 0 && value_type === 1)
            {
                discount_percent = (price * coupon_value) / 100;
            }

            price -= discount_percent;
        }

        return parseFloat(price);
    }
    else
    {
        return 0.00;
    }
} */










/*
 *   FUNKCJA: UPDATE_SUMMARY_DISCOUNTS()
 *   -----------------------------------
 *   INFO O RABATACH W PODSUMOWANIU
 */

function UPDATE_SUMMARY_DISCOUNTS()
{
    var user_discount = parseInt($("#user_discount").val());
    var coupon_value = parseInt($("#new_coupon_value").val());
    var value_type = parseInt($("#new_value_type").val());
    var is_discount = false;
    var discount_value = 0;

    // --   RESETOWANIE PÓL Z RABATAMI

    $(".discount_available").removeClass("discount_color");
    $(".discount_info").removeClass("show").html("-0%");
    $(".no_discount_info").removeClass("show");
    $("#user_discount_info").removeClass("show").find(".discount_info").html("0%");
    $("#coupon_discount_info").removeClass("show").find(".discount_info").html("0%");

    // --   RABAT KLIENTA

    if (user_discount !== 0)
    {
        $("#user_discount_info").addClass("show");

        is_discount = true;
        discount_value = user_discount;
    }

    // --   PROCENTOWY RABAT KODU PROMOCYJNEGO

    if (coupon_value !== 0 && value_type === 1)
    {
        $("#user_discount_info").removeClass("show");
        $("#coupon_discount_info").addClass("show");

        is_discount = true;
        discount_value = coupon_value;
    }

    // --   DODANIE KOLORU ZIELONEGO JEŚLI SĄ RABATY

    if (is_discount)
    {
        $(".no_discount_info").addClass("show");
        $(".discount_available").each(function()
        {
            var id = $(this).attr("id");
            var data_price = $(this).data("price");
            var html = $(this).next(".discount_info").html();

            if (data_price !== 0.00)
            {
                html = html.replace("0", discount_value);

                $(this).addClass("discount_color");
                $(this).next(".discount_info").addClass("show").html(html);
            }
        });
    }
}










/*
 *   FUNKCJA: UPDATE_SUMMARY_UPLOADED_FILES()
 *   ----------------------------------------
 *   INFO O PRZESŁANYCH PLIKACH W PODSUMOWANIU
 */

/* function UPDATE_SUMMARY_UPLOADED_FILES()
{
    var cover_project = parseInt($("#ftp_cover_project").val());
    var cut_out_project = parseInt($("#ftp_cut_out_project").val());
    var case_uv_print_project = parseInt($("#ftp_case_uv_print_project").val());
    var case_engraver_font = parseInt($("#ftp_case_engraver_font").val());
    var pendrive_uv_print_project = parseInt($("#ftp_pendrive_uv_print_project").val());
    var pendrive_engraver_font = parseInt($("#ftp_pendrive_engraver_font").val());

    if (cover_project === 1) $("#ftp_cover_project_summary").removeClass("off");
    if (cut_out_project === 1) $("#ftp_cut_out_project_summary").removeClass("off");
    if (case_uv_print_project === 1) $("#ftp_case_uv_print_project_summary").removeClass("off");
    if (case_engraver_font === 1) $("#ftp_case_engraver_font_summary").removeClass("off");
    if (pendrive_uv_print_project === 1) $("#ftp_pendrive_uv_print_project_summary").removeClass("off");
    if (pendrive_engraver_font === 1) $("#ftp_pendrive_engraver_font_summary").removeClass("off");
} */










/*
 *   ROUND_PRICE()
 *   -------------
 *   ZAOKRĄGLANIE CENY
 */

function ROUND_PRICE(price)
{
	var str = String(price);
	var arr = str.split(".");
	var str1 = arr[0];
    var str2 = "";

	if (arr[1]) {
		if (arr[1].length > 1) {
			str2 = arr[1].slice(0, 2);
		}
		else {
			str2 = arr[1] + "0";
		}
	}
	else {
		str2 = "00";
	}

	return str1 + "." + str2;
}










/*
 *   FUNKCJA: SELECT_THUMB()
 *   --------------------------
 *   ZAZNACZENIE WYBRANEGO PARAMETRU FORMULARZA
 *   I ODCZYT JEGO ATRYBUTÓW "DATA"
 */

function SELECT_THUMB(thumb, fn)
{
    var container = thumb.parents(".container");
    var multiple_selection = container.hasClass("multiple-selection");



    // --   ZAZNACZENIE I WYBÓR PARAMETRU

    if (multiple_selection) {
        container.find(".thumb").removeClass("selected options");
        thumb.addClass("selected");
    }
    else {
        container.find(".thumb").removeClass("added selected options");
        thumb.addClass("added selected");

        // --   AUTOWYBÓR PIERWSZEJ WARTOŚCI CECHY, JEŚCI ŻADNA NIE JEST WYBRANA

        thumb.find(".option").each(function()
        {
            var all_selected = $(this).find(".tabs-select").find("li.selected").length;

            if (all_selected === 0) {
                var input = $(this).find(".tabs-select").data("input");
                var first = $(this).find(".tabs-select").find("li:first");
                var value = first.data("value");
                first.addClass("selected");
                $("#" + input).VAL(value);
            }
        });
    }



    // --   FOCUS NA INPUTACH WEWNĄTRZ PARAMETRU

    var find_input = thumb.find("input:first").attr("id");
    if (typeof find_input !== "undefined") {
        document.getElementById(find_input).focus({preventScroll: true});
    }



    // --   ODCZYT ZAZNACZONYCH DODATKOWYCH OPCJI PARAMETRU Z PÓL "TABS-SELECT"
    // --   I UPDATE WARTOŚCI PÓL INPUT FORMULARZA

    thumb.find(".tabs-select").each(function()
    {
        var tab_input = $(this).data("input");
        var tab_value = $(this).find(".selected").data("value");

        if (typeof tab_input !== 'undefined' && typeof tab_value !== "undefined")
        {
            $("#" + tab_input).VAL(tab_value);
        }
    });



    // --   ODCZYTANIE KILKU WARTOŚCI PARAMETRU Z JEDNEGO ATRYBUTU
    // --   WARTOŚCI I NAZWY INPUTÓW, ROZDZIELONE PRZECINKAMI
    // --   ODCZYT Z ATRYBUTÓW: "DATA-FORM-INPUTS" I "DATA-FORM-VALUES"

    var inputs = container.data("form-inputs");
    var values = thumb.data("form-values");

    if (typeof inputs !== 'undefined' && typeof values !== "undefined")
    {
        inputs = inputs.split(",");
        values = values.split(",");

        for (var x = 0; x < inputs.length; x++)
        {
            $("#" + inputs[x]).VAL(values[x]);
        }
    }



    // --   ODCZYT ZE SKRÓCONYCH ATRYBUTÓW: "DATA-INPUTS" I "DATA-VALUES"

    inputs = container.data("inputs");
    values = thumb.data("values");

    if (typeof inputs !== 'undefined' && typeof values !== "undefined")
    {
        inputs = inputs.split(",");
        values = values.split(",");

        for (var x = 0; x < inputs.length; x++)
        {
            $("#" + inputs[x]).VAL(values[x]);
        }
    }



    // --   POJEDYŃCZA WARTOŚĆ PODSTAWOWA
    // --   ODCZYT Z ATRYBUTÓW SKRÓCONYCH: "DATA-INPUT" I "DATA-VALUE"

    var input_short = container.data("input");
    var value_short = thumb.data("value");

    if (typeof input_short !== 'undefined' && input_short !== '...')
    {
        $("#" + input_short).VAL(value_short);

        // --   DOSTĘPNOŚĆ INNYCH PARAMETRÓW SPRAWDZANA NA PODSTAWIE KLAS
        // --   NAZWA KLAS BUDOWANA NA BAZIE NAZWY INPUTA
        // --   "INPUT_SHORT-OPTION" - WSZYSTKIE
        // --   "INPUT_SHORT-VALUE_SHORT" - DOSTĘPNE DLA WYBRANEJ WARTOŚCI

        $("." + input_short + "-option").addClass("off");
        $("." + input_short + "-option.all").removeClass("off");
        $("." + input_short + "-" + value_short).removeClass("off");
    }



    // --   POJEDYŃCZA WARTOŚĆ PODSTAWOWA
    // --   ODCZYT Z ATRYBUTÓW: "DATA-FORM-INPUT" I "DATA-FORM-VALUE"

    var input = container.data("form-input");
    var value = thumb.data("form-value");

    if (typeof input !== 'undefined' && input !== '...')
    {
        $("#" + input).VAL(value);
    }



    // --   POJEDYŃCZA WARTOŚĆ DODATKOWA
    // --   ODCZYT Z ATRYBUTÓW: "DATA-ADDITIONAL-FORM-INPUT" I "DATA-ADDITIONAL-FORM-VALUE"

    var additional_input = container.data("additional-form-input");
    var additional_value = thumb.data("additional-form-value");

    if (typeof additional_input !== 'undefined')
    {
        $("#" + additional_input).VAL(additional_value);
    }



    // --   NAZWA WYBRANEGO PARAMETRU
    // --   SPRAWDZANIE KLAS: TITLE, SYMBOL I LABEL

    var title = thumb.find(".thumb_title").text();
    var label = thumb.find(".label").text();
    var symbol = thumb.find(".symbol").text();

    if (typeof symbol !== 'undefined' && symbol !== "")
    {
        title = symbol;
    }
    else
    {
        if (typeof label !== 'undefined' && label !== "")
        {
            title = label;
        }
    }



    // --   OPIS WYBRANEGO PARAMETRU

    var description = thumb.data("description");
    var form_block = thumb.parents(".form_block");

    if (typeof description !== 'undefined')
    {
        form_block.find(".description").html('<h5>' + title + '</h5>' + description);
    }



    // --   FUNKCJA WYWOŁYWANA PO ZAKOŃCZENIU WSZYSTKICH OPERACJI

    if (typeof fn !== "undefined") {
        fn();
    }
}










/*
 *   FUNKCJA: UPDATE_HIGHLIGHT()
 *   ------------------------------
 *   UPDATE POZYCJI I SZEROKOŚCI PODŚWIETLENIA
 *   POD ZAKŁADKAMI ".HIGHLIGHT-TAB"
 */

function UPDATE_TAB_HIGHLIGHT(active_tab)
{
    if (typeof active_tab !== "undefined" && active_tab.length)
    {
        // --   SPRAWDZANIE CZY ZAKŁADKI SĄ WIDOCZNE

        var is_tabs_off = active_tab.parents(".step_container").hasClass("off");

        if (!is_tabs_off)
        {
            var highlight = active_tab.parents(".highlight-tabs").find(".highlight");
            var w = parseInt(active_tab.outerWidth());
            var x = parseInt(active_tab.position().left);
            var step_id = active_tab.attr("id");
            var summary_step = active_tab.hasClass("summary_step");

            if (highlight.length)
            {
                if (summary_step)
                {
                    highlight.addClass("summary_step");
                }
                else
                {
                    highlight.removeClass("summary_step");
                }

                highlight.css({"transform": "translate(" + x + "px, 0)", "width": Math.floor(w) + "px", "opacity": 1}).SHOW(10, function()
                {
                    highlight.removeClass("trans-off");

                    // --   SZUKANIE ZAKŁADEK NIŻSZEGO POZIOMU

                    if (typeof step_id !== "undefined")
                    {
                        var lower_steps = $("#" + step_id + "-steps");

                        if (lower_steps.length)
                        {
                            var search_lower_active_tab = $("#" + step_id + "-steps").find(".highlight-tab.active");

                            if (typeof search_lower_active_tab !== "undefined" && search_lower_active_tab.length)
                            {
                                UPDATE_TAB_HIGHLIGHT(search_lower_active_tab);
                            }
                        }
                    }
                });
            }
        }
    }
}










/*
 *   FUNKCJA: CHECK_LAST_PARAMETER_STEP()
 *   ---------------------------------------
 *   SPRAWDZANIE KTÓRY KROK JEST OSTATNI I WŁĄCZENIE
 *   W NIM PRZYCISKU DO KIERUJĄCEGO DO PODSUMOWANIA
 */

function CHECK_LAST_PARAMETER_STEP()
{
    var all_parameters_step = $("#parameters-list").find("ul").find(".L2");
    var last_parameter_step = $("#parameters-list").find("ul").find(".L2:not(.off):last");
    var parameter_id = last_parameter_step.data("parameter-id");
    var parameter_container = $("#parameter-container-" + parameter_id);
    all_parameters_step.removeClass("hide-arrow");
    last_parameter_step.addClass("hide-arrow");
    parameter_container.find(".next-step-v2").HIDE();
    parameter_container.find(".goto-step-product-summary").SHOW();
}










/*
 *   FUNKCJA: V2_UPDATE_PARAMETERS_LIST_MASK()
 *   --------------------------------------------
 *   UPDATE WIDOCZNYCH PARAMETRÓW PRODUKTU W ZALEŻNOŚCI
 *   OD WYBRANEGO KROKU FORMULARZA
 */

function V2_UPDATE_PARAMETERS_LIST_MASK(step_obj)
{
    // --   OBLICZANIE SZEROKOŚCI DLA MASKI

    var step_id = step_obj.data("step-id");
    var mask = $("#parameters-list").find(".mask");
    var parameters_list = $("#parameters-list").find("ul");
    var mask_w = 0;
    parameters_list.find(".step-" + step_id).each(function() {
        var parameter = $(this);
        var w = parameter.outerWidth();
        mask_w += w;
        parameter.removeClass("hide");
     // parameter.removeClass("hide hide-arrow");
    });
    mask.css({"width": mask_w + "px"});
    setTimeout(function() {
        mask.removeClass("trans-off");
    }, 300);

    // --   OBLICZANIE PRZESUNIĘCIA W LEWO LISTY PARAMETRÓW

    var first = $("#parameters-list").find("ul").find(".step-" + step_id + ":first");
    var last = $("#parameters-list").find("ul").find(".step-" + step_id + ":not(.off):not(.hide):last");
    var x = 0;
    first.prevAll("li:not(.highlight)").each(function() {
        var parameter = $(this);
        var w = parameter.outerWidth();
        x += w;
        parameter.addClass("hide");
    });
 // last.addClass("hide-arrow");
    last.nextAll("li:not(.highlight)").each(function() {
        var step = $(this);
        step.addClass("hide");
    });
    parameters_list.css({"transform": "translate(-" + x + "px, 0)"});
    CHECK_LAST_PARAMETER_STEP();
}





/* --   V2_UPDATE_LIST_HIGHLIGHT   -- */

function V2_UPDATE_LIST_HIGHLIGHT(obj)
{
    if (typeof obj !== "undefined" && obj.length)
    {
        var highlight = obj.parent().find(".highlight");
        var w = parseInt(obj.outerWidth());
        var x = parseInt(obj.position().left);
        if (highlight.length)
        {
            highlight.css({"transform": "translate(" + x + "px, 0)", "width": Math.floor(w) + "px", "opacity": 1}).removeClass("trans-off").SHOW(0);
        }
    }
}





/* --   PRZEJŚCIE DO WSKAZANEGO KROKU   -- */

function V2_GOTO_STEP(step_obj, fn)
{
    var step_id = step_obj.data("step-id");
    var step_title = step_obj.find("b").text();
    var first_parameter = $(".L2.step-" + step_id + ":first");
    var first_parameter_id = first_parameter.data("parameter-id");
    var first_parameter_container_obj = $("#parameter-container-" + first_parameter_id);
    var first_parameter_active_tab = first_parameter_container_obj.find(".filter-tabs").find(".active");
    var is_active_parameters = $(".L2.step-" + step_id + ".force-active").length;

    step_obj.DATA("hover", step_title);
    step_obj.addClass("force-active");
    step_obj.nextAll().removeClass("force-active");
    step_obj.prevAll().removeClass("force-active");

    V2_UPDATE_LIST_HIGHLIGHT(step_obj);
    V2_UPDATE_PARAMETERS_LIST_MASK(step_obj);

    if (is_active_parameters === 0)
    {
        V2_GOTO_PARAMETER(first_parameter);
    }

    setTimeout(function()
    {
        V2_UPDATE_LIST_HIGHLIGHT(first_parameter_active_tab);
    }, 600);

    if (typeof fn !== "undefined")
    {
        fn();
    }
}





/* --   ZAZNACZENIE WSKAZANEGO KROKU   -- */

function V2_SELECT_STEP(step_obj, fn)
{
    var step_title = step_obj.find("b:not(.off)").text();

    step_obj.DATA("hover", step_title);
    step_obj.addClass("force-active");
    step_obj.nextAll().removeClass("force-active");
    step_obj.prevAll().removeClass("force-active");

    V2_UPDATE_LIST_HIGHLIGHT(step_obj);
    V2_UPDATE_PARAMETERS_LIST_MASK(step_obj);

    if (typeof fn !== "undefined")
    {
        fn();
    }
}





/* --   PRZEJŚCIE DO WSKAZANEGO PARAMETRU   -- */

function V2_GOTO_PARAMETER(parameter_obj, fn)
{
    // $("html, body").stop().animate({scrollTop: 0}, 250, 'swing', function()
    // {
        var step_id = parameter_obj.data("step-id");
        var step_obj = $("#step-" + step_id);
        var parameter_id = parameter_obj.data("parameter-id");
        var parameter_title = parameter_obj.find("b:not(.off)").text();
        var parameter_container_obj = $("#parameter-container-" + parameter_id);
        var parameter_container_mask_obj = parameter_container_obj.parent();

        // --   SPRAWDZANIE CZY KTÓRYŚ PARAMETR JEST JUŻ WYBRANY

        if (typeof current_parameter_obj !== "undefined")
        {
            // --   SPRAWDZANIE CZY WYBRANY PARAMETR ZNAJDUJE SIĘ
            // --   PO LEWEJ CZY PO PRAWEJ STRONIE OD BIEŻĄCEGO
            // --   ŻEBY USTALIĆ, W KTÓRĄ STRONĘ WIZUALNIE GO PRZESUNĄĆ

            if (current_parameter_obj.prevAll("#parameter-" + parameter_id).length === 1) current_parameter_container_obj.addClass("push-right").HIDE(400);
            if (current_parameter_obj.nextAll("#parameter-" + parameter_id).length === 1) current_parameter_container_obj.addClass("push-left").HIDE(400);
        }

        // --   ZMIANA BIEŻĄCEGO PARAMETRU NA WYBRANY

        parameter_obj.DATA("hover", parameter_title);
        parameter_obj.addClass("force-active");
        parameter_obj.nextAll().removeClass("force-active");
        parameter_obj.prevAll().removeClass("force-active");
        parameter_container_obj.SHOW(0, function()
        {
            var h = parameter_container_obj.outerHeight();
            parameter_container_obj.removeClass("push-left push-right");
            parameter_container_mask_obj.css({"height": h + "px"});
        });

        current_parameter_obj = parameter_obj;
        current_parameter_container_obj = parameter_container_obj;
        current_parameter_container_obj.nextAll(".parameter-container").removeClass("push-left").addClass("push-right");
        current_parameter_container_obj.prevAll(".parameter-container").removeClass("push-right").addClass("push-left");

        V2_SELECT_STEP(step_obj);
        V2_UPDATE_LIST_HIGHLIGHT(parameter_obj);

        // --   WYŚWIETLENIE BUTONA DO PODSUMOWANIA
        // --   JEŚLI WYBRANY PARAMETR JEST OSTATNI

        if (parameter_obj.nextAll().length === 0)
        {
            parameter_container_obj.find(".next-step-v2").HIDE();
            parameter_container_obj.find(".goto-step-product-summary").SHOW();
        }

        var active_filter_tab = parameter_container_obj.find(".filter-tabs").find(".active");

        V2_UPDATE_LIST_HIGHLIGHT(active_filter_tab);
        V2_FIX_H();

        if (typeof fn !== "undefined") {
            fn();
        }

        $("html, body").stop().animate({scrollTop: 0}, 250, 'swing');
    // });
}





/* --   KOREKTA WYSOKOŚCI KONTENERA Z KROKIEM   -- */

function V2_FIX_H()
{
    if (typeof current_parameter_container_obj !== "undefined") {
        var h = current_parameter_container_obj.outerHeight();

        if (current_parameter_container_obj.parent().length) {
            current_parameter_container_obj.parent().css({"height": h + "px"});
        }

        if (current_parameter_container_obj.parent().parent().length) {
            current_parameter_container_obj.parent().parent().css({"height": h + "px"});
        }
    }
}




















/*
 *   FUNKCJA: FLOATING_CONSOLE()
 *   ------------------------------
 *   KONSOLA PO LEWEJ: TREŚĆ, AKCJA I KIERUNEK
 *   AKCJE: ADD (DODANIE) CLEAR (WYCZYSZCZENIE KONSOLI)
 *   KIERUNEK: BEFORE (OD GÓRY) AFTER (OD DOŁU)
 */

function FLOATING_CONSOLE(console_content, container, action, direction)
{
    var web_console = $("#web_console").val();

    if (web_console === "on")
    {
        var floating_console = $("#floating-console").find("div");
        var p = $('<p>' + console_content + '</p>');

        if (typeof action === "undefined" || action === "") action = "add";
        if (typeof direction === "undefined" || direction === "") direction = "after";
        if (typeof container !== "undefined")
        {
            var container_obj = $("#" + container);

            if (!container_obj.length)
            {
                if (direction === "before") floating_console.prepend('<p id="' + container + '">' + console_content + '</p>');
                if (direction === "after") floating_console.append('<p id="' + container + '">' + console_content + '</p>');
            }
            else
            {
                container_obj.html(console_content);
            }
        }
        else
        {
            if (action === "clear") floating_console.html(p);
            if (action === "add")
            {
                if (direction === "before") floating_console.prepend(p);
                if (direction === "after") floating_console.append(p);
            }
        }

        var console_h = $("#floating-console").find("div").outerHeight();
        $("#floating-console").scrollTop(console_h);
    }
}





/*
 *   FUNKCJA: GET_PERSONALIZATION_VARS()
 *   --------------------------------------
 *   ODCZYT ZMIENNYCH ZWIĄZANYCH Z FORMULARZEM
 *   NA PERSONALIZACJĘ
 */

function GET_PERSONALIZATION_VARS()
{
    var web_console = $("#web_console").val();
    var get_id = $("#get_id").val();
    if (web_console === "on" && get_id === "order") {
        var colors = {};
        var field_symbol = "";
        colors["true"] = "#0a0";
        colors["false"] = "#a00";
        if (typeof current_personalization_field !== "undefined" && current_personalization_field != null) {
            field_symbol = current_personalization_field.data("field-symbol");
        }
        $("#var-current_model_view_mode").html(current_model_view_mode);
        $("#var-mouseon_del_personalization").html(mouseon_del_personalization.toString()).css("color", colors[mouseon_del_personalization.toString()]);
        $("#var-mouseon_change_personalization_value").html(mouseon_change_personalization_value.toString()).css("color", colors[mouseon_change_personalization_value.toString()]);
        $("#var-hide_del_personalization_delay").html(hide_del_personalization_delay);
        $("#var-personalization_details").html(personalization_details.toString()).css("color", colors[personalization_details.toString()]);
        $("#var-current_personalization_field").html(field_symbol);
        $("#var-current_personalization_target").html(current_personalization_target);
    }
}










/*
 *   NOTICE
 *   ---------
 *   WYŚWIETLANIE PODPOWIEDZI Z WYGASZENIEM
 */

function SHOW_NOTICE(id)
{
    if (parseInt($.cookie("preset-notice")) !== 1 && !was_preset_notice) {
        var x = $("#preset-save-panel-icon").offset().left;
        $("#" + id).css({"left": x + "px"})
        $("#notice-mask").SHOW();
    }
}










/*
 *   FUNKCJA: FIND_VARIANT()
 *   --------------------------
 *   ODMIANA RZECZOWNIKÓW PRZEZ LICZBY I PŁEĆ
 */

function FIND_VARIANT(amount, variant_arr)
{
    var variant = "";
    var a;

    amount = parseInt(amount);

    if (amount > 21) {
        a = parseInt((amount.toString()).slice(-1));
        if (a === 0 || a === 1) variant = variant_arr[1];
        if (a === 2 || a === 3 || a === 4) variant = variant_arr[2];
        if (a >= 5 && a <= 9) variant = variant_arr[1];
    }
    else {
        a = amount;
        if (a === 1) variant = variant_arr[0];
        if (a === 2 || a === 3 || a === 4) variant = variant_arr[2];
        if (a >= 5 && a <= 21) variant = variant_arr[1];
    }

    return variant;
}