﻿    
//added this global variable to prevent auto-tabbing too far
//if the user had more than one key pressed down when they got to max,
//and it tabbed to a field that was already at it's max, it would trigger
//the keyup event for the field it just enetered and autotab to the next field
//this will prevent it from moving on until at least one more key is pressed down
var autoTabTriggered = false;

var _validationSummary;

var FIELD_CLASS = "field";
var FIELD_ERROR_CLASS = "inError";
var ERROR_CLASS = "error";
var ERROR_VISIBLE_CLASS = "visible";


// **************************************************************
//                      Utility Functions
// **************************************************************

function thatsNotMe() {
    var dt = new Date();
    dt.setDate(dt.getDate() - 1);
    document.cookie = "ApfmReturningFamily" + "=;expires=" + dt.toGMTString() + ";domain=aplaceformom.com;path=/";
    window.location.reload(true);
}

function addClass(element, newClassName)
{
    if (!hasClass(element, newClassName))
    {
        element.className += (" " + newClassName);
    }
}

function disableSubmitButton(submitButtonId)
{
    var submitButton = document.getElementById(submitButtonId);
    if (submitButton)
    {
        submitButton.disabled = true;
        addClass(submitButton, "disabled");

        // For non-IE browsers, we need to re-enable the button on unload so it
        // is enabled if the user backs up to this page.
        if (navigator.appName != "Microsoft Internet Explorer")
        {
            window.onunload =
                function()
                {
                    submitButton.disabled = false;
                    removeClass(submitButton, "disabled");
                }
        }
    }
}

function getStyle(element, propertyName)
{
	var value = "";
 
 	if(document.defaultView && document.defaultView.getComputedStyle)
	{
	    // Gecko-based browsers (Firefox, etc)
		value = document.defaultView.getComputedStyle(element, "").getPropertyValue(propertyName);
	}
	else if(element.currentStyle)
	{
	    // Internet Explorer 5.5+
		propertyName = propertyName.replace(/\-(\w)/g, 
		    function (strMatch, p1) { return p1.toUpperCase(); });
		value = element.currentStyle[propertyName];
	}
	return value;
}

function hasClass(element, className)
{
    var classExp = new RegExp("(^|\\s)" + className + "(\\s|$)");
    
    return classExp.test(element.className);
}

function removeClass(element, className)
{
    var classExp = new RegExp("(^|\\s)" + className + "(\\s|$)");

    element.className = element.className.replace(classExp, "");
}

function getVisibleElement(elementId)
{
    var element = document.getElementById(elementId);

    if (element && getStyle(element, "display") == "none")
    {
        element == null;
    }

    return element;
}

function trim(text)
{
    return text.replace(/^\s+|\s+$/g, "");
}


// **************************************************************
//                      Event Functions
// **************************************************************

function AllowOnlyNumeric()
{
    // Only run this checking on IE
    if (window.event)
    {
        // Get the ASCII value of the key that the user entered
        var key = window.event.keyCode;

        // Cancel the event for keys outside 0-9 (48-57)
        if (key < 48 || key > 57)
        {
            window.event.returnValue = false;
        }
    }
}

function handlePhoneKey(event, currentField, nextFieldId)
{
    if ((event.keyCode >= 48 && event.keyCode <= 57) ||         // numbers
        (event.keyCode >= 96 && event.keyCode <= 105))          // numbers on numeric key pad
    {
        if (currentField.value.length == currentField.maxLength && !autoTabTriggered)
        {
            var nextElement = getVisibleElement(nextFieldId);
            if (nextElement != null)
            {
                nextElement.focus();
                nextElement.select();
                autoTabTriggered = true;
            }
        }
    }
}

function handlePhoneKeyDown()
{
    autoTabTriggered = false;
}

function on_submit(submitButtonId, showValidationAlert)
{
    var result;

    _validationSummary = "";

    result = validateLocation();
    result = validateTextField("firstName", "fvFirstName", null, true, true, false) && result;
    result = validateTextField("lastName", "fvLastName", null, true, true, false) && result;
    result = validateTextField("email", "fvEmail", /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,68})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/, true, true, true) && result;
    result = validatePhone() && result;
    result = validateTextField("ddlSource", "fvDdlSource", null, true, true, false) && result;

    if (result)
    {
        disableSubmitButton(submitButtonId);
    }
    else if (showValidationAlert)
    {
        alert(_validationSummary);
    }

    return result;
}


// **************************************************************
//                   Validation Functions
// **************************************************************

function validateLocation()
{
    var locationHidden = false;
    var isValid = true;

    var hideLocationField = document.getElementById("HideDesiredLocation");
    if (!hideLocationField || (hideLocationField.value == "0"))
    {
        var cityElement = getVisibleElement("city");
        if (cityElement)
        {
            var zip = document.getElementById("zipCode").value;

            isValid = false;

            // check for Zip Code first
            if (validateTextField("zipCode", null, "^\\d{5}$", false, true))
            {
                isValid = true;
            }
            else
            {
                // No Zip Code, make sure we have both City & State        
                var cityValid = validateTextField("city", null, "^[A-Za-z][A-Za-z' \\.\\-]*$", false, true);
                var state = document.getElementById("ddlState").value;

                if (cityValid && (state.length > 0))
                {
                    //Success!  We have a City & State.
                    isValid = true;
                }
            }

            var locationError = document.getElementById("fvLocation");
            locationError.className = ERROR_CLASS + (isValid ? "" : (" " + ERROR_VISIBLE_CLASS));

            if (!isValid)
            {
                _validationSummary += locationError.innerHTML + ".\n";
            }
        }
    }
    
    return isValid;
}

function validatePhoneWorker(sArea, sExchange, sLocal, phoneExt) {
    
    var isValid = false;
    var phoneField = sArea.parentNode;
    var extension = "";
    if (phoneExt != null) {
        extension = phoneExt.value;
    }

    var sAreaReg = new RegExp("[2-9][0-8][0-9]");
    var sExchangeReg = new RegExp("[2-9](([1][0]|[1][2-9])|([0]|[2-9])[0-9])");
    var sLocalReg = new RegExp("[0-9][0-9][0-9][0-9]");
    var numbersOnly = new RegExp("^[0-9]*$");

    isValid = sAreaReg.test(sArea.value) &&
            sExchangeReg.test(sExchange.value) &&
            sLocalReg.test(sLocal.value) &&
            numbersOnly.test(extension) &&
            sArea.value != "900" &&
            sArea.value != "976";

    var phoneError = document.getElementById("fvPhone");
    phoneError.className = ERROR_CLASS + (isValid ? "" : (" " + ERROR_VISIBLE_CLASS));

    if (isValid) {
        removeClass(phoneField, FIELD_ERROR_CLASS);
    }
    else {
        _validationSummary += phoneError.innerHTML + ".\n";
        addClass(phoneField, FIELD_ERROR_CLASS);
    }

    return isValid;
}

function validatePhone()
{
    var sArea = getVisibleElement("phone_areacode")
    var sExchange = getVisibleElement("phone_prefix");
    var sLocal = getVisibleElement("phone_suffix");
    var phoneExt = getVisibleElement("dphone_ext");

    return validatePhoneWorker(sArea, sExchange, sLocal, phoneExt);
}

function validateTextField(inputElementId, invalidMessageElementId, validationExpression, validIfFieldMissing,
                           isRequired, compareNoCase)
{
    var isValid = true;
    var element = getVisibleElement(inputElementId);

    if (element)
    {
        element.value = trim(element.value);
        
        if (element.value.length == 0)
        {
            // Empty elements are valid only when not required
            isValid = !isRequired;
        }
        else
        {
            // Non-empty elements are valid if no validation expression, or the expression test passes
            if (validationExpression)
            {
                var regex = new RegExp(validationExpression);
                if (compareNoCase)
                    isValid = regex.test(element.value.toLowerCase());
                else
                    isValid = regex.test(element.value);
            }
        }

        // invalidMessageElementId can be null if the caller just wants to test (but not report) validity
        if (invalidMessageElementId)
        {
            var invalidMessageElement = document.getElementById(invalidMessageElementId);
            invalidMessageElement.className = ERROR_CLASS + (isValid ? "" : (" " + ERROR_VISIBLE_CLASS));
            
            if (!isValid)
            {
                _validationSummary += invalidMessageElement.innerHTML + ".\n";
            }
        }

        // Add error class to field element
        var fieldElement = element.parentNode;
        if (hasClass(fieldElement, FIELD_CLASS))
        {
            if (isValid)
            {
                removeClass(fieldElement, FIELD_ERROR_CLASS);
            }
            else
            {
                addClass(fieldElement, FIELD_ERROR_CLASS);
            }
        }
    }
    else if (!validIfFieldMissing)
    {
        isValid = false;
    }
    
    return isValid;
}

function validateTextFieldWithDefaultText(controlid, defaulttext, errmsgid) {
    var isValid = false;
    var cntl = document.getElementById(controlid);
    if (cntl == null || cntl.value == defaulttext) {
        _validationSummary += document.getElementById(errmsgid).innerHTML + ".\n";
        return false;
    }
    return validateTextField(controlid, errmsgid, null, true, true, false);
}


