﻿function FormatNorthAmericanPhone(phoneField)
{

    // Auto-format basic North America phone numbers.  This method supports
    // 7, 10, 11 digit numbers and 1, 2, 3 and 4 extension digit numbers.  
    // Examples: 410-555-1212, 1-800-555-1212, 410-555-1212 x111

    if (typeof (phoneField) == "undefined" || phoneField == null || phoneField.value == null) return;

    // Remove any non-numeric characters
    var sTmp = phoneField.value.replace(/[^0-9]/g, "");

    // If the number is a length we expect and support, format the number
    switch (sTmp.length)
    {
        case "14105551212".length:
            if (sTmp.substr(0, 1) == "1")
            {
                phoneField.value = sTmp.substr(0, 1) + " (" + sTmp.substr(1, 3) + ") " + sTmp.substr(4, 3) + "-" + sTmp.substr(7, 4);
            }
            else
            {
                phoneField.value = "(" + sTmp.substr(0, 3) + ") " + sTmp.substr(3, 3) + "-" + sTmp.substr(6, 4) + " x" + sTmp.substr(10, 1);
            }
            break;

        case "4105551212".length:
            phoneField.value = "(" + sTmp.substr(0, 3) + ") " + sTmp.substr(3, 3) + "-" + sTmp.substr(6, 4);
            break;

        case "5551212".length:
            phoneField.value = sTmp.substr(0, 3) + "-" + sTmp.substr(3, 4);
            break;

        case "410555121211".length:
            if (sTmp.substr(0, 1) == "1")
            {
                phoneField.value = sTmp.substr(0, 1) + " (" + sTmp.substr(1, 3) + ") " + sTmp.substr(4, 3) + "-" + sTmp.substr(7, 4) + " x" + sTmp.substr(11, 1);
            }
            else
            {
                phoneField.value = "(" + sTmp.substr(0, 3) + ") " + sTmp.substr(3, 3) + "-" + sTmp.substr(6, 4) + " x" + sTmp.substr(10, 2);
            }
            break;

        case "4105551212111".length:
            if (sTmp.substr(0, 1) == "1")
            {
                phoneField.value = sTmp.substr(0, 1) + " (" + sTmp.substr(1, 3) + ") " + sTmp.substr(4, 3) + "-" + sTmp.substr(7, 4) + " x" + sTmp.substr(11, 2);
            }
            else
            {
                phoneField.value = "(" + sTmp.substr(0, 3) + ") " + sTmp.substr(3, 3) + "-" + sTmp.substr(6, 4) + " x" + sTmp.substr(10, 3);
            }
            break;

        case "41055512121111".length:
            if (sTmp.substr(0, 1) == "1")
            {
                phoneField.value = sTmp.substr(0, 1) + " (" + sTmp.substr(1, 3) + ") " + sTmp.substr(4, 3) + "-" + sTmp.substr(7, 4) + " x" + sTmp.substr(11, 3);
            }
            else
            {
                phoneField.value = "(" + sTmp.substr(0, 3) + ") " + sTmp.substr(3, 3) + "-" + sTmp.substr(6, 4) + " x" + sTmp.substr(10, 4);
            }
            break;

        case "410555121211111".length:
            if (sTmp.substr(0, 1) == "1")
            {
                phoneField.value = sTmp.substr(0, 1) + " (" + sTmp.substr(1, 3) + ") " + sTmp.substr(4, 3) + "-" + sTmp.substr(7, 4) + " x" + sTmp.substr(11, 4);
            }
            else
            {
                phoneField.value = "(" + sTmp.substr(0, 3) + ") " + sTmp.substr(3, 3) + "-" + sTmp.substr(6, 4) + " x" + sTmp.substr(10, 5);
            }
            break;
    }
}