function processSignIn() {
    clearAllErrors();

    var appErrObj   = dojo.byId('app-err');
    var usernameObj = dojo.byId('f-signup-signin-username');
    var passwordObj = dojo.byId('f-signup-signin-password');

    appErrObj.value = 0;

    var username = dojo.string.trim(usernameObj.value);

    if (username.length == 0) {
        reportError(dojo.byId('f-signup-signin-username_validation'), 'We need a Ning ID for you.');
        appErrObj.value = 1;
    }
    if (passwordObj.value.length == 0) {
        reportError(dojo.byId('f-signup-signin-password_validation'), 'Please enter a password.');
        appErrObj.value = 1;
    }

    if (appErrObj.value == 0) {
        ning.system.signIn({
            id:          username,
            password:    passwordObj.value,
            remember:    true,
            target:      encodeURIComponent(dojo.byId('target').value),
            errorTarget: encodeURIComponent(window.location)
        });
    }
}

function processSignUp() {
    clearAllErrors();

    var appErrObj = dojo.byId('app-err');

    appErrObj.value = 0;

    if (dojo.byId('f-password').value != dojo.byId('f-confirm-password').value) {
        reportError(dojo.byId('f-passwordconfirm_validation'), 'Your passwords don\'t match.  Please try again.');
        appErrObj.value = 1;
    }

    var username = dojo.string.trim(dojo.byId('f-username').value);

    if (username.length == 0) {
        reportError(dojo.byId('f-username_validation'), 'We need a Ning ID for you.');
        appErrObj.value = 1;
    } else if (username.length < 6) {
        reportError(dojo.byId('f-username_validation'), 'Your choice for a Ning ID is too short. It needs to be at least 6 characters. Thanks!');
        appErrObj.value = 1;
    } else if (username.length > 32) {
        reportError(dojo.byId('f-username_validation'), 'Your choice for a Ning ID is too long. It needs to be 32 characters or less. Thanks!');
        appErrObj.value = 1;
    } else if (!username.match(/^[a-zA-Z0-9]*$/i)) {
        reportError(dojo.byId('f-username_validation'), 'Ning IDs can only contain numbers or letters.');
        appErrObj.value = 1;
    } else if (username.match(/(^ning)|(^xn)/i)) {
        reportError(dojo.byId('f-username_validation'), 'Ning IDs cannot begin with "ning" or "xn".');
        appErrObj.value = 1;
    }

    if (dojo.string.trim(dojo.byId('f-password').value).length == 0) {
        reportError(dojo.byId('f-passwordconfirm_validation'), 'Please enter a password.');
        appErrObj.value = 1;
    }
    if (dojo.string.trim(dojo.byId('f-email').value).length > 0) {
        dojo.io.bind({
            mimetype: "text/json",
            encoding: "utf-8",
            sync:     true, // VID-395  [Jon Aquino 2006-08-21]
            url:      "/xn/rest/internal/profile/validation/email:" + dojo.string.trim(dojo.byId('f-email').value),
            load:     function(type, data, evt) {
                if (data.error) {
                    reportError(dojo.byId('f-email_validation'), data.error);
                    appErrObj.value = 1;
                }
            }
        });
    } else {
        reportError(dojo.byId('f-email_validation'), 'We need your email address!');
        appErrObj.value = 1;
    }

    if (dojo.string.trim(dojo.byId('f-captcha').value).length == 0) {
        reportError(dojo.byId('f-captcha_validation'),'');
        appErrObj.value = 1;
    }

    if (appErrObj.value == 0) {
        ning.system.signUp({
            formNode: document.forms['appsignup'],
            target:      encodeURIComponent(dojo.byId('target').value),
            errorTarget: encodeURIComponent(window.location)
        });
    }

    return false;
}

function reportError(node, msg) {
    dojo.html.show(node);
    // we're overriding the default error message that we get back from the captcha system
    node.innerHTML = "<p><span>" + (node.id == 'f-captcha_validation' ? 'We\'re sorry, the characters you typed didn\'t match the image below. Please re-enter your password and retype the characters you see in the new image. Thanks!' : msg) + "</span></p>";
    dojo.html.addClass(node, "validation");
}

function clearError(elemId) {
    node = dojo.byId(elemId);
    dojo.html.hide(node);
    dojo.html.removeClass(node, "validation");
    node.innerHTML = "";
}

function clearAllErrors() {
    clearError('f-signup-signin-password_validation');
    clearError('f-signup-signin-username_validation');
    clearError('f-username_validation');
    clearError('f-email_validation');
    clearError('f-photo_validation');
    clearError('f-passwordconfirm_validation');
    clearError('f-captcha_validation');
}
