//Important! You must remember to put an element in your html called formCheckerReadout!


var arrCheckerFields = new Array()
var sCheckerButton
var sCheckerForm

var sAuthCode = '191'



function performAllChecks(){
	checkFields()
	checkTickBoxDependencies()
	checkMaxLengthFields()
}


function addCheckerField(sFieldName,sType,bCanBeBlank){

	var oField = new Object()
	oField.FieldName = sFieldName
	oField.Type = sType
	oField.CanBeBlank = bCanBeBlank
	
	arrCheckerFields.push(oField)
	
	if (sType == "MustTick"){
		getObject(sFieldName).onclick = function(){performAllChecks()}
	}else{
		getObject(sFieldName).onkeyup = function(){performAllChecks()}
	}
	
}

function setCheckerButton(sButtonName,sFormName){
	sCheckerButton = sButtonName
	sCheckerForm = sFormName
	performAllChecks()
}

function checkFields(){
	var oButton = getObject(sCheckerButton)
	oButton.disabled = false
	
	var oForm = getObject(sCheckerForm)
	
	var oResults = new Array()
	
	//loop through the fields we have
	for (var i = 0;i<arrCheckerFields.length;i++){
	
	var oField = arrCheckerFields[i];
	var oInputBox = getObject(oField.FieldName);
	
	
		//can it be blank?
		if (oField.CanBeBlank == false){
			if (oInputBox.value == ''){
				oResults.push(openFocusLink(oField.FieldName) + formatForReadOut(oField.FieldName) + ' is empty' + closeFocusLink())
			}
		}
		
		
		//is it a currency field?
		if (oField.Type == 'Currency'){
			if (isCurrency(oInputBox.value) == false){
				oResults.push(openFocusLink(oField.FieldName) + formatForReadOut(oField.FieldName) + ' is not valid currency' + closeFocusLink())
			}
		}
		
		
		//is it a date field?
		if (oField.Type == 'Date'){
			if (isDate(oInputBox.value) == false){
				if (oInputBox.value != ''){
					oResults.push(openFocusLink(oField.FieldName) + formatForReadOut(oField.FieldName) + ' is not a valid date' + closeFocusLink())
				}
			}
		}
		
		
		//is it an auth code field
		if (oField.Type == 'AuthCode'){
			if (oInputBox.value != sAuthCode){
				if (oInputBox.value != ""){
					oResults.push(openFocusLink(oField.FieldName) + formatForReadOut(oField.FieldName) + ' is not a valid auth code' + closeFocusLink())
				}
			}
		}
		
		
		
		
		//is it a "must tick" checkbox?
		if (oField.Type == 'MustTick'){
			if (!oInputBox.checked){
				oResults.push(openFocusLink(oField.FieldName) + formatForReadOut(oField.FieldName) + ' must be ticked' + closeFocusLink())				
			}
		}
		
		
		
		
		//is it an email field?
		if (oField.Type == 'Email'){
			if (isEmail(oInputBox.value) == false){
				if (oInputBox.value != ''){
					oResults.push(openFocusLink(oField.FieldName) + formatForReadOut(oField.FieldName) + ' is not a valid email address' + closeFocusLink())
				}
			}
		}
	
	
	}
	
	
	var sReadout = ''
	
	for (var i = 0;i<oResults.length;i++){
	
	sReadout = sReadout + oResults[i]
	
	
	if (i < oResults.length-1){
			sReadout = sReadout + ', '
		}
	}
	
	
	if (oResults.length == 0){
		sReadout = 'All required fields completed'
	}
	
	var oReadout = getObject('formCheckerReadout')
	oReadout.innerHTML = sReadout
	
	var bAllowSubmit = oResults.length > 0
	oButton.disabled = (bAllowSubmit)

}






function formatForReadOut(sText){
	var sResult = sText
	
	sResult = sResult.replace(/_/g,' ')
	
	return sResult
}



function setFocusOnInput(sInputName){
	getObject(sInputName).focus()
}

function openFocusLink(sElementID){
	var sResult = ''
	sResult = '<a href="javascript:setFocusOnInput(\'' + sElementID + '\')">'
	return sResult
}
function closeFocusLink(){
	var sResult = ''
	sResult = '</a>'
	return sResult
}





var arrTickBoxDependencies = new Array()

function addTickBoxDependency(sTickBoxName,sInputName,bBlankOnDisable){

	var oDependency = new Object()
	oDependency.TickBoxName = sTickBoxName
	oDependency.InputName = sInputName
	oDependency.BlankOnDisable = bBlankOnDisable
	
	arrTickBoxDependencies.push(oDependency)
	
	getObject(sTickBoxName).onclick = function(){performAllChecks()}
	
	performAllChecks()
	
}
 

function checkTickBoxDependencies(){
	for (var i = 0;i<arrTickBoxDependencies.length;i++){
	
		var oDependency = arrTickBoxDependencies[i]
		
		
		
		var oTickBox = getObject(oDependency.TickBoxName)
		var oInput = getObject(oDependency.InputName)
		
		oInput.disabled = !oTickBox.checked
		
		if(oInput.disabled == true){
			if(oDependency.BlankOnDisable == true){
				oInput.value = ""
				oInput.onkeyup()
			}
		}
	}
}










var arrMaxLengthFields = new Array()

function addMaxLengthField(sFieldName,lMaxLength,sReadoutID){

	var oMaxLengthField = new Object()
	oMaxLengthField.FieldName = sFieldName
	oMaxLengthField.MaxLength = lMaxLength
	oMaxLengthField.ReadoutID = sReadoutID
	
	arrMaxLengthFields.push(oMaxLengthField)
	
	getObject(sFieldName).onkeyup = function(){performAllChecks()}
	
	performAllChecks()
	
}
 

function checkMaxLengthFields(){
	for (var i = 0;i<arrMaxLengthFields.length;i++){
	
		var oMaxLengthField = arrMaxLengthFields[i]
		
		
		var oInput = getObject(oMaxLengthField.FieldName)
		var oReadout = getObject(oMaxLengthField.ReadoutID)
		
		
		var lMaxLength = oMaxLengthField.MaxLength
		var lRemaining = oMaxLengthField.MaxLength - oInput.value.length
		
		if (lRemaining < 0){
		oInput.value = Left(oInput.value,lMaxLength)
		lRemaining=0
		}
		
		
		
		var sReadout = 'Maximum ' + formatNumber(lMaxLength) + ' characters | ' + formatNumber(lRemaining) + ' characters remaining'
		
		getObject(oMaxLengthField.ReadoutID).innerHTML = sReadout
		
		
	}
	
	
}
