/**
 * htmlEntities
 *
 * Convert all applicable characters to HTML entities
 *
 * object string
 * return string
 *
 * example:
 *   test = 'äöü'
 *   test.htmlEntities() //returns '&auml;&ouml;&uuml;'
 */

String.prototype.htmlEntities = function () {
	var newString = this.toString();
	
	var chars = new Array(  '&','à','á','â','ã','ä','å','æ','ç','è','é',
							'ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô',
							'õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ','À',
							'Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë',
							'Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö',
							'Ø','Ù','Ú','Û','Ü','Ý','Þ','€','\"','ß','<',
							'>','¢','£','¤','¥','¦','§','¨','©','ª','«',
							'¬','­','®','¯','°','±','²','³','´','µ','¶',
							'·','¸','¹','º','»','¼','½','¾');

	var entities = new Array(   'amp','agrave','aacute','acirc','atilde','auml','aring',
								'aelig','ccedil','egrave','eacute','ecirc','euml','igrave',
								'iacute','icirc','iuml','eth','ntilde','ograve','oacute',
								'ocirc','otilde','ouml','oslash','ugrave','uacute','ucirc',
								'uuml','yacute','thorn','yuml','Agrave','Aacute','Acirc',
								'Atilde','Auml','Aring','AElig','Ccedil','Egrave','Eacute',
								'Ecirc','Euml','Igrave','Iacute','Icirc','Iuml','ETH','Ntilde',
								'Ograve','Oacute','Ocirc','Otilde','Ouml','Oslash','Ugrave',
								'Uacute','Ucirc','Uuml','Yacute','THORN','euro','quot','szlig',
								'lt','gt','cent','pound','curren','yen','brvbar','sect','uml',
								'copy','ordf','laquo','not','shy','reg','macr','deg','plusmn',
								'sup2','sup3','acute','micro','para','middot','cedil','sup1',
								'ordm','raquo','frac14','frac12','frac34');

	for(var i = 0; i < chars.length; i++) {
		myRegExp = new RegExp();
		myRegExp.compile(chars[i],'g')
		newString = newString.replace(myRegExp, '&' + entities[i] + ';');
	}

	return newString;
};

/**
 * charEntities
 *
 * Convert all HTML entities to applicable characters
 *
 * object string
 * return string
 *
 * example:
 *   test = '&auml;&ouml;&uuml;'
 *   test.htmlEntities() //returns 'äöü'
 */

String.prototype.charEntities = function () {
	var newString = this.toString();
	
	var chars = new Array(  'amp','agrave','aacute','acirc','atilde','auml','aring',
							'aelig','ccedil','egrave','eacute','ecirc','euml','igrave',
							'iacute','icirc','iuml','eth','ntilde','ograve','oacute',
							'ocirc','otilde','ouml','oslash','ugrave','uacute','ucirc',
							'uuml','yacute','thorn','yuml','Agrave','Aacute','Acirc',
							'Atilde','Auml','Aring','AElig','Ccedil','Egrave','Eacute',
							'Ecirc','Euml','Igrave','Iacute','Icirc','Iuml','ETH','Ntilde',
							'Ograve','Oacute','Ocirc','Otilde','Ouml','Oslash','Ugrave',
							'Uacute','Ucirc','Uuml','Yacute','THORN','euro','quot','szlig',
							'lt','gt','cent','pound','curren','yen','brvbar','sect','uml',
							'copy','ordf','laquo','not','shy','reg','macr','deg','plusmn',
							'sup2','sup3','acute','micro','para','middot','cedil','sup1',
							'ordm','raquo','frac14','frac12','frac34');

	var entities = new Array(   '&','à','á','â','ã','ä','å','æ','ç','è','é',
								'ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô',
								'õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ','À',
								'Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë',
								'Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö',
								'Ø','Ù','Ú','Û','Ü','Ý','Þ','€','\"','ß','<',
								'>','¢','£','¤','¥','¦','§','¨','©','ª','«',
								'¬','­','®','¯','°','±','²','³','´','µ','¶',
								'·','¸','¹','º','»','¼','½','¾');

	for(var i = 0; i < chars.length; i++) {
		newString = newString.replace('&' + chars[i] + ';', entities[i]);
	}

	return newString;
};
