/** Invoked before submitting tell a friend */
function validateTellAFriend()
{
    if (!getAuthenticated())
    {
        var me = getElementValue(getParamMyEmail());

        if (!validateNotBlank(me) || !validateEmail(me))
        {
            alert(getValidationTellafriendInvalidEmailYourself());
            return false;
        }
    }

    var e = getElementValue(getParamEmail());

    if (!validateNotBlank(e) || !validateEmail(e))
    {
        alert(getValidationTellafriendInvalidEmailFriend());
        return false;
    }

    return true;
}

/** Invoked before submitting contact form */
function validateContact()
{
    var me = getElementValue(getParamMyEmail());
    var s = getElementValue(getParamSubject());
    var msg = getElementValue(getParamMessage());

    if (!validateNotBlank(me) || !validateEmail(me))
    {
        alert(getValidationContactInvalidEmail());
        return false;
    }

    if (!validateNotBlank(s))
    {
        alert(getValidationContactBlankSubject());
        return false;
    }

    if (!validateNotBlank(msg))
    {
        alert(getValidationContactBlankMessage());
        return false;
    }

    return true;
}

/** Invoked before submitting invite form */
function validateInvite()
{
    var e = getElementValue(getParamEmail());
    var f = getElementValue(getParamFirstName());
    var l = getElementValue(getParamLastName());

    var mf = getElementValue(getParamMyFirstName());
    var ml = getElementValue(getParamMyLastName());

    if (!validateNotBlank(e) || !validateNotBlank(f) || !validateNotBlank(l))
    {
        alert(getValidationInviteAllFields());
        return false;
    }

    if ((mf != null && !validateNotBlank(mf.value)) || (ml != null && !validateNotBlank(ml.value)))
    {
        alert(getValidationInviteAllFields());
        return false;
    }

    if (!validateEmail(e))
    {
        alert(e + " "+getValidationInvalidEmail());
        return false;
    }

    return true;
}

/*
 * Invoked before submitting registration form
 * - (Optional) param indicating whether or not to validate username.  Default is to validate.
 */
function validateRegistration(formName)
{
    var validateUsername = arguments[1] == null ? true : arguments[1];
    var form = getElement(formName);
    var elements = form.elements;

    var u = elements[getParamEditUsername()] != null ? elements[getParamEditUsername()].value : '';
    var p = elements[getParamEditPassword()] != null ? elements[getParamEditPassword()].value : '';
    var cp = elements[getParamPasswordConfirm()] != null ? elements[getParamPasswordConfirm()].value : '';
    var e = elements[getParamEmail()] != null ? elements[getParamEmail()].value : '';
    var z = elements[getParamZipCode()] != null ? elements[getParamZipCode()].value : '';
    var i = elements[getParamIAgree()] != null ? elements[getParamIAgree()].checked : true;
    var ph1 = elements[getParamPhone1()] != null ? elements[getParamPhone1()].value : '';    
    
    var err;
    if ( validateUsername && (err = isInvalidUsername(u)) != null)
    {
        alert(getValidationInvalidUsername());
        return false;
    }
    
    if ( err = isInvalidPassword(p))
    {
        alert(getValidationInvalidPassword());
        return false;
    }
    
    if (p != cp)
    {
        alert(getValidationPasswordMismatch());
        return false;
    }
    if (!validateEmail(e))
    {
    	var msg = " "+getValidationInvalidEmail();
        alert(e + msg);
        return false;
    }
    if (!validateZipCode(z))
    {
        alert(z +" "+getValidationInvalidZipcode());
        return false;
    }
    if (i == false)
    {
        alert(getValidationTermsText());
        return false;
    }

    if (validateNotBlank(ph1) && !validatePhone(ph1))
    {
        alert(ph1 +" "+getValidationInvalidPhone());
        return false;
    }

    return true;
}

/** Invoked before submitting pre-registration form **/
function validatePreRegistration()
{
    var e = getElementValue(getParamEmail());

    if (!validateEmail(e))
    {
    	var msg = " "+getValidationInvalidEmail();
        alert(e + msg);
        return false;
    }

    return true;
}

function validateNotBlank(str)
{
    return str != null && str.replace(/(^\s+)|(\s+$)/g,'') != '';
}

function isInvalidUsername(username)
{
    if ( ! validateNotBlank(username) ) {
        return getValidationBlankUsername();
    } else if ( ! validateMinLength(username, 4) ) {
        return getValidationInvalidUsername();
    }
    
    return null;
}

function isInvalidPassword(password)
{
     if ( ! validateNotBlank(password) ) {
        return getValidationBlankPassword();
    } else if ( ! validateMinLength(password, 6) ) {
        return getValidationInvalidPassword();
    }
    
    return null;
}

function validateMinLength( str, len )
{
    return (str != null) && str.length >= len; 
}

function validateEmail(email)
{
    return new RegExp(/^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/).test(trim(email));
}

function validateZipCode(zip)
{
    return validateNotBlank(zip);
}

function validatePhone(phone)
{
    return !new RegExp(/.*[^0-9 \t+\-\.()].*/).test(phone);
}

var s_fieldsAndErrors = new Array();

function setExtendedRegistrationFields( fieldsAndErrors )
{
    s_fieldsAndErrors = fieldsAndErrors;
}

function extendedRegistrationValidation(contact)
{
    var formValid = true;
    for( i = 0; i < s_fieldsAndErrors.length; i++ )
    {
        var el = getElement( s_fieldsAndErrors[i][0] ); 
        if ( el == null)
        {
            continue;
        } 
        if ( el.value.length == 0 )
        {
            // want to set focus to the first element that fails validation
            el.style.background="yellow";                
            formValid = false;
        }
        else
        {
            el.style.background="white";
        }
    }
    
    if (!formValid)
    {
        alert(getValidationRequiredFields());
    }
    
    return formValid;
}

