var _lastCheckValue = null;
var _userName = $('#userName');
var _spinner = $('#userNameSpinner');
var _good = $('#userNameGood');
var _bad = $('#userNameBad');

var _checkID = 0;
var _ajaxRequest = null;

_userName.keydown
(
    function()
    {
        _userName.stopTime();
        _userName.oneTime(400,
            function()
            {                
                var userNameValue = _userName.val();
                if(_lastCheckValue == userNameValue)
                {
                    return;
                }
                
                _lastCheckValue = userNameValue;
                
                var currentCheckID = _checkID;
                _checkID++;
                
                if(_ajaxRequest != null)
                {
                    _ajaxRequest.abort();
                }
                
                _good.css('display', 'none');
                
                if(validateUserName(userNameValue) != null)
                {
                    _spinner.css('display', 'none');
                    _bad.css('display', 'block');
                    return;
                }
                
                _bad.css('display', 'none');
                _spinner.css('display', 'block');
                
                _ajaxRequest = $.post('/api/ajax/data', {method: 'userName.exists', magic: __g_sm, userName: userNameValue},
                    function(data)
                    {
                        if(currentCheckID != (_checkID - 1))
                        {
                            return;
                        }
                        
                        _spinner.css('display', 'none');
                        
                        try
                        {
                            var response = evalResponse(data);
                            if(response.stat == "fail")
                            {
                                _bad.css('display', 'block');
                            }
                            else
                            {
                                _good.css('display', 'block');
                            }
                        }
                        catch(e)
                        {
                        }
                    }
                );
            }
        );
    }
);
