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)
});
}
};