﻿/*
    32 = SPACE bar
    8  = BACKSPACE
    9  = ESC
    46 = DELETE
    222 =  
*/ 

function IsNumber(source, args)
{
    var objNotNumberPattern=new RegExp('[^0-9.-]');
    var objTwoDotPattern=new RegExp('[0-9]*[.][0-9]*[.][0-9]*');
    var objTwoMinusPattern=new RegExp('[0-9]*[-][0-9]*[-][0-9]*');
    var strValidRealPattern='^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$';
    var strValidIntegerPattern='^([-]|[0-9])[0-9]*$';
    var objNumberPattern = new RegExp('(' + strValidRealPattern +')|(' + strValidIntegerPattern + ')');
    args.IsValid = !objNotNumberPattern.test(args.Value) && !objTwoDotPattern.test(args.Value) && !objTwoMinusPattern.test(args.Value) && objNumberPattern.test(args.Value);
}

function isNumericKeyStroke()
{
    var returnValue = false;
    var keyCode = (window.event.which) ? window.event.which : window.event.keyCode;
    if ( ((keyCode >= 48) && (keyCode <= 57)) || (keyCode == 8) ||(keyCode == 46) || (keyCode == 45) ) 
    returnValue = true;

    if ( window.event.returnValue )
    window.event.returnValue = returnValue;
    return returnValue;
}

function isNumericKeyStrokeForDate()
{
    var returnValue = false;
    var keyCode = (window.event.which) ? window.event.which : window.event.keyCode;
    if ( ((keyCode >= 48) && (keyCode <= 57)) || (keyCode == 8) ||(keyCode == 47) ) 
    returnValue = true;

    if ( window.event.returnValue )
    window.event.returnValue = returnValue;
    return returnValue;
}

function isNumericOnlyKeyStroke()
{
    var returnValue = false;
    var keyCode = (window.event.which) ? window.event.which : window.event.keyCode;
    if ( ((keyCode >= 48) && (keyCode <= 57)) || (keyCode == 8)) 
    returnValue = true;

    if ( window.event.returnValue )
    window.event.returnValue = returnValue;
    return returnValue;
}

function IsNumeric(Value)
{
    if(Value !=9 & Value != 8 & Value != 46)
    {
        //Allow only Numbers (without spaces)

        if(Value >= 48 & Value <= 57 & event.shiftKey == false)
        {
            event.returnValue = true;
        }
        else
        {
            if(Value >= 96 & Value <= 105)
            {
                event.returnValue = true;
            }
            else
            {
                event.returnValue = false;
            }
        }
    }
}
 
function IsAlpha(Value)
{
    //Allow only Letters (with spaces)
    if(Value != 9 & Value != 8 & Value != 46 & Value != 222 & Value !=32)
    {
        if(Value >= 65 & Value <= 90)
        {
            event.returnValue = true;
        }
        else
        {
            event.returnValue = false;
        }
    }
}
 
function IsDate(source, args)
{
    var pattern = '([1-9]|1[012])[-/.]([1-9]|[12][0-9]|3[01])[-/.](19|20)\\d\\d$';
    var regDate = new RegExp(pattern);
    var retvalue = regDate.test(args.Value);
    
    //further validation, if its false, skip it.
    if(retvalue == true)
    {
        if(args.Value.indexOf('/')>-1)
        { 
            slash1 = args.Value.indexOf('/');
            slash2 = args.Value.indexOf('/',slash1 + 1);        

            //Note Len position character is not inclusive
            Month = args.Value.substring(0,slash1);
            Day = args.Value.substring(slash1 + 1,slash2);
            Year = args.Value.substring(slash2 + 1, args.Value.length);
        }
        else
        {
            Month = parseInt(args.Value.substring(0,2));
            Day = parseInt(args.Value.substring(2,4));
            Year = parseInt(args.Value.substring(4,9));
        }

        if(Month<1 | Month>12)
        {
            retvalue = false;
        }
        else
        {
              if(Day<1 | Day>31)
              {
                    retvalue = false;
              }
              else
              {
                    if((Month==4 | Month==6 | Month==9 | Month==11) & Day >30)
                    {
                        retvalue = false;
                    }
                    else
                    {
                          if(Month==2)
                            {
                                if ((Math.floor(Year/4) == (Year/4)) && ((Math.floor(Year/100) != (Year/100)) || (Math.floor(Year/400) == (Year/400))))
                                {
                                    //leap year
                                      if(Day>29)
                                      {
                                            retvalue = false;
                                      }
                                }
                                else
                                {
                                    //non Leap year
                                      if(Day>28)
                                      {
                                        retvalue = false;
                                      }
                                }                         
                          }
                          else
                          {
                                if(parseInt(Year)<1753 | parseInt(Year)>2099)
                                {
                                      retvalue = false;
                                }
                          }
                    }
              }
        }
    }
    
    args.IsValid = retvalue;
}

function IsValidDate(source,args)
{
    var pattern = '([1-9]|1[012])[-/.]([1-9]|[12][0-9]|3[01])[-/.](19|20)\\d\\d$';
    var regDate = new RegExp(pattern);
    var value = regDate.test(args.Value);
    args.IsValid = value;
}
 
function Mask(Type,inString,fieldName)
{
    //Allows user to only enter dates as numbers. This function will format the input into a proper
    //date on the fly as the user types
    if(event.keyCode!=8)
    {
        switch(Type)
        {
            case 'Date':
                do
                {
                     inString = inString.replace('/',''); 
                }while(inString.indexOf('/')>-1)

                switch(inString.length)
                {
                    case 1:
                        inString = inString + '/';
                        break;                    
                    case 2:   
                        if(parseInt(inString)<13)
                        {
                            inString = inString + '/';
                        }
                        else
                        {
                            inString = inString.substring(0,1) + '/' + inString.substring(1,2);
                        }
                        break;               
                    case 3:
                        inString = inString.substring(0,2) + '/' + inString.substring(2,3) + '/';
                        break;                 
                    case 4:
                        inString = inString.substring(0,2) + '/' + inString.substring(2,4) + '/';
                        break;
                    case 5:
                        inString = inString.substring(0,2) + '/' + inString.substring(2,4) + '/' + inString.substring(4,5);
                        break;
                    case 6:
                        inString = inString.substring(0,1) + '/' + inString.substring(1,2) + '/' + inString.substring(2,6);
                        break;
                    case 7:
                        if(parseInt(inString.substring(1,3))>9)
                        {
                            inString = inString.substring(0,1) + '/' + inString.substring(1,3) + '/' + inString.substring(3,7);
                        }
                        else
                        {
                            inString = inString.substring(0,2) + '/' + inString.substring(2,3) + '/' + inString.substring(3,7);
                        }
                        break;
                    case 8:
                        inString = inString.substring(0,2) + '/' + inString.substring(2,4) + '/' + inString.substring(4,8);
                        break;
                }              
                break;
            case 'SSN':
                break;
        }       
        document.getElementById(fieldName).value = inString;
   }
}
