//Basic Entity-Functions
//JavaScript1.2 - All rights reserved - Copyright by mediaLINK 2001-2005 - V2.0c/08.06.2005
//Created by mediaLINK Zurich
//Part of the mediaLINK Utility-collection
//-----------------------------------------------------------------------------------

//array starts on ISO128
//partial unicode-replacements on ISO128-159
entityArray = new Array(
"uni='8364'|mac='219'|name='&euro;'|inf='Euro Sign'",
"uni='129'|mac='0'|name='&?;'|inf=''",
"uni='8218'|mac='226'|name='&sbquo;'|inf='Einfache Anfuehrung unten'",
"uni='402'|mac='196'|name='&fnof;'|inf='Funktionssymbol'",
"uni='8222'|mac='227'|name='&bdquo;'|inf='doppelte Anfuehrung unten'",
"uni='8230'|mac='201'|name='&hellip;'|inf='Ellipse'",
"uni='8224'|mac='160'|name='&dagger;'|inf='Einfaches Kreuz'",
"uni='8225'|mac='224'|name='&Dagger;'|inf='Doppeltes Kreuz'",
"uni='710'|mac='246'|name='&circ;'|inf='Accent Circumflex'",
"uni='8240'|mac='228'|name='&permil;'|inf='Promillezeichen'",
"uni='352'|mac='0'|name='&Scaron;'|inf='S mit Caron'",
"uni='8249'|mac='220'|name='&lsaquo;'|inf='Einfache franz Anfuehrung'",
"uni='140'|mac='206'|name='&OElig;'|inf='OE Ligatur'",
"uni='141'|mac='0'|name='&?;'|inf=''",
"uni='142'|mac='0'|name='&?;'|inf=''",
"uni='143'|mac='0'|name='&?;'|inf=''",
"uni='144'|mac='0'|name='&?;'|inf=''",
"uni='8216'|mac='212'|name='&lsquo;'|inf='Einfache Abfuehrung oben'",
"uni='8217'|mac='213'|name='&rsquo;'|inf='Einfache Anfuehrung oben'",
"uni='8220'|mac='210'|name='&ldquo;'|inf='Doppelte Anfuehrung oben'",
"uni='8221'|mac='211'|name='&rdquo;'|inf='Doppelte Abfuehrung oben'",
"uni='8226'|mac='165'|name='&bull;'|inf='Fetter mittelstehender Punkt'",
"uni='8211'|mac='208'|name='&ndash;'|inf='Halbgeviertstrich'",
"uni='8212'|mac='209'|name='&mdash;'|inf='Geviertstrich'",
"uni='732'|mac='247'|name='&tilde;'|inf='Tilde'",
"uni='8482'|mac='170'|name='&trade;'|inf='TradeMark'",
"uni='353'|mac='0'|name='&scaron;'|inf='s mit Caron'",
"uni='8250'|mac='221'|name='&rsaquo;'|inf='Einfache franz Abfuehrung'",
"uni='156'|mac='207'|name='&oelig;'|inf='oe Ligatur'",
"uni='157'|mac='0'|name='&?;'|inf=''",
"uni='158'|mac='0'|name='&?;'|inf=''",
"uni='376'|mac='217'|name='&Yuml;'|inf='Yumlaut'",
"uni='160'|mac='202'|name='&nbsp;'|inf='Non-breaking_space'",
"uni='161'|mac='193'|name='&iexcl;'|inf='Inverted_exclamation'",
"uni='162'|mac='162'|name='&cent;'|inf='Cent_sign'",
"uni='163'|mac='163'|name='&pound;'|inf='Pound_sterling'",
"uni='164'|mac='219'|name='&curren;'|inf='General_currency_sign'",
"uni='165'|mac='180'|name='&yen;'|inf='Yen_sign'",
"uni='166'|mac='0'|name='&brvbar;'|inf='Broken_vertical_bar'",
"uni='167'|mac='164'|name='&sect;'|inf='Section_sign'",
"uni='168'|mac='172'|name='&uml;'|inf='Umlaut/dieresis'",
"uni='169'|mac='169'|name='&copy;'|inf='A_copyright_symbol'",
"uni='170'|mac='187'|name='&ordf;'|inf='Feminine_ordinal'",
"uni='171'|mac='199'|name='&laquo;'|inf='Left_angle_quote'",
"uni='172'|mac='194'|name='&not;'|inf='Not_sign'",
"uni='173'|mac='208'|name='&shy;'|inf='Soft_hyphen'",
"uni='174'|mac='168'|name='&reg;'|inf='Registered_trademark'",
"uni='175'|mac='0'|name='&macr;'|inf='Macron_sign'",
"uni='176'|mac='161'|name='&deg;'|inf='Degree_sign'",
"uni='177'|mac='177'|name='&plusmn;'|inf='Plus_or_minus'",
"uni='178'|mac='0'|name='&sup2;'|inf='Superscript_two'",
"uni='179'|mac='0'|name='&sup3;'|inf='Superscript_three'",
"uni='180'|mac='171'|name='&acute;'|inf='Acute_accent'",
"uni='181'|mac='181'|name='&micro;'|inf='Micro_sign'",
"uni='182'|mac='166'|name='&para;'|inf='Paragraph_sign'",
"uni='183'|mac='0'|name='&middot;'|inf='Middle_dot'",
"uni='184'|mac='252'|name='&cedil;'|inf='Cedilla'",
"uni='185'|mac='0'|name='&sup1;'|inf='Superscript_one'",
"uni='186'|mac='188'|name='&ordm;'|inf='Masculine_ordinal'",
"uni='187'|mac='200'|name='&raquo;'|inf='Right_angle_quote'",
"uni='188'|mac='0'|name='&frac14;'|inf='Fraction_one-fourth'",
"uni='189'|mac='0'|name='&frac12;'|inf='Fraction_one-half'",
"uni='190'|mac='0'|name='&frac34;'|inf='Fraction_three-fourths'",
"uni='191'|mac='192'|name='&iquest;'|inf='Inverted_question_mark'",
"uni='192'|mac='203'|name='&Agrave;'|inf='A_grave_accent'",
"uni='193'|mac='231'|name='&Aacute;'|inf='A_acute_accent'",
"uni='194'|mac='229'|name='&Acirc;'|inf='A_circumflex_accent'",
"uni='195'|mac='204'|name='&Atilde;'|inf='A_tilde'",
"uni='196'|mac='128'|name='&Auml;'|inf='A_dieresis/umlaut'",
"uni='197'|mac='129'|name='&Aring;'|inf='A_ring'",
"uni='198'|mac='174'|name='&AElig;'|inf='AE_diphthong_(ligature)'",
"uni='199'|mac='130'|name='&Ccedil;'|inf='C_cedilla'",
"uni='200'|mac='233'|name='&Egrave;'|inf='E_grave_accent'",
"uni='201'|mac='131'|name='&Eacute;'|inf='E_acute_accent'",
"uni='202'|mac='230'|name='&Ecirc;'|inf='E_circumflex_accent'",
"uni='203'|mac='232'|name='&Euml;'|inf='E_dieresis/umlaut'",
"uni='204'|mac='237'|name='&Igrave;'|inf='I_grave_accent'",
"uni='205'|mac='234'|name='&Iacute;'|inf='I_acute_accent'",
"uni='206'|mac='235'|name='&Icirc;'|inf='I_circumflex_accent'",
"uni='207'|mac='236'|name='&Iuml;'|inf='I_dieresis/umlaut'",
"uni='208'|mac='0'|name='&ETH;'|inf='Icelandic_capital_Eth'",
"uni='209'|mac='132'|name='&Ntilde;'|inf='N_tilde'",
"uni='210'|mac='241'|name='&Ograve;'|inf='O_grave_accent'",
"uni='211'|mac='238'|name='&Oacute;'|inf='O_acute_accent'",
"uni='212'|mac='239'|name='&Ocirc;'|inf='O_circumflex_accent'",
"uni='213'|mac='205'|name='&Otilde;'|inf='O_tilde'",
"uni='214'|mac='133'|name='&Ouml;'|inf='O_dieresis/umlaut'",
"uni='215'|mac='0'|name='&times;'|inf='Multiply_sign'",
"uni='216'|mac='175'|name='&Oslash;'|inf='O_slash'",
"uni='217'|mac='244'|name='&Ugrave;'|inf='U_grave_accent'",
"uni='218'|mac='242'|name='&Uacute;'|inf='U_acute_accent'",
"uni='219'|mac='243'|name='&Ucirc;'|inf='U_circumflex_accent'",
"uni='220'|mac='134'|name='&Uuml;'|inf='U_dieresis/umlaut'",
"uni='221'|mac='0'|name='&Yacute;'|inf='Y_acute_accent'",
"uni='222'|mac='0'|name='&THORN;'|inf='Icelandic_capital_Thorn'",
"uni='223'|mac='167'|name='&szlig;'|inf='sharp_s_German'",
"uni='224'|mac='136'|name='&agrave;'|inf='a_grave_accent'",
"uni='225'|mac='135'|name='&aacute;'|inf='a_acute_accent'",
"uni='226'|mac='137'|name='&acirc;'|inf='a_circumflex_accent'",
"uni='227'|mac='139'|name='&atilde;'|inf='a_tilde'",
"uni='228'|mac='138'|name='&auml;'|inf='a_dieresis/umlaut'",
"uni='229'|mac='140'|name='&aring;'|inf='a_ring'",
"uni='230'|mac='190'|name='&aelig;'|inf='ae_diphthong_(ligature)'",
"uni='231'|mac='141'|name='&ccedil;'|inf='c_cedilla'",
"uni='232'|mac='143'|name='&egrave;'|inf='e_grave_accent'",
"uni='233'|mac='142'|name='&eacute;'|inf='e_acute_accent'",
"uni='234'|mac='144'|name='&ecirc;'|inf='e_circumflex_accent'",
"uni='235'|mac='145'|name='&euml;'|inf='e_dieresis/umlaut'",
"uni='236'|mac='147'|name='&igrave;'|inf='i_grave_accent'",
"uni='237'|mac='146'|name='&iacute;'|inf='i_acute_accent'",
"uni='238'|mac='148'|name='&icirc;'|inf='i_circumflex_accent'",
"uni='239'|mac='149'|name='&iuml;'|inf='i_dieresis/umlaut'",
"uni='240'|mac='0'|name='&eth;'|inf='Icelandic_small_eth'",
"uni='241'|mac='150'|name='&ntilde;'|inf='n_tilde'",
"uni='242'|mac='152'|name='&ograve;'|inf='o_grave_accent'",
"uni='243'|mac='151'|name='&oacute;'|inf='o_acute_accent'",
"uni='244'|mac='153'|name='&ocirc;'|inf='o_circumflex_accent'",
"uni='245'|mac='155'|name='&otilde;'|inf='o_tilde'",
"uni='246'|mac='154'|name='&ouml;'|inf='o_dieresis/umlaut'",
"uni='247'|mac='214'|name='&divide;'|inf='Division_sign'",
"uni='248'|mac='191'|name='&oslash;'|inf='o_slash'",
"uni='249'|mac='157'|name='&ugrave;'|inf='u_grave_accent'",
"uni='250'|mac='156'|name='&uacute;'|inf='u_acute_accent'",
"uni='251'|mac='158'|name='&ucirc;'|inf='u_circumflex_accent'",
"uni='252'|mac='159'|name='&uuml;'|inf='u_dieresis/umlaut'",
"uni='253'|mac='0'|name='&yacute;'|inf='y_acute_accent'",
"uni='254'|mac='0'|name='&thorn;'|inf='Icelandic_small_thorn'",
"uni='255'|mac='216'|name='&yuml;'|inf='y_dieresis/umlaut'"
);


var startEntityCodeArea = 128;
var endEntityCodeArea = 255;
var dataSep = "|";
var dataSepReplace = "-";

//-----parsing for entities
function entityParse(toParse){
	var strbuf = "";
	var e = "";
	//checking the string
	for (var s = 0; s < toParse.length; s++){
		e = toParse.substring(s,s+1);
		eASCII = e.charCodeAt(0);
		
		//N4W-Bug for entities with ISO-code under zero (ok N4.7W and higher)	
		if ((navigator.appName=="Netscape") && (navigator.userAgent.substring(0,9) == "Mozilla/4") && (navigator.appVersion.indexOf("Mac") == -1)){
			if ((eASCII < 0) && (eASCII > -256)){
				eASCII = eASCII+256;
			}
		}
		
		//searching unicode-replacement from ISO128-159
		if (eASCII > 255){
			for (var u = 0; u <= 32; u++){
				eUNI = entityArray[u].substring(5,entityArray[u].indexOf("|")-1);
				if (eASCII == eUNI){
					eASCII = startEntityCodeArea+u;
				}
			}
		}
		
		//prevent data-separator
		if (e == dataSep){
			e = dataSepReplace;
		}
		
		//query if it is an entity
		if ((eASCII >= startEntityCodeArea) && (eASCII <= endEntityCodeArea)) {
			e = entityArray[eASCII-startEntityCodeArea].substring(entityArray[eASCII-startEntityCodeArea].indexOf("'&")+1,entityArray[eASCII-startEntityCodeArea].lastIndexOf(";'")+1);
		}
		
		//some special entities
		if (eASCII == 34){e = "&quot;"};
		if (eASCII == 38){e = "&amp;"};
		if (eASCII == 60){e = "&lt;"};
		if (eASCII == 62){e = "&gt;"};
		
		strbuf = strbuf + e;
	}
	return strbuf;	
}


//-----parsing for plain signs in ISO-notation (e.g. for setting formfields)
function plainParse(toParse){
	//query if there's any entity
	if ((toParse.indexOf("&") > -1) && (toParse.indexOf(";") > -1)){
		var strbuf = "";
		var e = "";
		//checking the string
		for (var s = 0; s < toParse.length; s++){
			e = toParse.substring(s,s+1);
			if (e == "&"){
				//extract the entity part &xxx;
				t = toParse.substring(s,toParse.length);
				t = t.substring(0,t.indexOf(";")+1);
				//searching in the entityArray
				for (eASCII=0; eASCII <= (endEntityCodeArea-startEntityCodeArea); eASCII++){
					//existing entity in array found
					if (entityArray[eASCII].indexOf(t) > -1){
						//eUNI = entityArray[eASCII].substring(entityArray[eASCII].indexOf("uni=")+5,entityArray[eASCII].indexOf("|")-1);
						eISO = eASCII+startEntityCodeArea;
						e = String.fromCharCode(eISO);
						s = s + (t.length-1);			
					}
					//some special entities
					if (t == "&quot;"){
						e = String.fromCharCode(34);
						s = s + (t.length-1);
					}
					if (t == "&amp;"){
						e = String.fromCharCode(38);
						s = s + (t.length-1);
					}
					if (t == "&lt;"){
						e = String.fromCharCode(60);
						s = s + (t.length-1);
					}
					if (t == "&gt;"){
						e = String.fromCharCode(62);
						s = s + (t.length-1);
					}
				}	
			}
			strbuf = strbuf + e;
		}
		return strbuf;
		
	//no parsing needed
	}else{
		return toParse;
	}
}