var emailAddressPattern = /^[a-zA-Z0-9\+_\.\-]+@[a-zA-Z0-9]+([_\.\-][a-zA-Z0-9]+)*\.([a-zA-Z]{2,4}|[a-zA-Z]{6})$/;
//var zipCodePattern = /^[a-zA-Z0-9]{4,7}$/;
var zipCodePattern = /^[0-9]{5}$/;
var postalCodePattern = /^[0-9a-zA-Z]{5,6}$/;
var yearOfBirthPattern = /^[1-2][0-9]{3}$/;
var usernamePattern = /^[a-zA-Z0-9]{6,127}$/;
var passwordPattern = /^[a-zA-Z0-9]{6,127}$/;

var currentYear = (new Date()).getFullYear();


function validateSurveyForm( formElement )
{
    // name of mandatory fields
    var fieldRequired = Array("gender", "yearOfBirth", "addressZip");
    // field description to appear in the dialog box
    var fieldDescription = Array("Gender", "Year of Birth", "Zip/Postal Code");

    // dialog message
    var alertMsg = "Please complete the following fields:\n\n";

    var initialLength = alertMsg.length;

    for ( var i = 0; i < fieldRequired.length; i++ )
    {
        var obj = formElement.elements[fieldRequired[i]];
        if ( obj )
        {
            if ( obj.type == null )
            {
                var blnchecked = false;
                for ( var j = 0; j < obj.length; j++ )
                {
                    if ( obj[j].checked )
                    {
                        blnchecked = true;
                    }
                }
                if ( !blnchecked )
                {
                    alertMsg += " - " + fieldDescription[i] + "\n";
                }
                continue;
            }

            switch (obj.type)
                    {
                case "select-one":
                    if ( obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "" || obj.options[obj.selectedIndex].text.indexOf("Select") != -1 )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                case "select-multiple":
                    if ( obj.selectedIndex == -1 )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                case "text":
                case "textarea":
                    if ( obj.value == "" || obj.value == null )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                default:
            }
        }
    }

    // check validity of critical fields: email, zip and passwords
    if ( alertMsg.length == initialLength )
    {
        alertMsg = "Please enter valid data for the following fields:\n\n";
        initialLength = alertMsg.length;
        
        // check for valid year of birth
        try
        {
            if ( yearOfBirthPattern.exec(formElement.elements['yearOfBirth'].value) == null )
            {
                alertMsg += " - " + "Year of Birth" + "\n\nPlease use four numbers, ex. 1979\n\n";
            }
            else if ( currentYear - formElement.elements['yearOfBirth'].value < 18 )
            {
                alertMsg += " - " + "You must be at least 18 years old to participate.";
            }
            else if ( currentYear - formElement.elements['yearOfBirth'].value > 150 )
            {
                alertMsg += " - " + "The year of birth you entered makes you the oldest living person on earth." + "\n\nPlease enter your correct year of birth.\n\n";
            }
        }
        catch ( e )
        {
        }

    }

    if ( alertMsg.length == initialLength )
    {
        return checkForAOL(formElement);
    }
    else
    {
        alert(alertMsg);
        return false;
    }
}

function validateJoin3Form( formElement )
{
    if ( formElement.elements['email'].value == "" ||
         emailAddressPattern.exec(formElement.elements['email'].value) == null )
    {
        alert("Please enter a valid email address.");
        try
        {
            formElement.elements['email'].focus();
        }
        catch ( e )
        {
        }
        return false;
    }
    else if ( !formElement.elements['acceptTerms'].checked )
    {
        alert("You must accept the terms and conditions in order to sign up.");
        return false;
    }
    return true;
}

function validateJoin2Form( formElement )
{
    if ( formElement.elements['name'].value == "" )
    {
        alert("Please enter your name.");
        return false;
    }
    else if ( formElement.elements['name'].value.indexOf(' ') == -1 )
    {
        alert("Please enter your first and last name.");
        return false;
    }
    else if ( formElement.elements['email'].value == "" ||
              emailAddressPattern.exec(formElement.elements['email'].value) == null )
    {
        alert("Please enter a valid email address.");
        return false;
    }
    else if ( !formElement.elements['acceptTerms'].checked )
    {
        alert("You must accept the terms and conditions in order to sign up.");
        return false;
    }
    return true;
}

function validateJoinForm( form )
{
    if ( getFormFieldValue(form, 'email') == "" ||
         emailAddressPattern.exec(getFormFieldValue(form, 'email')) == null )
    {
        alert("Please enter a valid email address.");
        return false;
    }
    else if ( getFormFieldValue(form, 'firstName') == "" )
    {
        alert("Please enter your first name.");
        return false;
    }
    else if ( getFormFieldValue(form, 'lastName') == "" )
    {
        alert("Please enter your last name.");
        return false;
    }
    else if ( getFormFieldValue(form, 'acceptTerms') == "" )
    {
        alert("You must accept the terms and conditions in order to sign up.");
        return false;
    }
    else if ( getFormFieldValue(form, 'addressCountry') == "" )
    {
        alert("Please select your country.");
        return false;
    }
    else if ( getFormFieldValue(form, 'gender') == "" )
    {
        alert("Please select your gender.");
        return false;
    }
    else if ( getFormFieldValue(form, 'password') != getFormFieldValue(form, 'password2' ) )
    {
        alert("Both passwords must match.");
        return false;
    }
    else
    {
        var password = getFormFieldValue(form, 'password');
        if ( password == null ||
             passwordPattern.exec(password) == null )
        {
            alert("Password must be at least six characters in length and may contain only numbers and letters.");
            return false;
        }
    }
    return true;
}

function validateForm1( formElement )
{
    // name of mandatory fields
    var fieldRequired = Array("gender", "yearOfBirth", "addressZip", "addressCountry");
    // field description to appear in the dialog box
    var fieldDescription = Array("Gender", "Year of Birth", "Zip/Postal Code", "Country");

    // dialog message
    var alertMsg = "Please complete the following fields:\n\n";

    var initialLength = alertMsg.length;

    for ( var i = 0; i < fieldRequired.length; i++ )
    {
        var obj = formElement.elements[fieldRequired[i]];
        if ( obj )
        {
            if ( obj.type == null )
            {
                var blnchecked = false;
                for ( var j = 0; j < obj.length; j++ )
                {
                    if ( obj[j].checked )
                    {
                        blnchecked = true;
                    }
                }
                if ( !blnchecked )
                {
                    alertMsg += " - " + fieldDescription[i] + "\n";
                }
                continue;
            }

            switch (obj.type)
                    {
                case "select-one":
                    if ( obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "" || obj.options[obj.selectedIndex].text.indexOf("Select") != -1 )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                case "select-multiple":
                    if ( obj.selectedIndex == -1 )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                case "text":
                case "textarea":
                    if ( obj.value == "" || obj.value == null )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                default:
            }
        }
    }

    // check validity of critical fields: email, zip and passwords
    if ( alertMsg.length == initialLength )
    {
        alertMsg = "Please enter valid data for the following fields:\n\n";
        initialLength = alertMsg.length;
        
        // check for valid year of birth
        try
        {
            if ( yearOfBirthPattern.exec(formElement.elements['yearOfBirth'].value) == null )
            {
                alertMsg += " - " + "Year of Birth" + "\n\nPlease use four numbers, ex. 1979\n\n";
            }
            else if ( currentYear - formElement.elements['yearOfBirth'].value < 18 )
            {
                alertMsg += " - " + "You must be at least 18 years old to participate.";
            }
            else if ( currentYear - formElement.elements['yearOfBirth'].value > 150 )
            {
                alertMsg += " - " + "The year of birth you entered makes you the oldest living person on earth." + "\n\nPlease enter your correct year of birth.\n\n";
            }
        }
        catch ( e )
        {
        }
        
        // check for valid zip code
        try
        {
            if ( zipCodePattern.exec(formElement.elements['addressZip'].value) == null )
            {
                alertMsg += " - " + "Zip Code" + "\n\nPlease do not include letters, spaces or dashes.";
            }
        }
        catch ( e )
        {
        }
    }

    if ( alertMsg.length == initialLength )
    {
        return checkForAOL(formElement);
    }
    else
    {
        alert(alertMsg);
        return false;
    }
}

function validateForm2( formElement )
{
    var fieldRequired = Array("name", "from");
    // field description to appear in the dialog box
    var fieldDescription = Array("Full Name", "Email Address");

    // dialog message
    var alertMsg = "Please complete the following fields:\n\n";

    var initialLength = alertMsg.length;

    for ( var i = 0; i < fieldRequired.length; i++ )
    {
        var obj = formElement.elements[fieldRequired[i]];
        if ( obj )
        {
            if ( obj.type == null )
            {
                var blnchecked = false;
                for ( var j = 0; j < obj.length; j++ )
                {
                    if ( obj[j].checked )
                    {
                        blnchecked = true;
                    }
                }
                if ( !blnchecked )
                {
                    alertMsg += " - " + fieldDescription[i] + "\n";
                }
                continue;
            }

            switch (obj.type)
                    {
                case "select-one":
                    if ( obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "" || obj.options[obj.selectedIndex].text.indexOf("Select") != -1 )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                case "select-multiple":
                    if ( obj.selectedIndex == -1 )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                case "text":
                case "textarea":
                    if ( obj.value == "" || obj.value == null )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                default:
            }
        }
    }

    // check validity of critical fields: email, zip and passwords
    if ( alertMsg.length == initialLength )
    {
        alertMsg = "Please enter valid data for the following fields:\n\n";
        initialLength = alertMsg.length;
        
        
        // check for valid email address
        try
        {
            if ( emailAddressPattern.exec(formElement.elements['email'].value) == null )
            {
                alertMsg += " - " + "Email Address" + "\n";
            }
        }
        catch ( e )
        {
        }
    }

    if ( alertMsg.length == initialLength )
    {
        return checkForAOL(formElement);
    }
    else
    {
        alert(alertMsg);
        return false;
    }
}

function validateContactForm( formElement )
{
    // name of mandatory fields
    var fieldRequired = Array("__subject", "__message");
    // field description to appear in the dialog box
    var fieldDescription = Array("Topic", "Message");

    // dialog message
    var alertMsg = "Please complete the following required fields:\n\n";

    var initialLength = alertMsg.length;

    for ( var i = 0; i < fieldRequired.length; i++ )
    {
        var obj = formElement.elements[fieldRequired[i]];
        if ( obj )
        {
            if ( obj.type == null )
            {
                var blnchecked = false;
                for ( var j = 0; j < obj.length; j++ )
                {
                    if ( obj[j].checked )
                    {
                        blnchecked = true;
                    }
                }
                if ( !blnchecked )
                {
                    alertMsg += " - " + fieldDescription[i] + "\n";
                }
                continue;
            }

            switch (obj.type)
                    {
                case "select-one":
                    if ( obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "" || obj.options[obj.selectedIndex].text.indexOf("Select") != -1 )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                case "select-multiple":
                    if ( obj.selectedIndex == -1 )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                case "text":
                case "textarea":
                    if ( obj.value == "" || obj.value == null )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                default:
            }
        }
    }

    if ( alertMsg.length == initialLength )
    {
        return true;
    }
    else
    {
        alert(alertMsg);
        return false;
    }
}

function validateCreditInquiryForm( formElement )
{
    // name of mandatory fields
    var fieldRequired = Array("surveyId", "evaluationName", "accessMethod", "orderMethod", "orderEmail", "orderedProductBeforeSomewhereElse", "waited3BusinessDays");
    // field description to appear in the dialog box
    var fieldDescription = Array("Survey ID", "Product/Survey Name", "How you accessed the survey", "How you ordered the product being evaluated", "What email address you used when ordering", "Whether you orderered the product somewhere else", "Whether you have waited 3 business days");

    // dialog message
    var alertMsg = "Please complete the following required fields/questions:\n\n";

    var initialLength = alertMsg.length;

    for ( var i = 0; i < fieldRequired.length; i++ )
    {
        var obj = formElement.elements[fieldRequired[i]];
        if ( obj )
        {
            if ( obj.type == null )
            {
                var blnchecked = false;
                for ( var j = 0; j < obj.length; j++ )
                {
                    if ( obj[j].checked )
                    {
                        blnchecked = true;
                    }
                }
                if ( !blnchecked )
                {
                    alertMsg += " - " + fieldDescription[i] + "\n";
                }
                continue;
            }

            switch (obj.type)
                    {
                case "select-one":
                    if ( obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "" || obj.options[obj.selectedIndex].text.toLowerCase().indexOf("select") != -1 )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                case "select-multiple":
                    if ( obj.selectedIndex == -1 )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                case "text":
                case "textarea":
                    if ( obj.value == "" || obj.value == null )
                    {
                        alertMsg += " - " + fieldDescription[i] + "\n";
                    }
                    break;
                default:
            }
        }
    }

    // check for proof
    var atLeastOneChecked = formElement.elements["completionProofPasted"].checked ||
                            formElement.elements["completionProofFaxed"].checked ||
                            formElement.elements["completionProofMailed"].checked;

    if ( alertMsg.length == initialLength && !atLeastOneChecked )
    {
        alertMsg = "Please select how you will be providing proof of completion. You must select at least one method.";
    }

    if ( alertMsg.length == initialLength )
    {
        return true;
    }
    else
    {
        alert(alertMsg);
        return false;
    }
}

function verifyUser()
{
    var isFromPayPal = ( document.location.href.indexOf("paypal=true") != -1 );
    var isRepeatVisit = false;

    if ( isFromPayPal )
    {
        var expdate = new Date();
        expdate.setTime(expdate.getTime() + ( 24 * 60 * 60 * 1000 * 365 ));

        SetCookie("paypal", "true", expdate, "/", null, false);
    }
    else
    {
        var storedValue = GetCookie("paypal");
        isRepeatVisit = ( storedValue != null && storedValue == "true" );
    }

    if ( !isFromPayPal && !isRepeatVisit )
        document.location.href = "/";
}

function getCookieVal( offset )
{
    var endstr = document.cookie.indexOf(";", offset);

    if ( endstr == -1 )
        endstr = document.cookie.length;

    return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie( name )
{
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;

    while ( i < clen )
    {
        var j = i + alen;

        if ( document.cookie.substring(i, j) == arg )
            return getCookieVal(j);

        i = document.cookie.indexOf(" ", i) + 1;

        if ( i == 0 )
            break;
    }

    return null;
}

function SetCookie( name, value )
{

    var argv = SetCookie.arguments;
    var argc = SetCookie.arguments.length;
    var expires = (2 < argc) ? argv[2] : null;
    var path = (3 < argc) ? argv[3] : null;
    var domain = (4 < argc) ? argv[4] : null;
    var secure = (5 < argc) ? argv[5] : false;

    document.cookie = name + "=" + escape(value) +

                      ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +

                      ((path == null) ? "" : ("; path=" + path)) +

                      ((domain == null) ? "" : ("; domain=" + domain)) +

                      ((secure == true) ? "; secure" : "");

}

var aolEmailPattern = /^[a-zA-Z0-9_\.\-]+@(aol|aim|netscape|wmconnect|cs).(com|net)$/;
function isAOL( email )
{
    return ( aolEmailPattern.exec(email) != null )
}

var _performAOLCheck = false;
function checkForAOL( formElement )
{
    if ( _performAOLCheck && isAOL(formElement.elements['email'].value) )
    {
        alert("ERROR 421: Your email address is currently not supported.\n\n\nAt this time, AOL email addresses are not able to receive survey invitations from Vindale Research. Please specify an email address that does not include @aol.com, @aim.com, @netscape.net, @netscape.com, @wmconnect.com or @cs.com. If you need a free email account, we recommend Yahoo.com");
        return false;
    }
    return true;
}

function checkForAOLEmail( textElement )
{
    if ( _performAOLCheck && isAOL(textElement.value) )
    {

    }
}


function getTop( element, recurse )
{
    var value = 0;
    if ( element != null )
    {
        if ( recurse && element.offsetParent != null )
        {
            value += getTop(element.offsetParent, recurse, true);
        }
        value += element.offsetTop;
    }
    return value;
}

function getLeft( element, recurse )
{
    var value = 0;
    if ( element != null )
    {
        if ( recurse && element.offsetParent != null )
        {
            value += getLeft(element.offsetParent, recurse, true);
        }
        value += element.offsetLeft;
    }
    return value;
}

function getWidth( element )
{
    return element.offsetWidth;
}

function getHeight( element )
{
    //return element.offsetHeight;
    return element.scrollHeight;
}

function doSubmit( form )
{
    if ( form != null )
    {
        for ( var i = 0; i < form.elements.length; i++ )
        {
            if ( form.elements[i].type == "submit" )
            {
                //form.elements[i].value = "Please Wait ...";
                form.elements[i].disabled = true;
            }
        }
        form.submit();
    }
    return true;
}

