/**
 * @author Denis Barushev <barushev@gmail.com>
 * @since 29.07.2008
 */
function changeContractType(value) {

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

    $('li.vehicle_type .comment').hide();
    $('li.vehicle_type select').show();
    changeVehicleType($('li.vehicle_type select').val());


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

function changeCity(value) {
    if (value == 0) {
        //$('li.other_city').show();
    } else {
        $('li.other_city').hide();
    }
}


/**
 * 1 Легковой автомобиль
 * 2 Автобус
 * 3 Грузовой автомобиль
 * 4 Мотоцикл или мотороллер
 * 5 Прицеп к легковому автомобилю
 * 6 Прицеп к грузовому автомобилю
 */
function changeVehicleType(value) {
    if (value == 'B') {
        $('li.engine_volume').show();
    } else {
        $('li.engine_volume').hide();
    }

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

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

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


/**
 *
 */
function toggleDetails() {
    if ($('#toggle_details').text() == "Подробности") {
        $('#toggle_details').html("&larr; Назад");
        // Log to Google Analytics
        pageTracker._trackPageview('/details');
    } else {
        $('#toggle_details').html("Подробности");
    }

    if ($('#sidebar_details').css('display') == 'none') {
        // Show details
        $('#sidebar_primary').hide();
        $('#content_primary').hide();
        $('#sidebar_message').hide();
        $('#content_message').hide();

        $('#sidebar_details').show();
        $('#content_details').show();
    } else {
        $('#sidebar_details').hide();
        $('#content_details').hide();

        $('#sidebar_primary').show();
        $('#content_primary').show();
    }
}

function toggleMessage() {
    if ($('#sidebar_message').css('display') == 'none') {
        // Log to Google Analytics
        pageTracker._trackPageview('/contacts');

        // Show details
        $('#sidebar_primary').hide();
        $('#content_primary').hide();
        $('#sidebar_details').hide();
        $('#content_details').hide();

        $('#sidebar_message').show();
        $('#content_message').show();

        $('#content_message div.text:first').hide();

        $('#content_message form').show();
        $('#content_message form :input').attr('disabled', '');
        $('#content_message form :input').each(function()
            {
                if ( this.type != 'submit' ) {
                    this.value = '';
                }
            }
        );

    } else {
        $('#sidebar_message').hide();
        $('#content_message').hide();

        $('#sidebar_primary').show();
        $('#content_primary').show();
    }
}

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

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

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

function sendMessageError() {
    ajaxFinish();
    $('#content_message form :input').attr('disabled', '');
}

function checkMessage(frm) {

    clearErrors();
    var hasErrors = false;

    if ( $(':input[name=body]', frm).val().match(/^\s*$/) ) {
        addError($(':input[name=body]', frm), 'Это поле необходимо заполнить');
        hasErrors = true;
    }

    if ( $(':input[name=fio]', frm).val().match(/^\s*$/) ) {
        addError($(':input[name=fio]', frm), 'Это поле необходимо заполнить');
        hasErrors = true;
    }

    if ( $(':input[name=phone]', frm).val().match(/^\s*$/) ) {
        addError($(':input[name=phone]', frm), 'Это поле необходимо заполнить');
        hasErrors = true;
    }

    $(':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');
            hasErrors = true;
        }
    });

    if ( !hasErrors ) {
        $.ajaxSetup(
            {
                dataType: 'json',
                error: sendMessageError
            }
        );

        var frm_data = $(frm).formSerialize();

        ajaxStart();
        $('#content_message form :input').attr('disabled', 'disabled');

        $.post(
            '/ajax/send-message.json',
            frm_data,
            function (json) {
                ajaxFinish();

                $('#content_message h1').html(json['title']);

                $('#content_message div.text:first').html(json['message']);
                $('#content_message div.text:first').show();

                $('#content_message form').hide();
                $('#content_message form :input').attr('disabled', '');

            }
        );
    }

    return false;
}

function checkStep1(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 checkStep2(frm) {

    clearErrors();

    var hasErrors = false;
    if ( undefined !== $(':input[name=fio]', frm).attr('name') ) {
        // Есть блок личной информации
        if ( $(':input[name=fio]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=fio]', frm), 'Это поле необходимо заполнить');
            hasErrors = true;
        }

        var comboError = false;
        if ( $(':input[name=license_serial]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=license_serial]', frm), 'Это поле необходимо заполнить');
            hasErrors  = true;
            comboError = true;
        }

        if ( $(':input[name=license_number]', frm).val().match(/^\s*$/) ) {
            if ( comboError ) {
                addError($(':input[name=license_number]', frm));
            }
            else {
                addError($(':input[name=license_number]', frm), 'Это поле необходимо заполнить');
            }
            hasErrors  = true;
        }

        if ( $(':input[name=license_issued]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=license_issued]', frm), 'Это поле необходимо заполнить');
            hasErrors = true;
        }

        if ( $(':input[name=addr]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=addr]', frm), 'Это поле необходимо заполнить');
            hasErrors = true;
        }

        if ( $(':input[name=phone]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=phone]', frm), 'Это поле необходимо заполнить');
            hasErrors = true;
        }
    }


    if ( undefined !== $(':input[name=company]', frm).attr('name') ) {
        // Есть блок юр лица
        if ( $(':input[name=company]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=company]', frm), 'Это поле необходимо заполнить');
            hasErrors = true;
        }

        if ( $(':input[name=addr]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=addr]', frm), 'Это поле необходимо заполнить');
            hasErrors = true;
        }

        if ( $(':input[name=phone]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=phone]', frm), 'Это поле необходимо заполнить');
            hasErrors = true;
        }
    }


    if ( undefined !== $(':input[name=vehicle_brand]', frm).attr('name') ) {
        // Есть блок о транспортном средстве

        var comboError = false;
        if ( $(':input[name=vehicle_brand]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=vehicle_brand]', frm), 'Это поле необходимо заполнить');
            hasErrors = true;
            comboError = true;
        }

        if ( $(':input[name=vehicle_body]', frm).val().match(/^\s*$/) ) {
            if ( comboError ) {
                addError($(':input[name=vehicle_body]', frm));
            }
            else {
                addError($(':input[name=vehicle_body]', frm), 'Это поле необходимо заполнить');
            }
            hasErrors = true;
            comboError = true;
        }

        if ( $(':input[name=vehicle_year]', frm).val().match(/^\s*$/) ) {
            if ( comboError ) {
                addError($(':input[name=vehicle_year]', frm));
            }
            else {
                addError($(':input[name=vehicle_year]', frm), 'Это поле необходимо заполнить');
            }
            hasErrors = true;
            comboError = true;
        }

        if ( $(':input[name=vehicle_city]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=vehicle_city]', frm), 'Это поле необходимо заполнить');
            hasErrors = true;
        }

        if ( $(':input[name=vehicle_number]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=vehicle_number]', frm), 'Это поле необходимо заполнить');
            hasErrors = true;
        }
    }


    // Адрес доставки сообщения
    if ( !$(':input[name=use_prev_addr]', frm).attr('checked') ) {
        if ( $(':input[name=shipping_addr]', frm).val().match(/^\s*$/) ) {
            addError($(':input[name=shipping_addr]', frm), 'Это поле необходимо заполнить');
            hasErrors = true;
        }
    }


    if ( $(':input[name="driver_fio[]"]', frm).length ) {
        // Есть дополнительный блок с водителями
        $(':input[name="driver_fio[]"]', frm).each(
            function (i) {
                if ( this.value.match(/^\s*$/) ) {
                    addError($(this), 'Это поле необходимо заполнить');
                    hasErrors = true;
                }
            }
        );

        $(':input[name="driver_license_serial[]"]', frm).each(
            function (i) {
                if ( this.value.match(/^\s*$/) ) {
                    addError($(this), 'Это поле необходимо заполнить');
                    hasErrors = true;
                }
            }
        );

        $(':input[name="driver_license_number[]"]', frm).each(
            function (i) {
                if ( this.value.match(/^\s*$/) ) {
                    addError($(this), 'Это поле необходимо заполнить');
                    hasErrors = true;
                }
            }
        );

        $(':input[name="driver_license_issued[]"]', frm).each(
            function (i) {
                if ( this.value.match(/^\s*$/) ) {
                    addError($(this), 'Это поле необходимо заполнить');
                    hasErrors = true;
                }
            }
        );

        $(':input[name="driver_addr[]"]', frm).each(
            function (i) {
                if ( this.value.match(/^\s*$/) ) {
                    addError($(this), 'Это поле необходимо заполнить');
                    hasErrors = true;
                }
            }
        );

    }

    return !hasErrors;

}

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 step1Handlers() {
    $('input[name=contract_type]').click(
        function () {
            changeContractType(this.value);
        }
    );

    $('li.city select').change(
        function () {
            changeCity(this.value);
        }
    );

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

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

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

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

function formChanged() {

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

    ajaxStart();
    
    $.post(
        '/ajax/osago-calc.json',
        $('form[name=calculator]').formSerialize(),
        function (json) {
            ajaxFinish();
            $('#calculator_result').text(json.price);
        }
    );
}

function initHandlers() {

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

    $('input, select').attr('disabled', '');

    step1Handlers();
    step1StartState();

    $('#toggle_details').click(
        function () {
            toggleDetails();
        }
    );

    $('span.toggle_details').click(
        function () {
            toggleDetails();
        }
    );

    $('span.toggle_message').click(
        function () {
            toggleMessage();
        }
    );

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

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

    $('form[name=calculator]').submit(
        function () {
            return checkStep1(this);
        }
    );

    $('form.step2 textarea[name=addr]').keyup(
        function () {
            if ( this.form['use_prev_addr'].checked ) {
                $('form.step2 textarea[name=shipping_addr]').val($('form.step2 textarea[name=addr]').val());
            }
        }
    );
    $('form.step2 input[name=use_prev_addr]').click(
        function () {
            if ( this.checked ) {
                $('form.step2 textarea[name=shipping_addr]').val($('form.step2 textarea[name=addr]').val());
            }
            $('form.step2 textarea[name=shipping_addr]').attr('disabled', this.checked ? 'disabled' : '');
        }
    );

    $('#frm-step2').submit(
        function () {
            return checkStep2(this);
        }
    );

    $('#frm-message').submit(
        function () {
            return checkMessage(this);
        }
    );

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

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

    $('#content form dl label').click(
        function () {
            $(this).parent().next().toggle();
        }
    );
}
