var railsWidth      = 10;   // Ширина одной рельсы (вернее по 1 рельсе с 2х сторон от бассейна, в сумме), см.
var sectionLenght   = 216;  // Длинна 1 секции
var maxStepViewed   = 0;    // максимальный номер шага на котором были
var lastDescription = "";

var pavillionSizes = null;

var TYPE_CASABLANCA = 1;
var TYPE_MONAKO     = 2;
var TYPE_MONAKOFUTURE   = 3;
var TYPE_KLASSIK    = 4;
var TYPE_DALLAS     = 8;

var MODEL_NAMES = {
    1: "касабланка",
    2: "монако",
    3: "монако future",
    4: "классик",
    8: "dallas"
}

//===============================================================================================================
//  Инициализация
//===============================================================================================================
$(document).ready(function() {
    // img label работают в ие
    if(document.all && navigator.appVersion.indexOf("MSIE")>-1 && navigator.appVersion.indexOf("Windows")>-1) {
        var a = document.getElementsByTagName("label");
        
        for(var i=0,j=a.length; i<j; i++) {
            if(a[i].hasChildNodes && a[i].childNodes.item(0).tagName == "IMG") {
                a[i].childNodes.item(0).forid = a[i].htmlFor;
                a[i].childNodes.item(0).onclick = function() {
                    var e = document.getElementById(this.forid);
                    switch(e.type) {
                        case "radio": e.checked |= 1; updateFlash(); break;
                        //case "checkbox": e.checked=!e.checked;break;
                        //case "text": case "password": case "textarea": e.focus(); break;
                    }
                }
            }
        }
    }

    $("#length").focus();
    $.ajax({async: false});

    $(".cee_close").die().live("click",function(){$.fn.ceebox.closebox();return false;}); //adds close button functionality
    $(".ceebox").ceebox({borderColor:'#dcdcdc',boxColor:"#fff"});

    $('.thumb label').fliphover({zoom:30, hover:'true'});

    $(":input[type='text']").live("focusout", function () {
        //$(this).removeClass("inBoxRed").removeClass("inBoxBlue").addClass("inBox");
        updateFlash();
    });

    $("#rails_prolong_length").keyup(function () {
        updateFlash();
    });

    $(':radio').live("click", function () {
        updateFlash();
    });

    $("#loading").bind("ajaxStart", function() {
        $(this).show();
    }).bind("ajaxStop", function() {
        $(this).hide();
    });

    function isValidKey(event) {
        if (
            ((event.keyCode >= 48) && (event.keyCode <= 57))  ||    // 0..9
            ((event.keyCode >= 96) && (event.keyCode <= 105)) ||    // 0..9
            (event.keyCode == 37) || // left
            (event.keyCode == 39) || // right
            (event.keyCode == 8)  || // Backspace & del
            (event.keyCode == 46) || // Backspace & del
            (event.keyCode == 9)  || // Tab
            (event.keyCode == 13) || // Enter
            (event.keyCode == 27) // Esc
        ) {
            return true;
        }
        return false;
    }

    function calcAndWrite(stepNum) {
        return writeSizes(calcSizes(), stepNum);
    }

    // обработчик при измении размеров на первом шаге
    $(".for_numeric").keyup(function (event) {
        if (isValidKey(event)) {
            return true;
        }
        return false;

    }).keydown(function (event) {
        if (isValidKey(event)) {
            return true;
        }
        return false;
    });
    
    // обработчик при измении размеров на первом шаге
    $(".for_recalc_onchange1").keyup(function (event) {
        calcAndWrite(1);
        if (isValidKey(event)) {
            return true;
        }
        return false;
    }).keydown(function (event) {
        calcAndWrite(1);
        if (isValidKey(event)) {
            return true;
        }
        return false;
    }).blur(function () {
        calcAndWrite(1);
    }).change(function () {
        calcAndWrite(1);
    });

    $(".for_recalc_onclick").click(function () {
        calcAndWrite(1);
    });

    // обработчик при измении размеров на втором шаге
    $(".for_recalc_onchange2").keyup(function (event) {
        if (isValidKey(event)) {
            calcAndWrite(2);
            return true;
        }
        return false;
    }).keydown(function (event) {
        if (isValidKey(event)) {
            calcAndWrite(2);
            return true;
        }
        return false;
    }).blur(function () {
        calcAndWrite(2);
    }).change(function () {
        calcAndWrite(2);
    });

    $(".for_recalc_onclick2").click(function () {
        calcAndWrite(2);
    });

    // обработчик по наличию того или иного элемента влияющего на размер
    $(".for_size").click(function () {

        $this = $(this);
        var name = $this.attr("name");
        var sizeBlockId = name.substr(3) + "_size";

        if ($this.val() == '1') {
            $("#" + sizeBlockId).fadeIn();
        } else {
            $("#" + sizeBlockId).fadeOut();
        }
    });

    // Для пары бортик/бордюрный камень этот обработчик немного другой - если есть бортик, то камня быть не может и наоборот
    // пара взаимоисключающих свойств - стави класс for_hidepair

    $(".for_hidepair").click(function () {

        $this = $(this);
        var name = $this.attr("name");
        var hide = $this.attr("hideid");
        var unckeck = $this.attr("unckeckname");
        var err1 = $this.attr("error1id");
        var err2 = $this.attr("error2id");
        
        var sizeBlockId = name.substr(3) + "_size";

        if ($this.val() == '1') {
            $("#" + hide).hide();
            $("#" + err1).show();
            $("#" + err2).hide();
            $("input[name="+unckeck+"]").filter("[value=0]").attr('checked', 'checked');
            $("#" + sizeBlockId).fadeIn();
        } else {
            $("#" + err1).hide();
            $("#" + sizeBlockId).fadeOut();
        }
    });
    

    $(".for_footway").click(function () {

        $this = $(this);

        if ($this.val() == '1') {
            $("#footway_block1").fadeIn();
            $("#footway_block2").fadeIn();
        } else {
            $("#footway_block1").fadeOut();
            $("#footway_block2").fadeOut();
        }
    });

    // обработчик согласия с посчитанными размерами
    $(".btnNeSoglasenRed, .btnNeSoglasenGray").click(function () {
        $.fn.ceebox.overlay();
        $.fn.ceebox.popup($("#messageBox").html(), {width:500,height:150});
        return false;
    });

    $(".btnSoglasenGreen, .btnSoglasenGray").click(function () {
        if (eval("validateStep" + $(this).attr("rel") + "()")) {
            if (calcAndWrite($(this).attr("rel"))) {
                step(parseInt($(this).attr("rel")) + 1);
            }
        }
        return false;
    });

    // обработчик для выбора типов павильона
    $(".for_high").click(function () {
        $this = $(this);
        var countOut = 0;

        $(".pavilion_types").fadeOut(400, function() {
            countOut++;
            if (countOut == 2) {
                $("#" + $this.val() + "_types").fadeIn();
            }
        });
    });

    // обработчик для цвета профиля
    $(".for_profile_color").click(function () {

        if ($("input[name='profile_color_type']:checked").val() == 'color') {

            $("#profile_color_block").fadeIn();
            $.getJSON("/getData.php", $("#formCalc").serialize(), function (data) {
                jsonSyncSizes(data);
                showProfileColors(data);
            });

        } else {
            $("#profile_color_block").fadeOut();
            var pavilion_width = parseInt($("#pavilion_width").val());

            if (pavilion_width < 550) {
                $("input[name='profile_color']").val(['2']);
            } else {
                $("input[name='profile_color']").val(['1']);
            }
        }
    });

    // обработчик для цвета поликарбоната 
    $(".for_polycarbonate_color").click(function () {

        if ($("input[name='polycarbonate_color_type']:checked").val() == 'color') {
            $("#polycarbonate_color_block").fadeIn();

        } else {
            $("#polycarbonate_color_block").fadeOut();
            $("input[name='polycarbonate_color']").val(['1']);
        }
    });

    // подсказка про торец
    $("#footway_position_bottom").click(function () {
        $("#footway_position_podskazka2").fadeIn();
    });

    // подсказка про торец
    $("#footway_position_left, #footway_position_right").click(function () {
        $("#footway_position_podskazka2").fadeOut();
    });

    function checkPodskazka() {
        if ($("#footway_b").val() != $("#footway_a").val()) {
            $("#footway_position_podskazka").fadeIn();
        } else {
            $("#footway_position_podskazka").fadeOut();
        }
    }

    // подсказка про середину
    $("#footway_b, #footway_a")
        .change(  function () {checkPodskazka()})
        .focusout(function () {checkPodskazka()})
        .keydown( function () {checkPodskazka()})
        .keyup(   function () {checkPodskazka()});

    function hideError($obj) {
        $("#" + $obj.attr("name") + "_error").hide();
    }

    $("#footway_a, #footway_b, #footway_h, #footway_s, #rails_prolong_length, .forHideError")
        .click(  function () {hideError($(this))})
        .change( function () {hideError($(this))})
        .keydown(function () {hideError($(this))})
        .keyup(  function () {hideError($(this))});

    $("#door_additional1, #door_additional2, #door_additional3, #door_additional4, #door_additional5, #door_additional6").click(function () {
        $("#door_additional_error").hide();
    });

    $("#pavilion_open_as1").click(function () {
        $(".for_open_as2").hide();
        $(".for_open_as1").show();
        $("input[name^='pavilion_open_where']:checked").attr("checked", false);
    });

    $("#pavilion_open_as2").click(function () {
        $(".for_open_as1").hide();
        $(".for_open_as2").show();
        $("input[name^='pavilion_open_where']:checked").attr("checked", false);
    });

    // следим за активностью иконки превью
    $(".for_pavilion_form").click(function () {
        $("#previewIco").removeClass("preview");
        $("#previewIco").addClass("previewActive");
        $(".forPreviewLink").removeClass("previewLink");
        $(".forPreviewLink").addClass("previewLinkActive");

        pavillionSizes = null;

        showFlash();
    });

    $("#myBoxClose").click(function () {
        $("#myBoxContainer").hide();
        $("#myBoxOverlay").remove();
    });

    // создаем превью
    $(".forPreview").click(function () {

        if ($("#previewIco").hasClass("previewActive")) {

            $("#myBoxContainer").show();
            $("<div id='myBoxOverlay'></div>").css({
                opacity : 0.8,
                height: $(document).height()
            }).appendTo($("body"));
        }

        return false;
    });

    // гасим навигацию "вперед"
    $("#is_bortik1, #is_bortik2").click(function () {
        gasim(5);
    });
    $("#is_curb_stone1, #is_curb_stone2, #is_skimmer1, #is_skimmer2, #is_mono_blok1, #is_mono_blok2").click(function () {
        gasim(6);
    });
    $("#width, #bortik_width, #curb_stone_width, #skimmer_c, #mono_blok_a1, input[name='pavilion_form']").change(function () {
        gasim(5);
    });

    // боремся с фокусами
    $("#is_bortik1").click(function () {
        $("input[name='bortik_width']").focus();
    });

    $("#is_curb_stone1").click(function () {
        $("#curb_stone_width").focus();
    });

    $("#is_skimmer1").click(function () {
        $("#skimmer_a").focus();
    });

    $("#is_mono_blok1").click(function () {
        $("#mono_blok_a").focus();
    });

    $(".footwayPositionForFocus").click(function () {
        $("#footway_a").focus();
    });

    $("#is_rails_prolong1").click(function () {
        $("#rails_prolong_length").focus();
    });

    // клики по навигации
    $(".notlinked").live("click", function () {
        return false;
    });

    $(".linked").live("click", function () {

        var $id = $(this).attr("id");
        $id = $id.substring(7, 8);

        step($id);

        return false;
    });

    // контрол плюс стрелки
    var leftOne  = false;
    var rightOne = false;

    $(document).bind('keydown', 'Ctrl+left', function (evt) {
        var stepNum = parseInt($(".stepActive").attr("id").substring(7, 8));

        if (stepNum > 1) {
            step(stepNum - 1);
        }
    });

    $(document).bind('keydown', 'Ctrl+right', function (evt) {
        var stepNum = parseInt($(".stepActive").attr("id").substring(7, 8));

        if (stepNum < 8) {
            step(stepNum + 1);
        }
    });
});

//=====================================================================================================================
//  Сервисные функции
//=====================================================================================================================
// проверить что строка число
function isNum(v) {
    if (v === '') return false;
    v = v*1 + 0;
    return typeof v === 'number' && isFinite(v);
}
// Показать,, что в инпуте ошибка, с задержкой
function delayedErrorBorder(selector) {
    setTimeout(function() {
        $(selector).removeClass("inBox").removeClass("inBoxBlue").addClass("inBoxRed");
    }, 200);
}
// Показать, что ошибки нет
function normalizeBorder(selector) {
    $(selector).removeClass("inBoxRed").removeClass("inBoxBlue").addClass("inBox");
}

//===============================================================================================================
//  Формируем массив введенных параметров (текстом) для передачи во флешку для распечатывани
//===============================================================================================================
function getJSObjectWithDescript(data) {
    var js = getJSObject(data);

    js.price_currency = "евро";
    js.comment1 = "Мы рекомендуем Вам выезд нашего специалиста на объект для консультации";

    var ma = new Array();
    var i = 0;

    ma.push({ name: "Длинна бассейна", value: $("#length").val() });
    ma.push({ name: "Ширина бассейна", value: $("#width").val()  });

    if ($("input[name='is_bortik']:checked").val() == '1') {
        ma.push({ name: "Ширина бортика", value: $("#bortik_width").val()  });
        ma.push({ name: "Высота бортика", value: $("#bortik_height").val() });
    }

    if ($("input[name='is_curb_stone']:checked").val() == '1') {
        ma.push({ name: "Ширина бордюрного камня", value: $("#curb_stone_width").val() });
    } else {
        ma.push({ name: "Бордюрный камень", value: "отсутствует" });
    }
    
    // Скиммер
    if ($("input[name='is_skimmer']:checked").val() == '1') {
        ma.push({
            name: "Скиммер A, B, C, D",
            value: $("#skimmer_a").val() + ", " + $("#skimmer_b").val() + ", " + $("#skimmer_c").val() + ", " + $("#skimmer_d").val()
        } );
    } else {
        ma.push({ name: "Скиммер", value: "отсутствует" });
    }
    
    // Моноблок
    if ($("input[name='is_mono_blok']:checked").val() == '1') {
        ma.push({
            name: "Моноблок A, B, A1, B1",
            value: $("#mono_blok_a").val() + ", "+ $("#mono_blok_b").val() + ", "+ $("#mono_blok_a1").val() + ", "+ $("#mono_blok_b1").val()
        });
    } else {
        ma.push({ name: "Моноблок", value: "отсутствует" });
    }

    ma.push({ name: "Количество секций", value: $("select[name=sectionCount]").val() });
    

    if ($("input[name='is_footway']:checked").val() == '1') {
        var where = "";
        switch ($("input[name='footway_position']:checked").val()) {
            case 'left':
                where = "слева";
                break;

            case 'right':
                where = "справа";
                break;

            case 'bottom':
                where = "снизу";
                break;
        }
        ma.push({ name: "Лестница", value: where });

        ma.push({
            name: "Параметры установки лестницы (A, B, H, S)",
            value: $("#footway_a").val() + ", " + $("#footway_b").val() + ", " + $("#footway_h").val() + ", " + $("#footway_s").val()
        });
    }

    if ($("input[name='pavilion_open_as']:checked").val() != undefined) {

        var torc = ($("[name=pavilion_open_as]:checked").val() == "1") ? "съемные" : "откидная нижняя часть";
        var where = "";

        if ($("input[name^='pavilion_open_where']:checked").length > 0) {

            if ( ($("[name=pavilion_open_where1]:checked").length || $("[name=pavilion_open_where3]:checked").length) && 
                 ($("[name=pavilion_open_where2]:checked").length || $("[name=pavilion_open_where4]:checked").length) ) {
                where = "(справа и слева)";

            } else if ( $("[name=pavilion_open_where1]:checked").length || $("[name=pavilion_open_where3]:checked").length ) {
                where = "(слева)";

            } else {
                where = "(справа)";
            }
        }
        
        // Торцевые стенки
        ma.push({ name: "Торцевые стенки", value: torc + " " + where });
    }

    if ($("input[name='pavilion_height']:checked").val() != undefined) {
        var byHeight;
        if ($("input[name='pavilion_height']:checked").val() == "lowest") {
            byHeight = "максимально низкий";
        } else {
            byHeight = "максимально высокий (" + $("input[name='height']").val() + " см)";
        }
        ma.push({ name: "По высоте", value: byHeight });
    }

    if ($("input[name='pavilion_form']:checked").val() != undefined) {
        var model = MODEL_NAMES[ $("[name=pavilion_form]:checked").val() ];
        ma.push({ name: "Форма павильона", value: model });
    }

    // профиль
    if ($("input[name='profile_type']:checked").val() != undefined) {
        var profile_type;
        var selectedProfileType = $("input[name='profile_type']:checked").val();

        if (selectedProfileType == 'standart') {
            profile_type = "стандартный";
        } else if (selectedProfileType == 'medium') {
            profile_type = "средний";
        } else {
            profile_type = "усиленный";
        }
        ma.push({ name: "Профиль", value: profile_type });
    }

    if ($("input[name='profile_color']:checked").val() != undefined) {
        var profile_color;
        var selectedProfileColor = $("input[name='profile_color']:checked").val();

        if (selectedProfileColor == '1') {
            profile_color = "белый";
        } else if (selectedProfileColor == '2') {
            profile_color = "элокс";
        } else if (selectedProfileColor == '3') {
            profile_color = "под дерево";
        } else {
            profile_color = "RAL " + selectedProfileColor;
        }

        ma.push({ name: "Цвет профиля", value: profile_color });
    }

    if ($("input[name='polycarbonate_color_type']:checked").val() != undefined &&
        $("input[name='polycarbonate_color']:checked").val() != undefined) {
        
        var polycarbonate_color = "";
        switch ($("input[name='polycarbonate_color']:checked").val()) {
            case "1":
                polycarbonate_color = "прозрачный";
                break;
            case "5fc9f0":
                polycarbonate_color = "синий";
                break;
            case "8af1de":
                polycarbonate_color = "зеленый";
                break;
            case "7a6d5d":
                polycarbonate_color = "дымчатый";
                break;
        }

        ma.push({ name: "Цвет поликарбоната", value: polycarbonate_color });
    }

    // рельсы
    if ($("input[name='rails_type']:checked").val() != undefined) {
        ma.push({ name: "Рельсы", value: ($("input[name='rails_type']:checked").val() == "standart") ? "стандартные" : "низкие" });
    }
    // удлиннение рельсов
    if ($("input[name='is_rails_prolong']:checked").val() == '1') {
        ma.push({ name: "Удлинить рельсы на", value: $("#rails_prolong_length").val() });
    }
    // замена стенок
    if ($("input[name='is_plexiglass']:checked").val() != undefined) {
        ma.push({ name: "Заменять стенки на плексиглас?", value: ( ($("[name=is_plexiglass]:checked").val() == '1') ? "да" : "нет" ) });
    }

    // Дополнительные двери
    if ($("input[name='is_additional']:checked").val() == '1') {
        var adds = new Array();
        for (var i=1; i<=6; i++) {
            if ($("input[name='door_additional"+i+"']:checked").val() == '1') {
                adds.push(i);
            }
        }

        if (adds.length > 0) {
            ma.push({ name: "Дополнительные двери", value: adds.join(", ") });
        }
    }
    
    
    js.textparams = ma;

    lastDescription = ma;

    return js;
}


//===============================================================================================================
//  Парсим пришедшие с сервера рассчетные параметры
//===============================================================================================================
function getJSObject(data) {

    var js = $("#formCalc").serializeObject();

    if (data.isFinded) {
        $("#modelNotFound").hide();
        allowMoreStep();

    } else {
        $("#modelNotFound").show();
        disallowMoreStep();
    }

    // цвет профиля
    var profile_color = $("input[name='profile_color']:checked").val();

    if (profile_color == 1) {// Белый
        js.profile_color_rgb = "FFFFFF";
        js.profile_color_bitmap = null;

    } else if (profile_color == 2) {// Элокс
        js.profile_color_rgb = null;
        js.profile_color_bitmap = null;

    } else if (profile_color == 3) {// Под дерево
        js.profile_color_rgb = null;
        js.profile_color_bitmap = "/images/flash/profile_backgrounds/pine_tree.jpg";

    } else {
        js.profile_color_rgb = ralColors[profile_color];
        js.profile_color_bitmap = null;
    }

    // цвет поликарбоната
    var polycarbonate_color = $("input[name='polycarbonate_color']:checked").val();
    if (polycarbonate_color == 1) {
        js.polycarbonate_color_rgb = null;
    } else {
        js.polycarbonate_color_rgb = polycarbonate_color;
    }
    js.polycarbonate_color_bitmap = null;

    // длинна павильона без учета удлиненных рельсов
    js.pavilion_length_outer = parseInt($("#pavilion_length").val());

    // ширина с рельсами
    js.pavilion_width_outer = data.outerWidth;
    js.pavilion_width_inner = data.innerWidth;

    // Длинна продолжения рельс
    js.pavilion_length_rails = isNaN(parseInt(js.rails_prolong_length)) ? null : parseInt(js.rails_prolong_length);

    js.pavilion_height_value = data.pavilion_height_value;

    js.price = data.price_euro;

    if ($("#bortik_width").val()) {
        js.bortik_width = $("#bortik_width").val();
    } else if ($("#curb_stone_width").val()) {
        js.bortik_width = $("#curb_stone_width").val();
    }

    return js;
}

//===============================================================================================================
// Передача обновленных размеров в флешку
//===============================================================================================================
var isFlashLoaded = false;
function getJSObjectAndUpdateFlash() {

    $.getJSON("/getData.php", $("#formCalc").serialize(), function (data) {
        jsonSyncSizes(data);
        showProfileColors(data);

        var js = getJSObject(data);

        if (isFlashLoaded) {
            var flashView = getMovie('main');
            flashView.updateFlashPreview(js);

        } else {
            setTimeout(function() {
                var flashView = getMovie('main');
                flashView.updateFlashPreview(js);
                isFlashLoaded = true;
            }, 1000);
        }
    });
}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
// Функции перехода по шагам
//===============================================================================================================
// Номер текущего шага
function getCurrentStepNum() {
    return $(".stepActive").attr("id").substring(7, 8);
}
// Запретить переход дальше по шагам
function disallowMoreStep() {
    var numStep = getCurrentStepNum();
    $("#allowed" + numStep + "_button_next").hide();
    gasim(numStep);
}
// Разрещить перехо дальше по шагам
function allowMoreStep() {
    $("#allowed" + getCurrentStepNum() + "_button_next").show();
}
// Выключаем ссылки быстрого перехода в правом меню
function gasim(numStep) {
    for (var i=numStep;i<9;i++) {
        $("#stepNav" + i + "Link").removeClass("linked").addClass("notlinked");
    }
}
// Откатиться на 1 шаг назад
function stepBackward() {
    var current = getCurrentStepNum();
    if (current > 1) {
        showStep(current - 1);
    }
    return false;
}
// Показать шаг заказа (распечатывания)
function showOrder() {
    $('#step9_form_div').show();
}
// Отправка формы на сервер
function doSubmit() {
    $("#loading").show();
    $('#step9_form_message').hide();
    normalizeBorder('.orderFormField');

    $.ajax({
        'type'  : 'POST',
        'url'   : "/sendorder.php",
        'data'  : {
            'order': {
                "name":  $('#order_name').val(),
                "city":  $('#order_city').val(),
                "email": $('#order_email').val(),
                "phone": $('#order_phone').val(),
                "order": lastDescription
            }
        },
        'cache' : false,
        'success': function(data) {
            $("#loading").hide();

            var jsonData = $.evalJSON(data);
            if (jsonData.result == "1") {
                $('#step9_form_message').show().html(jsonData.message);
                $('#step9_form').hide();
            } else {
                $('#step9_form_message').show().html(jsonData.message);
                for (var val in jsonData.errors) {
                    delayedErrorBorder('#order_' + jsonData.errors[val]);
                }
            }
        },
        'error': function(data) {
            $("#loading").hide();
        }
    });

   return false; 
}
// Перейти на шаг по номеру
function step(numStep) {
    numStep = parseInt(numStep);

    if (numStep < 4) {
        var isValid = false;
        if (numStep == 1) {
            isValid = true;
        } else {
            isValid = eval("validateStep" + (numStep - 1) + "()");
        }

        if (isValid) {
            showStep(numStep);
        }

    } else {
        eval("showStep" + numStep + "()");
    }

    return false;
}
// ?????? Что тут происходит?
function showStep(numStep) {
    if (numStep > 1) {
        $('#backBtn').show();
    } else {
        $('#backBtn').hide();
    }

    var oldStepNum = parseInt(getCurrentStepNum());

    $(".forFocus" + numStep).focus();

    var countOut = 0;
    $(".step").fadeOut(400, function() {
        countOut++;
        if (countOut == 7) {
            $("#step" + numStep).fadeIn();
        }
    });

    for (var i=1;i<oldStepNum+1;i++) {
        $("#stepNav" + i + "Link").removeClass("notlinked").addClass("linked");
    }
    
    $(".stepActive").removeClass('stepActive').addClass('stepNotActive');
    $("#stepNav" + numStep).removeClass('stepNotActive').addClass('stepActive');

    setTimeout(function() {
        // боремся с фокусами
        switch (numStep) {
            case 1:
                $("#length").focus();
                break;
            case 2:
                $("#is_skimmer1").focus();
                break;
            case 3:
                $("#is_footway1").focus();
                break;
            case 4:
                $("#pavilion_height1").focus();
                break;
            case 5:
                if ($("#profile_type_block").is(":visible")) {
                    $("#profile_type1").focus();
                } else {
                    $("#profile_color_type1").focus();
                }
                break;
            case 6:
                $("#polycarbonate_color_type1").focus();
                break;
            case 7:
                if ($("#rails_type_block").is(":visible")) {
                    $("#rails_type1").focus();
                } else {
                    $("#is_rails_prolong1").focus();
                }
                break;
            case 8:
                if ($("#is_plexiglass_block").is(":visible")) {
                    $("#is_plexiglass1").focus();
                } else {
                    $("#door_position1").focus();
                }
                break;
        }
    }, 401);

    if (numStep == 9) {
        if ($("input[name='pavilion_form']:checked").val() == 1) {
            $(".cheaplink").hide();
            $("#cheap_default").hide();
            $("#cheap_casablanca").show();
        } else if ($("input[name='pavilion_form']:checked").val() == 4) {
            $(".cheaplink").hide();
            $("#cheap_default").hide();
            $("#cheap_klassik").show();
        } else {
            $(".cheaplink").hide();
            $("#cheap_default").show();
        }
    } else {
        $(".cheaplink").hide();
        $("#cheap_default").show();
    }

    return false;
}

// Показываем доступные цвета профиля
function showProfileColors(jsonData) {

    var colors = [];
    if ($("input[name='pavilion_height']:checked").val() == 'highest') {
        for (var i in jsonData.colors_highest) {
            colors.push(jsonData.colors_highest[i]);
        }
    } else if ($("input[name='pavilion_height']:checked").val() == 'lowest') {
        for (var i in jsonData.colors_lowest) {
            colors.push(jsonData.colors_lowest[i]);
        }
    } else {}

//    alert(dump(colors));

    if (typeof colors == "string") {
        if (colors.indexOf('D') != -1) {
            $("#profilePineTreeColor").show();
        } else {
            $("#profilePineTreeColor").hide();
        }
    } else if (colors.length > 0) { 
        var foundD = false;
        for (var i=0; i<colors.length; i++) {
            if (colors[i] == "D") foundD = true;
        }
        if (foundD) {
            $("#profilePineTreeColor").show();
        } else {
            $("#profilePineTreeColor").hide();
        }
    } else {

        $("#profilePineTreeColor").hide();
    }
}

//=====================================================================================================================
// Синхронизация присланных аяксом размеров павильона (на стороне сервера они были исправлены на ближайшие подходящие)
// FIX: сервер уже не исправляет размеры
//=====================================================================================================================
function jsonSyncSizes(jsonData) {

    var pavilion_form  = $("input[name='pavilion_form']:checked").val();

    if (($("input[name='pavilion_height']:checked").val() == "highest") && 
        ((pavilion_form == TYPE_CASABLANCA) || (pavilion_form == TYPE_MONAKO) || (pavilion_form == TYPE_MONAKOFUTURE)) ) {

        $("#pavilion_height_input").fadeIn();

    } else {
        $("#pavilion_height_input").fadeOut();
        $("#height").val(jsonData.height_lowest);
    }

    if ($("#height").val() == "") {
        $("#height").val(jsonData.height_base);
    }

    // Если в объекте пришло поле forceProfile - выставить значение профиля в соотв с ним
    if (jsonData.forcedProfile != undefined) {
        $("input[name='profile_type'][value='"+jsonData.forcedProfile+"']").attr("checked", "checked");
    }

    var heightInt = parseInt($("#height").val());
    var height_highestInt = parseInt(jsonData.height_highest);
    var height_lowestInt  = parseInt(jsonData.height_lowest);

    if (heightInt > height_highestInt) {
        $("#height").val(height_highestInt);

    } else if (heightInt < height_lowestInt) {
        $("#height").val(height_lowestInt);
    }

    $("#minAvailableHeight").html(jsonData.height_lowest);
    $("#maxAvailableHeight").html(jsonData.height_highest);

    // Также показать селект для выбора количества секций
    $("#pavilion_sections_input").fadeIn();

    $("#recommendedSectionCount").html(jsonData.recommendedSectionCount);
    var minSectionCount = Math.ceil($("#pavilion_length_calced_general").html() / 400);
    var maxSectionCount = Math.floor($("#pavilion_length_calced_general").html() / 140);

    var wasSelectedCount = -1;
    if ($('#sectionCount option:selected').length) {
        wasSelectedCount = $('#sectionCount option:selected').attr("value");
    }

    $('#sectionCount option').each(function(num) {
        if (num == 0) return;
        var val = $(this).attr("value");
        if ((val < minSectionCount) || (val > maxSectionCount)) {
            $(this).attr("disabled", "disabled");
        } else {
            $(this).removeAttr("disabled");
        }
    });

    // Выставить то количество секций, которое было выбрано, или Рекомендуемое
    if (wasSelectedCount == -1) {
        $('#sectionCount option:first').attr("selected", "selected");
    } else {
        if (!$('#sectionCount option[value='+wasSelectedCount+']').attr("disabled")) {
            $('#sectionCount option[value='+wasSelectedCount+']').attr("selected", "selected");
        } else {
            $('#sectionCount option:first').attr("selected", "selected");
        }
    }

//    alert(minSectionCount + " - " + maxSectionCount + " sections");
}

//=====================================================================================================================
// Выбор доступных размеров профилей
//=====================================================================================================================
// TODO
function setProfileType() {

    var pavilion_width = parseInt($("#pavilion_width").val());
    var pavilion_form  = $("input[name='pavilion_form']:checked").val();
    pavilion_form = parseInt(pavilion_form);

    // Можем установить выбор изготовления павильона из усиленного профиля от ширины 450 см ТОЛЬКО для KLASIK, CASABLANCA, MONACO.
    $("#profile_type_block").hide();

    if (pavilion_width <= 550) {
        $("input[name='profile_type']").val(['standart']);

    } else if (pavilion_width <= 650) {
        $("input[name='profile_type']").val(['medium']);

    } else {
        $("input[name='profile_type']").val(['amplified']);
    }

}

//=====================================================================================================================
// Сбрасывает форму и на первый шаг
//=====================================================================================================================
function showStep1() {
    $(':text').val("");
    $(':radio').attr("checked", false);

    $("#previewIco").removeClass("previewActive");
    $("#previewIco").addClass("preview");
    $(".forPreviewLink").removeClass("previewLinkActive");
    $(".forPreviewLink").addClass("previewLink");

    hideFlash();
    
    showStep(1);
}
//=====================================================================================================================
// Переход к шагу 4 (Высота и тип павильона)
//=====================================================================================================================
function showStep4() {

    if (validateStep3()) {
        showStep(4);
        $("#pavilion_length_calced3").html($("#pavilion_length").val());
        $("#pavilion_width_calced3").html($("#pavilion_width").val());

        if ( ($("[name=is_bortik]:checked").val()  == '1') ||
             ($("[name=is_footway]:checked").val() == '1') ) {
            $("#stenki_blok").show();

            if (parseInt($("#bortik_height").val()) > 12) {
                $("#torcSelectorPartial").show();

            } else {
                $("#torcSelectorPartial").hide();
                $("#pavilion_open_as1").attr("checked", "checked").change().click();
            }

        } else {
            $("#stenki_blok").hide();
        }
    }

    return false;
}
//=====================================================================================================================
// Переход к шагу 5 (Выбор профиля)
//=====================================================================================================================
function showStep5() {

    if (validateStep4()) {
        $.getJSON("/getData.php", $("#formCalc").serialize(), function (data) {
            jsonSyncSizes(data);
            showProfileColors(data);
            showStep(5);
            setProfileType();
        });
    }

    return false;
}
//=====================================================================================================================
// Переход к шагу 6 (Выбор цвета поликарбоната)
//=====================================================================================================================
function showStep6() {
    if (validateStep5()) {
        showStep(6);
    }
    return false;
}
//=====================================================================================================================
// Переход к шагу 7 (Установка рельс)
//=====================================================================================================================
function showStep7() {
    if (validateStep6()) {
        showStep(7);
        var pavilion_width = parseInt($("#pavilion_width").val());
        if (pavilion_width < 550) {
            $("#rails_type_block").show();

        } else {
            $("#rails_type_block").hide();
            $("input[name='rails_type']").val(['standart']);
        }
    }
    return false;
}
//=====================================================================================================================
// Переход к шагу 8 (Двери и стены)
//=====================================================================================================================
function showStep8() {
    if (validateStep7()) {
        showStep(8);
        var pavilion_form = $("input[name='pavilion_form']:checked").val();
        pavilion_form = parseInt(pavilion_form);

        // замена материала стенок – на плексиглаз, возможна только для моделей «касабланка», «монако», «монако future»
        if ((pavilion_form == TYPE_CASABLANCA) || (pavilion_form == TYPE_MONAKO) || (pavilion_form == TYPE_MONAKOFUTURE)) {
            $("#is_plexiglass_block").show();

        } else {
            $("#is_plexiglass_block").hide();
            $("[name=is_plexiglass]").val(['0']);
        }

        // Двери в торцевых стенках (передней или задней) установить АВТОМАТИЧЕСКИ, если в торце бассейна находится лестница! 
        // Только потом предлагать дополнительную дверь (сторона, где уже есть лестница, автоматически должна блокировать предложение 
        // по дополнительной двери).
        var pos = $("[name=footway_position]:checked").val();
        if (($("[name=is_footway]:checked").val() == '1') && ((pos == "left") || (pos == "right"))) {
            $("#is_additional1").attr("checked", "checked").attr("disabled", "disabled").change().click();
            $("#is_additional2").removeAttr("checked").attr("disabled", "disabled");

            if (pos == "left") {
                $("#door_additional1").attr("disabled", "disabled").attr("checked", "checked").attr("title", "С этой стороны установка двери обязательна - здесь находится лестница");
            } else if (pos == "right") {
                $("#door_additional5").attr("disabled", "disabled").attr("checked", "checked").attr("title", "С этой стороны установка двери обязательна - здесь находится лестница");
            }
            $("#forcedDoorsMessage").fadeIn();

        } else {
            $("#door_additional1, #door_additional5").removeAttr("disabled").removeAttr("checked").removeAttr("title");

            $("#is_additional2").removeAttr("checked").removeAttr("disabled");
            $("#is_additional1").removeAttr("checked").removeAttr("disabled");
            $("#additional_size").hide();
            $("#forcedDoorsMessage").fadeOut();
        }

        // Дальние (расположенные в самой меньшей секции) торцевые двери доступны только при усиленном профиле
        if ($("input[name=profile_type]:checked").val() == "amplified") {
            $("#door_additional4, #door_additional6").removeAttr("checked").parent().hide();
        } else {
            $("#door_additional4, #door_additional6").parent().show();
        }
    }

    return false;
}
//=====================================================================================================================
// Переход к шагу 9 (заказ/распечатка)
//=====================================================================================================================
function showStep9() {
    if (validateStep8()) {
        $.getJSON("/getData.php", $("#formCalc").serialize(), function (data) {
            jsonSyncSizes(data);
            var js = getJSObjectWithDescript(data);

            $("#flashContainer").hide();
            $("#firstSteps").fadeOut();
            $("#step9").fadeIn();

            setTimeout(function() {
                var flashView = getMovie('step9flash');
                flashView.updateFlashPreview(js);
            }, 5000);
        });

        if ($("input[name='pavilion_form']:checked").val() == 1) {
            $(".cheaplink").hide();
            $("#cheap_default").hide();
            $("#cheap_casablanca").show();

        } else if ($("input[name='pavilion_form']:checked").val() == 4) {
            $(".cheaplink").hide();
            $("#cheap_default").hide();
            $("#cheap_klassik").show();

        } else {
            $(".cheaplink").hide();
            $("#cheap_default").show();
        }
    }

    return false;
}

//=====================================================================================================================
// Массовое выставление ошибок длины/ширины
    function setBorderLengthError() {
        $("#length, #bortik_width, #curb_stone_width, #skimmer_b, #mono_blok_b").removeClass("inBox").removeClass("inBoxBlue").addClass("inBoxRed");
    }

    function setBorderLengthNormal() {
        $("#length, #bortik_width, #curb_stone_width, #skimmer_b, #mono_blok_b").removeClass("inBoxRed").removeClass("inBoxBlue").addClass("inBox");
    }

    function setBorderWidthError() {
        $("#width, #bortik_width, #curb_stone_width, #skimmer_c, #mono_blok_a1").removeClass("inBox").removeClass("inBoxBlue").addClass("inBoxRed");
    }

    function setBorderWidthNormal() {
        $("#width, #bortik_width, #curb_stone_width, #skimmer_c, #mono_blok_a1").removeClass("inBoxRed").removeClass("inBoxBlue").addClass("inBox");
    }

//=====================================================================================================================
// Пишем размеры бассейна в нужные текстовые поля и инпуты
// sizes[0] - длина (length)
// sizes[1] - ширина (width)
    function writeSizes(sizes, stepNum) {

        var isValidSize = true;

        $("#pav_minlength_error, #pav_minwidth_error").hide();

        // Если мы уже получили нужные размеры с сервера (они не меньше чем чекущие размеры), то показываем их
        if ( pavillionSizes != null ) {
            if ((pavillionSizes[0] != null) && (pavillionSizes[0] != undefined) && (sizes[0] < pavillionSizes[0])) sizes[0] = pavillionSizes[0];
            if ((pavillionSizes[1] != null) && (pavillionSizes[1] != undefined) && (sizes[1] < pavillionSizes[1])) sizes[1] = pavillionSizes[1];
        }

        if (sizes[1] > 900) {           // д.б. менее 9 метров
            $("#width_pav_error, #width_pav_error2").show();
            setBorderWidthError();
            isValidSize = false;

        } else if (sizes[1] < 250) {    // мин ширина павильона - 250 см, просто исправляем
            sizes[1] = 250;
            $("#pav_minwidth_error").show();
            setBorderWidthNormal();
            $("#width_pav_error, #width_pav_error2").hide();

        } else {
            setBorderWidthNormal();
            $("#width_pav_error, #width_pav_error2").hide();
        }

        if (sizes[0] > 2115) {          // д.б. менее 21.15 метров
            $("#length_pav_error, #length_pav_error2").show();
            setBorderLengthError();
            isValidSize = false;

        } else if (sizes[0] < 216) {    // мин длина - 216 см
            sizes[0] = 216;
            $("#pav_minlength_error").show();
            setBorderLengthNormal();
            $("#length_pav_error, #length_pav_error2").hide();

        } else {
            setBorderLengthNormal();
            $("#length_pav_error, #length_pav_error2").hide();
        }

        var isValid = isValidSize;

        if (isValidSize) {
            $("#width_pav_error, #width_pav_error2, #length_pav_error, #length_pav_error2").hide();
            setBorderLengthNormal();
            setBorderWidthNormal();

            var strLength = parseInt(sizes[0]);
            if (!isNum(strLength)) { strLength = ""; }

            $("#pavilion_length_calced1").html(strLength);
            $("#pavilion_length_calced2").html(strLength);
            $("#pavilion_length_calced_general").html(strLength);
            $("#pavilion_length").val(strLength);

            strWidth = parseInt(sizes[1]);
            if (!isNum(strWidth)) { strWidth = ""; }

            $("#pavilion_width_calced1").html(strWidth);
            $("#pavilion_width_calced2").html(strWidth);
            $("#pavilion_width_calced_general").html(strWidth);
            $("#pavilion_width").val(strWidth);

            if (stepNum == null) return isValid;

            isValid = eval("validateStep" + stepNum + "(true);");

            if (isValid) {
                // теперь можно согласиться с размерами
                $("#btnSoglasen" + stepNum).removeClass("btnSoglasenGray").addClass("btnSoglasenGreen");
                $("#btnNeSoglasen" + stepNum).removeClass("btnNeSoglasenGray").addClass("btnNeSoglasenRed");

            } else {
                $("#btnSoglasen" + stepNum).removeClass("btnSoglasenGreen").addClass("btnSoglasenGray");
                $("#btnNeSoglasen" + stepNum).removeClass("btnNeSoglasenRed").addClass("btnNeSoglasenGray");
            }
        }

        return isValid;
    }

//=====================================================================================================================
// Считаем размеры бассейна с учетом всех настроек
    function calcSizes() {

        var pavilionInnerLength = parseInt($("#length").val()) + 5*2;
        var pavilionInnerWidth  = parseInt($("#width").val())  + 5*2;
        var bortikWidth, bortikHeight;

        // бортик
        if ($("input[name='is_bortik']:checked").val() == '1') {
            bortikWidth = parseInt($("#bortik_width").val());
            if (isNum(bortikWidth)) {
                pavilionInnerLength += bortikWidth * 2;
                pavilionInnerWidth  += bortikWidth * 2;
            }
        }

        // бордюрный камень
        if ($("input[name='is_curb_stone']:checked").val() == '1') {
            curbWidth = parseInt($("#curb_stone_width").val());
            if (isNum(curbWidth)) {
                pavilionInnerLength += curbWidth * 2;
                pavilionInnerWidth  += curbWidth * 2;
            }
        }

        // скиммер
        var deltaWidth = 0;
        var deltaLength = 0;

        if ($("input[name='is_skimmer']:checked").val() == '1') {
            tw = parseInt($("#skimmer_b").val());
            deltaLength = isNum(tw) ? tw : 0;

            tw = parseInt($("#skimmer_c").val());
            deltaWidth  = isNum(tw) ? tw : 0;
        }

        // моно блок
        if ($("input[name='is_mono_blok']:checked").val() == '1') {
            tw = parseInt($("#mono_blok_b").val());
            deltaLength = (isNum(tw) && (tw > deltaLength)) ? tw : deltaLength;

            tw = parseInt($("#mono_blok_a1").val());
            deltaWidth  = (isNum(tw) && (tw > deltaWidth))  ? tw : deltaWidth;
        }

        // Лестница
        if ($("input[name='is_footway']:checked").val() == '1') {
            deltaLength += parseInt($("#footway_s").val());
        }

        pavilionInnerLength += deltaLength;
        pavilionInnerWidth  += deltaWidth;

        return ( new Array(pavilionInnerLength, pavilionInnerWidth) );
    }

//=====================================================================================================================
// Флеш
// кэлбек для загрузки флеша в попапе
function forPopupFlash() {
    $.getJSON("/getData.php", $("#formCalc").serialize(), function (data) {
        jsonSyncSizes(data);
        var js = getJSObjectWithDescript(data);
        var flashView = getMovie('popup22');
        flashView.updateFlashPreview(js);
    });
}
// Печать павильона из флешки
function printFlash() {
    var flashView = getMovie('step9flash');
    flashView.printFlashPreview();
}
// Показать флеку-превью
function showFlash() {
    getJSObjectAndUpdateFlash();
    $("#flashContainer").show();
}
// Передать во флешку обновленные данные
function updateFlash() {
    if ($("#flashContainer").css("display") != "none") {
        getJSObjectAndUpdateFlash();
    }
}
// Спрятать флешку
function hideFlash() {
    $("#flashContainer").hide();
}
//=====================================================================================================================
//=====================================================================================================================
//=====================================================================================================================
// Валидация шагов
//=====================================================================================================================
// размеры бассейна, бортик, камень
    function validateStep1(isNotShowAlerts) {
        var isValid = true;

        $("#length_error, #width_error, #is_bortik_error, #bortik_width_error, #bortik_height_error, "+
          "#is_curb_stone_error, #curb_stone_width_error").hide();
        normalizeBorder("#length, #width, #bortik_width, #bortik_height, #curb_stone_width");

        // Длина
        if (!isNum($("#length").val())) {
            isValid = false;

            if (!isNotShowAlerts) {
                $("#length_error").show();
                $("#length").focus();
                delayedErrorBorder("#length");
            }
        }

        // Ширина
        if (!isNum($("#width").val())) {
            isValid = false;
            if (!isNotShowAlerts) {
                $("#width_error").show();
                delayedErrorBorder("#width");
                $("#width").focus();
            }
        }

        // Бортик
        if ($("input[name='is_bortik']:checked").val() == '1') {

            if (!isNum($("#bortik_width").val())) {
                isValid = false;
                if (!isNotShowAlerts) {
                    $("#bortik_width_error").show();
                    delayedErrorBorder("#bortik_width");
                    $("#bortik_width").focus();
                }
            }

            if (!isNum($("#bortik_height").val())) {
                isValid = false;
                if (!isNotShowAlerts) {
                    $("#bortik_height_error").show();
                    delayedErrorBorder("#bortik_height");
                    $("#bortik_height").focus();
                }
            }

        } else {
            if ($("input[name='is_bortik']:checked").val() == undefined) {
                isValid = false;
                if (!isNotShowAlerts) {
                    $("#is_bortik_error").show();
                }
            }
        }

        // бордюрный камень
        if ($("input[name='is_curb_stone']:checked").val() == '1') {
            if (!isNum($("#curb_stone_width").val())) {
                isValid = false;
                if (!isNotShowAlerts) {
                    $("#curb_stone_width_error").show();
                    delayedErrorBorder("#curb_stone_width");
                    $("#curb_stone_width").focus();
                }
            }

        } else {
            if ($("input[name='is_curb_stone']:checked").val() == undefined) {
                isValid = false;
                if (!isNotShowAlerts) $("#is_curb_stone_error").show();
            }
        }

        return isValid;
    }

//=====================================================================================================================
// Скиммер и моноблок
    function validateStep2(isNotShowAlerts) {
        var isValid = validateStep1();

        // скиммер
        $("#is_skimmer_error, #skimmer_a_error, #skimmer_b_error, #skimmer_c_error, #skimmer_d_error" + 
          "#is_mono_blok_error, #mono_blok_a_error, #mono_blok_a1_error, #mono_blok_b_error, #mono_blok_b1_error").hide();
        normalizeBorder("#mono_blok_a, #mono_blok_a1, #mono_blok_b, #mono_blok_b1" + 
                        "#skimmer_a, #skimmer_b, #skimmer_c, #skimmer_d");

        if ($("input[name='is_skimmer']:checked").val() == '1') {
            // Должны быть введены либо первая пара размеров, либо вторая, либо обе
            var skimmer_have_ab, skimmer_have_cd;

            // первая пара размеров
            if (($("#skimmer_a").val() != "") || ($("#skimmer_b").val() != "")) {
                skimmer_have_ab = true;
                if (!isNum($("#skimmer_b").val())) {    // Поле 'скиммер B' должно быть числом
                    isValid = false;
                    if (!isNotShowAlerts) {
                        $("#skimmer_b_error").show();
                        delayedErrorBorder("#skimmer_b");
                        $("#skimmer_b").focus();
                    }
                }
                if (!isNum($("#skimmer_a").val())) {    // Поле 'скиммер A' должно быть числом
                    isValid = false;
                    if (!isNotShowAlerts) {
                        $("#skimmer_a_error").show();
                        delayedErrorBorder("#skimmer_a");
                        $("#skimmer_a").focus();
                    }
                }
            } else {
                skimmer_have_ab = false;
            }

            // вторая пара размеров
            if (($("#skimmer_c").val() != "") || ($("#skimmer_d").val() != "")) {
                skimmer_have_cd = true;
                if (!isNum($("#skimmer_d").val())) {    // Поле 'скиммер D' должно быть числом
                    isValid = false;
                    if (!isNotShowAlerts) {
                        $("#skimmer_d_error").show();
                        delayedErrorBorder("#skimmer_d");
                        $("#skimmer_d").focus();
                    }
                }
                if (!isNum($("#skimmer_c").val())) {    // Поле 'скиммер C' должно быть числом
                    isValid = false;
                    if (!isNotShowAlerts) {
                        $("#skimmer_c_error").show();
                        delayedErrorBorder("#skimmer_c");
                        $("#skimmer_c").focus();
                    }
                }
            } else {
                skimmer_have_cd = false;
            }

            if ((!skimmer_have_ab) && (!skimmer_have_cd)) {
                isValid = false;
                if (!isNotShowAlerts) {
                    $("#skimmer_a").focus();
                    $("#skimmer_a_error, #skimmer_b_error, #skimmer_c_error, #skimmer_d_error").show();
                    delayedErrorBorder("#skimmer_a, #skimmer_b, #skimmer_c, #skimmer_d");
                }
            }

        } else {
            if ($("input[name='is_skimmer']:checked").val() == undefined) {
                isValid = false;
                if (!isNotShowAlerts) $("#is_skimmer_error").show();
            }
        }

        // моноблок
        if ($("input[name='is_mono_blok']:checked").val() == '1') {
            // Должны быть введены либо первая пара размеров, либо вторая, либо обе
            var mono_have_ab, mono_have_a1b1;
            
            // первая пара размеров
            if (($("#mono_blok_a").val() != "") || ($("#mono_blok_b").val() != "")) {
                mono_have_ab = true;
                if (!isNum($("#mono_blok_b").val())) {  // Поле 'Моноблок B' должно быть числом
                    isValid = false;
                    if (!isNotShowAlerts) {
                        $("#mono_blok_b_error").show();
                        delayedErrorBorder("#mono_blok_b");
                        $("#mono_blok_b").focus();
                    }
                }
                if (!isNum($("#mono_blok_a").val())) {  // Поле 'Моноблок A' должно быть числом
                    isValid = false;
                    if (!isNotShowAlerts) {
                        $("#mono_blok_a_error").show();
                        delayedErrorBorder("#mono_blok_a");
                        $("#mono_blok_a").focus();
                    }
                }
            } else {
                mono_have_ab = false;
            }

            // вторая пара размеров
            if (($("#mono_blok_a1").val() != "") || ($("#mono_blok_b1").val() != "")) {
                mono_have_a1b1 = true;
                if (!isNum($("#mono_blok_b1").val())) { // Поле 'Моноблок B1' должно быть числом
                    isValid = false;
                    if (!isNotShowAlerts) {
                        $("#mono_blok_b1_error").show();
                        delayedErrorBorder("#mono_blok_b1");
                        $("#mono_blok_b1").focus();
                    }
                }
                if (!isNum($("#mono_blok_a1").val())) { // Поле 'Моноблок A1' должно быть числом
                    isValid = false;
                    if (!isNotShowAlerts) {
                        $("#mono_blok_a1_error").show();
                        delayedErrorBorder("#mono_blok_a1");
                        $("#mono_blok_a1").focus();
                    }
                }
            } else {
                mono_have_a1b1 = false;
            }

            // Если обе не введены
            if ((!mono_have_ab) && (!mono_have_a1b1)) {
                isValid = false;
                if (!isNotShowAlerts) {
                    $("#mono_blok_a").focus();
                    $("#mono_blok_a_error, #mono_blok_b_error, #mono_blok_a1_error, #mono_blok_b1_error").show();
                    delayedErrorBorder("#mono_blok_a, #mono_blok_b, #mono_blok_a1, #mono_blok_b1");
                }
            }

        } else {
            if ($("input[name='is_mono_blok']:checked").val() == undefined) {
                isValid = false;
                if (!isNotShowAlerts) $("#is_mono_blok_error").show();
            }
        }
        return isValid;
    }

//=====================================================================================================================
// Лестница
    function validateStep3() {

        var isValid = validateStep2();
        $("#is_footway_error, #footway_error_length, #footway_error_width, #footway_h100_error, #footway_s100_error, " + 
          "#footway_position_error, #footway_a_error, #footway_b_error, #footway_h_error, #footway_s_error").hide();
        normalizeBorder("#footway_a, #footway_b, #footway_h, #footway_s");

        if ($("input[name='is_footway']:checked").val() == '1') {

            if (isValid && $("input[name='footway_position']:checked").val() == undefined) {    // Укажите расположение лестницы
                isValid = false;
                $("#footway_position_error").show();
            }

            var pos = $("input[name='footway_position']:checked").val();
            var good_ab = true;

            if (!isNum($("#footway_a").val())) {    // Поле 'Лестница A' должно быть числом
                good_ab = false;
                isValid = false;
                $("#footway_a_error").show();
                delayedErrorBorder("#footway_a");
                $("#footway_a").focus();
            }

            if (!isNum($("#footway_b").val())) {    // Поле 'Лестница B' должно быть числом
                good_ab = false;
                isValid = false;
                $("#footway_b_error").show();
                delayedErrorBorder("#footway_b");
                $("#footway_b").focus();
            }

            var __a = parseInt($("#footway_a").val());
            var __b = parseInt($("#footway_b").val());
            if ( good_ab && ((pos == "left") || (pos == "right")) ) {
                if (parseInt($("#width").val()) < __a + __b) {
                    isValid = false;
                    $("#footway_error_width").show();
                    $("#footway_error_length").hide();
                    delayedErrorBorder("#footway_a, #footway_b");
                    $("#footway_a").focus();
                }
            } else if ( good_ab && (pos == "bottom") ) {
                if (parseInt($("#length").val()) < __a + __b) {
                    isValid = false;
                    $("#footway_error_length").show();
                    $("#footway_error_width").hide();
                    delayedErrorBorder("#footway_a, #footway_b");
                    $("#footway_a").focus();
                }
            }

            if (!isNum($("#footway_h").val())) {    // Поле 'Лестница H' должно быть числом
                isValid = false;
                $("#footway_h_error").show();
                delayedErrorBorder("#footway_h");
                $("#footway_h").focus();
            } else if (parseInt($("#footway_h").val()) > 100) {
                isValid = false;
                $("#footway_h100_error").show();
                delayedErrorBorder("#footway_h");
                $("#footway_h").focus();
            }

            if (!isNum($("#footway_s").val())) {    // Поле 'Лестница S' должно быть числом
                isValid = false;
                $("#footway_s_error").show();
                delayedErrorBorder("#footway_s");
                $("#footway_s").focus();
            } else if (parseInt($("#footway_s").val()) > 100) {
                isValid = false;
                $("#footway_s100_error").show();
                delayedErrorBorder("#footway_s");
                $("#footway_s").focus();
            }

            $("#footway_a, #footway_b, #footway_h, #footway_s").unbind("change").change(function() {
                validateStep3();
            });

        } else {
            if (isValid && $("input[name='is_footway']:checked").val() == undefined) {  // Укажите наличие лестницы
                isValid = false;
                $("#is_footway_error").show();
            }
        }

        if (isValid) {
            writeSizes(calcSizes(), 2);
        }

        return isValid;
    }

//=====================================================================================================================
// валидация высоты
    function validateStep4() {
        var isValid = validateStep3();

        $("#pavilion_open_as_error, #pavilion_open_where_error, #pavilion_height_error, #pavilion_form_error, #pavilion_noheight_error").hide();

        if ( ($("input[name='is_bortik']:checked").val()  == '1') ||
             ($("input[name='is_footway']:checked").val() == '1') ) {

            if ($("input[name='pavilion_open_as']:checked").val() == undefined) {
                isValid = false;
                $("#pavilion_open_as_error").show();
            }

            if ($("input[name^='pavilion_open_where']:checked").length == 0) {
                isValid = false;
                $("#pavilion_open_where_error").show();
            }
        }
        
        var pavilion_form = $("input[name='pavilion_form']:checked").val();
        if (pavilion_form != undefined) {
            pavilion_form = parseInt(pavilion_form);
        }

        if ($("input[name='pavilion_height']:checked").val() == 'lowest') {
            if ( (pavilion_form == undefined) || !((pavilion_form == TYPE_CASABLANCA) || (pavilion_form == TYPE_KLASSIK) || (pavilion_form == TYPE_DALLAS)) ) {
                isValid = false;
                $("#pavilion_form_error").show();
            }

        } else if ($("input[name='pavilion_height']:checked").val() == 'highest') {
            if ( (pavilion_form == undefined) || !((pavilion_form == TYPE_CASABLANCA) || (pavilion_form == TYPE_MONAKO) || (pavilion_form == TYPE_MONAKOFUTURE)) ) {
                isValid = false;
                $("#pavilion_form_error").show();
            }

        } else {
            isValid = false;
            $("#pavilion_height_error").show();
        }

        var currentHeight, maxHeight, minHeight;
        currentHeight = parseInt( $.trim( $("#height").val() ) );
        maxHeight = $("#maxAvailableHeight").html();
        minHeight = $("#minAvailableHeight").html();
        if ( (currentHeight == "") || (currentHeight > maxHeight) || (currentHeight < minHeight)) {
            isValid = false;
            $("#pavilion_noheight_error").show();
        }
        
        return isValid;
    }

//=====================================================================================================================
// валидация цвета профиля
    function validateStep5() {
        var isValid = validateStep4();

        var profile_color = $("input[name='profile_color']:checked").val();
        if (profile_color != undefined) {
            profile_color = parseInt(profile_color);
        }

        $("#profile_color_type_error, #profile_color_error, #profile_type_error").hide();

        if ($("input[name='profile_color_type']:checked").val() == 'base') {

            if ( (profile_color == undefined) || (profile_color < 1) || (profile_color > 2) ) {
                isValid = false;
                $("#profile_color_error").show();
            }

        } else {
            if ($("input[name='profile_color_type']:checked").val() == 'color') {
                if ( (profile_color == undefined) || (profile_color < 3) ) {
                    isValid = false;
                    $("#profile_color_error").show();
                }

            } else {
                if ($("input[name='profile_color_type']:checked").val() == undefined) {
                    isValid = false;
                    $("#profile_color_type_error").show();
                }
            }
        }

        if ($("input[name='profile_type']:checked").val() == undefined) {
            isValid = false;
            $("#profile_type_error").show();
        }

        return isValid;
    }

//=====================================================================================================================
// валидация цвета поликарбоната
    function validateStep6() {
        var isValid = validateStep5();

        var polycarbonate_color = $("input[name='polycarbonate_color']:checked").val();

        if (polycarbonate_color != undefined) {
            polycarbonate_color = parseInt(polycarbonate_color);
        }

        $("#polycarbonate_color_type_error, #polycarbonate_color_error").hide();

        if ($("input[name='polycarbonate_color_type']:checked").val() == 'base') {

            if ((polycarbonate_color == undefined) || (polycarbonate_color != 1) ) {
                isValid = false;
                $("#polycarbonate_color_error").show();
            }

        } else {
            if ($("input[name='polycarbonate_color_type']:checked").val() == 'color') {

                if ( (polycarbonate_color == undefined) || (polycarbonate_color < 2) ) {
                    isValid = false;
                    $("#polycarbonate_color_error").show();
                }

            } else {
                if ($("input[name='polycarbonate_color_type']:checked").val() == undefined) {
                    isValid = false;
                    $("#polycarbonate_color_type_error").show();
                }
            }
        }

        return isValid;
    }

//=====================================================================================================================
// Удлиннение рельсов
    function validateStep7() {
        var isValid = validateStep6();

        $("#rails_type_error, #is_rails_prolong_error, #rails_prolong_length_error").hide();
        normalizeBorder("#rails_prolong_length");

        if ($("input[name='rails_type']:checked").val() == undefined) {
            isValid = false;
            $("#rails_type_error").show();
        }

        if ($("input[name='is_rails_prolong']:checked").val() == '1') {

            if (!isNum($("#rails_prolong_length").val())) {
                isValid = false;
                $("#rails_prolong_length_error").show();
                delayedErrorBorder("#rails_prolong_length");
                $("#rails_prolong_length").focus();
            }

        } else {
            if ($("input[name='is_rails_prolong']:checked").val() == undefined) {
                isValid = false;
                $("#is_rails_prolong_error").show();
            }
        }

        return isValid;
    }

//=====================================================================================================================
// Двери и замена на плексиглаз
    function validateStep8() {
        var isValid = validateStep7();

        $("#is_plexiglass_error, #door_position_error, #is_additional_error, #door_additional_error").hide();


        if ($("input[name='is_plexiglass']:checked").val() == undefined) {
            isValid = false;
            $("#is_plexiglass_error").show();
        }
        
        if ($("input[name='door_position']:checked").val() == undefined) {
            isValid = false;
            $("#door_position_error").show();
        }


        if ($("input[name='is_additional']:checked").val() == undefined) {
            isValid = false;
            $("#is_additional_error").show();

        } else {
            if ($("input[name='is_additional']:checked").val() == '1') {
                if ($("input[name^='door_additional']:checked").length == 0) {
                    isValid = false;
                    $("#door_additional_error").show();
                }
            }
        }

        return isValid;
    }




















// ===========================================================================
function dump(arr, level) {
    var dumped_text = "";
    if (!level) level = 0;

    var level_padding = "";
    for (var j=0;j<level+1;j++) level_padding += "    ";

    if (typeof(arr) == 'object') { //Array/Hashes/Objects
        for(var item in arr) {
            var value = arr[item];

            if(typeof(value) == 'object') { //If it is an array,
                dumped_text += level_padding + "'" + item + "' ...\n";
                dumped_text += dump(value,level+1);
            } else {
                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
            }
        }
    } else { //Stings/Chars/Numbers etc.
        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
    }
    return dumped_text;
}
