var PAD_LENGTH = 20;

function validateSubmit() {
	var validAssessmentNum = validateAssessmentNum();
	var validAmount = validateAmount();
	if (validAssessmentNum && validAmount) {
		var payment_reference = document.getElementById("payment_reference");
		var assessmentNo = document.getElementById("assessmentNo");
		payment_reference.value = assessmentNo.value;
		var form = document.forms["form"];
		form.action = "https://transact.webadvantage.com.au/host/cgi-bin/make_payment.pl";
		form.submit();
	}
	return false;
}

function validateAssessmentNum() {
	var assNum = document.getElementById("assessmentNo").value;
	if (assNum.length == 0)  {
		return showError(false, "assessmentNumError", "Invalid assessment number, empty values cannot be submitted");
	} else {
		if (assNum.match(/\d+/g) == null) {
			return showError(false, "assessmentNumError", "Invalid assessment number, no digits found");
		} else {
			assNum = assNum.match(/\d+/g).join("");
			assNum = assNum.replace(/^0+/, '');
			assNum = assNum.toInt();
			document.getElementById("assessmentNo").value = assNum;
		}
	}
	if (isNaN(assNum)) {
		showError("assessmentNumError", "Invalid assessment number, not a proper number");
		return false;
	} else {
		var assNum = (new String(assNum)).padLeft(7, "0");
		if (assNum.length > 7) {
			return showError(false, "assessmentNumError", "Invalid assessment number, maximum length is 7 digits");
		} else {
			var numberPart = assNum.subtract(1);
			var checksumPart = assNum.right();
			var validChecksum = getCheckSum(numberPart);
			var valid = (checksumPart == validChecksum);
			if (valid)
				return clearError(valid, "assessmentNumError");
			else
				return showError(valid, "assessmentNumError", "Invalid assessment number, check sum not valid");
		}
	}
}

function validateAmount() {
	var amountField = document.getElementById("Council Land Rates");
	var amount = amountField.value;
	amount = amount.replace(/[^\d.]/g, "");
	amountField.value = amount;
	if (amount.length == 0)
		return showError(false, "amountError", "Invalid amount, empty values cannot be submitted");
	var valid = (amount.match(/^\d+(\.\d\d*)*$/) != null);
	if (valid)
		return clearError(valid, "amountError");
	else
		return showError(valid, "amountError", "Invalid amount, please enter only dollars and/or cents");
}

function getCheckSum(input) {
	var num = input.padLeft(PAD_LENGTH, "0") + "0";
	var total = 0;
	var size = input.length;
	var start = PAD_LENGTH - size;
	for (var i=start; i<=start + size; i++ ) {
		var a = num.digitAt(i) * (((i - start) + 1) % 2 == 1 ? 1 : 2);
		var b = a >= 10 ? a.toString().right().toInt() + 1 * a.toString().left().toInt() : a;
		total += b;
	}
	var checksum = (total + (10 - (total % 10))) - total;
	if (checksum == 10) checksum = 0;
	return checksum;
}

function showError(result, id, message) {
	var error = document.getElementById(id);
	error.innerHTML = message;
	setImage(result, id);
	return result;
}

function clearError(result, id) {
	return showError(result, id, "");
}

function setImage(result, id) {
	var img = document.getElementById(id+"_img");
	img.src = "/Applications/PayRates/images/" + (result ? "valid.gif" : "invalid.gif");
	img.style.display = "inline";
}