register = {
    registerUrl: ZannelUtil.getWsUrl()  + "/register",
    addObservers: function() {
        if($('username')) {
            $('username').observe('focus', function() { $('usernameTip').show(); });
            $('username').observe('blur', register.checkUsername);
        }
        if($('password1')) {
            $('password1').observe('focus', function() { $('passwordTip').show(); });
            $('password1').observe('blur', function() { $('passwordTip').hide(); });
        }
        if($('email')) {
            $('email').observe('focus', function() { $('emailTip').show(); });
            $('email').observe('blur', function() { $('emailTip').hide(); });
        }
        if($('month')) {
            $('month').observe('focus', function() { $('birthdayTip').show(); });
            $('month').observe('blur', function() { $('birthdayTip').hide(); });
        }
        if($('day')) {
            $('day').observe('focus', function() { $('birthdayTip').show(); });
            $('day').observe('blur', function() { $('birthdayTip').hide(); });
        }
        if($('year')) {
            $('year').observe('focus', function() { $('birthdayTip').show(); });
            $('year').observe('blur', function() { $('birthdayTip').hide(); });
        }
        if($('submitButton')) {
            $('submitButton').observe('click', function(event) {
                event.stop();
                $('registerCommand').submit();
            });
        }
    },
    checkUsername: function(event) {
        $('usernameTip').hide();
        var checkUsername = true;
        if($('usernameOriginal')) {
            var originalUsername = $F('usernameOriginal').toLowerCase();
            var username = $F('username').toLowerCase();
            if(originalUsername == username) {
                checkUsername = false;
            }
        }        
        if(checkUsername && $F('username') != '') {
            var params = {
                method: 'post',
                parameters: { action: 'USERNAME_CHECK', username: $F('username') },
                onSuccess: function(response) {
                    register.handleCheckUsername(response.responseJSON);
                },
                onFailure: function(response) {
                }
            };

            new Ajax.Request(register.registerUrl, params);
        } else {
            $('usernameStatus').hide();
        }
    },
    handleCheckUsername: function(jsonResponse) {
        if(jsonResponse.usernameValid == undefined || jsonResponse.usernameValid) {
            var statusNode = $('usernameStatus');
            if(jsonResponse.usernameAvailable) {
                statusNode.innerHTML = 'available&nbsp;:)';
                statusNode.removeClassName('usernameUnavailable');
                statusNode.addClassName('usernameAvailable');
            } else {
                statusNode.innerHTML = 'unavailable&nbsp;:(';
                statusNode.removeClassName('usernameAvailable');
                statusNode.addClassName('usernameUnavailable');
            }
            statusNode.show();
       }
    }
}

document.observe("dom:loaded", register.addObservers);