﻿// JScript File

function StripSpacesFromCard(argString)
{
    var newString = "";
    var i;
    for (i = 0; i < argString.length; i++)
    {
        var c = argString.charAt(i);
        if (c != ' ') newString += c;
    }
    return (newString);
}

function IsValidCCNumber(argSrc, argObject)
{
    var i;
    var ccNum = argObject.Value;
    
    if (ccNum.length > 19)
    {
        argObject.IsValid = false;
        return;
    }
    
    ccNum = StripSpacesFromCard(ccNum);
    
    sum = 0; mul = 1; l = ccNum.length;
    for (i = 0; i < l; i++)
    {
        digit = ccNum.substring(l-i-1,l-i);
        tproduct = parseInt(digit ,10)*mul;
        if (tproduct >= 10)
            sum += (tproduct % 10) + 1;
        else
            sum += tproduct;
        if (mul == 1)
            mul++;
        else
            mul--;
    }

    if ((sum % 10) == 0)
        argObject.IsValid = true;
    else
        argObject.IsValid = false;
        
    return;
}

function ValidCardNumberCombination(argCardType, argCardNum)
{
    if (argCardNum.length == 0)
        return true;

    var ccNum = StripSpacesFromCard(argCardNum);
        
    switch (argCardType.substring(0,1))
    {
        case 'A':
            if (ccNum.substring(0,1) != '3' || ccNum.length != 15)
                return false;
            else
                return true;
        case 'V':
            if (ccNum.substring(0,1) != '4' || ccNum.length != 16)
                return false;
            else
                return true;
        case 'M':
            if (ccNum.substring(0,1) != '5' || ccNum.length != 16)
                return false;
            else
                return true;
        case 'D':
            if (ccNum.substring(0,4) != '6011' || ccNum.length != 16)
                return false;
            else
                return true;
    }
}

function IsValidCaseNumber(argValue, argType)
{
    var isGood = true;
    var pattern = "";
    
    switch (argType)
    {
        case 'CC':
        case 'GSCC':
        case 'GSCO':
            if (argValue.length < 8)
                return false;
            break;
        case 'JC':
            if (argValue.length < 5)
                return false;
            break;
    }
    

    var ckCaseNum = argValue.toString();
    ckCaseNum = ckCaseNum.toUpperCase();
    ckCaseNum = ckCaseNum.substring(2,4);
    switch (argType)
    {
        case 'CC':
            //first check new pattern
            pattern = "[a-zA-Z]\\d[a-zA-Z]\\d\\d\\d\\d[a-zA-Z\\d]";
            if (isRegexMatch(argValue, pattern))
            {
                break;
            }
            
            //now check old pattern
            switch (ckCaseNum)
            {
                case 'LA':
                case 'CR':
                    break;
                default:
                    isGood = false;
                    break;
            }
            break;
        case 'GSCC':
            switch (ckCaseNum)
            {
                case 'TD':
                case 'CV':
                case 'ST':
                case 'VC':
                case 'OP':
                    break;
                default:
                    isGood = false;
                    break;
            }
            break;
        case 'GSCO':
            //first check new pattern
            pattern = "\\d\\d[a-zA-Z][a-zA-Z]\\d\\d\\d\\d";
            if (isRegexMatch(argValue, pattern))
            {
                break;
            }
            
            //now check old pattern
            switch (ckCaseNum)
            {
                case 'OR':
                case 'CW':
                case 'VO':
                case 'PR':
                    break;
                default:
                    isGood = false;
                    break;
            }
            break;
    }
    return isGood;
}

function isRegexMatch(value, pattern)
{
	var re = new RegExp(pattern);
	if (value.match(re))
	{
		return true;
	}
	else
	{
		return false;
	}
}
