﻿    
//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;    
    
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 addClass(element, newClassName)
{
    if (element.className.match("(^|\s)" + newClassName + "(\s|$)") == null)
    {
        element.className += (" " + newClassName);
    }
}

function getVisibleElement(elementId)
{
    var element = document.getElementById(elementId);
    
    if (element && getStyle(element, "display") == "none")
    {
        element == null;
    }
    
    return element;
}

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 validatePhone()
{
    var isValid = false;

    var sArea = getVisibleElement("phone_areacode")
    var sExchange = getVisibleElement("phone_prefix");
    var sLocal = getVisibleElement("phone_suffix");
    var phoneExt = getVisibleElement("dphone_ext");
    var extention = "";
    if (phoneExt != null) {
        extention = 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(extention) &&
            sArea.value != "900" &&
            sArea.value != "976";

    var phoneError = document.getElementById("fvPhone");
    phoneError.className = "error" + (isValid ? "" : " visible");

    return isValid;
}

function trim(text)
{
    return text.replace(/^\s+|\s+$/g, "");
}

function validateLocation()
{
    var isValid = true;
    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" + (isValid ? "" : " visible");
    }
    
    return isValid;
}

function validateTextField(elementId, invalidMessageElementId, validationExpression, validIfFieldMissing, isRequired, compareNoCase)
{
    var isValid = true;
    var element = getVisibleElement(elementId);

    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" + (isValid ? "" : " visible");    
        }
    }
    else if (!validIfFieldMissing)
    {
        isValid = false;
    }
    
    return isValid;
}


function on_submit(submitId)
{
    var result;

    result = validatePhone();
    result = validateLocation() && result;
    result = validateTextField("firstName", "fvFirstName", null, true, true, false) && result;
    result = validateTextField("lastName", "fvLastName", null, true, true, false) && result;
    //result = validateTextField("email", "fvEmail", "^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\\-+)|([A-Za-z0-9]+\\.+)|([A-Za-z0-9]+\\++))*[A-Za-z0-9]+@((\\w+\\-+)|(\\w+\\.))*\\w{2,63}\\.[a-zA-Z]{2,6}$", true, true)
    //            && result;
    result = validateTextField("email", "fvEmail", /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,68})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/, true, true, true) && result;
    result = validateTextField("ddlSource", "fvDdlSource", null, true, true, false) && result;

    if (result == true)
    {
        var ctl = document.getElementById(submitId);
        if (ctl != null)
        {
            ctl.disabled = true;
            addClass(ctl, "disabled");
        }
    }
    
    return result;
}

function AllowOnlyNumeric() {
    // Get the ASCII value of the key that the user entered
    var key = window.event.keyCode;

    // Verify if the key entered was a numeric character (0-9) 
    if (key > 47 && key < 58)
    // If it was, then allow the entry to continue
        return;
    else
    // If it was not, then dispose the key and continue with entry
        window.event.returnValue = null;
}