$(document).ready(function(){
    // Retrieve the terms of service for this country and language
    $.get("termsOfService.action", {}, function(response){
        $("#tos_content").html(response);
    }, "html");

    // Set up spinboxes for the name generator
    var spin1 = new VerticalSpinBox("#reg_spinbox1", "namegen_1", {current:9, afterMove:start_name_check});
    var spin2 = new VerticalSpinBox("#reg_spinbox2", "namegen_2", {current:9, afterMove:start_name_check});
    $("#random_spin_button").click(function(){
        spin1.random_spin();
        spin2.random_spin();
    });

    // Set up a handler to submit the register_form form
    $("#join_button").click(function(){
        var missingField = null;
        if(!$("#dobMonth").val() || !$("#dobDay").val() || !$("#dobYear").val())
            missingField = $("#dobMonth").siblings("b:first").text();
        if(!$("#country").val())
            missingField = $("#country :selected").text();
        if(!$("#password").val())
            missingField = $("#password").prev("label").text();
        if(!$("#password2").val())
            missingField = $("#password2").prev("label").text();
        if(!$("#parentalEmail").val())
            missingField = $("#parentalEmail").prev("label").text();

        var formErrorMessage = null;
        if(missingField != null)
            formErrorMessage = $("#sharedServicesMessages .fieldRequired").html().replace("[FieldName]", missingField);
        
        // Make sure passwords match
        if($("#password").val() != $("#password2").val())
            formErrorMessage = $("#registrationMessages .passwordMismatch").text();

        // Agree button must be checked
        if(!$("#agree").attr("checked"))
            formErrorMessage = $("#registrationMessages .agreeError").text();

        // Check that the email field is valid
        if($("#parentalEmail").val().match(/[a-zA-Z0-9\.\-\%\_]+\@[a-zA-Z0-9\.\-]+\.[a-zA-Z]+/) == null)
            formErrorMessage = $("#registrationMessages .invalidEmail").text();
        
        // Check if DOB is a valid date
        var maxDays = 31;
        switch(parseInt($("#dobMonth").val())){
            case 4:
            case 6:
            case 9:
            case 11:
                maxDays = 30;
                break;
            
            case 2:
                maxDays = 28;
                var year = $("#dobYear").val();
                if(parseInt(year/4) == parseFloat(year/4) || year == 2000)
                    maxDays = 29;                
                break;
        }

        if(parseInt($("#dobDay").val()) > maxDays)
            formErrorMessage = $("#registrationMessages .invalidDate").text();
            
        if(formErrorMessage == null){
            $("#form_error").html("<img src=\"images/register/loading.gif\" alt=\"...\" />");
            var qs = $("#register_form").serialize();
            qs += "&namePart1=" + $("#namegen_1").text();
            qs += "&namePart2=" + $("#namegen_2").text();
            qs += "&nameNum=" + $("#namegen_num").text();
            $.post("registerSubmit.action", qs, function(data, textStatus){
            
                if(sharedServicesSuccess(data)){
                    $("#form_error").html("");
                    $("#register_success").fadeIn("fast");
                }
                else{
                    if($(data).find("error").text() == "invalidName")
                        $("#form_error").text($("#registrationMessages .invalidName").text());
                    else
                        $("#form_error").text(errorMessage);
                }
            });
        }
        else{
            $("#form_error").text(formErrorMessage);
        }
        
        return false;
    }, "html");
});

// After a certain timeout, run the do_name_check function
// This is called by the VerticalSpinBox above when a new item is selected
var name_check_timeout = null;
function start_name_check(){
    if(name_check_timeout != null)
        clearTimeout(name_check_timeout);
    
    name_check_timeout = setTimeout("do_name_check();", 250);
}

// Calls the nameCheck service to see if the selected name is unique.
// If it isn't, append the response to the name
function do_name_check(){
    var name = "";
    name += $("#namegen_1").text();
    name += $("#namegen_2").text();
    
    $.get("nameCheck.action", {
        name: name
    }, function(response){
        $("#namegen_num").text(response);
    });
}
