﻿    function IsOptionSelected(optionGroupName, showError)
    {
        var ws = $(':input[name=' + optionGroupName + ']:checked');
        if (ws.size() == 1 && ws.val() != '')
        {
            if (showError) 
            {
                $(':input[name=' + optionGroupName + ']').removeClass('input-validation-error');
            }
            return true;
        }
        if (showError)
        {
            $(':input[name=' + optionGroupName + ']').addClass('input-validation-error');
        }
        return false;
    }
    function MatchRegEx(input, expression)
    {
        var match = input.toString().match(expression);
        if (match == null || match == undefined)
        {
            return false;
        }
        return input.toString().match(expression)[0] == input;
    }
    function CheckDate(dateString, allowFuture)
    {
        try
        {
            var d = new Date(dateString);
            result = !isNaN(d);
            if (result && (d.getFullYear() < 1900 || (!allowFuture && d > new Date())))
            {
                result = false;
            }
            return result;
        }
        catch (Error)
        {
            return false;
        }
    }
    function ValidDateField(fieldName, allowFuture, setClass)
    {
        ClearSpaces(fieldName);
        var field = $(fieldName);
        var d = new Date(field.val());
        result = CheckDate(field.val(), allowFuture);
        if (!result && (setClass))
        {
            $(fieldName).addClass('input-validation-error');
        }
        else
        {
            $(fieldName).removeClass('input-validation-error');
        }
        return result;
    }
    String.prototype.trim = function()
    {
        return this.replace(/^\s+|\s+$/g, "");
    }
    String.prototype.ltrim = function()
    {
        return this.replace(/^\s+/, "");
    }
    String.prototype.rtrim = function()
    {
        return this.replace(/\s+$/, "");
    }
    function ClearSpaces(fieldName)
    {
//        if ($(fieldName).val().trim().length != $(fieldName).val().trim().length)
//        {
//            $(fieldName).val($(fieldName).val().trim());
//        }
    }
    function HasValue(fieldName, showError)
    {
        ClearSpaces(fieldName);
        if ($(fieldName).val().length != 0)
        {
            $(fieldName).removeClass('input-validation-error');
            return true;
        }
        if (showError)
        {
            $(fieldName).addClass('input-validation-error');
        }
        return false;
    }

    function TestAgainstRegEx(fieldName, expression, successCondition)
    {
        ClearSpaces(fieldName);
        var field = $(fieldName);
        return (MatchRegEx(field.val(), expression) == successCondition);
    }
    function FieldValueMatchesRegEx(fieldName, expression)
    {
        return TestAgainstRegEx(fieldName, expression, true);
    }
    function FieldValueFailsRegEx(fieldName, expression)
    {
        return TestAgainstRegEx(fieldName, expression, false);
    }
    function ValidSSN(fieldName)
    {
        ClearSpaces(fieldName);
        var isValid = true;
        if (!FieldValueMatchesRegEx(fieldName, '^\\d{3}-?\\d{2}-?\\d{4}$') || !FieldValueFailsRegEx(fieldName, '^(\\d)\\1{2}-?\\1{2}-?\\1{4}$'))
        {
            isValid = false;
            $(fieldName).addClass('input-validation-error');
        }
        else
        {
            $(fieldName).removeClass('input-validation-error');
        }
        return isValid;
    }
    function ValidCaseNumber(fieldName)
    {
        ClearSpaces(fieldName);
        var isValid = true;
        if (!FieldValueMatchesRegEx(fieldName, '^([9012]\\d)-\\d{5}$'))
        {
            isValid = false;
            $(fieldName).addClass('input-validation-error');
        }
        else
        {
            $(fieldName).removeClass('input-validation-error');
        }
        return isValid;
    }
    function ValidPhoneNumber(fieldName)
    {
        ClearSpaces(fieldName);
        var isValid = true;
        if (!FieldValueMatchesRegEx(fieldName, '^(?:\\(\\d{3}\\)\\s?|\\d{3}(-?|\\s?))\\d{3}-?\\d{4}$'))
        {
            isValid = false;
            $(fieldName).addClass('input-validation-error');
        }
        else
        {
            $(fieldName).removeClass('input-validation-error');
        }
        return isValid;
    }
    function ValidEmailAddress(fieldName)
    {
        ClearSpaces(fieldName);
        var isValid = true;
        if (!FieldValueMatchesRegEx(fieldName, '^(?:[a-zA-Z0-9_\\-\\.]+)@(?:(?:\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(?:(?:[a-zA-Z0-9\\-]+\\.)+))(?:[a-zA-Z]{2,4}|[0-9]{1,3})$'))
        {
            isValid = false;
            $(fieldName).addClass('input-validation-error');
        }
        else
        {
            $(fieldName).removeClass('input-validation-error');
        }
        return isValid;
    }

    function ValidZipCode(fieldName, message)
    {
        ClearSpaces(fieldName);
        var isValid = true;
        if (!FieldValueMatchesRegEx(fieldName, '^\\d{5}-?(?:\\d{4})?$', message))
        {
            isValid = false;
            $(fieldName).addClass('input-validation-error');
        }
        else
        {
            $(fieldName).removeClass('input-validation-error');
        }
        return isValid;
    }
    function ValidInteger(fieldName, message)
    {
        ClearSpaces(fieldName);
        var isValid = true;
        if (!FieldValueMatchesRegEx(fieldName, '^\\d+$', message))
        {
            isValid = false;
            $(fieldName).addClass('input-validation-error');
        }
        else
        {
            $(fieldName).removeClass('input-validation-error');
        }
        return isValid;
    }
    function ValidCurrency(fieldName, message)
    {
        ClearSpaces(fieldName);
        var isValid = true;
        if (!FieldValueMatchesRegEx(fieldName, '^\\$?(?:(?:\\d{1,3}(?:,\\d{3})*)|(?:\\d+))(?:\\.\\d{0,2})?$', message))
        {
            isValid = false;
            $(fieldName).addClass('input-validation-error');
        }
        else
        {
            $(fieldName).removeClass('input-validation-error');
        }
        return isValid;
    }
    function ValidDecimal(fieldName, message)
    {
        ClearSpaces(fieldName);
        var isValid = true;
        if (!FieldValueMatchesRegEx(fieldName, '^(?:(?:\\d{1,3}(?:,\\d{3})*)|(?:\\d+))(?:\\.\\d{0,2})?$', message))
        {
            isValid = false;
            $(fieldName).addClass('input-validation-error');
        }
        else
        {
            $(fieldName).removeClass('input-validation-error');
        }
        return isValid;
    }
    function IsZero(fieldName, message)
    {
        ClearSpaces(fieldName);
        if (!HasValue(fieldName) || parseFloat($(fieldName).val()) == 0)
        {
            if (message != undefined)
            {
                alert(message);
                $(fieldName).focus();
            }
            return true;
        }
        return false;
    }
    function IsTotalAtLeastXMonths(year1, month1, year2, month2, year3, month3, months)
    {
        return (GetMonthsFromYear(year1) + GetMonths(month1)
            + GetMonthsFromYear(year2) + GetMonths(month2) 
            + GetMonthsFromYear(year3) + GetMonths(month3)) >= months;
    }
    function GetMonthsFromYear(yearField)
    {
        var total = 0;
        if (!IsZero(yearField) && ValidInteger(yearField))
        {
            total += (parseInt($(yearField).val()) * 12);
        }
        return total;
    }
    function GetMonths(monthField)
    {
        var total = 0;
        if (!IsZero(monthField) && ValidInteger(monthField))
        {
            //total += Math.min(parseInt($(monthField).val()),12);
            total += parseInt($(monthField).val());
        }
        return total;
    }
    function CheckYearsAndMonths(personType, personTypeDesc, Errors, yearsRequired, line, recordType, recordTypeDesc)
    {
        var isValid = true;
        if (yearsRequired)
        {
            if (!HasValue(personType + recordType + 'Years' + line, true))
            {
                $(personType + recordType + 'Years' + line).val('0');
            }
        }
        if (HasValue(personType + recordType + 'Years' + line, false) && !ValidInteger(personType + recordType + 'Years' + line, true))
        {
            isValid = false;
            Errors[Errors.length] = 'Please Enter ' + personTypeDesc + ' Line ' + line + ' ' + recordTypeDesc + ' Information - Years as a number';
        }
        if (HasValue(personType + recordType + 'Years' + line, false) && ValidInteger(personType + recordType + 'Years' + line, false))
        {
            if (!HasValue(personType + recordType + 'Months' + line, false))
            {
                $(personType + recordType + 'Months' + line).val('0');
            }
            else if (!ValidInteger(personType + recordType + 'Months' + line, true))
            {
                isValid = false;
                Errors[Errors.length] = 'Please Enter ' + personTypeDesc + ' Line ' + line + ' ' + recordTypeDesc + ' Information - Months as a number';
            }
        }
        return isValid;
    }
