* @param client
	 */
	public void op_questedit(final String input, final Client client) {
		final Player player = getPlayer(client);
		final EditorData data = player.getEditorData();
		final Quest quest = (Quest) data.getObject("quest");

		String qcmd = "";
		String qarg = "";

		if (input.indexOf(" ") != -1) {
			qcmd = input.substring(0, input.indexOf(" ")).toLowerCase();
			qarg = input.substring(input.indexOf(" ") + 1, input.length());
		}
		else {
			qcmd = input.substring(0, input.length()).toLowerCase();
		}

		debug("QEDIT CMD");
		debug("qcmd: \"" + qcmd + "\"");
		debug("qarg: \"" + qarg + "\"");

		if ( qcmd.equals("abort") ) {
			send("< Aborting Changes... >", client);

			// clear edit flag
			quest.Edit_Ok = true;

			// reset editor and player status
			player.setStatus((String) data.getObject("pstatus"));
			player.setEditor(Editors.NONE);

			// clear editor data
			player.setEditorData(null);

			// exit
			send("< Exiting... >", client);
		}
		else if ( qcmd.equals("desc") ) {
			if( data.setObject("desc", qarg) ) {
				send("Ok.", client);
			}
		}
		else if ( qcmd.equals("done") ) {
			send("< Saving Changes... >", client);

			// save changes
			op_questedit("save", client);

			send("< Done >", client);

			// clear edit flag
			quest.Edit_Ok = true;

			// reset editor and player status
			player.setStatus((String) data.getObject("pstatus"));
			player.setEditor(Editors.NONE);

			// clear editor data
			player.setEditorData(null);

			// exit
			send("< Exiting... >", client);
		}
		else if (qcmd.equals("help")) {
			send("Quest Editor -- Help", client);
			send(Utils.padRight("", '-', 40), client);
			send("abort", client);
			send("desc <new description>", client);
			send("done", client);
			send("help", client);
			send("name <new name>", client);
			send("save", client);
			send("setloc", client);
			send("show", client);
			send("zones", client);
		}
		else if (qcmd.equals("name")) {
			if( data.setObject("name", qarg) ) {
				send("Ok.", client);
			}
		}
		else if (qcmd.equals("save")) {
			quest.init(); // ensure that we have a valid quest id

			quest.setName((String) data.getObject("name"));
			quest.setDescription((String) data.getObject("desc"));

			// save tasks (add new ones, update existing ones, remove deleted
			// ones)

			if (!quests.contains(quest)) {
				quests.add(quest); // add quest to global quest table
			}
		}
		else if (qcmd.equals("setloc")) {
			if( data.setObject("location", Utils.toInt(qarg, -1)) ) {
				send("Ok.", client);
			}
		}
		else if (qcmd.equals("show")) {
			// will be a little like examine, just here to show changes
			send(Utils.padRight("", '-', 80), client);

			send("Quest ID#: " + quest.getId(), client);
			send("Name: " + (String) data.getObject("name"), client);
			send("Location: " + (Integer) data.getObject("location"), client);
			send("Description: ", client);
			
			showDesc((String) data.getObject("desc"), 80, client);
			
			send("Reward:", client);
			
			final Reward r = quest.getReward();
			
			final Coins c = r.getCoins();
			final List<Item> itemList = r.getItems();
			
			if( c != null ) send(c.toString(true), client);
			
			if( itemList != null ) {
				for(final Item item : itemList) {
					send(item.getName(), client);
				}
			}
			
			send(Utils.padRight("", '-', 80), client);

			int i = 0;

			for (final Task t : quest.getTasks()) {
				send(" " + i + ") " + t.getDescription(), client);
				i++;
			}

			send(Utils.padRight("", '-', 80), client);
		}
		else if (qcmd.equals("zones")) {
			for (final Entry<Zone, Integer> zoneData : zones.entrySet()) {
				final Zone zone = zoneData.getKey();
				
				if( zone != null ) {
					send(zone.getInstanceId() + " - " + zone.getName(), client);
				}
			}
		}
		else {
		}
	}