var EditMenuAPI = (function () {
	var externalSaveEvent = {}, loadingPanel = EFX.loadingImg({ size: "small" });
	
	var getButtonIDs = function (id) {
		return {
			  saveButtonID : "saveButton_" + id
			, cancelButtonID : "cancelButton_" + id
			, editButtonID : "editButton_" + id
			, messageID : "headerMessage_" + id
			, displayVeiwID : "displayViewID_" + id
			, editViewID : "editViewID_" + id
		};
	}
		
	var showEdit = function (id) {
		var buttonIDs = getButtonIDs(id);
		if ($(buttonIDs["saveButtonID"]) && $(buttonIDs["editButtonID"])) {
			$(buttonIDs["saveButtonID"]).setStyle ("display", "inline");
			$(buttonIDs["cancelButtonID"]).setStyle ("display", "inline");
			$(buttonIDs["editButtonID"]).setStyle ("display", "none");
			
			$(buttonIDs["displayVeiwID"]).setStyle ("display", "none");
			$(buttonIDs["editViewID"]).setStyle ("display", "block");
		}
	}
	
	var showView = function (id) {
		var buttonIDs = getButtonIDs(id);
		if ($(buttonIDs["saveButtonID"]) && $(buttonIDs["editButtonID"])) {
			$(buttonIDs["saveButtonID"]).setStyle ("display", "none");
			$(buttonIDs["cancelButtonID"]).setStyle ("display", "none");
			$(buttonIDs["editViewID"]).setStyle ("display", "none");
			
			$(buttonIDs["editButtonID"]).setStyle ("display", "inline");
			$(buttonIDs["displayVeiwID"]).setStyle ("display", "block");
		}
	}
	
	var hide = function (id) {
		var buttonIDs = getButtonIDs(id);
		if ($(buttonIDs["saveButtonID"]) && $(buttonIDs["editButtonID"])) {
			$(buttonIDs["saveButtonID"]).setStyle ("display", "none");
			$(buttonIDs["cancelButtonID"]).setStyle ("display", "none");
			$(buttonIDs["editButtonID"]).setStyle ("display", "none");
		}
	}

	var save = function (id) {
		if ($defined("externalSaveEvent[id]") && externalSaveEvent[id] && externalSaveEvent[id]["save"]) {
			var res = externalSaveEvent[id]["save"] (id);
			if (res) {
				showView(id);
			}
		}
		setMessage (id, "");
	};
	
	var cancel = function (id) {
		showView(id);
		if ($defined("externalSaveEvent[id]") && externalSaveEvent[id] && externalSaveEvent[id]["cancel"]) {
			externalSaveEvent[id]["cancel"] (id);
		}
		setMessage (id, "");
	};
	
	var edit = function (id) {
		showEdit(id);
		if ($defined("externalSaveEvent[id]") && externalSaveEvent[id] && externalSaveEvent[id]["edit"]) {
			externalSaveEvent[id]["edit"] (id);
		}
	}
	
	var setMessage = function (id, str) {
		var buttonIDs = getButtonIDs(id);
		$(buttonIDs["messageID"]).set('text', str);
	}
	
	var setEvent = function (id, label, event) {
		if (!$defined("externalSaveEvent[id]") || !externalSaveEvent[id]) {
			externalSaveEvent[id] = {};
		}
		externalSaveEvent[id][label] = event;
	}
    
    var showWheel = function(id) {
		var buttonIDs = getButtonIDs(id);
        var saveBtn = $(buttonIDs["saveButtonID"]);
		saveBtn.setStyle ("display", "none");
		$(buttonIDs["cancelButtonID"]).setStyle ("display", "none");
        loadingPanel.addClass("titleBarButton").setStyles({ width: 16, height: 16, cursor: "default" }).inject(saveBtn, "before");
    }
    
    var hideWheel = function() {
        loadingPanel.destroy();
    }
	
	return {
		 getIDs : getButtonIDs
		,save : save
		,cancel : cancel
		,edit : edit
		,showEdit : showEdit
		,showView : showView
		,hide : hide
		,setMessage : setMessage
		,setEvent : setEvent
        ,showWheel : showWheel
        ,hideWheel : hideWheel
	}
}) ();

var buildEditMenu = function (id) {
	var menuBarSuffix = id;
	return {
		  getIDs : function (id) { EditMenuAPI.getIDs(menuBarSuffix); }
		, save : function () { EditMenuAPI.save(menuBarSuffix); }
		, cancel : function () { EditMenuAPI.cancel(menuBarSuffix); }
		, edit : function () { EditMenuAPI.edit(menuBarSuffix); }
		, showEdit : function () { EditMenuAPI.showEdit(menuBarSuffix); }
		, showView : function () { EditMenuAPI.showView(menuBarSuffix); }
		, hide : function () { EditMenuAPI.hide(menuBarSuffix); }
		, setMessage : function (str) { EditMenuAPI.setMessage(menuBarSuffix); }
		, setEvent : function (label, event) { EditMenuAPI.setEvent(menuBarSuffix, label, event); }
	};
}
