// Global validation (helper) functions

function IsValidDate(day,month,year) 
{
  month--; // To account for the javascript 0-based months
	var test = new Date(year,month,day);
	if ((year == test.getFullYear()) && (month == test.getMonth()) && (day == test.getDate())) {
	return true;
	} else {
		return false
	}
}
function Pad(base, character, length)
{
  var strBase = String(base);
  while(strBase.length < length)
  {
    strBase = character + strBase;
  }
  return strBase;
}

function IsNumeric(sText)
{
	var ValidChars = "0123456789";
	var IsNumber=true;
	var Char;
	for (var i = 0; i < sText.length && IsNumber == true; i++) 
	{
		Char = sText.charAt(i); 
		if (ValidChars.indexOf(Char) == -1) 
		{
			IsNumber = false;
		}
	}
	return IsNumber;
}

//retourneert false als een karakter in de string anders is als a..z, A..Z
function IsAlpha(sText) 
{
    if (sText == "") 
    {
        return false;
    }
    for (var i = 0; i < sText.length; i++) 
    {
        if ((sText.charAt(i) < "a" || sText.charAt(i) > "z") &&
           (sText.charAt(i) < "A" || sText.charAt(i) > "Z"))
           {
			return false; 
		}
    }
    return true;
}

//retourneert false als een karakter in de string anders is als a..z, A..Z, 0..9
function IsAlphaNumeric(input) 
{
    if (input == "") 
    {
        return false;
    }
    for (var i = 0; i < input.length; i++) 
    {
        if ((input.charAt(i) < "a" || input.charAt(i) > "z") &&
           (input.charAt(i) < "A"  || input.charAt(i) > "Z") &&
           (input.charAt(i) < "0"  || input.charAt(i) > "9")) 
           {
			return false; 
		}
    }
    return true;
}

function highlitePremium(premiumTdId) 
{
  var premiumTD;
  premiumTD = xGetElementById('tdWAZonderEigenRisicoOption');
  premiumTD.style.border = "none";
  premiumTD = xGetElementById('tdWAPlusZonderEigenRisicoOption');
  premiumTD.style.border = "none";
  premiumTD = xGetElementById('tdWAPlusMetEigenRisicoOption');
  premiumTD.style.border = "none";
  premiumTD = xGetElementById('tdAllRiskZonderEigenRisicoOption');
  premiumTD.style.border = "none";
  premiumTD = xGetElementById('tdAllRiskMetEigenRisicoOption');
  premiumTD.style.border = "none";

  premiumTD = xGetElementById(premiumTdId);
  premiumTD.style.border = "solid";
  premiumTD.style.borderColor = "#CC0000";
  premiumTD.style.borderWidth = "1px";
}

// validatie spaties, cijfers, punten
function IsValidChar( ValidChars, sText )
{
	var IsNumber=true;
	var Char;
	for (i = 0; i < sText.length && IsNumber == true; i++) 
	{
		Char = sText.charAt(i); 
		if (ValidChars.indexOf(Char) == -1) 
		{
			IsNumber = false;
		}
	}
	return IsNumber;
}

// verwijder alle voorloopnullen
function StripLeadingZeros( searchString )
{
	var pos;

	for (i = 0; i < searchString.length; i++)
	{
		if ( parseInt( searchString.charAt(i) ) != 0 )
		{
			pos = i;
			break;
		}
	}

	searchString = searchString.substring(pos, searchString.length);
	return searchString;
}

// bepaal of het bankrekeningnummer geldog is en zet deze in het goede formaat: xxx.xx.xx.xxx
function BankAccount( bankAccountNr )
{
	if ( bankAccountNr.length == 9)
	{
		bankAccountNr = "0" + bankAccountNr;
	}
	
	if ( !ElfProef( bankAccountNr ) )
	{
		this.bankAccountNr = bankAccountNr;
		this.valueToValidate = false;
	}
	else
	{
		this.bankAccountNr = "";

		for ( i = 0; i<bankAccountNr.length; i++ )
		{
			if ( i == 3 || i == 5 || i == 7)
			{
				this.bankAccountNr += ".";
			}

			this.bankAccountNr += bankAccountNr.charAt(i);
			this.valueToValidate = true;
		}
	}
}

// de elf-proef bij bankrekeningnummers.
function ElfProef( bankAccountNr )
{
	var total = 0;
	
	for ( i=0; i < 10; i++ )
	{
		var j = 10 - i;
		total += bankAccountNr.charAt(i) * j;
	}
	
		
	if ( (total % 11) > 0 )
	{
		return false;
	}
	else
	{
		return true;
	}
}

// de BsnProef
function BsnProef( bsnNr )
{
	var total = 0;
	
	for ( i = 0; i<=7; i++)
	{
		var j = 9 - i;
		total += bsnNr.charAt(i) * j;
	}
	
	total += bsnNr.charAt(8) * -1;
	
	if ( (total % 11) > 0 )
	{
		return false;
	}
	else
	{
		return true;
	}
}

// bepaal of het girorekeningnummer geldig is
function GiroAccount( giroAccountNr )
{
	this.giroAccountNr = giroAccountNr

	if ( giroAccountNr.length < 3 || giroAccountNr.length > 7 )
	{
		this.valueToValidate = false;
	}
	else
	{
		this.valueToValidate = true;
	}
}

// haal de betreffende karakters op
function GetChars( start, end )
{
	var validChars = "";

	for ( i = start; i<= end; i++ )
	{
		validChars += String.fromCharCode( i );
	}
	
	return validChars;
}

// Bepaalt hoeveel karakters er bij een decimaal achter de komma staan
function IsValidSeparationDecimal( enteredValue, valueIsValid )
{
	if ( valueIsValid )
	{
		var separationSign = 0;

		separationSign = GetSeparationSignAmount( enteredValue, separationSign, "," );
		separationSign = GetSeparationSignAmount( enteredValue, separationSign, "." );

		if ( separationSign > 1 )
		{
			valueIsValid = false;
		}
		else
		{
			valueIsValid = true;
		}
	}
	
	return valueIsValid;
}

// Bepaalt hoeveel karakters er bij een decimaal achter de komma staan
function GetSeparationSignAmount( enteredValue, amount, sign )
{
	for ( i = 0; i < enteredValue.length; i++ ) 
	{
		if ( enteredValue.charAt( i ) == sign )
		{
			amount++;
		}
	}
	
	return amount;
}

// bepaalt of er een scheidingsteken voor de duizendtallen is gebruikt
function IsValidThousandSeparation( enteredValue, valueIsValid )
{
	if ( valueIsValid )
	{
		if ( enteredValue.indexOf( "." ) != -1 || enteredValue.indexOf( "," ) != -1 )
		{
			valueIsValid = GetSeparationPositionDecimal( enteredValue, "." );
		
			if ( !valueIsValid )
			{
				valueIsValid = GetSeparationPositionDecimal( enteredValue, "," );
			}
		}
	}
	
	return valueIsValid;
}

// bepaalt of er een scheidingsteken voor de duizendtallen is gebruikt
function GetSeparationPositionDecimal( enteredValue, sign )
{
	var separatePosition = enteredValue.indexOf( sign );

	if ( separatePosition != -1 )
	{
		if ( ( enteredValue.length - 1 - separatePosition) > 2 && enteredValue.indexOf( " " ) == -1 ) 
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	else
	{
		return false;
	}
}

// bepaalt of er een scheidingsteken op de eerste positie van de string staat. geeft dan een false terug anders een true.
function IsValidSeparartorStart( validSeparators, enteredValue, valueIsValid )
{
	if ( valueIsValid )
	{
		for ( i = 0; i<= validSeparators.length && valueIsValid == true; i++ )
		{
			var separator = validSeparators.charAt( i );

			if ( enteredValue.charAt( 0 ) == separator )
			{
				valueIsValid = false
			}
			else
			{
				valueIsValid = true;
			}
		}
	}
	
	return valueIsValid;
}

// verwijdert de opgegeven leading en trailing karakters
function DeleteLeadingTrailing( enteredValue, validSeparators )
{
	// leading
	while ( enteredValue.length > 0 && validSeparators.indexOf(enteredValue.substring(0,1) ) != -1 )
	{
		enteredValue = enteredValue.substring( 1,enteredValue.length );
	}
    // trailing
    var lastTek = enteredValue.substring(enteredValue.length -1);
    while ( enteredValue.length > 0 && validSeparators.indexOf(lastTek) != -1 )
    {
	    enteredValue = enteredValue.substring( 0,enteredValue.length -1 );
	    lastTek = enteredValue.substring(enteredValue.length -1);
    }
	return enteredValue;
}

// plaatst de initialen in het juiste formaat
function SetInitial( validCharsSmall, validCharsCapital, enteredValue )
{
	var setInitial = "";

	if ( IsValidChar( validCharsSmall, enteredValue ) )
	{
		enteredValue = enteredValue.toUpperCase();
	}

	if ( IsValidChar( validCharsCapital, enteredValue ) )
	{
		for ( i = 0; i < enteredValue.length; i++ )
		{
			setInitial += enteredValue.charAt( i ) + ".";
		}
	}
	else
	{
		for ( j = 0; j < enteredValue.length; j++ )
		{
			if ( IsValidChar( validCharsCapital, enteredValue.charAt( j ) ) && j > 0)
			{
				setInitial += ".";
			}
			setInitial += enteredValue.charAt( j );
		}

		setInitial = setInitial + ".";
	}
	
	return setInitial;
}
