homepage = {
    loginUrl: ZannelUtil.getWsUrl()  + "/login",
    registerCheckUrl: ZannelUtil.getWsUrl()  + "/register",
    registerUrl: ZannelUtil.getWsUrl()  + "/registerFull",
    addObservers: function() {
        $('loginForm').getInputs().each( function(input) {
            input.observe('focus', homepage.formFocus);
            input.observe('blur', homepage.formBlur);
        });
        $('joinForm').getInputs().each( function(input) {
            if(input.id == 'username') {
                input.observe('blur', homepage.checkUsername);
            } else if(input.id == 'password') {
                input.observe('blur', homepage.checkPassword);
            } else if(input.id == 'email') {
                input.observe('blur', homepage.checkEmail);
            }
            input.observe('focus', homepage.formFocus);
            input.observe('blur', homepage.formBlur);
        });
        $('joinLink').observe('click', homepage.showJoinBox);
        $('loginLink').observe('click', homepage.showLoginBox);
        $('loginForm').observe('submit', homepage.login);
        $('loginButton').observe('click', homepage.login);
        $('joinForm').observe('submit', homepage.register);
        $('joinButton').observe('click', homepage.register);
        
        $('promoLink').observe('click', function(event) {
            $('promoDetails').toggle();
        });
    },
    formFocus: function(event) {
        var input = event.element();
        if(input.hasClassName('default')) {
            if(input.id == 'passwordTemp') {
                input.hide();
                $('password').show();
                $('password').focus();
            } else if(input.id == 'loginPasswordTemp') {
                input.hide();
                $('loginPassword').show();
                $('loginPassword').focus();
            } else {
                input.defaultValue = input.value;
                input.clear();
                input.removeClassName('default');
            }
        }
    },
    formBlur: function(event) {
        var input = event.element();
        if(input.value == '') {
            if(input.id != 'password' || input.id != 'loginPassword') {
                input.addClassName('default');
                input.value = input.defaultValue;
            }
            if(input.id == 'username') {
                $('usernameError').hide();
                $('usernameStatus').hide();
            } else if(input.id == 'password') {
                $('passwordError').hide();
                $('password').hide();
                $('passwordTemp').show();
            } else if(input.id == 'email') {
                $('emailError').hide();
            } else if(input.id == 'loginUsername') {
                $('loginError').hide();
            } else if(input.id == 'loginPassword') {
                $('loginError').hide();
                $('loginPassword').hide();
                $('loginPasswordTemp').show();
            } 
        }
    },
    showError: function(errorId, errorMsg) {
        var error = $(errorId);
        error.hide();
        if(errorMsg != '') {
            error.down('span').innerHTML = errorMsg;
            error.show();
        }
    },
    checkUsername: function(event) {
        if($F('username') != '' && !$('username').hasClassName('default')) {
            var params = {
                method: 'post',
                parameters: { action: 'USERNAME_CHECK', username: $F('username') },
                onSuccess: function(response) {
                    homepage.handleCheckUsername(response.responseJSON, true);
                },
                onFailure: function(response) {
                }
            };
            new Ajax.Request(homepage.registerCheckUrl, params);
        }
    },
    handleCheckUsername: function(jsonResponse, showStatus) {
        var status = $('usernameStatus').hide();
        var errorMsg = '';
        if(jsonResponse.usernameEmpty) {
            errorMsg = jsonResponse.usernameEmptyErrorMsg;
        } else if(!jsonResponse.usernameAvailable) {
            if(showStatus) {
                status.innerHTML = 'unavailable :(';
                status.addClassName('unavailable');
                status.show();
            } else {
                errorMsg = jsonResponse.usernameAvailableErrorMsg;
            }
        } else if(!jsonResponse.usernameValid) {
            errorMsg = jsonResponse.usernameValidErrorMsg;
        } else {
            if(showStatus) {
                status.innerHTML = 'available :)';
                status.removeClassName('unavailable');
                status.show();
            }
        }
        homepage.showError('usernameError', errorMsg);
    },
    checkPassword: function() {
        if($F('password') != '') {
            var params = {
                method: 'post',
                parameters: { action: 'PASSWORD_CHECK', password1: $F('password'), checkConfirm: 'false' },
                onSuccess: function(response) {
                    homepage.handleCheckPassword(response.responseJSON);
                },
                onFailure: function(response) {
                }
            };
            new Ajax.Request(homepage.registerCheckUrl, params);
        }
    },
    handleCheckPassword: function(jsonResponse) {
        var errorMsg = '';
        if(jsonResponse.passwordEmpty) {
            errorMsg = jsonResponse.passwordEmptyErrorMsg;
        } else if(!jsonResponse.passwordValid) {
            errorMsg = jsonResponse.passwordValidErrorMsg;
        }
        homepage.showError('passwordError', errorMsg);
    },
    checkEmail: function(event) {
        if($F('email') != '' && !$('email').hasClassName('default')) {
            var params = {
                method: 'post',
                parameters: { action: 'EMAIL_CHECK', email: $F('email') },
                onSuccess: function(response) {
                    homepage.handleCheckEmail(response.responseJSON);
                },
                onFailure: function(response) {
                }
            };

            new Ajax.Request(homepage.registerCheckUrl, params);
        }
    },
    handleCheckEmail: function(jsonResponse) {
        var errorMsg = '';
        if(jsonResponse.emailEmpty) {
            errorMsg = jsonResponse.emailEmptyErrorMsg;
        } else if(!jsonResponse.emailAvailable) {
            errorMsg = jsonResponse.emailAvailableErrorMsg;
        } else if(!jsonResponse.emailValid) {
            errorMsg = jsonResponse.emailValidErrorMsg;
        }
        homepage.showError('emailError', errorMsg);
    },
    handleCheckDob: function(jsonResponse) {
        var errorMsg = '';
        if(jsonResponse.birthdayEmpty) {
            errorMsg = jsonResponse.birthdayEmptyErrorMsg;
        } else if(!jsonResponse.ageValid) {
            errorMsg = jsonResponse.ageValidErrorMsg;
        } 
        homepage.showError('birthdayError', errorMsg);
    },
    register: function(event) {
        event.stop();
    
        var usernameValue = '';
        if(!$('username').hasClassName('default')) {
            usernameValue = $F('username');
        }
        var passwordValue = '';
        if($('password').visible()) {
            passwordValue = $F('password');
        }
        var emailValue = '';
        if(!$('email').hasClassName('default')) {
            emailValue = $F('email');
        }
        var dobMonth = $F('month');
        var dobDay = $F('day');
        var dobYear = $F('year');
        var params = {
            method: 'post',
            parameters: { source: 'WEB', webSource: 'HOMEPAGE', username: usernameValue, password1: passwordValue, 
                        checkConfirm: 'false', email: emailValue, checkDob: 'true', dobMonth: dobMonth, dobDay: dobDay, dobYear: dobYear },
            onSuccess: function(response) {
                var jsonResponse = response.responseJSON;
                if(jsonResponse.registerSuccess) {
                    ZannelUtil.setRegTrackingCookie();
                    window.location.href = 'register_findfriends.htm';
                } else {
                    homepage.handleCheckUsername(jsonResponse, false);
                    homepage.handleCheckPassword(jsonResponse);
                    homepage.handleCheckEmail(jsonResponse);
                    homepage.handleCheckDob(jsonResponse);
                }
            },
            onFailure: function(response) {
            }
        };
        new Ajax.Request(homepage.registerUrl, params);
    },
    login: function(event) {
        event.stop();
    
        var usernameValue = '';
        if(!$('loginUsername').hasClassName('default')) {
            usernameValue = $F('loginUsername');
        }
        var passwordValue = '';
        if($('loginPassword').visible()) {
            passwordValue = $F('loginPassword');
        }
        var errorMsg = '';
        if(usernameValue == '' && passwordValue == '') {
            errorMsg = 'please enter your username and password';
        } else if(usernameValue == '') {
            errorMsg = 'please enter your username';
        } else if(passwordValue == '') {
            errorMsg = 'please enter your password';
        } else {        
            var params = {
                method: 'post',
                parameters: { username: usernameValue, password: passwordValue, x: "true", src: "web" },
                onSuccess: function(response) {
                    ZannelUtil.checkForNewRegistration(response.responseXML);
                    window.location.reload();
                },
                onFailure: function(response) {
                    var error = $('loginError').hide();
                    error.down('span').innerHTML = 'username and password not found';
                    error.show();
                }
            };
            new Ajax.Request(homepage.loginUrl, params);
        }
        homepage.showError('loginError', errorMsg);
    },
    // TODO: Reset forms when switching back and forth
    showJoinBox: function() {
        $('loginBox').hide();
        $('joinBox').show();
    },
    showLoginBox: function() {
        $('joinBox').hide();
        $('loginBox').show();    
    }
}

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