var Order = function()
{
    var options = {
        defaults       : {
            name    : 'Имя',
            email   : 'E-mail',
            text    : ' Вы робот ? ',
            captcha : ' Капченька  '
        },
        OrderId    : 'our_order',
        captchaClass   : 'captcha',
        postUrl        : '/fast-request/',
        errorsIdPrefix : 'fast_errors_'
    };
    
    var captchaInited = false;
    
    var loading = false;
    
    var formData = null;
    
    function send()
    {
        hideErrors();
        
        showLoading();
        
        $.post(options.postUrl, formData, sendResult, 'json');
    }
    
    function sendResult(data)
    {
        if (data.result) {
            showSuccess();
        } else {            
            hideLoading();
            showErrors(data.errors);
            refreshCaptcha();
        }
    }
    
    function showSuccess()
    {
        $('#' + options.OrderId + ' form').remove();
        $('#' + options.OrderId).append('<div class="success">!<br/>  !</div>');
    }
    
    function refreshCaptcha()
    {
        $('#' + options.OrderId + ' div.' + options.captchaClass + ' img').attr('src', '/kcaptcha.php?r=' + Math.random());
    }
    
    function showErrors(errors)
    {
        $.each(errors, function(key, value) {
            var errors = $('#' + options.errorsIdPrefix + key);
                        
            $.each(value, function(errKey, errValue) {
                errors.append('<li>' + errValue + '</li>');
            });
            
            errors.show();

            if (key == 'text') {                
                $('#' + options.OrderId + ' textarea').css('border', '1px solid red');
            } else {                
                $('#' + options.OrderId + ' input[name="' + key + '"]').css('border', '1px solid red');
            }
        });
    }
    
    function hideErrors()
    {
        $('#' + options.OrderId + ' ul.errors').empty().hide();
        $('#' + options.OrderId + ' input, ' + '#' + options.fastOrderId + ' textarea').css('border', '1px solid #808080');
    }
    
    function hideLoading()
    {
        loading = false;
        $('#' + options.OrderId + ' p.link a').text('');
        
        var elements = $('#' + options.OrderId + ' input, ' + '#' + options.OrderId + ' textarea');
        
        elements.each(function(key, value) {
            $(value).attr('disabled', false);
        });
    }
    
    function showLoading()
    {
        loading = true;
        $('#' + options.fastOrderId + ' p.link a').text('...');
        
        var elements = $('#' + options.OrderId + ' input, ' + '#' + options.OrderId + ' textarea');
                
        formData = elements.serializeArray();
        
        elements.each(function(key, value) {
            $(value).attr('disabled', true);
        });
    }
    
    return {
        onFocus : function(name, element)
        {
            if (element.value == options.defaults[name]) {
                element.value = '';
            }
        },
        onBlur : function(name, element)
        {
            if (element.value == '') {
                element.value = options.defaults[name];
            }
        },
        
        onSendClick : function()
        {
            if (loading) {
                return;
            }
            
            var captchaDiv = $('#' + options.OrderId + ' div.' + options.captchaClass);
            
            if (!captchaInited) {
                captchaInited = true;
                
                captchaDiv.prepend('<img src="/kcaptcha.php?r=' + Math.random() + '" width="120" height="60" alt="Картинка антиспама" /><br />');
                captchaDiv.show(400);
                
                $('#' + options.OrderId + ' p.link a').text('Отправить');
            } else {
                send();
            }
        }
    }
} ();
