// ----------------------- EditItemView.js starts here ------------------------------
ensurePackage("guardian.r2");
guardian.r2.EditItemView = function (itemToEdit) {

	var dialogBox = new guardian.r2.DialogBox();
	
	this.addLoadEvent = function (callback) {
		addSafeLoadEvent(callback);
	};
	
	this.registerOpenEditItemLinkListener = function (callback) {
		addLinkEventHandler(callback, "show-edit-");
	};
	
	this.registerSubmitEditItemLinkListener = function (callback) {
		addButtonEventHandler(callback, "save-edit-");
	};
	
	this.registerCancelEditItemLinkListener = function (callback) {
		addButtonEventHandler(callback, "cancel-edit-");
	};

	function addButtonEventHandler(callback, actionName) {
		addEventHandler(callback, actionName, false);
	}
	
	function addLinkEventHandler(callback, actionName, isLinkListener)	{
		addEventHandler(callback, actionName, true);
	}
	
	function addEventHandler(callback, actionName, isLinkListener)	{
		var linkListener = function (event) {
			var source = guardian.r2.event.getElement(event);
			if (guardian.r2.dom.element.hasClassName(source, actionName + itemToEdit) && !(isLinkListener && !source.href)) {
				guardian.r2.event.stop(event);
				callback(source.href);
			}
		};
		addEvent(document, 'click', linkListener);
	}

	this.updateEditItemBox = function (content) {
		document.getElementById(getDialogBoxDivId()).innerHTML = content;
		dialogBox.showDialogBox(document.getElementById(getDialogBoxDivId()), document.getElementById(getWrapperDivId()), true);
	};
	
	this.hideEditItemBox = function () {
		document.getElementById(getDialogBoxDivId()).innerHTML = '';
		document.getElementById(getDialogBoxDivId()).style.display = 'none';
		editBoxWrapper = document.getElementById(getWrapperDivId());
		editBoxWrapper.style.display = 'none';
		dialogBox.hideDialogBox(editBoxWrapper);
	};
	
	this.redirectToUrl = function (url) {
		window.location.replace(url);
	};
	
	this.reloadPage = function () {
		window.location.reload();
	};
	
	this.getEditItemFormAction = function () {
		return getForm().action;
	};
	
	this.getSerializedEditItemForm = function () {
		return guardian.r2.dom.form.serializeForm(getForm());
	};
	
	this.disableSubmitButtons = function () {
		var form = getForm();
		var inputs = form.getElementsByTagName('input');
		for (var i = 0; i < inputs.length; i++) {
			var input = inputs[i];
			if (input.type.toLowerCase() === 'submit' && (input.name === '_cancel' || input.name === 'Save')) {
				input.disabled = 'disabled';
			} 
		}
	};

	this.createDivElementsForEditItemBox = function () {
		createWrapperDiv();
		
		appendDivToBody(getDialogBoxDivId(), "dialog-box");
	};
	
	function createWrapperDiv() {
		if (!document.getElementById(getWrapperDivId())) {
			appendDivToBody(getWrapperDivId(), "dialog-wrapper");
		}		
	}
	
	function appendDivToBody(id, className) {
		var divElement = document.createElement("div");
		divElement.id = id;
		divElement.className = className;
		document.body.appendChild(divElement);
	}
	
	function getWrapperDivId() {
		return "edit-wrapper-div";	
	}
	
	function getDialogBoxDivId() {
		return "edit-" + itemToEdit + "-form-div";	
	}
	
	function getForm() {
		return document.getElementById("edit-" + itemToEdit + "-form");
	}
	
};
// ------------------------ EditItemView.js ends here -------------------------------
