var CHANGE = 'changed-field';
var REQUIRED = 'required';
var MAXLENGTH = 1800;


function valid(fields) {
    var errors = false;
    fields.each(function(index, item) {
        var item = $(item);
        if (!item.hasClass(CHANGE) && item.hasClass(REQUIRED)) {
            errors = true;
            item.addClass('error');
        }
    });
    return !errors;
};


function reset_form(fields) {
    fields.each(function(_, field) {
        $(field).removeClass(CHANGE);
        field.value = field.title || '';
    });
    $('#div-online-receiver-name-center').text('выберите адресата из списка');
}


function submit(form, fields) {
    var data = {};
    fields.each(function(i, item) {
        var item = $(item);
        if (!item.hasClass(CHANGE) && !item.hasClass(REQUIRED)) {
            data[item.attr('name')] = '';
        } else {
            data[item.attr('name')] = item.val();
        }
    });

    var serialized = '';
    for (var input in data) {
        if (serialized) {
            serialized += '&';
        }
        serialized += input + '=' + encodeURI(data[input]);
    }

    $.ajax({
        'url':_js_cfg.feedback_url,
        'type':'post',
        'data':serialized,

        'success':function(data, text_status, xhr){
            data = JSON.parse(data);
            if (data && data.status == 'ok') {
                // hm, somebody made this decision
                // reset_form(fields);
                // $('div#div-onlinepage').addClass('hide');
                $('div#div-online-button').addClass('send');
            } else {
                if (data.errors) {
                    fields.each(function(_, field) {
                        if ($(field).attr('name') in data.errors) {
                            $(field).addClass('error');
                        }
                    });
                    if ($('#letter').hasClass('error')) {
                        $('#letter').focus();
                    }
                } else {
                    $('div#div-onlinepage').addClass('hide');
                    reset_form(fields);
                    popup.clear();
                    popup.set_message(data.message);
                    popup.show();
                }
            }
        },

        'error': function (xhr) {
            $('div#div-onlinepage').addClass('hide');
            popup.clear();
            popup.set_header('Ошибки');
            if (xhr.status == 402) {
                popup.set_message('Слишком много запросов с одного ip');
            } else {
                popup.set_message(xhr.status);
            };
            popup.show(function(){
                $('div#div-onlinepage').removeClass('hide');
            });
        }
    });
};

function activate_element(elem) {
    elem.addClass('active');
    if (!elem.hasClass(CHANGE)) {
        if (elem.attr('title') == elem.val()) {
            elem.val('');
        }
    }
}


function on_focus() {
    var elem = $(this);
    activate_element(elem);
    return false;
};


function on_click() {
    var elem = $(this);
    activate_element(elem);
    return false;
};


function on_blur() {
    var elem = $(this);
    if (!elem.hasClass(CHANGE) || elem.val().trim() == '') {
        elem.val(elem.attr('title'));
        // to be sure
        elem.removeClass(CHANGE);
    }
    elem.removeClass('active');
};


function on_keypress() {
    $(this).removeClass('error');
    $(this).addClass(CHANGE);
};


function on_change() {
    var elem = $(this);
    elem.addClass(CHANGE);
    return false;
};


function count_letters() {
    var diff = MAXLENGTH - this.value.length;
    var counter = $('#span-symbols-left-qty');
    counter.text(diff);
    if (diff < 0) {
        counter.addClass('error');
    } else {
        counter.removeClass('error');
    }
};


function close() {
    $('div#div-onlinepage').addClass('hide');
    $('span#div-iruonline-link').removeClass('active');
    $('div#div-online-button').removeClass('send');
    reset_form($('#message-form .field'));
};


$(document).ready(function(){
    $('#message-form').submit(function() {
        $('.error', this).each(function(_, i){
            $(i).removeClass('error');
        });
        var fields = $('.field', this);
        if (valid(fields)) {
            submit($(this), fields);
        }
        if ($('#letter').hasClass('error')) {
            $('#letter').focus();
        }
        if ($('#div-online-receiver-name input').hasClass('error')) {
            $('#div-online-receiver-name').addClass('error');
        }
        return false;
    });

    $('#div-online-button').click(function() {
        if (!$(this).hasClass('send')) {
            $('#message-form').submit();
        }
    });

    var container = $('div#div-onlinepage');

    // inputs
    $('.field', container).click(on_click).blur(on_blur).keypress(on_keypress).
                           change(on_change).focus(on_focus);
    $('#letter', container).keyup(count_letters);
    $('#letter', container).keydown(count_letters);

    // open buttons
    $('span#div-iruonline-link').click(function(){
        container.removeClass('hide');
        $(this).addClass('active');
    });

    // close buttons
    $('#p-online-header', container).click(close);
    $('#img-online-close', container).click(close);

    // persons
    $('div.receiver', container).click(function() {
        $('#div-online-receiver-name-center').html(this.innerHTML);
        $('#div-online-receiver-name').removeClass('error');
        $('#div-online-receiver-name input').addClass(CHANGE);
        $('#div-online-receiver-name input').val(this.id);
    });

});

