@Override
	@SuppressWarnings("unchecked")
	public void modifyHoliday(MOB mob, int holidayNumber)
	{
		final Object resp=getHolidayFile();
		if(resp instanceof String)
		{
			mob.tell((String)resp);
			return;
		}
		List<String> steps=null;
		if(resp instanceof List)
			steps=(List<String>)resp;
		else
		{
			mob.tell(L("Unknown error."));
			return;
		}
		if((holidayNumber<=0)||(holidayNumber>=steps.size()))
		{
			mob.tell(L("@x1 does not exist as a holiday -- enter LIST HOLIDAYS.",""+holidayNumber));
			return;
		}

		final String step=steps.get(holidayNumber);
		final HolidayData encodedData=getEncodedHolidayData(step);
		final TriadList<String,String,Integer> settings=encodedData.settings();
		final TriadList<String,String,Integer> behaviors=encodedData.behaviors();
		final TriadList<String,String,Integer> properties=encodedData.properties();
		final TriadList<String,String,Integer> stats=encodedData.stats();

		final int oldNameIndex=settings.indexOfFirst("NAME");
		if((mob.isMonster())||(oldNameIndex<0))
			return;
		final String oldName=settings.get(oldNameIndex).second;
		boolean ok=false;
		int showFlag=-1;
		if(CMProps.getIntVar(CMProps.Int.EDITORTYPE)>0)
			showFlag=-999;
		try
		{
			while((mob.session()!=null)&&(!mob.session().isStopped())&&(!ok))
			{
				int showNumber=0;
				promptText(mob,settings,"NAME",++showNumber,showFlag,"Holiday Name","It's, well, a name.",false);
				showNumber=promptDuration(mob,settings,showNumber,showFlag);
				if(settings.indexOfFirst("AREAGROUP")>=0)
					promptText(mob,settings,"AREAGROUP",++showNumber,showFlag,"Areas List (?)","Area names are space separated, and words grouped using double-quotes",false);
				if(settings.indexOfFirst("MOBGROUP")>=0)
					promptText(mob,settings,"MOBGROUP",++showNumber,showFlag,"Mask for mobs that apply (?)",CMLib.masking().maskHelp("\n\r","disallow"),false);
				promptText(mob,properties,"MOOD",++showNumber,showFlag,"Mood setting (?)","NULL/Empty (to not use a Mood), or one of: FORMAL, POLITE, HAPPY, SAD, ANGRY, RUDE, MEAN, PROUD, GRUMPY, EXCITED, SCARED, LONELY",true);
				promptText(mob,behaviors,"AGGRESSIVE",++showNumber,showFlag,"Aggressive setting (?)",CMLib.help().getHelpText("Aggressive",mob,true)+"\n\r\n\r** NULL/Empty (to not use Aggressive **",true);
				showNumber=genPricing(mob,stats,++showNumber,showFlag);
				showNumber=genMudChat(mob,"MUDCHAT",behaviors,++showNumber,showFlag);
				showNumber=genBehaviors(mob,behaviors,++showNumber,showFlag);
				showNumber=genProperties(mob,properties,++showNumber,showFlag);
				if(showFlag<-900)
				{
					ok=true;
					break;
				}
				if(showFlag>0)
				{
					showFlag=-1;
					continue;
				}
				showFlag=CMath.s_int(mob.session().prompt(L("Edit which? "),""));
				if(showFlag<=0)
				{
					showFlag=-1;
					ok=true;
				}
			}
		}
		catch (final java.io.IOException e)
		{
			return;
		}
		if(ok)
		{
			final String err=alterHoliday(oldName, encodedData);
			if(err.length()==0)
				mob.tell(L("Holiday modified."));
			else
				mob.tell(err);
		}
	}