function max_days(kk, yy)
{
	var kkPaivia;;
	if((kk == 4) || (kk == 6) || (kk == 9) || (kk == 11))
	{ 
		kkPaivia = 30;
	}
	else if(kk == 2)
	{
		kkPaivia = isLeapYear(yy) ? 29 : 28;    
	}
	else
	{
		kkPaivia = 31;
	}
		return kkPaivia; 
}


function checkHetu(value)
{		
	if(value.length==0)
	{
		return true;
	}
	//Must be exactly 11 characters
	if(value.length != 11)
	{
		return false;
	}
	
	//Check first six characters for being numeric
	for(i=0;i<6;i++)
	{
		var testValue=value.substr(i,1);
		if(isNaN(testValue))
			return false;
	}
	
	//DAY
	var day=value.substr(0,2);
	
	//MONTH
	var month=value.substr(2,2);
	
	if(month < 1 || month > 12)
	{
		return false;
	}
	
	//YEAR-YY
	var year=value.substr(4,2);
	
	//Separator
	var sep=value.substr(6,1);
	
	//Separator must be +,- or A
	if(sep != "+" && sep != "-" && sep != "A" && sep != "a")
	{
		return false;
	}
	
	//YEAR-YYYY
	var yearYYYY=getCenturyOfSeparator(sep) + "" + year;
					
	//Check days based on month and the year
	var maxDays=max_days(month,yearYYYY);
	if(day < 1 || day > maxDays)
	{
		return false;
	} 
	
	//Indivivual number
	var individualNumber=value.substr(7,3);
	
	//Check for being a number
	for(i=0;i<3;i++)
	{
		var testValue=individualNumber.substr(i,1);
		if(isNaN(testValue))
			return false;
	}
	
	//Calculate the leftover
	var leftOver=(value.substr(0,6) + "" + individualNumber) % 31;
	
	//Get checker value
	var checker=getChecker(leftOver);
	
	//Candidate cheker value
	var checkerCandidate=value.substr(10,1);
					
	//If candidate is equal to checker value, all is fine.
	if(checkerCandidate.toUpperCase()==checker)
	{
		return true;
	}
	else
	{
		return false;
	}
	
}

function getCenturyOfSeparator(separator)
{
	switch(separator)
	{
		case "+":
			return "18";
			break;
		case "-":
			return "19";
			break;
		case "A":
			return "20";
			break;
	}
}

function isLeapYear(year)
{
	if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
	{
		return true;
	}
	else
	{
		return false;
	}

}

function getChecker(leftover)
{
	switch(leftover)
	{
		case 0:
			return "0";
			break;
		case 1:
			return "1";
			break;
		case 2:
			return "2";
			break;
		case 3:
			return "3";
			break;
		case 4:
			return "4";
			break;
		case 5:
			return "5";
			break;
		case 6:
			return "6";
			break;
		case 7:
			return "7";
			break;
		case 8:
			return "8";
			break;
		case 9:
			return "9";
			break;
		case 10:
			return "A";
			break;
		case 11:
			return "B";
			break;
		case 12:
			return "C";
			break;
		case 13:
			return "D";
			break;
		case 14:
			return "E";
			break;
		case 15:
			return "F";
			break;
		case 16:
			return "H";
			break;
		case 17:
			return "J";
			break;
		case 18:
			return "K";
			break;
		case 19:
			return "L";
			break;
		case 20:
			return "M";
			break;
		case 21:
			return "N";
			break;
		case 22:
			return "P";
			break;
		case 23:
			return "R";
			break;
		case 24:
			return "S";
			break;
		case 25:
			return "T";
			break;
		case 26:
			return "U";
			break;
		case 27:
			return "V";
			break;
		case 28:
			return "W";
			break;
		case 29:
			return "X";
			break;
		case 30:
			return "Y";
			break;
	}
}