﻿//Custom validation functions
var CG2CustomValidator = new CG2CustomValidatorClass();
function ValidationObjectSwapper(val)
{
    this.Value = val;
    this.value = val;
}
function CG2CustomValidatorClass()
{
    this.ValidateRequiredCheckBox = function(sender,args)
    {
        
        var id = sender.id;
        var id2 = '';
        var ida = id.split('_');
        var idchk = sender.attributes['ctrl'].value;
        for (var x = 0; x< ida.length-1;x++)
        {
            id2 += ida[x] + '_';
        }
        id2 += idchk;
        var chk = document.getElementById(id2);
        args.IsValid = chk.checked;
    }
    this.ValidateDate = function(sender,args)
    {
        
        args.IsValid =  ValidateDateOnly(new ValidationObjectSwapper(args.Value));
    }
    this.ValidateDateTime = function(sender,args)
    {
        args.IsValid = ValidateDateTime(new ValidationObjectSwapper(args.Value));
    }
    this.ValidateIsInt = function(sender,args)
    {
    
       var ValidChars = "0123456789";
       var IsNumber=true;
       var Char;
       var sText = args.Value;
     
       for (i = 0; i < sText.length && IsNumber == true; i++) 
          { 
          Char = sText.charAt(i); 
          if (ValidChars.indexOf(Char) == -1) 
             {
             IsNumber = false;
             }
          }
       args.IsValid = IsNumber;

    }
    
}

function ValidateDateTime(obj)
	{			
		
		//convert date to string for regex testing
		var sDate = new String(obj.value);
		
		//convert date to numeric to test it is vaguely right
		var n = Date.parse(sDate);
				
		if(isNaN(n))
		{
			return false;
		
		}
		
		//regular expression for date and time
		var oRE = /^\d{1,2}\/\d{1,2}\/\d{4}\s\d{1,2}:\d{2}$/;
		
		if(!oRE.test(sDate))
		{
			return false;
		}	
		var arrDate = sDate.split("/");
		var day = parseInt(arrDate[0].substring(0,1) == "0" ? arrDate[0].substring(1,2) : arrDate[0] ); 
		var month = parseInt(arrDate[1].substring(0,1) == "0" ? arrDate[1].substring(1,2) : arrDate[1]); 
		var year = arrDate[2];
			
			
		//strip off time component
		var sTime = year.slice(5);
		year = year.slice(0,4);
			
		var arrTime = sTime.split(":");
		var hour = parseInt(sTime[0]);
		var minute = parseInt(sTime[1]);
			
		//get days in feb
		var feb = eval(((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
		
	
		//set up months in year
		var arrMonths = new Array(0,31,feb,31,30,31,30,31,31,30,31,30,31);
			
		//Let's validate!
		if(day < 1 || day > arrMonths[month] || month < 1 || month > 12 || hour < 0 || hour > 24 || minute < 0 || minute > 59)
		{
			return false;
		}
			
		return true;
	}
	
	function ValidateDateOnly(obj)
	{			
		
		//convert date to string for regex testing
		var sDate = new String(obj.value);
		
		
		//convert date to numeric to test it is vaguely right
		var n = Date.parse(sDate);
		
		if(isNaN(n))
		{
			return false;
		
		}
		
		//regular expression for date
		var oRE = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
		
		if(!oRE.test(sDate))
		{
			return false;
		}	
		var arrDate = sDate.split("/");
		var day = parseInt(arrDate[0].substring(0,1) == "0" ? arrDate[0].substring(1,2) : arrDate[0] ); 
		var month = parseInt(arrDate[1].substring(0,1) == "0" ? arrDate[1].substring(1,2) : arrDate[1]); 
		var year = parseInt(arrDate[2]);
					
		//get days in feb
		var feb = eval(((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
			
		//set up months in year
		var arrMonths = new Array(0,31,feb,31,30,31,30,31,31,30,31,30,31);
		
				
		//Let's validate!
		if(day < 1 || day > arrMonths[month] || month < 1 || month > 12 )
		{
			return false;
		}
			
		return true;
	}
