﻿// This file contains Javascript pertaining to validating strings against specific value tests

// Returns true if string is a valid email address format
// Passes: 'firstname@here.com', 'first.last@somewhere.net'
// Fails: 'bademail.com', 'johndoe@thisplace.3com2'
function bool_GeneralStringValidation_StringIsValidEmailAddress(string_input)
{
    var filter=/^[\w-]+(\.[\w-]+)*@([\w-]+\.)*\w[\w-]{0,66}\.[a-zA-Z]{2,6}(\.[a-zA-Z]{2})?$/;
    
    return filter.test(string_input);
}

// Returns true if string is a valid street address format (one or more digits followed by a separator and one or more letters)
// Passes: '123 Fake Street'
// Fails: 'My Address', 'Somewhere 567', '769'
function bool_GeneralStringValidation_StringIsValidStreetAddress(string_input)
{
    var filter=/^.*((([\d]+)|([Oo][Nn][Ee]))[a-zA-Z -._:;]+)|([a-zA-Z -._:;]+(([\d]+)|([Oo][Nn][Ee]))).*$/;

    return (filter.test(string_input));
}

// Returns true if string is a valid zip code (five digits, optionally followed by a valid separator and four more digits)
// Passes: '12345', '54321-6543'
// Fails: 'x', '1234', '12345$4215', '12345-654'
function bool_GeneralStringValidation_StringIsValidZipCode(string_input)
{
    var filter=/^[\d]{5}([-_ ., ]?[\d]{4})?$/;
    
    return (filter.test(string_input));
}

// Returns true if string is a valid phone number
// Passes: '457-543-8732'
// Fails: '132-243-6546', '666-243-2432', '745-555-7644', '543-777-7777'
function bool_GeneralStringValidation_StringIsValidPhoneNumber(string_input, bool_strictValidation)
{
    if (bool_strictValidation)
        var filter=/^\(?[\d]{3}\)?[-_ .,]?[\d]{3}[-_ .,]?[\d]{4}$/;
    else
        var filter=/^.*\(?[\d]{3}\)?[-_ .,]?[\d]{3}[-_ .,]?[\d]{4}.*$/;
    
    if (!(filter.test(string_input)))
        return false;

    if (bool_strictValidation)
    {
        try
        {
            string_input = string_GeneralStringManipulation_removeNonNumericCharacters(string_input);
        }
        catch (e)
        {
            alert('File GeneralStringManipulation.js must be included on this page!');
            return false;
        }
        
        if(string_input.length == 10)
        {
            var firstThree = string_input.charAt(0) + string_input.charAt(1) + string_input.charAt(2);
            
            if (firstThree > 200 && firstThree < 990 && firstThree != 666)
            {
                var secondThree = string_input.charAt(3) + string_input.charAt(4) + string_input.charAt(5);
                
                if (secondThree != 555 && string_input.charAt(3) != 1)
                {
                    var index = string_input.length - 2
                    var counter = 0;
                    var lastDigit = string_input.charAt(index + 1);

                    while (counter < 6 && index >= 0)
                    {
                        if (string_input.charAt(index) != lastDigit)
                            return true;
                        
                        counter++;
                        index--;
                    } 
                }
            }
        }    
        
        return false;
    }
    else
        return true;
    
}

// Returns true if the substring exactly matches the first characters in the main string
function bool_GeneralStringValidation_StringStartsWithSubString(string_mainString, string_subString)
{
    if (string_mainString.length >= string_subString.length)
    {
        for (var i = 0; i < string_subString.length; i++)
        {
            if (string_mainString.charAt(i) != string_subString.charAt(i))
                return false;
        }
        
        return true;
    }

    return false;
}

function bool_GeneralStringValidation_StringContainsSubString(string_fullString, string_subString)
{
    if (string_fullString.indexOf(string_subString) != -1)
        return true;
    return false;
}

function bool_GeneralStringValidation_StringRemoveSubString(string_fullString, string_subString)
{
    return string_fullString.replace(string_subString, "");
}
