// ----------------------- EditItemController.js starts here ------------------------------
ensurePackage("guardian.r2");
guardian.r2.EditItemController = function (editItemView) {

	var instance = this;
	var openListeners = [];
	var changeListeners = [];
	var saveListeners = [];
	
	this.registerOpenListener = function (listener) {
		openListeners.push(listener);
	};
	
	this.registerChangeListener = function (listener) {
		changeListeners.push(listener);
	};
	
	this.registerSaveListener = function (listener) {
		saveListeners.push(listener);
	};
	
	this.openEditItemBox = function (divSource) {
		var requestUrl = appendParameter(divSource, "ajaxRequest=true");
		
		var ajaxRequest = new guardian.r2.ajax.Request(requestUrl, {
			method: 'get',
			onSuccess: function (transport) {
				editItemView.updateEditItemBox(transport.responseText);
				notifyOpenListeners();
			},
			onFailure: function (transport) {
				editItemView.updateEditItemBox(transport.responseText);				
			}
		});
	};
	
	this.submitEditItemForm = function () {
		editItemView.disableSubmitButtons();
		var ajaxRequestUrl = appendParameter(editItemView.getEditItemFormAction(), "ajaxRequest=true");
		var ajaxRequest = new guardian.r2.ajax.Request(ajaxRequestUrl, {
				method: 'post', 
				parameters: editItemView.getSerializedEditItemForm(),
				onSuccess: function (transport) {
					
					if (transport.responseText.indexOf("Status:OK") >= 0) {
						notifySaveListeners();
						redirectToEmbeddedUrl(transport.responseText);
					} else {
						editItemView.updateEditItemBox(transport.responseText);
						notifyChangeListeners();
					}
				},
				onFailure: function (transport) {
					editItemView.updateEditItemBox(transport.responseText);
				}
			}
		);
	};
	
	this.cancelEditItemBox = function () {
		editItemView.hideEditItemBox();
	};
	
	function notifyOpenListeners() {
		for (var i = 0; i < openListeners.length; i++) {
			openListeners[i]();
		}
	}
		
	function notifyChangeListeners() {
		for (var i = 0; i < changeListeners.length; i++) {
			changeListeners[i]();
		}
	}	

	function notifySaveListeners() {
		for (var i = 0; i < saveListeners.length; i++) {
			saveListeners[i]();
		}
	}	
	
	function redirectToEmbeddedUrl(responseText) {
		var match = /^Url:(.+)$/m.exec(responseText);
		if (match && match[1]) {
			editItemView.redirectToUrl(match[1]);
		} else {
			editItemView.reloadPage();
		}
	}

	function onLoad() {
		editItemView.createDivElementsForEditItemBox();	
		editItemView.registerOpenEditItemLinkListener(instance.openEditItemBox);
		editItemView.registerSubmitEditItemLinkListener(instance.submitEditItemForm);
		editItemView.registerCancelEditItemLinkListener(instance.cancelEditItemBox);
	}

	editItemView.addLoadEvent(onLoad);
};
// ------------------------ EditItemController.js ends here -------------------------------
