EStore.OrderForm = function() {

    var BASKET_BLOCK_SLIDE_DURATION = 300;
    var CONTENT_SLIDE_DURATION = 150;

    var $wrap = $(), $basketWrap = $(), $cbBtn = $(), $fWrap = $(), $nc = $(), $loaderLogo = $(), $nextBtn = $(), $prevBtn = $(), $verifyBtn = $();

    var _loading = false;

    var basketBlockVisible = true;

    var eStoreForm;

    var c = {};

    var steps = [];

    function hideBasket(fast) {
        $basketWrap.slideUp(fast ? 0 : BASKET_BLOCK_SLIDE_DURATION);
        basketBlockVisible = false;
        $cbBtn = $(document.createElement('span'))
            .addClass('z-btn')
            .html('Показать товары')
            .click(toggleBasketBlock)
            .appendTo(
                $(document.createElement('div'))
                    .addClass('b-center')
                    .insertAfter($basketWrap)
            );
        $wrap.find('.start-btn').remove();
    }

    function toggleBasketBlock() {
        if (basketBlockVisible) {
            basketBlockVisible = false;
            $basketWrap.stop().slideUp(BASKET_BLOCK_SLIDE_DURATION);
            $cbBtn.html('Показать товары');
        } else {
            basketBlockVisible = true;
            $basketWrap.stop().slideDown(BASKET_BLOCK_SLIDE_DURATION);
            $cbBtn.html('Скрыть товары')
        }
    }


    function startOrder() {
        Umnitsa.getJSON({
            '_do' : 'start_order'
        }, constructOrderForm);
    }

    function constructOrderForm(data) {
        if (basketBlockVisible)
            hideBasket();
        if (data.steps) {
            for (var i = 0; i < data.steps.length; i++)
                steps.push(data.steps[i].mark);

            drawSteps(data.steps)
            if (!data.step)
                data.step = steps[0];

            loadStep(data.step);
        }
    }

    function drawSteps(stepsData) {
        $fWrap = $(document.createElement('div'))
            .addClass('n-fplace')
            .html('<h1>Оформление заказа</h1>')
            .appendTo($wrap);

        var $tabs = $(document.createElement('div'))
            .addClass('tabs')
            .appendTo($fWrap);
        $nc = $(document.createElement('div'))
            .addClass('nc')
            .html('<ins class="lt"></ins><ins class="rt"></ins><ins class="lb"></ins><ins class="rb"></ins><div class="cnt"><div>')
            .appendTo($fWrap);
        $loaderLogo = $(document.createElement('div'))
            .addClass('loader-logo')
            .hide()
            .appendTo($nc);
        var $btnArea = $(document.createElement('div')).addClass('ov').addClass('b-area').appendTo($nc);
        $prevBtn = $(document.createElement('span'))
            .addClass('n-btn fl')
            .hide()
            .html('Назад<ins></ins>')
            .click(goBack)
            .appendTo($btnArea);
        $nextBtn = $(document.createElement('span'))
            .addClass('n-btn fr')
            .hide()
            .html('Далее<ins></ins>')
            .click(nextStep)
            .appendTo($btnArea);
        $verifyBtn = $(document.createElement('span'))
            .addClass('n-btn fr')
            .hide()
            .html('Подтвердить заказ<ins></ins>')
            .click(submitOrder)
            .appendTo($btnArea);
        for (var i = 0; i < stepsData.length; i++) {
            $(document.createElement('div'))
                .addClass(stepsData[i].mark)
                .html('<span>' + (i+1).toString() + ' ШАГ</span> ' + stepsData[i].name + '<ins class="lt" /><ins class="rt" />')
                .appendTo($tabs);
        }

    }

    function loadStep(mark) {
        Umnitsa.getJSON({
            '_do' : 'get_order_step',
            'mark' : mark
        }, drawStep);
    }

    function goBack() {
        var idx = steps.indexOf(c.currentStep);
        if (idx > 0)
            loadStep(steps[idx-1]);
    }
    function nextStep() {
        if ($nextBtn.hasClass('disabled')) {
            return;
        }
        var idx = steps.indexOf(c.currentStep);
        if (idx < steps.length) {
            if (c.currentStep == 'payment') {
                Umnitsa.getJSON({
                    '_do' : 'commit_payment_type',
                    'payment_type' : c.currentPaymentType,
                    'mark' : steps[idx+1]
                }, drawStep);
            } else if (c.currentStep == 'personal') {
                c.$fields.find('.field').removeClass('error');
                var data = c.$fields.serializeHash();
                data['_do'] = 'commit_personal';
                data['mark'] = steps[idx+1];
                Umnitsa.getJSON(data, personalDataResponse);
            } else {
                loadStep(steps[idx+1]);
            }
        }
    }

    function personalDataResponse(data) {
        if (data.errors) {
            for (var i = 0; i < data.errors.length; i++) {
                c.$fields.find('.' + data.errors[i]).addClass('error');
            }
            if (data.errort) {
                 window.__page.showPopupMessage(data.errort + '<br><a href="#" onclick="closePopup(); return false">Закрыть</a>');
            }
        } else {
            drawStep(data);
        }
    }

    function drawStep(data) {
        c = {};
        c.currentStep = data.mark;
        var idx = steps.indexOf(c.currentStep);
        $fWrap.find('.tabs div').removeClass('active').eq(idx).addClass('active');
        if (idx == 0) {
            $nc.find('ins.lt').hide();
            $prevBtn.hide();
        } else {
            $nc.find('ins.lt').show();
            $prevBtn.show();
        }
        $nextBtn.hide();
        $verifyBtn.hide();
        c.$cnt = $fWrap.find('.cnt').empty();
        if (data.content) {
            c.$cnt.html('<div class="text">' + data.content + '</div>');
        }
        if ((data.mark) && (data.data)) {
            if (data.data.fields) {
                drawFields(data.data.fields);
            }
            switch (data.mark) {
                case 'shipment' :
                    shipmentExtra();
                    break;
                case 'payment' :
                    paymentVariants(data.data.variants);
                    break;
                case 'personal' :
                    personalPage(data.data);
                    break;
                case 'verify' :
                    verifyData(data.data);
                    $verifyBtn.show();
                    break;
            }
        }
    }

    function drawFields(fields) {
        c.$fields = $(document.createElement('form'))
            .addClass('ov')
            .submit(function() { return false; })
            .appendTo(c.$cnt);
        for (var i = 0; i < fields.length; i++) {

            var $field = $(document.createElement('div'))
                .addClass('field')
                .addClass(fields[i].name)
                .appendTo(c.$fields);

            var label = fields[i].label;
            if (fields[i].required)
                label += ' *';

            $(document.createElement('label'))
                .html(label)
                .appendTo($field);
            var $i = $();
            switch (fields[i].type) {
                case 'text' :
                    $i = $(document.createElement('input'))
                        .attr({
                            type : 'text'
                        });
                    break;

                case 'select' :
                    $i = $(document.createElement('select'));
                    for (var j = 0; j < fields[i].options.length; j++) {
                        $(document.createElement('option'))
                            .attr({
                                value : fields[i].options[j].value
                            })
                            .html(fields[i].options[j].text)
                            .appendTo($i);
                    }
                    break;
                case 'textarea' :
                    $i = $(document.createElement('textarea'));
                    break;

                case 'password' :
                    $i = $(document.createElement('input'))
                        .attr({
                            type : 'password',
                            autocomplete : 'off'
                        });
            }
            if (fields[i].readonly)
                $i.attr('readonly', 'readonly');
            $i.get(0).name = fields[i].name;
            if (fields[i].value)
                $i.val(fields[i].value);
            $i.appendTo($field);
            if (fields[i].hint) {
                $(document.createElement('em'))
                    .html(fields[i].hint)
                    .appendTo($field);
            }
        }
        if (eStoreForm)
            delete eStoreForm;
        eStoreForm = new EStore.Fields(c.$fields.get(0));
    }

    function shipmentExtra() {
        if (!getShipmentTypes()) {
            drawShipmentTypesButton();
        }
        c.$fields.find('select').change(function() {
            drawShipmentTypesButton();
        });
        var $inputs = c.$fields.find('.region input, .city input');
        function changeHandler() {
            this.result(function() {
                drawShipmentTypesButton();
            });
        }
        changeHandler.apply($inputs.eq(0));
    }

    function getShipmentTypes() {
        var data = c.$fields.serializeHash();
        if ((data.country) && ((data.region) || (data.country != 'Россия')) && (data.city)) {
            Umnitsa.getJSON({
                '_do' : 'get_shipment_types',
                'country' : data.country,
                'region' : data.region,
                'city' : data.city
            }, drawShipmentTypesTable)
            return true;
        }
        return false;
    }

    function drawShipmentTypesTable(data) {
        if (c.shipmentTypesButton) {
            c.shipmentTypesButton.remove();
            c.shipmentTypesButton = null;
        }
        var $sWrap = $(document.createElement('div'))
            .addClass('shipment-table')
            .html('<table><tbody><tr><th>Способ доставки</th><th class="b">Срок</th><th>Стоимость</th></tr></tbody></table>')
            .appendTo(c.$cnt)
        var $body = $sWrap.find('tbody');

        c.shipmentRows = {};
        var curType = 0;
        for (var i = 0; i < data.length; i++) {
            var $row = $(document.createElement('tr'))
                .html(
                    '<td class="type"><label><input type="radio" name="shipment_type" value="' + data[i].id + '">' +
                    data[i].name + '</label>' +
                    '<div class="annotation text">' + data[i].annotation + '</div>' +
                    '<div class="content text">' + data[i].content + '</div></td>' +
                    '<td class="period">' + data[i].period + '</td>' +
                    '<td class="price">' + parseInt(data[i].price).toPrice() + '</td>'
                )
                .appendTo($body);
            c.shipmentRows[data[i].id] = $row;
            if (data[i].selected)
                curType = i;
        }
        var $inputs = $body.find('input').click(function() {
            commitShipmentType(this);
        });
        var fInput = $inputs.get(curType);
        fInput.checked = true;
        commitShipmentType(fInput);
    }

    function drawShipmentTypesButton() {
        $nextBtn.hide();
        c.currentShipmentType = null;
        if (!c.shipmentTypesButton) {
            c.$cnt.find('.shipment-table').remove();

            c.shipmentTypesButton = $(document.createElement('span'))
                .addClass('n-btn')
                .html('Выбрать способ доставки<ins></ins>')
                .appendTo(c.$cnt)
                .click(function() {
                    getShipmentTypes();
                });
        }
    }

    function commitShipmentType(input) {
        if (c.currentShipmentType != input.value) {
            var $row = c.shipmentRows[input.value];
            if ($row) {
                if (c.currentShipmentType) {
                    var $cRow = c.shipmentRows[c.currentShipmentType];
                    $cRow.find('.content').slideUp(CONTENT_SLIDE_DURATION);
                }
                $row.find('.content').slideDown(CONTENT_SLIDE_DURATION);
            }
            c.currentShipmentType = input.value;
            Umnitsa.getJSON({
                '_do' : 'commit_shipment_type',
                'shipment_type' : c.currentShipmentType
            }, function(data) {
                $('#eStore-basket-full-summ').html(parseInt(data.full).toPrice()).parent().show();
                $('#eStore-basket-shipment-cost').html(parseInt(data.cost).toPrice()).parent().show();
                $nextBtn.show();
            });
        }
    }

    function paymentVariants(data) {
        c.paymentTypes = {};
        c.bankCardAction = false;
        var curType = -1, bankCardAction = false;
        for (var i = 0; i < data.length; i++) {
            var $d = $(document.createElement('div'))
                .addClass('payment-type')
                .html(
                    '<label><input type="radio" name="payment_type" value="' + data[i].id + '">' +
                    data[i].name + '</label>' +
                    '<div class="annotation text">' + data[i].annotation + '</div>' +
                    '<div class="content text">' + data[i].content + '</div></td>'
                )
                .appendTo(c.$cnt);
            c.paymentTypes[data[i].id] = $d;
            if (data[i].special === 'bank_card_action') {
                var bin = data[i].bin || '';
                if (bin) {
                    curType = i;
                    bankCardAction = true;
                }
                $(document.createElement('form'))
                    .html('<label for="basket-bin-input">Первые 6 цифр карты: </label><input id="basket-bin-input" type="text" maxlength="6" name="bin" value="' + bin + '"> <span>Получить скидку<ins></ins></span>')
                    .appendTo($d.find('.content'))
                    .submit(submitBankCardForm)
                    .find('span')
                        .click(function() { submitBankCardForm.call(this.parentNode); });
            }
            if ((data[i].selected) && (curType == -1))
                curType = i;
        }
        var $inputs = c.$cnt.find('input:radio').click(function() {
            setPaymentType(this);
        });
        if (curType > -1) {
            var fInput = $inputs.get(curType);
            fInput.checked = true;
            setPaymentType(fInput);
            c.bankCardAction = bankCardAction;
        }
    }

    function setPaymentType(input) {
        if (c.currentPaymentType != input.value) {
            if (c.bankCardAction) {
                $('#basket-bin-input').val('');
                Umnitsa.getJSON({
                    '_do' : 'submit_bank_card_bin',
                    'reset' : 1
                }, bankCardResponseHandler);
            }

            $nextBtn.show();
            var $d = c.paymentTypes[input.value];
            if ($d) {
                if (c.currentPaymentType) {
                    var $cd = c.paymentTypes[c.currentPaymentType];
                    $cd.find('.content').slideUp(CONTENT_SLIDE_DURATION);
                }
                $d.find('.content').slideDown(CONTENT_SLIDE_DURATION);
            }
            c.currentPaymentType = input.value;
        }
    }

    function personalPage(data) {
        var $oft = c.$cnt;
        if (data.auth) {
            $nextBtn.show();
        } else {
            var $inner = c.$cnt.children('.text, form');
            $inner.find('h2').eq(0).appendTo(c.$cnt);
            var $rCont = $(document.createElement('div'))
                .addClass('personal-r')
                .html(
                    '<label><input type="radio" value="auth" name="pers-type"> Я — зарегистрированный пользователь</label>' +
                    '<label><input type="radio" value="fields" name="pers-type"> Я — незарегистрированный пользователь</label>'
                )
                .appendTo(c.$cnt);
            var $fields = $(document.createElement('div'))
                .appendTo(c.$cnt)
                .hide()
                .append($inner);
            $oft = $fields;
            c.$authForm = $(document.createElement('form'))
                .addClass('auth')
                .html(
                    '<div class="field e_mail"><label>E-mail</label><input type="text" name="e_mail" /></div>' +
                    '<div class="field password"><label>Пароль</label><input type="password" name="password" /></div>' +
                    '<div class="field f-check"><label><input type="checkbox" name="save" value="1" checked="checked"> Запомнить меня на umnitsa.ru</label></div>'
                )
                .hide()
                .submit(submitAuthForm)
                .appendTo(c.$cnt);
            $(document.createElement('span'))
                .addClass('n-btn')
                .html('Авторизация<ins></ins>')
                .appendTo(c.$authForm)
                .click(submitAuthForm);
            var $radios = $rCont.find('input')
                .click(function() {
                    if (this.value == 'auth') {
                        $fields.hide();
                        c.$authForm.show();
                        $nextBtn.hide();
                    } else {
                        $fields.show();
                        c.$authForm.hide();
                        $nextBtn.show();
                    }
                })
                .eq(0).trigger('click');
        }
        if (data.offer) {
            var $l = $(document.createElement('label'))
                .html('<input type="checkbox"> ' + data.offer.caption + data.offer.descr)
                .appendTo($oft);
            $l.find('a').eq(0).click(function() {
                Umnitsa.Popup.showHTML(data.offer.content);
                return false;
            });
            $l.find('input').change(function() {
                if (this.checked) {
                    $nextBtn.css({ opacity : 1 }).removeClass('disabled');
                } else {
                    $nextBtn.css({ opacity : .25 }).addClass('disabled');
                }
            }).trigger('change');
        }
    }

    function submitAuthForm() {
        var data = c.$authForm.serializeHash();
        data['_do'] = 'auth';
        Umnitsa.getJSON(data, authResponseHandler);
        return false;
    }

    function authResponseHandler(data) {
        if (data.ok) {
            window.location.reload();
        } else {
            Umnitsa.Popup.showHTML('E-mail или пароль указаны неверно');
        }
    }

    function verifyData(data) {
        c.$verifyForm = $(document.createElement('form'))
            .appendTo(c.$cnt);

        var $cNom = $('#eStore-basket-gift-card-nominal');
        var pcDisplay = $cNom.parent(':visible').length ? 'block' : 'none';
        var $f = $(document.createElement('div'))
            .addClass('fl-bl')
            .html(
                '<p style="display: ' + pcDisplay + '">Оплата по подарочной карте: <span class="price" id="eStore-basket-verify-gift-card-nominal">' + $cNom.html() + '</span></p>' +
                '<p>Стоимость доставки: <span class="price" id="eStore-basket-verify-shipment-cost">' + $('#eStore-basket-shipment-cost').html() + '</span></p>' +
                '<p>Итоговая стоимость: <span class="price" id="eStore-basket-verify-full-summ">' + $('#eStore-basket-full-summ').html() + '</span></p>'
            )
            .appendTo(c.$verifyForm);

        var $dl = $(document.createElement('dl'))
            .addClass('summ-i')
            .appendTo(c.$verifyForm);
        for (var i = 0; i < data.attrs.length; i++) {
            $dl.append(
                $(document.createElement('dt')).html(data.attrs[i].name + ':')
            ).append(
                $(document.createElement('dd')).html(data.attrs[i].value)
            );
        }
        for (var i = 0; i < data.blocks.length; i++) {
            c.$verifyForm.append(
                $(document.createElement('h3')).html(data.blocks[i].name)
            ).append(
                $(document.createElement('div')).addClass('text').html(data.blocks[i].content)
            );
        }


        for (var i = 0; i < data.actions.length; i++) {
            var $d = $(document.createElement('div'))
                .html(
                    '<label><input type="checkbox" checked="checked" name="_action_part" value="' + data.actions[i].id + '">' +
                    data.actions[i].name + '</label>' +
                    '<div class="text">' + data.actions[i].content + '</div></td>'
                )
                .addClass('action-c')
                .appendTo(c.$verifyForm);
        }

        var $qBlock = $(document.createElement('div'))
            .addClass('question-block')
            .appendTo(c.$verifyForm);
        c.questions = new EStore.Questions($qBlock.get(0));
    }

    function submitOrder() {
        var data = c.$verifyForm.serializeHash();
        data['_do'] = 'submit_order';
        Umnitsa.getJSON(data, submitResponseHandler);
    }

    function submitResponseHandler(data) {
        if (data.redirect) {
            window.location.reload(true);
        }
    }

    /** Бонусы **/
    function initBonusBlock() {
        var $wrap = $('#eStore-basket-bonus-block');
        var $first = $wrap.find('.first');
        var $rules = $wrap.find('.rules')
            .remove()
            .show()
            .append($(document.createElement('div')).html('<a href="#" onclick="closePopup(); return false">Закрыть</a>'));
        var linkP = '[&minus;]';
        var $btn = $wrap.find('.bonus-btn span').click(function() {
            this.innerHTML = this.innerHTML.substr(0, this.innerHTML.length -3) + linkP;
            if (linkP === '[&minus;]') {
                linkP = '[+]';
            } else {
                linkP = '[&minus;]';
            }
            $first.slideToggle();
        });
        $first.find('a').click(function() {
            Umnitsa.Popup.showHTML($rules.html());
            return false;
        });
        var $form = $first.find('form').submit(_submitForm);
        $form.find('span').click(_submitForm);

        function _submitForm() {
            var data = {
                    '_do' : 'use_bonus',
                    'c' : $form.find('input[name="c"]:checked').val(),
                    'cc' : $form.find('input[name="cc"]').val()
                };
                Umnitsa.getJSON(data, _responseHandler);
            return false;
        }
        function _responseHandler(data) {
            if (data.cnt) {
                Umnitsa.Popup.showHTML(data.cnt + '<div><a href="#" onclick="closePopup(); return false">Закрыть</a></div>');
            }
            if (data.ok) {
                $('#eStore-basket-full-summ').html(parseInt(data.full).toPrice()).parent().show();
                $('#eStore-basket-verify-full-summ').html(parseInt(data.full).toPrice()).parent().show();
                $('#eStore-basket-use-bonus').html(parseInt(data['use_bonus']).toPrice());
                var shipmentCost = parseInt(data['shipment_cost']);
                if (shipmentCost !== NaN) {
                    $('#eStore-basket-shipment-cost').html(shipmentCost.toPrice());
                    $('#eStore-basket-verify-shipment-cost').html(shipmentCost.toPrice());
                    EStore.OrderForm.reloadShipmentTypes();
                }
                if (data['use_bonus'] > 0) {
                    $('#eStore-bonus-row').show();
                } else {
                    $('#eStore-bonus-row').hide();
                }
                $('#eStore-basket-bonus-add').html(parseInt(data['bonus_add'] || 0).toPrice());
            }
            $btn.trigger('click');
        }
    }


    /** Подарочные сертификаты **/

    /**
     * Настроить блок с сертификатами
     */
    function initGiftBlock() {
        var $giftWrap = $wrap.find('.b-gift');
        var $first = $giftWrap.find('.first');
        var $rules = $giftWrap.find('.rules')
            .remove()
            .show()
            .append($(document.createElement('div')).html('<a href="#" onclick="closePopup(); return false">Закрыть</a>'));
        var linkP = '[&minus;]';
        $giftWrap.find('.gift-btn span').click(function() {
            this.innerHTML = this.innerHTML.substr(0, this.innerHTML.length -3) + linkP;
            if (linkP === '[&minus;]') {
                linkP = '[+]';
            } else {
                linkP = '[&minus;]';
            }
            $first.slideToggle();
        });
        $first.find('a').click(function() {
            Umnitsa.Popup.showHTML($rules.html());
            return false;
        });

        var $form = $first.find('form').submit(submitGiftCodeHandler);
        $form.find('span').click(submitGiftCodeHandler);
        var $i = $form.find('input[name="code"]');

        function submitGiftCodeHandler() {
            var data = {
                '_do' : 'submit_gift_code',
                'code' : $i.val()
            };
            Umnitsa.getJSON(data, giftCodeResponseHandler);
            return false;
        }

        function giftCodeResponseHandler(data) {
            if (data.cnt) {
                Umnitsa.Popup.showHTML(data.cnt + '<div><a href="#" onclick="closePopup(); return false">Закрыть</a></div>');
            }
            if (data.ok) {
                var discountC = parseFloat(data['discount_c']) * 100;
                $('#eStore-basket-full-summ').html(parseInt(data.full).toPrice()).parent().show();
                $('#eStore-basket-verify-full-summ').html(parseInt(data.full).toPrice()).parent().show();
                $('#eStore-basket-discount').html(parseInt(data.discount).toPrice() + ' (' + discountC + '%)').parent();
                $('#eStore-basket-gift-card-nominal').html(parseInt(data.gift).toPrice()).parent().show();
                $('#eStore-basket-verify-gift-card-nominal').html(parseInt(data.gift).toPrice()).parent().show();
                $('#eStore-basket-bonus-add').html(parseInt(data['bonus_add'] || 0).toPrice());
                $('#eStore-basket-avail-bonuses').html(parseInt(data['avail_bonus'] || 0).toPrice());
                var shipmentCost = parseInt(data['shipment_cost']);
                if (shipmentCost !== NaN) {
                    $('#eStore-basket-shipment-cost').html(shipmentCost.toPrice());
                    $('#eStore-basket-verify-shipment-cost').html(shipmentCost.toPrice());
                    EStore.OrderForm.reloadShipmentTypes();
                }
            }
        }
    }


    /**
     * Форма скидки по банковской карте
     */
    function submitBankCardForm() {
        var $form = $(this);
        var input = $form.find('input').get(0);
        if (input.value.length > 0) {
            Umnitsa.getJSON({
                '_do' : 'submit_bank_card_bin',
                'bin' : input.value
            }, bankCardResponseHandler);
        } else {
            input.focus();
        }
        return false;
    }
    function bankCardResponseHandler(data) {
        if (data.cnt) {
            Umnitsa.Popup.showHTML(data.cnt + '<div><a href="#" onclick="closePopup(); return false">Закрыть</a></div>');
        }
        c.bankCardAction = (data.ok == 1);
        $('#eStore-basket-full-summ').html(parseInt(data.full).toPrice()).parent().show();
        var discountC = parseFloat(data['discount_c']);
        var $dRow = $('#eStore-basket-discount').html(parseInt(data.discount).toPrice() + ' (' + discountC + '%)').parent();
        if (discountC > 0) {
            $dRow.show();
        } else {
            $dRow.hide();
        }
    }


    return {
        init : function(wrap) {
            $wrap = $(wrap);
            $basketWrap = $(document.getElementById('eStore-basket'));
            if (EStore.OrderForm.GO) {
                hideBasket(true);
                startOrder();
            }
            initBonusBlock();
            initGiftBlock();
        },

        startOrder : function() {
            startOrder();
        },

        currentStep : function() {
            return c.currentStep;
        },

        reloadShipmentTypes : function() {
            if ((c.currentStep == 'shipment') && (!c.shipmentTypesButton)) {
                drawShipmentTypesButton();
                getShipmentTypes();
            }
        }
    }
}();

