
var AjaxForm = {
	
	StaticVal: 0,
	
	init: function(frm, call, update) {
		frm = $(frm);
		
		if (!call) call = frm.action;
		frm.ajaxCall = call;
		frm.updateItem = $(update);
		if (!frm.isAjaxForm) AjaxToolkit.addEvent(frm, 'submit', AjaxForm.submit);
		frm.isAjaxForm = true;
	},
	
	submit: function(e) {
		AjaxForm.disable(this);
		if (this.updateItem) {
			if (this.updateItem.tagName) {
				AjaxToolkit.ajax.submit(this.ajaxCall, this.updateItem, this);
			} else {
				var i = this;
				var u = this.updateItem;
				var f=function(r){
					AjaxForm.reenable($(i));
					u(r)
				};
				AjaxToolkit.ajax.post(this.ajaxCall, f, AjaxToolkit.ajax.serialize(this));
			}
		} else {
			var i = this;
			var f=function(r){AjaxForm.reenable($(i)); eval(r)};
			AjaxToolkit.ajax.post(this.ajaxCall, f, AjaxToolkit.ajax.serialize(this));
		}
		if (e) {
			e.stopPropagation();
			e.preventDefault();
		}
	},
	
	disable: function(f) {
		/*var g=function(n) {return f.getElementsByTagName(n)}; 
		var d=function(e) {for(var o in e) if(e[o]) {e[o].oldDisabled=e[o].disabled; e[o].disabled=true;}};
		d(g('input'));
		d(g('select'));
		d(g('textarea'));*/
		if (!f) return;
		_a.each($$("input, select, textarea", f), function() {
			this.oldDisabled = this.disabled;
			this.disabled = true;
		});
	},
	
	reenable: function(f) {
		/*var g=function(n) {return f.getElementsByTagName(n)}; 
		var d=function(e) {for(var o in e) if(e[o]) e[o].disabled=e[o].oldDisabled};
		d(g('input'));
		d(g('select'));
		d(g('textarea'));*/
		
		if (!f) return;
		_a.each($$("input, select, textarea", f), function() {
			this.disabled = this.oldDisabled || false;
		});
	},
	
	parser: function(r) {
		if (top.window.reqPool) {
			top.window.reqPool.proceedResponseCalls(r);
		}
	}, 
	
	resetForm: function(frm) {
		for (var i=0; i<frm.elements.length; i++) {
			var inp_c = frm.elements[i];
			if (_a.nodeName(inp_c, 'input')) {
				if (inp_c.type == 'text' || inp_c.type == 'hidden') {
					inp_c.value = '';
				} else {
					if (inp_c.type == 'radio' || inp_c.type == 'checkbox') {
						inp_c.checked = false;
					}
				}
			} else if (_a.nodeName(inp_c, 'select')) {
				_a.each(inp_c.options, function() {this.selected=false;});
				inp_c.selectedIndex = -1;
			}
		}
	},
	
	fillForm: function(frm, data, prefix) {
		AjaxForm.resetForm(frm);
		for (var i in data) {
			AjaxForm.fillValue.call(frm, i, data[i], prefix);
		}
	},
	
	fillValue: function(field, value, prefix) {
		var fld = prefix ? prefix + '['+field+']' : field;
		if (typeof value == 'object' && value.length == undefined) {
			var frm = this;
			_a.each(value, function(i,o){
				AjaxForm.fillValue.call(frm, i, o, fld);
			});
		} else {
			//alert([fld, value]);
			var inp = [], fld2;
			if (isArray(value)) {
				
				for (var i=0; i<value.length; i++) {
					fld2 = fld + '[' +i+ ']';
					inp = _a.merge(inp, _a.grep(this.elements, function(a){return a.name == fld2}));
				}
				
				fld2 = fld + '[]';
				inp = _a.merge(inp, _a.grep(this.elements, function(a){return a.name == fld2}));
			} else {
				inp = _a.grep(this.elements, function(a){return a.name == fld});
			}
			for (var i = 0; i<inp.length; i++) {
				var inp_c = inp[i];
				
				if (_a.nodeName(inp_c, 'input')) {
					if (inp_c.type == 'text' || inp_c.type == 'hidden') {
						if (isArray(value)) {
							inp_c.value = value[i] || "";
						} else {
							inp_c.value = value;
						}
					} else {
						if (inp_c.type == 'radio' || inp_c.type == 'checkbox') {
							if (inp_c.value == value || (typeof value == 'object' && _a.inArray(inp_c.value, value)!=-1 )) {
								inp_c.checked = true;
							}
						}
					}
				} else if (_a.nodeName(inp_c, 'select')) {
					_a.each(inp_c.options, function() {
						if (this.value == value || (isArray(value) && this.value == value[i]) || (!this.value && this.text == value)) {
							this.selected=true; 
							this.parentNode.selectedIndex = this.index;
						}
					});
				}
			}
		}
	}
	
}