// JavaScript Document

// 
// By defining a callback function a developer can display errors the way he see fit

// This function deliberately avoid using innerHTML (a non-standard shortcut)
// since we want to have the sample working even if served with a xml mime-type. 
// So we stick with 100% standard DOM

function errorOnLabels(formNode, validators){
	var labelNodes = formNode.getElementsByTagName("label");
	// Reset all the labels
	resetLabels(labelNodes);
	for(var i=0; i<validators.length; i++){
		var label = getLinkedLabel(labelNodes, validators[i].name);
		if(label){
			// Flag the labels
			flagLabel(label, validators[i].message);
		}
	}
}

function getLinkedLabel(labelNodes, fieldID){
	for(var i=0; i<labelNodes.length; i++){
		if(labelNodes[i].htmlFor == fieldID){
			return labelNodes[i];
		}
	}
}

function flagLabel(labelNode, message){
	labelNode.oldText = labelNode.firstChild;
	var strongNode = document.createElement("strong");
	var textNode = document.createTextNode(message);
	strongNode.appendChild(textNode);
	labelNode.replaceChild(strongNode, labelNode.firstChild);
}

function resetLabels(labelNodes){
	for(var i=0; i<labelNodes.length; i++){
		if(labelNodes[i].oldText){
			labelNodes[i].replaceChild(labelNodes[i].oldText, labelNodes[i].firstChild);
		}
	}
}

// 
