﻿function IsValidNRIC(source, clientside_arguments)
{
	var sNRIC = clientside_arguments.Value;
	var NRIC;
	NRIC = sNRIC.toUpperCase();
	var number;
	var sum = 0;
	var p;
		
	//Validation for NRIC first character
	if( NRIC.charAt(0) != "S" && NRIC.charAt(0) != "T")
	{
		clientside_arguments.IsValid = false;
		return;
	}
	//end
	
	if( NRIC.length != 9 ) {
		clientside_arguments.IsValid = false;
		return;
	}
	
	number = NRIC.substring( 1, 8 );
	
	if( isNaN( number ) ) {
		clientside_arguments.IsValid = false;
		return;
	}
	
	sum += parseInt( number.charAt( 0 ) ) * 2;
	sum += parseInt( number.charAt( 1 ) ) * 7;
	sum += parseInt( number.charAt( 2 ) ) * 6;
	sum += parseInt( number.charAt( 3 ) ) * 5;
	sum += parseInt( number.charAt( 4 ) ) * 4;
	sum += parseInt( number.charAt( 5 ) ) * 3;
	sum += parseInt( number.charAt( 6 ) ) * 2;
	
	if( NRIC.charAt( 0 ) == 'T' ) {
		sum += 4;
	}
	
	p = 11 - ( sum % 11 );
	
	if( p == 1 && NRIC.charAt( 8 ) == 'A' ) {
		clientside_arguments.IsValid = true;
		return;
	}
	if( p == 2 && NRIC.charAt( 8 ) == 'B' ) {
		clientside_arguments.IsValid = true;
		return;
	}
	if( p == 3 && NRIC.charAt( 8 ) == 'C' ) {
		clientside_arguments.IsValid = true;
		return;
	}
	if( p == 4 && NRIC.charAt( 8 ) == 'D' ) {
		clientside_arguments.IsValid = true;
		return;
	}
	if( p == 5 && NRIC.charAt( 8 ) == 'E' ) {
		clientside_arguments.IsValid = true;
		return;
	}
	if( p == 6 && NRIC.charAt( 8 ) == 'F' ) {
		clientside_arguments.IsValid = true;
		return;
	}
	if( p == 7 && NRIC.charAt( 8 ) == 'G' ) {
		clientside_arguments.IsValid = true;
		return;
	}
	if( p == 8 && NRIC.charAt( 8 ) == 'H' ) {
		clientside_arguments.IsValid = true;
		return;
	}
	if( p == 9 && NRIC.charAt( 8 ) == 'I' ) {
		clientside_arguments.IsValid = true;
		return;
	}
	if( p == 10 && NRIC.charAt( 8 ) == 'Z' ) {
		clientside_arguments.IsValid = true;
		return;
	}
	if( p == 11 && NRIC.charAt( 8 ) == 'J' ) {
		clientside_arguments.IsValid = true;
		return;
	}
	
	clientside_arguments.IsValid = false;
	return;
}
