} else if (iregex("^"+onReturn+"$", timeExpression)) {  throw new WTFException("when j00 get back");
	public long textToTime(String text) throws WTFException, 		   NumberFormatException {		Pattern when = Pattern.compile(timeExpressionPattern, Pattern.CASE_INSENSITIVE);		Matcher matcher = when.matcher(text);		if (!matcher.find())			throw new WTFException("I can't figure out when to send that.");		originalTimeExpression = matcher.group();		timeExpression = originalTimeExpression.replaceAll("about ", "");		if (iregex("^in ", timeExpression)) {			long unit = 0;			String unitWord = "";			if (iregex(secondUnit, timeExpression)) {				unit = 1000;				unitWord = "second";			} else if (iregex(minuteUnit, timeExpression)) {				unit = 1000 * 60;				unitWord = "minute";			} else if (iregex(hourUnit, timeExpression)) {				unit = 1000 * 60 * 60;				unitWord = "hour";			} else if (iregex(dayUnit, timeExpression)) {				unit = 1000 * 60 * 60 * 24;				unitWord = "day";			} else if (iregex(weekUnit, timeExpression)) {				unit = 1000 * 60 * 60 * 24 * 7;				unitWord = "week";			} else if (iregex(monthUnit, timeExpression)) {				unit = 1000 * 60 * 60 * 24 * 30;				unitWord = "month";			} else if (iregex(yearUnit, timeExpression)) {				unit = 1000 * 60 * 60 * 24 * 365;				unitWord = "year";			} else { //default to minutes				unit = 1000 * 60;				unitWord = "minute";			}			String duration = iregexFind(counter, timeExpression);			int dur = wordToInt(duration);			if (dur != 1)				unitWord += "s";			timeExpression = "in " + duration + " " + unitWord;			return System.currentTimeMillis() + unit * dur;		}		try {			//The rest of these will use a calendar object			GregorianCalendar now = new GregorianCalendar();			GregorianCalendar cal = new GregorianCalendar();			if (iregex("^at ", timeExpression)) {				String strAmpm = iregexFind(ampm, timeExpression);				String strTime = iregexFind(time, timeExpression);				String strHrs = iregexFind("[^:]+", strTime);				int intHrs = Integer.parseInt(strHrs);				String strMins = iregexFind("(?<=:)\\d+", strTime);				int intMins;				if (strMins != null && strMins.length() > 0)					intMins = Integer.parseInt(strMins);				else					intMins = 0; 				cal.set(Calendar.HOUR, intHrs);				cal.set(Calendar.MINUTE, intMins);				int increment = 6;				if (strAmpm.length() > 0) {					increment = 12;					if (iregex("\\bam?|in the morning?\\b", strAmpm))						cal.set(Calendar.AM_PM, Calendar.AM);					else if (iregex("\\b(pm?|in the evening?|at ni(ght|te))\\b", strAmpm))						cal.set(Calendar.AM_PM, Calendar.PM);				}				while (cal.before(now))					cal.add(Calendar.HOUR, increment);				int newHour = cal.get(Calendar.HOUR);				if (newHour == 0) newHour += 12;				timeExpression = "" + newHour + ":" + cal.get(Calendar.MINUTE)+					(cal.get(Calendar.AM_PM)==Calendar.AM ? "a" : "p");				return cal.getTimeInMillis();			}			//TODO: do other date operations if there are multiple expressions		} catch (NumberFormatException nfe) {			throw new WTFException("Woah - some weird time I couldn't understand. WTF!");		}		throw new WTFException("I recognize '" + this.originalTimeExpression + "', but I haven't learned what it means yet.");	}