home_external = {
    init: function(event) {
        var usernameTempInput = $('usernameTempInput');
        if(usernameTempInput) {
            usernameTempInput.observe('focus', this.formFocusUsername.bindAsEventListener(this));
        }
        var passwordTempInput = $('passwordTempInput');
        if(passwordTempInput) {
            passwordTempInput.observe('focus', this.formFocusPassword.bindAsEventListener(this));
        }
        var betaCodeTempInput = $('betaCodeTempInput');
        if(betaCodeTempInput) {
            betaCodeTempInput.observe('focus', this.formFocusBetaCode.bindAsEventListener(this));
        }
        var usernameInput = $('usernameInput');
        if(usernameInput) {
            usernameInput.observe('blur', this.formBlurUsername.bindAsEventListener(this));
        }
        var passwordInput = $('passwordInput');
        if(passwordInput) {
            passwordInput.observe('blur', this.formBlurPassword.bindAsEventListener(this));
        }
        var betaCodeInput = $('betaCodeInput');
        if(betaCodeInput) {
            betaCodeInput.observe('blur', this.formBlurBetaCode.bindAsEventListener(this));
        }
        if($('betaCodeForm')) {
            $('betaCodeForm').observe('submit', this.betaCodeService.bindAsEventListener(this));
            $('betaCodeFormBtn').observe('click', this.betaCodeService.bindAsEventListener(this));
        }
        if($('betaRegisterForm')) {
            $('betaRegisterForm').observe('submit', this.betaRegisterService.bindAsEventListener(this));
            $('betaRegisterFormBtn').observe('click', this.betaRegisterService.bindAsEventListener(this));
        }
        if($('registerLink')) {
            $('registerLink').observe('click', this.showRegisterPanel.bindAsEventListener(this));
        }
        if($('registerClose')) {
            $('registerClose').observe('click', this.hideRegisterPanel.bindAsEventListener(this));
        }
    },
    showRegisterPanel: function(event) {
        event.stop();
        $('infoArea').hide();
        $('registerPanel').show();
    },
    hideRegisterPanel: function(event) {
        event.stop();
        $('registerPanel').hide();
        $('infoArea').show();
    },    
    formFocusUsername: function(event) {
        $('usernameTemp').hide();
        $('username').show();
        $('usernameInput').focus();
    },
    formFocusPassword: function(event) {
        $('passwordTemp').hide();
        $('password').show();
        $('passwordInput').focus();
    },
    formFocusBetaCode: function(event) {
        $('betaCodeTemp').hide();
        $('betaCode').show();
        $('betaCodeInput').focus();
    },
    formBlurUsername: function(event) {
        var usernameValue = shared.trim($F('usernameInput'));
        if(usernameValue == '') {
            $('username').hide();
            $('usernameTemp').show();
        }
    },
    formBlurPassword: function(event) {
        var passwordValue = $F('passwordInput');
        if(passwordValue == '') {
            $('password').hide();
            $('passwordTemp').show();
        }
    },
    formBlurBetaCode: function(event) {
        var betaCodeValue = shared.trim($F('betaCodeInput'));
        if(betaCodeValue == '') {
            $('betaCode').hide();
            $('betaCodeTemp').show();
        }
    },   
    betaRegisterService: function(event) {
        event.stop();
        $('registerError').hide();
        var url = 'ws/registerbeta.json';
        var betaCode = $F('betaCodeInput');
        var username = $F('usernameInput');
        var password = $F('passwordInput');
        var params = {
            method: 'POST',
            postBody: 'betaCode=' + betaCode + '&username=' + username + '&password=' + password,
            onSuccess: function(resp) {
                window.location.reload();
            },
            onFailure: function(resp) {
                var errorType = resp.responseJSON.error;
                var message = home_external.getBetaCodeErrorMsg(errorType, false);
                if(message == '') {
                    message = shared.getLoginErrorMsg(errorType);
                }
                $('registerError').innerHTML = '*** ' + message + ' ***';
                $('registerError').show();
            }
        };
        new Ajax.Request(url, params);
    },
    betaCodeService: function(event) {
        event.stop();
        $('betaCodeError').hide();
        var url = 'ws/addbetacode.json';
        var betaCode = $F('betaCodeInput');
        
        var params = {
            method: 'POST',
            postBody: 'betaCode=' + betaCode,
            onSuccess: function(resp) {
                window.location.reload();
            },
            onFailure: function(resp) {
                var errorType = resp.responseJSON.error;
                var message = home_external.getBetaCodeErrorMsg(errorType, true);
                $('betaCodeError').innerHTML = '*** ' + message + ' ***';
                $('betaCodeError').show();
            }
        };
        new Ajax.Request(url, params);
    },
    getBetaCodeErrorMsg: function(errorType, setDefault) {
        var message = '';
        if(setDefault) {
            message = 'There was an unknown error with your beta code.';        
        }
        if(errorType == 'emptyBetaCode') {
            message = 'Please enter your beta code.';
        } else if(errorType == 'betaCodeNotFoundError') {
            message = 'The beta code you entered is not valid.';
        } else if(errorType == 'betaCodeAlreadyRedeemed') {
            message = 'The beta code you entered has already been used and is no longer valid.';
        } else if(errorType == 'userAlreadyHasBetaCodeError') {
            message = 'You have already redeemed a beta code.';
        } else if(errorType == 'betaCodeRedemptionError') {
            message = 'There was an error with your beta code.';
        } else if(errorType == 'notLoggedIn') {
            message = 'You must be logged in to redeem your beta code.';
        }
        return message;
    }
};
document.observe("dom:loaded", home_external.init.bindAsEventListener(home_external));