var maxChildAge = null;
function ValidateAcceptTermsAndConditions( source, args )
{
    var checkBox = GetControl( "checkBoxIAgree", 0, "INPUT" );
    if (typeof(args) != 'undefined')
        args.IsValid = checkBox.checked;
    return function(source, args){if (typeof(args) != 'undefined') args.IsValid = checkBox.checked; return checkBox.checked;};
}

function ValidateCheckBox( validator, controlName )
{
    var checkBox = GetControl( controlName, 0, "INPUT" );
    validator.isvalid = checkBox.checked;
//    return validator.isvalid;
    return function(source, args){if (typeof(args) != 'undefined') args.IsValid = checkBox.checked; return checkBox.checked;};
}

// Takes parameters as <controlID1>, <regex1> {, <controlIDx>, <regexx>}
function RequiredRegularExpressionValidator( controlId, regExp )
{
    var result = true;
    for (var p = 0; p < arguments.length; p+=2)
    {
        var textBox = GetControl( arguments[p], 0, "input" );
         
        if ( textBox.value == "" )
        {		
            result = false;
            break;
        }
        
        var re = new RegExp( arguments[p+1] );

        if ( !re.test( textBox.value ) )
        {
            result = false;
            break;
        }
    }
    
    return function(source, args){if (typeof(args) != 'undefined') args.IsValid = result; return result;};
}

function ValidateTextBox( validator, controlName, re, acceptDatesInThePast, addTo2digitYear, minDaysDifferenceFromToday )
{
    var textBox = GetControl( controlName, 0, "INPUT" );
    validator.isvalid = textBox.value != "";
    if ( validator.isvalid && re != null )
    {
        validator.isvalid = re.test( textBox.value );
    }
    var year = 0;
	try
	{
		if ( validator.isvalid )
		{
				var year = 0;
				var i1 = textBox.value.lastIndexOf('.');
				if ( i1 == -1 )
				{
					var i2 = textBox.value.lastIndexOf('/');
					if ( i2 != -1 )
					{
						year = parseInt( textBox.value.substring( parseInt( i2 ) + 1 ) );				
					}	
				}
				else
					year = parseInt( textBox.value.substring( parseInt( i1 ) + 1 ) );				
				if ( year < 100 )
					year += addTo2digitYear;
		}

		if ( validator.isvalid )
		{
			var dateParts = new Array();
			dateParts = textBox.value.split( '.' );
			if ( dateParts.length == 1 )
				dateParts = textBox.value.split( '/' );
							
			if ( re == reDate?chkdate(textBox):true )
			{
				var myDate = new Date(year, dateParts[1] - 1, dateParts[0]);			 
				var toDay = new Date();
				if ( myDate < new Date( toDay.getTime() + minDaysDifferenceFromToday*24*60*60*1000 ) && acceptDatesInThePast == false )
					validator.isvalid = false;
			}
			else
				validator.isvalid = false;			
		}
	}
	catch( err )
	{
		validator.isvalid = false;
	}
	var ret = new Function( "arg1", "arg2", "arg2.IsValid = " + validator.isvalid );
	return ret;
}

function ValidateArrAndDepDates( validator, checkinCtrl, checkoutCtrl, inorout )
{
	var checkInDateControl = GetControl( checkinCtrl , 0, "input" );
	var checkOutDateControl = GetControl(checkoutCtrl, 0, "input" );	
	
	var dateArray = checkInDateControl.value.split('/');
	var checkInDate,checkOutDate;
	
	try
	{
		if ( dateArray.length == 3  )
		{	
			checkInDate = new Date( dateArray[2], dateArray[1], dateArray[0]);
			
			dateArray = checkOutDateControl.value.split('/');
			
			if ( dateArray.length == 3 )
			{	
				checkOutDate = new Date( dateArray[2], dateArray[1], dateArray[0]);
								
				if ( checkInDate < checkOutDate )
				{
					validator.isvalid = true;			
					return ValidateTextBox( this, inorout == 'in' ? checkinCtrl : checkoutCtrl , reDate, false, 2000, -1 );
				}
			} 
		}
	}
	catch(e)
	{}
	validator.isvalid = false;
	
	return new Function( "arg1", "arg2", "arg2.IsValid = " + validator.isvalid );
}

function ValidateNationalityDropDown(source, args)
{
    var select = GetControl(source.getAttribute("cid"), 0, "select");
    args.IsValid = select.value != "0";
}

function ValidateMinContractorAge(validator, minAge, comparewith, stampsArr)
{
    validator.isvalid = false;
    var daysDifference = minAge*365 + minAge/4; //12 * 365 + 3; 	
    for(var i = 0; i < stampsArr.length; i++)
    {
	    var textBoxDateOfBirth = document.getElementById("dob" + stampsArr[i], 0, "INPUT");
	    if(textBoxDateOfBirth != null)
	    {
            if( ValidateDate( textBoxDateOfBirth.value, comparewith, daysDifference, false ) )
            {
                validator.isvalid = true;
                break;
	        }
	    }
	}
    var ret = new Function( "arg1", "arg2", "arg2.IsValid = " + validator.isvalid );
    return ret;
}

function ValidateAdultAge(validator, controlName, comparewith)
{
    var daysDifference = maxChildAge*365 + maxChildAge/4; //12 * 365 + 3; 	
	var textBoxDateOfBirth = document.getElementById(controlName, 0, "INPUT");
    validator.isvalid = ValidateDate( textBoxDateOfBirth.value, comparewith, daysDifference, false );
    var ret = new Function( "arg1", "arg2", "arg2.IsValid = " + validator.isvalid );
    return ret;
}


function ChangeValidatorsVisibility( cell, enabled )
{
    var spans = cell.getElementsByTagName("SPAN");
    
    for ( var k = 0; k < spans.length; k++ )
    {        
        if(spans[k].firstChild != null && spans[k].firstChild.style != null )
        {        
			if(enabled == false)
			{
				if ( spans[k].firstChild.style.visibility != 'hidden' )
					spans[k].firstChild.style.visibility = 'hidden';					
			}		
			else
			{
					if(spans[k].firstChild.style.visibility != 'visible')
					spans[k].firstChild.style.visibility = 'visible';
			}
		}	
        
    }
} 

function ValidateDate( dateToCheck , dateToCompareWith, differenceInDays, greaterThan  )
{
    var d = GetDateFromString(dateToCheck);
    if(d == null)
        return false;
	try
	{
		var ds = d.getFullYear().toString() + ( d.getMonth()+1 < 10 ? "0" : "" ) + (d.getMonth()+1).toString() + ( d.getDate() < 10 ? "0" : "" ) + d.getDate().toString();

		var dateToCheckPlusMinusDays = new Date( d.getTime() + differenceInDays*24*60*60*1000 );		
		
		var dComp = GetDateFromString(dateToCompareWith);
		if(dComp == null)
		    return false;
		var test = greaterThan==true ? dateToCheckPlusMinusDays >= dComp : dateToCheckPlusMinusDays <= dComp;
		return test;
	}
	catch(e)
	{
	}
    return false;
}

function GetDateFromString(dateStr)
{
	var re = /^(\d{1,2})([\.\/])(\d{1,2})([\.\/])(\d{2,4})$/i;
    if ( dateStr.match( re ) != null )
    {
        try
        {
            var year = RegExp.$5.valueOf();
            if ( year < 100 )
                year += 2000;
            var month = RegExp.$3.valueOf()-1;
            if(month > 11)
                return null;
            
            var date = RegExp.$1.valueOf();

		    var d = new Date( year, month, date );
		    return d;
		}
		catch(e)
		{
		}
    }
    return null;
}

function ChangeValidatorsState( cell, enabled )
{
    var spans = cell.getElementsByTagName("SPAN");
    for ( var k = 0; k < spans.length; k++ )
    {
		if ( spans[k].enabled != enabled )
		{
			spans[k].enabled = enabled;
			spans[k].setAttribute( "enabled", enabled );
	        
			if(spans[k].firstChild != null && spans[k].firstChild.style != null )
			{
				if(enabled == false)
				{
					
					if(spans[k].firstChild.style.visibility == 'visible')
						spans[k].firstChild.style.visibility = 'hidden';
				}
				else
				{
					if(spans[k].firstChild.style.visibility == 'hidden')
						spans[k].firstChild.style.visibility = 'visible';
				}
			}
			
		}	
        
    }
}   

