var Validation = Class.create(); Validation.prototype = { initialize: function(form) { this.form = $(form); this.MasterError = ""; pic1= new Image(32,32); pic1.src="/images/ajax/ajax-load.gif"; this.ProcessingMsg="
Processing...
" Event.observe(this.form, 'submit', this.onSubmit.bindAsEventListener(this), false); }, processing: function() { if (this.MasterError.length > 0) { $(this.MasterError).innerHTML = this.ProcessingMsg; val_name = this.MasterError; if (typeof Effect == 'undefined') { ($(val_name).style.display) = 'block'; } else { new Effect.Appear(val_name, {duration: 1 }); } } }, get_nodes: function() { allNodes = Form.getElements(this.form); done = false; tag = 0; var rt = new Array(); while (!done) { if (!document.forms[this.form.id]) break; if (!document.forms[this.form.id][tag]) break; var item_name = (document.forms[this.form.id][tag].id); rt[rt.length] = item_name; tag = tag + 1; } return (rt); }, set_master_error: function(fname) { this.MasterError = fname; }, process_individual_errors: function(jsinput) { var errors = 0; var allNodes = this.get_nodes(); for (i = 0; i < allNodes.length; i++) { nodename = (allNodes[i]); if ($(nodename + '-validate')) { val_name = (nodename + '-validate'); ($(val_name).style.display) = 'none'; if (jsinput[nodename][1] == 0) { errors = errors + 1; sval = (jsinput[nodename][2].length); if (sval > 0) { $(val_name).innerHTML = jsinput[nodename][2]; } if (typeof Effect == 'undefined') { ($(val_name).style.display) = 'block'; } else { new Effect.Appear(val_name, { duration: 1 }); } } } } return (errors); }, process_master_errors: function(jsinput) { // Master Error if (this.MasterError.length > 0) if (jsinput['master_error']) { $(this.MasterError).innerHTML = jsinput['master_error']; val_name = this.MasterError; if (typeof Effect == 'undefined') { ($(val_name).style.display) = 'block'; } else { new Effect.Appear(val_name, { duration: 1 }); } } }, process_404_errors: function() { if (this.MasterError.length > 0) { val_name = this.MasterError; $(val_name).innerHTML="There was a communication error with the server, please try again"; if (typeof Effect == 'undefined') { ($(val_name).style.display) = 'block'; } else { //($(val_name).style.display) = 'block'; new Effect.Appear(val_name, {duration: 1 }); } } else { alert("There was a communication error with the server"); } }, pause: function(numberMillis) { var now = new Date(); var exitTime = now.getTime() + numberMillis; while (true) { now = new Date(); if (now.getTime() > exitTime) return; } }, AjaxComplete: function(response) { if (response.status == 404) { alert("Submitting Form: Ajax 404"); this.form.submit(); } if (response.responseText.isJSON()==false) { alert("Submitting Form: Without JSON"); this.form.submit(); } if (response.status == 200) var jsinput = (response.responseText.evalJSON()); else var jsinput = new Array(); var errors = 0; if (this.eventname && $('form_type')) $('form_type').value = this.eventname; // There Was Error if no 200 if (response.status != 200) errors = errors + 1; errors = errors + this.process_individual_errors(jsinput); if (errors == 0) { this.processing(); this.form.submit(); } if (response.status===200) this.process_master_errors(jsinput); else this.process_404_errors(); }, HideAll: function() { if (this.MasterError.length > 0) { val_name = this.MasterError; if ($(val_name).style.display!='none') { $(val_name).innerHTML=this.ProcessingMsg; } } }, onClick: function(tag, method) { this.HideAll(); this.eventname = method; this.validate(); }, onSubmit: function(ev) { this.HideAll(); Event.stop(ev); var buttonClicked = document.activeElement || ev.explicitOriginalTarget; // XXX if (buttonClicked) { var eventElementName = Element.readAttribute(buttonClicked, 'id'); this.eventname = eventElementName; } this.validate(); return(false); }, validate: function() { //allNodes = Form.getElements(this.form); allNodes = this.get_nodes(); var poststr = ""; acount = 0; var parms = new Array(); for (i = 0; i < allNodes.length; i++) { //nodename=(allNodes[i].name); nodename = (allNodes[i]); if ($(nodename + '-validate')) { parms[acount] = new Array(nodename, $(nodename).value); acount++; } } for (i = 0; i < parms.length; i++) { poststr = poststr + parms[i][0] + '=' + parms[i][1] + '&'; } new Ajax.Request('/Ajax/Validate/' + this.form.id, { method: 'post', parameters: poststr, onComplete: this.AjaxComplete.bind(this) }); } };