/**
 * @author Denis Barushev <barushev@gmail.com>
 * @since 03.11.2008
 */
/**
 * 1 Легковой автомобиль
 * 2 Автобус
 * 3 Грузовой автомобиль
 * 4 Мотоцикл или мотороллер
 * 5 Прицеп к легковому автомобилю
 * 6 Прицеп к грузовому автомобилю
 */
function changeVehicleType(value) {
    if (value == 'B') {
        $('tr.engine_volume').show();
    } else {
        $('tr.engine_volume').hide();
    }

    if (value == 'D') {
        $('tr.seating_capacity').show();
    } else {
        $('tr.seating_capacity').hide();
    }

    if (value == 'C') {
        $('tr.carrying_capacity').show();
    } else {
        $('tr.carrying_capacity').hide();
    }

    if (value == 'A') {
        $('tr.moto_engine_volume').show();
    } else {
        $('tr.moto_engine_volume').hide();
    }
}

function changeContractType(value) {

    $('#holder_2').removeClass('disabled');
    $('#holder_2 input').attr('disabled', '');

    $('tr.vehicle_type .comment').hide();
    $('tr.vehicle_type select').show();

    changeVehicleType($('tr.vehicle_type select').val());

    if (value == 3) {
        $('tr.persons').show();
    } else {
        $('tr.persons').hide();
    }
}

function clearErrors() {
    $('div.error_message').remove();
    $(':input').removeClass('error');
}

function addError( el, msg ) {
    el.addClass('error');

    
    if ( msg != undefined ) {
        var td = el.parents('td:first');
        if ( !$('div.error_message', td).length ) {
            $(td).append('<div class="error_message">' + msg + '</div>');
        }
    }
    
}

function checkForm(frm) {
    clearErrors();

    var hasErrors = false,
        error  = "";
    
    $(':input[name=email]', frm).each(function () {
        if (this.value.match(/[^\s]/) && !this.value.match(/^[a-z0-9_\-\.]+@([a-z0-9_\-]+\.)+[a-z]{2,5}$/i) ) {
            addError($(this), 'Недопустимый формат e-mail');
            error = 'Недопустимый формат e-mail';
            hasErrors = true;
        }
    });
    
    if ( $(':input[name=phone]', frm).val().match(/^\s*$/) || $(':input[name=phone]', frm).val() == 'Код и номер' ) {
        addError($(':input[name=phone]', frm), 'Это поле необходимо заполнить');
        error = 'Поле "Телефон" обязательно для заполнения';
        hasErrors = true;
    }
    
    if ( $(':input[name=fio]', frm).val().match(/^\s*$/) ) {
        addError($(':input[name=fio]', frm), 'Это поле необходимо заполнить');
        error = 'Поле "Ваше Ф.И.О." обязательно для заполнения';
        hasErrors = true;
    }

    if ( hasErrors ) {
        alert(error);
    }

    return !hasErrors;
}

function ajaxFinish() {
    document.body.style.cursor = 'default';
}

function ajaxStart() {
    document.body.style.cursor = 'wait';
}

function formChanged() {

    $.ajaxSetup(
        {
            dataType: 'json',
            error: ajaxFinish
        }
    );

    ajaxStart();

    $.post(
        '/partners/osago-calc.json',
        $('#calculator').serializeArray(),
        function (json) {
            ajaxFinish();
            $('#calculator_result').text(json.price);
        }
    );
}

function formStartState() {
    $('input:checked').click();
    $('select').change();
}

function checkSendTicket(frm) {

    clearErrors();

    var hasErrors = false;

    if ( !$(':input[name=email]', frm).val().match(/^[a-z0-9_\-\.]+@([a-z0-9_\-]+\.)+[a-z]{2,5}$/i) ) {
        addError($(':input[name=email]', frm), 'Недопустимый формат e-mail');
        hasErrors = true;
    }

    return !hasErrors;
}

function formSendTicketSubmit(frm) {
    if ( !checkSendTicket(frm) ) {
        return false;
    }

    ajaxStart();

    $.ajaxSetup(
        {
            dataType: 'json',
            error: function () {
                $('input[type=submit]').attr('disabled', '');
                ajaxFinish();
            }
        }
    );

    $('#send_to_email .done').html('Отправляется...').show();
    $('input[type=submit]').attr('disabled', 'disabled');

    $.post(
        '/ajax/send-receipt.json',
        {
            'email': $(':input[name=email]', frm).val()
        },
        function (json) {
            ajaxFinish();
            $('input[type=submit]').attr('disabled', '');
            $('#send_to_email .done').html('Квитанция успешно отправлена');
        }
    );

    return false;
}

$(
    function () {

        // Принудительно отправляем данные формы на сервер, чтобы показывать правильную цену в том случае, если браузер сохраняет предыдущие данные формы
        formChanged();
    
        $('input, select').attr('disabled', '');

        $('#calculator input[name=phone]').focus(
            function () {
                if (this.value == 'Код и номер') {
                    $(this).removeClass('empty').val('');
                }
            }
        ).blur(
            function () {
                if (this.value == '') {
                    $(this).addClass('empty').val('Код и номер');
                }
            }
        );

        $('.contract_type input').click(
            function () {
                changeContractType(this.value);
            }
        );

        $('.vehicle_type select').change(
            function () {
                changeVehicleType(this.value);
            }
        );

        // Восстанавливаем состояние формы
        formStartState();


        $('#calculator input[type=text], #calculator textarea, #calculator select').change(formChanged);
        $('#calculator input[type=radio], #calculator input[type=checkbox').click(formChanged);

        $('#calculator').submit(
            function () {
                return checkForm(this);
            }
        );

        $('#receipt-link').click(
            function () {
                $.jqURL.loc(this.href, {w: 700, h: 700, wintype: '_blank'})
                return false;
            }
        );

        $('#send_to_email').submit(
            function () {
                formSendTicketSubmit(this);
                return false;
            }
        );

        //$('tr.contract_type input:first').click();
        //$('tr.city select').change();
        //$('tr.vehicle_type select').change();
    }
);
