blob: b473fe29fa803f4a532808c7c2aec3713e34b70b [file] [log] [blame]
<script>
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
function validate(e) {
// mark the element as touch
e.touched = true;
xmlhttp.open("POST", "/validation", true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
var xml = xmlhttp.responseXML;
clearErrorRows(e.parentNode.parentNode.parentNode);
clearErrorLabels(e.form);
var errors = xml.childNodes[0].getElementsByTagName("e");
for (var i = 0; i < errors.length; i++) {
var error = errors[i];
var errorName = error.getAttribute("n");
var errorText = error.childNodes[0].textContent;
// there was an error, report it
var element = e.form.elements[errorName];
if (element != null && element.touched && element.touched == true) {
addError(element, errorText);
}
}
}
}
var req = getValidateXml(e.form);
xmlhttp.send(req);
}
function clearErrorRows(table) {
// clear out any rows with an "errorFor" attribute
var rows = table.rows;
var rowsToDelete = new Array();
for(var i = 0; i < rows.length; i++) {
var r = rows[i];
if (r.getAttribute("errorFor")) {
rowsToDelete.push(r);
}
}
// now delete the rows
for (var i = 0; i < rowsToDelete.length; i++) {
var r = rowsToDelete[i];
table.deleteRow(r.rowIndex);
}
}
function clearErrorLabels(form) {
// set all labels back to the normal class
var elements = form.elements;
for (var i = 0; i < elements.length; i++) {
var e = elements[i];
var cells = e.parentNode.parentNode.cells;
if (cells && cells.length >= 2) {
var label = cells[0].getElementsByTagName("label")[0];
if (label) {
label.setAttribute("class", "label");
}
}
}
}
function getValidateXml(f) {
var actionName = f.name;
var namespace = f.getAttribute("namespace");
var xml = '<r a="' + actionName + '" ns="' + namespace +'">\n';
for (var i = 0; i < f.elements.length; i++) {
var e = f.elements[i];
xml = xml + '<p n="' + e.name + '">' + e.value + '</p>\n';
}
xml = xml + '</r>\n';
return xml;
}
function addError(e, errorText) {
try {
// clear out any rows with an "errorFor" of e.id
var row = e.parentNode.parentNode;
var table = row.parentNode;
var error = document.createTextNode(errorText);
var tr = document.createElement("tr");
var td = document.createElement("td");
var span = document.createElement("span");
td.align = "center";
td.valign = "top";
td.colSpan = 2;
span.setAttribute("class", "errorMessage");
span.appendChild(error);
td.appendChild(span);
tr.appendChild(td);
tr.setAttribute("errorFor", e.id);;
table.insertBefore(tr, row);
// updat the label too
var label = row.cells[0].getElementsByTagName("label")[0];
label.setAttribute("class", "errorLabel");
} catch (e) {
alert(e);
}
}
</script>