ComplexTableFieldPopupForm = Class.create();
ComplexTableFieldPopupForm.prototype = {
	
	errorMessage: "Error talking to server",
	
	initialize: function() {
		Behaviour.register({
			"form#ComplexTableField_Popup_DetailForm .Actions input.action": {
				onclick: this.submitForm.bind(this)
			}
		});
	},
	
	submitForm : function(e) {
		// if custom validation implementation (extend class to implement)
		if(this.validate) {
			if(!this.validate()) {
				Event.stop(e);
				return false;
			}
		}
		
		// only do ajaxy stuff for content loaded in an iframe
		if(window != top && parent.parent.GB_hide) {
			var theForm = Event.findElement(e,"form");
			var submitButton = document.getElementsBySelector("input.action",theForm)[0];
			if(parent.parent.statusMessage != undefined) parent.parent.statusMessage('saving');
			submitButton.setAttribute("disabled","true");

			submitButton._oldValue = submitButton.value;
			submitButton.value = ingize(submitButton.value);
			Element.addClassName(submitButton,'loading');
			
			new parent.parent.Ajax.Request(
				theForm.getAttribute("action"),
				{
					parameters: Form.serialize(theForm)+"&ajax=1",
					onComplete: this.updateTableAfterSave.bind(this),
					onFailure: this.ajaxErrorHandler.bind(this)
				}
			);
			Event.stop(e);
			return false;
		} else {
			return true;
		}
	},
	
	updateTableAfterSave : function(response) {
		eval(response.responseText);
		var theForm = document.getElementsByTagName("form")[0];

		// don't update when validation is present and failed
		if(!this.validate || (this.validate && !hasHadFormError())) {
			new parent.parent.Ajax.Request(
				parent.parent.GB_RefreshLink,
				{
					onComplete: this.updateAndHide.bind(parent.parent),
					onFailure :  this.ajaxErrorHandler
				}
			);
		} else {
			var submitbutton = document.getElementsBySelector("input.action",theForm)[0];
			submitbutton.disabled = false;
			submitButton.value = submitButton._oldValue;
			Element.removeClassName(submitButton,'loading');
		}
	},
	
	ajaxErrorHandler: function(response) {
		var submitButton = document.getElementsBySelector("form input.action")[0];
		submitButton.disabled = false;
		submitButton.value = submitButton._oldValue;
		Element.removeClassName(submitButton,'loading');
		
		// TODO does not work due to sandbox-iframe restrictions?
		if(typeof(parent.parent.ajaxErrorHandler) == 'function') {
			parent.parent.ajaxErrorHandler();
		} else {
			alert(this.errorMessage);
		}
	},
	
	updateAndHide: function(response) {
		var theForm =document.getElementsByTagName("form")[0];
		
		var submitButton = document.getElementsBySelector("input.action",theForm)[0];
		submitButton.disabled = false;
		submitButton.value = submitButton._oldValue;
		Element.removeClassName(submitButton,'loading');
		
		// TODO Fix DOM-relation after pagination inside popup
		if(this.GB_OpenerObj) {
			// apparently firefox doesn't remember its DOM after innerHTML, so we help out here...
			var cachedObj = this.GB_OpenerObj;
			var cachedParentObj = this.GB_OpenerObj.parentNode;
			Element.replace(this.GB_OpenerObj, response.responseText);
			this.Behaviour.apply(cachedParentObj);
			cachedObj = null;
			this.GB_OpenerObj = null;
		}
		
		// causes IE6 to go nuts
		//this.GB_hide();
		
	}
}
ComplexTableFieldPopupForm.applyTo('form#ComplexTableField_Popup_DetailForm');