function getReference()
{
document.refConv.elements[0].value = document.refConv.elements[0].value.toUpperCase()
document.refConv.elements[2].value = document.refConv.elements[2].value.toUpperCase()
	var total = 0
	var mod23 = 23
	var refno = document.refConv.elements[0].value + document.refConv.elements[1].value + "N" + document.refConv.elements[2].value
	var refno = refno.toUpperCase()

	weighting  = new Array(8)
	weighting[0]   = 256;  weighting[1]   = 128;  weighting[2]   = 64;  weighting[3]   = 32
	weighting[4]   = 16;  weighting[5]   = 8;  weighting[6]   = 4;  weighting[7]   = 2

	checkAlpha = new Array(26)
	checkAlpha[0] = "A";  checkAlpha[1] = "B";  checkAlpha[2] = "C";  checkAlpha[3] = "D"
	checkAlpha[4] = "E";  checkAlpha[5] = "F";  checkAlpha[6] = "G";  checkAlpha[7] = "H"
	checkAlpha[8] = "I";  checkAlpha[9] = "J";  checkAlpha[10] = "K";  checkAlpha[11] = "L"
	checkAlpha[12] = "M";  checkAlpha[13] = "N";  checkAlpha[14] = "O";  checkAlpha[15] = "P"
	checkAlpha[16] = "Q";  checkAlpha[17] = "R";  checkAlpha[18] = "S";  checkAlpha[19] = "T"
	checkAlpha[20] = "U";	checkAlpha[21] = "V"; checkAlpha[22] = "W"
	checkAlpha[23] = "X";	checkAlpha[24] = "Y"; checkAlpha[25] = "Z"	
	
	checkDigits = new Array(26)
	checkDigits[0] = "A";  checkDigits[1] = "B";  checkDigits[2] = "C";  checkDigits[3] = "D"
	checkDigits[4] = "E";  checkDigits[5] = "F";  checkDigits[6] = "G";  checkDigits[7] = "H"
	checkDigits[8] = "J";  checkDigits[9] = "K";  checkDigits[10] = "L";  checkDigits[11] = "M"
	checkDigits[12] = "N";  checkDigits[13] = "P";  checkDigits[14] = "Q";  checkDigits[15] = "R"
	checkDigits[16] = "S";  checkDigits[17] = "T";  checkDigits[18] = "V";  checkDigits[19] = "W"
	checkDigits[20] = "X";	checkDigits[21] = "Y"; checkDigits[22] = "Z"
	var chkchr = -999
	reg = /[A-Z]{2}\d{12}[N]{1}[A-Z]{1}/  /* [BN] means 2nd last char can be B or N - B removed until Alan wants to include Child Benefit */
	var error_count = 0
	if (reg.test(refno) == false) {
		error_count = error_count + 1
	}
	else {
		var matches = 0
		for (var i = 0; i < 2; i++) {
			var hold = "" + refno.substring(i,i + 1)

			for (var j = 0; j < 26; j++) {
				if (hold == checkAlpha[j]) {
					matches = matches + 1
					
					var subTotal = parseFloat(weighting[i]) * (j + 33)   //must be numeric addition
					total = total + subTotal 
				}
			}
		}
		
		if (matches == 2) {  /* first two chars ok */
			for (var i = 2; i < 8; i++) {
				var hold = "" + refno.substring(i,i + 1)

				var subTotal = parseFloat(weighting[i]) * parseFloat(hold)  //must be numeric addition
				total = total + subTotal
			}
			var remainder = total%mod23

			if(checkDigits[remainder] != refno.substring(15,16)) {
				error_count = error_count + 1
			} 
		}
		else {
			error_count = error_count + 1   //First two chars NOT correct alphas
		}

	}
	/* check that the last 6 digits of numeric part are in date format */
	checkThis = document.refConv.elements[1].value.substring(6,12)
	err = checkDate(checkThis)
	error_count = error_count + err
	if (error_count == 0) {alert("Your Reference number is correct.")} 
	else {
		var response = confirm("The reference number is incorrect. Press 'OK' for help or 'Cancel' to try again.")
		if (response) {window.location="/tools/payinghmrc/help/tc-help.htm"}
	}
}

function checkDate(field){
var checkstr = "0123456789";
var DateField = field;
var dateValue = "XXX";
var DateTemp = "";
var seperator = ".";
var day;
var month;
var year;
var leap = 0;
var err = 0;
var i;
err = 0;
dateValue = field;
if (dateValue == "999999") {return err;}
if (dateValue.length == 6) {dateValue = dateValue.substr(0,4) + '20' + dateValue.substr(4,2); }
if (dateValue.length != 8) {err = 19;}
year = dateValue.substr(4,4);
if (year == 0) {err = 20;}
month = dateValue.substr(2,2);
if ((month < 1) || (month > 12)) {err = 21;}
day = dateValue.substr(0,2);
if (day < 1) {err = 22;}
if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {leap = 1;}
if ((month == 2) && (leap == 1) && (day > 29)) {err = 23;}
if ((month == 2) && (leap != 1) && (day > 28)) {err = 24;}
if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {err = 25;}
if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {err = 26;}
if ((day == 0) && (month == 0) && (year == 00)) {err = 0; day = ""; month = ""; year = ""; seperator = "";}
return err;
}

/******************/
function clearForm()
/*******************

   File        clearForm.jsm
   Copyright   Crown Copyright 2001

   Date        Author        Changes
   04-Jan-01   Chris Lowe    Created

   Purpose:
        To clear values from form fields. 

   Strategy:
        1. On clicking a button:
        2. Reset field values to null

   Input:
        none

   Output:
        none
--------------------------------------------------------------------- */
{

  document.refConv.elements[0].value = ""               // clear values
  document.refConv.elements[1].value = ""
  document.refConv.elements[2].value = ""
  

  return
}
