rem: if (isValidHaiku(newHaiku) && !isValidHaiku(oldHaiku)) { element.morph('background:#080;color:#fff'); }  return true; 
add:  return isValidHaiku(newHaiku); 
context: function haikuMaster(oldValue, newValue, element) {    //populate hash of haiku from previous tick	oldWordHash = $H();		textToWords(oldValue).each(function(word){		oldWordHash[word.text] = word;	});		//populate hash of current haiku	var newWordArray = textToWords(newValue);	newWordHash = $H();		newWordArray.each(function(word){		newWordHash[word.text] = word;	});		//get rid of words that were in the cache for one cycle	wordCacheHash.each(function(kvPair){	   if (kvPair.value.state == "new" && 	       newWordHash[kvPair.value.text] == undefined) {	       delete wordCacheHash[kvPair.value.text];        }	});			//ajax any new words left in the cache    wordSet = "";    newWordHash.findAll(function(kvPair){	   return wordCacheHash[kvPair.value.text] != undefined && 	           wordCacheHash[kvPair.value.text].state == "new";	}).each(function(kvPair){	    wordSet += (wordSet != "" ? "-" : "") + kvPair.value.text;        kvPair.value.state = "requesting";	});    if (wordSet != "")        new Ajax.Request("/syllables/" + wordSet + ".json", {            method: "get",            onComplete: updateWordCacheHash        });		//Find the changed words from last cycle	newWordArray.each(function(word){		if (oldWordHash[word.text] != undefined && 		    wordCacheHash[word.text] == undefined ){			wordCacheHash[word.text] = word;		}	});			newHaiku = textToHaiku(newValue);		oldHaiku = textToHaiku(oldValue);	renderHaiku(newHaiku, element);	if (isValidHaiku(newHaiku) && !isValidHaiku(oldHaiku)) {	   element.morph('background:#080;color:#fff');	}		return true;}
meta: 8786	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/8786/340ab00d57af27e887abf4047ef6c7c366e1a035/haiku.js/clean/ruby/public/javascripts/haiku.js