//The following code falls under the terms of the General Public License (GPL)
//You may use this files as the GPL specifies but this header must always stay intact
//Thank You ~ jeremy at badlib dot com

function verifyForm(form,textBoxes,groupArray,messageType,classes) {
	textBoxes = textBoxes ? textBoxes : 'first_name,last_name,email,heard_about_dhl,message' //exact names of INPUT type text
	groupArray = groupArray ? groupArray.split(',') : new Array() //prefix of a group of related INPUTS. MUST END WITH AN UNDERSCORE like 'group_'
	messageType = messageType ? messageType : 'simple' //'none' and 'complete' are other possibilities. '_' in a name will be replaced with ' ' when output be 'complete'
	classes = classes ? classes.split(',') : new Array()
	
	var empty_input = classes.length > 0 ? classes[0] : 'empty_input'
	var empty_group = classes.length > 1 ? classes[1] : 'empty_group'
	var groupList = new Array()
	var missingList = ''
	var missingInfo = 0
	
	for(var i = 0; i < form.length; i++) {
		for(var j = 0; j < groupArray.length; j++) {
			if(form.elements[i].name.indexOf(groupArray[j]) > -1) {
				if(!groupList[j]) groupList[j] = i
				else groupList[j] += (',' + i)
				if(missingList.indexOf(groupArray[j].replace(/_/,'')) < 0)
					missingList += '<' + form.elements[i].name.replace(/_.+/,'_>') + '\n'
			}
		}
		if(textBoxes.indexOf(form.elements[i].name) > -1 && form.elements[i].type == 'checkbox' && !form.elements[i].checked) {
			missingInfo++
			missingList += form.elements[i].name+'\n'
//HERE
			form.elements[i].parentNode.origClassName = form.elements[i].parentNode.className
			form.elements[i].parentNode.className = empty_input
			form.elements[i].onchange = function() {
//HERE
				this.parentNode.className = this.parentNode.origClassName
			}
		}
		else if((textBoxes.indexOf(form.elements[i].name) > -1 && form.elements[i].type != 'checkbox' && form.elements[i].value == '')
		|| ((form.elements[i].name == 'email' || form.elements[i].name == 'recipient') && form.elements[i].value.search(/.+@.+\..+/) < 0)) {
			missingInfo++
			missingList += form.elements[i].name+'\n'
//HERE
			form.elements[i].origClassName = form.elements[i].className
			form.elements[i].className = empty_input
			form.elements[i].onchange = function() {
//HERE
				this.className = this.origClassName
			}
		}
	}
	
	for(var i = 0; i < groupList.length; i++) {
		var temp = groupList[i].split(',')
		for(var j = 0; j < temp.length; j++) {
			if(form.elements[temp[j]].type == 'checkbox' && form.elements[temp[j]].checked) {
				groupList[i] = true
				continue
			}
			else if(form.elements[temp[j]].type != 'checkbox' && form.elements[temp[j]].type != 'radio' && form.elements[temp[j]].value != '') {
				groupList[i] = true
				continue
			}
			form.elements[temp[j]].onchange = function() {
//HERE
				form.elements[i].origClassName = form.elements[i].className
			}
		}
		groupArray[i] = new RegExp('<' + groupArray[i] + '>' + '\n')
		if(groupList[i] === true) {
			missingList = missingList.replace(groupArray[i],'')
		}
		else {
			missingInfo++
			replaceWith = groupArray[i].toString().replace(/\/</,'').replace(/_>\n\//,'\n')
			missingList = missingList.replace(groupArray[i],replaceWith)
//HERE
			el(form.elements[temp[0]].id).parentNode.origClassName = el(form.elements[temp[0]].id).parentNode.className
			el(form.elements[temp[0]].id).parentNode.className = empty_group
		}
	}

	missingList = missingList.replace(/_/gi,' ')
	if(missingInfo == 1) {
		if(messageType == 'none') {
			return false
		}
		if(messageType == 'simple') {
			alert(missingInfo + ' required field was left empty or was entered incorrectly. \nIt is highlighted.')
			return false
		}
		else if(messageType == 'complete') {
			alert('The following ' + missingInfo + ' required field was left empty or was entered incorrectly:\n\n' + missingList + '\nHit submit again after the required field is properly filled in.')
			return false
		}
	}
	if(missingInfo > 1) {
		if(messageType == 'none') {
			return false

		}
		if(messageType == 'simple') {
			alert(missingInfo + ' required fields were left empty or were entered incorrectly. \nThey are highlighted.')
			return false
		}
		else if(messageType == 'complete') {
			alert('The following ' + missingInfo + ' required fields were left empty or were entered incorrectly:\n\n' + missingList + '\nHit submit again after the required fields are properly filled in.')
			return false
		}
	}
	else return true
}
//courtesy Garrett Smith of dhtmlkitchen.com
function getStyle(el, style) {
	if(!document.getElementById) return
	var value = el.style[style]
	if(!value)
		if(document.defaultView)
			value = document.defaultView.getComputedStyle(el, "").getPropertyValue(style)
		else if(el.currentStyle)
			value = el.currentStyle[style]
	 return value;
}
function el(id) {
	if(!id) return document.getElementById || document.all ? 1 : 0;
	return document.getElementById ? document.getElementById(id) : document.all ? document.all[id] : 0;
}