/*
	@author: Scott Robbin
	@description: Substitute html entities in strings to create jibberish-ish text.
	@link: http://halobrite.com/
	@date: 2009-03-08
  
  @note: Based on data and code by Remy Sharp's entity matcher (http://leftlogic.com/entity-lookup/)
  			 and Alex King's Javascript Quicktags (http://alexking.org/blog/2004/06/03/js-quicktags-under-lgpl/)
	@license: Creative Commons License - ShareAlike http://creativecommons.org/licenses/by-sa/3.0/
*/

function TextualChocolate() {
  var list = [];
    
  function isLower(c) {
    var lwr = 'abcdefghijklmnopqrstuvwxyz';
    if( lwr.indexOf(c) > -1 ) return true
    return false; 
  }
	
	return {
	  add: function(char, ents) {
	    list[char] = ents;
	  },
    getRand: function(c) {
			lchar = c.toLowerCase();
      if(list[lchar]) {
        var randNum=Math.floor(Math.random()*list[lchar].length);
        return list[lchar][randNum];
      }
      // We couldn't find a match, so we'll just re-case it
      if( isLower(c) ) return c.toUpperCase();   
      else return c.toLowerCase();
    }
	}
	
}

var t = new TextualChocolate();

$(document).ready(function() {
  $("#status")
  	.val("")
  	.keydown(function(e){
  		key = e.which;
  		if(((key >= 65 && key <= 90) || (key >= 97 && key <= 122)) && !e.metaKey) {
  		  // Convert to new character
  			c = String.fromCharCode(key);
  	  	char_ent = t.getRand(c);
  			char_txt = $('<div/>').html(char_ent).text();
			
  			//console.log(key + ": " + char_ent + e.metaKey);

  			// Insert the character at the appropriate point
  			edInsertContent(e.target, char_txt);
  			return false;
  		}
  		return true;
  	});
});

/* Via Remy Sharp's entity matcher */
t.add('a', ['&ordf;', '&Agrave;', '&Aacute;', '&Acirc;', '&Atilde;', '&Auml;', '&Aring;', '&agrave;', '&aacute;', '&acirc;', '&atilde;', '&auml;', '&aring;', '&Alpha;', '&alpha;']);
t.add('b', ['&szlig;', '&Beta;', '&beta;']);
t.add('c', ['&cent;', '&copy;', '&Ccedil;', '&ccedil;', '&sigmaf;']);
t.add('d', ['&ETH;', '&part;']);
t.add('e', ['&Egrave;', '&Eacute;', '&Ecirc;', '&Euml;', '&egrave;', '&eacute;', '&ecirc;', '&euml;', '&Epsilon;', '&Xi;', '&Sigma;', '&epsilon;', '&xi;', '&sum;']);
t.add('f', ['&fnof;']);
t.add('h', ['&Eta;', 'h']);
t.add('i', ['&Igrave;', '&Iacute;', '&Icirc;', '&Iuml;', '&igrave;', '&iacute;', '&icirc;', '&iuml;', '&Iota;', '&iota;']);
t.add('k', ['&Kappa;']);
t.add('l', ['&iota;', 'L']);
t.add('m', ['&Mu;']);
t.add('n', ['&Ntilde;', '&ntilde;', '&Nu;', '&eta;', '&prod;']);
t.add('o', ['&deg;', '&ordm;', '&Ograve;', '&Oacute;', '&Ocirc;', '&Otilde;', '&Ouml;', '&Oslash;', '&ograve;', '&oacute;', '&ocirc;', '&otilde;', '&ouml;', '&oslash;', '&Theta;', '&Omicron;', '&Phi;', '&Omega;', '&theta;', '&omicron;', '&rho;', '&sigma;']);
t.add('p', ['&THORN;', '&thorn;', '&Rho;']);
t.add('r', ['r', '&reg;', 'R']);
t.add('s', ['&Scaron;', '&scaron;']);
t.add('t', ['&Tau;', '&tau;']);
t.add('u', ['&micro;', '&Ugrave;', '&Uacute;', '&Ucirc;', '&Uuml;', '&ugrave;', '&uacute;', '&ucirc;', '&uuml;', '&mu;', '&upsilon;']);
t.add('v', ['&nu;','&radic;']);
t.add('w', ['&omega;', 'W']);
t.add('x', ['&times;', '&Chi;', '&chi;']);
t.add('y', ['&yen;', '&Yacute;', '&yacute;', '&yuml;', '&Upsilon;', '&Psi;', '&gamma;', '&psi;', '&upsih;', '&Yuml;']);
t.add('z', ['&Zeta;', 'z']);

/* Via Alex King's Javascript Quicktags */
function edInsertContent(myField, myValue) {
	//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
		myField.focus();
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		var scrollTop = myField.scrollTop;
		myField.value = myField.value.substring(0, startPos)
		              + myValue 
                      + myField.value.substring(endPos, myField.value.length);
		myField.focus();
		myField.selectionStart = startPos + myValue.length;
		myField.selectionEnd = startPos + myValue.length;
		myField.scrollTop = scrollTop;
	} else {
		myField.value += myValue;
		myField.focus();
	}
}