
addEvent(window, 'load', initValidate);			// loads form validation

//-----------------------------------------------------------------------------

function initValidate()
{
	if (document.forms)
		{
		var inputs = []
		var uniques = []
		inputs = getObject('input', 'tag')

		uniques = filter(inputs, 'unique', uniques, 'tag')				// currently used on Staff Survey page

		if (uniques.length > 0)
			{
			screenReaderMessage()							// sets up alerts toggle for screen readers
			}

		var allforms = document.forms
		doctitle = document.title

		for (var i=(allforms.length-1); i>=0; i--)
			{
			if (/\bsomerequired\b/.exec(allforms[i].className))	// Identify required forms by class
				{
				var thisForm = allforms[i]
				var elems = thisForm.elements
				thisForm.submits = []
				thisForm.reqElems = []
				thisForm.filled = 0
				thisForm.required = 0

				for (var k=(elems.length-1); k>=0; k--)
					{
					if (elems[k].type == 'submit')				// finding submit buttons, and build array in case of multiples
						{
						thisForm.submits[thisForm.submits.length] = elems[k]
						elems[k].origTitle = elems[k].title
						}

					if (/\bunique\b/.exec(elems[k].className))		// a form field that needs to be checked for uniqueness
						{
						elems[k].parentForm = thisForm
						elems[k].onchange = checkUnique
						}

					if (/\bemail\b/.exec(elems[k].className))		// email field; checked for validity
						{
						elems[k].parentForm = thisForm
						elems[k].onchange = checkEmail
						}

					if (/\brequired\b/.exec(elems[k].className))	// all required form fields
						{
						thisForm.reqElems[thisForm.reqElems.length] = elems[k]
						elems[k].parentForm = thisForm
						elems[k].onblur = checkValue
						thisForm.required++
						}
					}

				for (var f=(thisForm.reqElems.length-1); f>=0; f--)	// initially disable submit buttons if fields are loaded empty
					{
					var currentElem = thisForm.reqElems[f]

					if (currentElem.nodeName == 'SELECT' && currentElem.value == "0"){} 	// dropdown left on default
					else if (currentElem.value != "")
						{
						thisForm.filled++
						}
					}
				if (thisForm.filled != thisForm.required)
					{
					disableSubmit(thisForm)
					}
				}
			}
		}
}

function disableSubmit(form)
{
	for (var t=(form.submits.length-1); t>=0; t--)
		{
		var thisSubmit = form.submits[t]
		thisSubmit.disabled = 'disabled'
		if (/\bdisabled\b/.exec(thisSubmit.className) == null)
			{
			thisSubmit.className = thisSubmit.className + ' disabled'
			}
		if (!/\bdisabled\b/.exec(thisSubmit.title))
			{thisSubmit.title += ' disabled, because one or more fields haven\'t been completed correctly.'}
		}
}

function enableSubmit(form)
{
	for (var t=(form.submits.length-1); t>=0; t--)
		{
		var thisSubmit = form.submits[t]
		thisSubmit.disabled = ''
		if (/\bdisabled\b/.exec(thisSubmit.className))
			{
			thisSubmit.className = thisSubmit.className.replace(/ disabled/g, "")
			thisSubmit.title = thisSubmit.origTitle + ' enabled'
			}
		}
}

function butts()
{
	alert('tong')
}

function checkUnique()
{
	if(this.value != "")
		{
		var checkField = this
		var nameInput = this.name
		var valueInput = this.value.toLowerCase()

		var request = createXMLHttpRequest()

		request.open("GET", "/helresources/happysurvey/includes/ni_check_unique.asp?orgname=" + valueInput, true)

		request.onreadystatechange = function()
			{
			if (request.readyState != 4) {return;}
			if (request.responseText != "fine")
				{
				problem = request.responseText
				disableSubmit(checkField.parentForm)
				buildMessage(checkField.parentForm, problem)
				}
			else
				{deleteMessage()}
			}
		request.send(null)
		}
}

function checkEmail()	// checks entered email address against regexp
{
	if (this.value != "" && !/^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/.test(this.value))
		{
		buildMessage(this.parentForm, 'Sorry - that email address isn\'t valid. Please type the address again.')
		if (/\brequired\b/.exec(this.className))
			{
			disableSubmit(this.parentForm)
			}
		}
	else
		{deleteMessage()
		if (/\brequired\b/.exec(this.className))
			{
			this.onchange = checkValue
			}
		}
}

function checkValue()	// when a required field changes, checks to see if *any* required field is empty. Also checks for default value left in dropdown.
{
	this.parentForm.filled = 0

	for (var f=(this.parentForm.reqElems.length-1); f>=0; f--)
		{
		var currentElem = this.parentForm.reqElems[f]

		if (currentElem.nodeName == 'SELECT' && currentElem.value == "0"){} 	// dropdown left on default

		else if (currentElem.value != "")
			{
			this.parentForm.filled++
			}
		}

	if (this.parentForm.filled == this.parentForm.required)
		{
		enableSubmit(this.parentForm)
		}
	else
		{
		disableSubmit(this.parentForm)
		}
}

function screenReaderMessage()		// gives screen-reader users a tickbox to enable alert boxes for AJAX content changes. Requires an 'id="explain"
{
	var explainPara = getObject('explain', 'id')

	var sRForm = document.createElement('form')
	sRForm.className = 'screenRead'
	sRForm.action = '#'
	sRForm.method = 'post'
	sRForm.id = 'sRSwitch'

	var sRLabel = document.createElement('label')
	sRLabel.htmlFor = 'sRMess'

	var sRCheck = document.createElement('input')
	sRCheck.type = 'checkbox'
	sRCheck.id = 'sRMess'
	sRCheck.name = 'sRMess'

	var sRNote = document.createTextNode('This page contains dynamic content, which a screen reader may find difficult to detect. Tick this box if you want the page to alert you when content changes.')

	sRLabel.appendChild(sRNote)
	sRLabel.appendChild(sRCheck)
	sRForm.appendChild(sRLabel)

	insertAfter(explainPara.parentNode, sRForm, explainPara)	// glues in form after 'explain' p
}

function buildMessage(probForm, problem)
{
	var header = document.getElementsByTagName('h1')[0]

	deleteMessage()

	var message = document.createElement('p')
	message.id = 'problem'
	message.className = 'warning'
	message.title = 'warning'

	var text = document.createTextNode(problem)
	message.appendChild(text)

	insertAfter(header.parentNode, message, header)

	document.title = doctitle + ' - ' + problem

	if (getObject('sRMess', 'id'))
		{
		if (getObject('sRMess', 'id').checked == true)
			{
			alert(problem)
			}
		}
}

function deleteMessage()
{
	if (getObject('problem', 'id'))
		{
		var oldMessage = getObject('problem', 'id')
		oldMessage.parentNode.removeChild(oldMessage)
		}
	document.title = doctitle
}