// validates forms with required fields

/* @todo: 

*/
if(window.wdc){
	window.wdc.formValidation = new Object(); 
	window.wdc.formValidation.formClass = 'wdc_valid';
	window.wdc.formValidation.requiredInputClassName = 'required';
	addEvent(window, 'load', formValidateInit);
}

function formValidateInit() {
	// discover forms
	var forms = getElementsByClassName(document,'form',window.wdc.formValidation.formClass);
//	alert('forms='+forms.length)
	for(i=0;i<forms.length;i++){
		f = forms[i]; fid = f.getAttribute('id');
//		alert('fid='+fid)
		if(fid && document.getElementById) {
			var pageForm = document.getElementById(fid);
			addEventJK(pageForm, 'submit', function () { return validateForm(fid) },true,true);
//			pageForm.style.border = '1px solid red'; 
		}
	}
}
function validateForm(fid) { 
//	alert('validating '+fid)
	var valid = true; 
	var reqs = getElementsByClassName(document,'*',window.wdc.formValidation.requiredInputClassName);
	var focalpoint = null; 
	for(i=0;i<reqs.length;i++){
		x = reqs[i];
		// clear any existing error
		clearMessage(x)
		inputs = x.getElementsByTagName('input');
		labels = x.getElementsByTagName('label');
		if (inputs[0].value.length<1){
			valid = false; 
			if(focalpoint==null){ focalpoint = inputs[0].getAttribute('id'); }
			// add a "required" message
			leaveMessage(x,labels[0]); 
		}
	}
	if(!valid) {
		f = document.getElementById(fid)
		if(focalpoint){
			var input = document.getElementById(focalpoint); 
			if(input){ input.focus() }
		}
	}
//	alert(fid+' validity is '+valid); 
	return valid
}

function clearMessage(node){
	var errors = getElementsByClassName(node,'p','error');
	for(var i=0;i<errors.length;i++){
		n = errors[i]
		n.parentNode.removeChild(n); 
	}
}

function leaveMessage(node,label){
	var text = 'The '+ label.innerHTML + ' field is required';
	var textnode = document.createElement('p')
	textnode.appendChild(document.createTextNode(text))
	appendClass(textnode,'error')
	// add a new one
	var firstchild = node.childNodes[0]
	node.insertBefore(textnode,firstchild)
}
