var GSMCHARS = 	"\f^{}\[~]|€" +
				"@£$¥èéùìòç\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ " +
				"!\"#¤%&'()*+,-./0123456789:;<=>?¡"  +
				"ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑÜ§¿"   +
				"abcdefghijklmnopqrstuvwxyzäöñüà";

function gsmify(str)
{
	if (str == null) return "";
	var res = "";
	for (var i = 0; i < str.length; i++) {
		var c = str.charAt(i);
		if (GSMCHARS.lastIndexOf(c) != -1) {
			res += c;
			continue;
		}
		switch (c) {
// --- 0 chars
			case "\b":
				break;
// --- 1 chars
			case "Á":
			case "À":
			case "Â":
				res += "A";
				break;
			case "â":
			case "á":
			case "ª":
				res += "a";
				break;
			case "Ç":
				res += "C";
				break;
			case "¢":
				res += "c";
				break;
			case "Ê":
			case "Ë":
			case "È":
				res += "E";
			case "ë":
			case "ê":
				res += "e";
				break;
			case "Ĥ":
				res += "H";
				break;
			case "ĥ":
				res += "h";
				break;
			case "Î":
			case "Ï":
			case "Í":
			case "Ì":
				res += "I";
				break;
			case "î":
			case "í":
			case "ï":
				res += "i";
				break;
			case "Ĺ":
				res += "L";
				break;
			case "ĺ":
				res += "l";
				break;
			case "Ô":
			case "Ò":
			case "Ó":
				res += "O";
				break;
			case "ô":
			case "ó":
				res += "o";
				break;
			case "Ŕ":
				res += "R";
				break;
			case "ŕ":
				res += "r";
				break;
			case "Û":
			case "Ù":
			case "Ú":
				res += "U";
				break;
			case "û":
			case "ú":
				res += "u";
				break;
			case "Ŷ":
			case "Ÿ":
			case "Ỳ":
			case "Ý":
				res += "Y";
				break;
			case "ÿ":
			case "ý":
				res += "y";
				break;
			case "Ž":
				res += "Z";
				break;
			case "ž":
				res += "z";
				break;
			case "Œ":
			case "Õ":
				res += "Ö";
				break;
			case "œ":
			case "õ":
				res += "ö";
				break;
			case "²":
				res += "2";
				break;
			case "³":
				res += "3";
				break;
			case "¦":
				res += "|";
				break;
			case "·":
			case "‐":
			case "‑":
			case "‒":
			case "–":
			case "—":
			case "―":
				res += "-";
				break;
			case "↑":
			case "⇑":
			case "⇧":
				res += "^";
				break;
			case "‘":
			case "’":
				res += "'";
				break;
			case "“":
			case "”":
				res += "\"";
				break;
			case "\t":
			case "\u00A0":
				res += " ";
				break;
// --- 2 chars
			case "™":
				res += "TM";
				break;
			case "←":
				res += "<-";
				break;
			case "→":
				res += "->";
				break;
			case "⇦":
			case "⇐":
				res += "<=";
				break;
			case "⇒":
			case "⇨":
				res += "=>";
				break;
			case "«":
				res += "<<";
				break;
			case "»":
				res += ">>";
				break;
// --- 3 chars
			case "©":
				res += "(C)";
				break;
			case "®":
				res += "(R)";
				break;
			case "½":
				res += "1/2";
				break;
			case "¼":
				res += "1/4";
				break;
			case "¾":
				res += "3/4";
				break;
			case "↔":
				res += "<->";
				break;
			case "⇔":
				res += "<=>";
				break;
			case "…":
				res += "...";
				break;
// --- the rest
			default:
				res += "?";
		}
	}
	return res;
}
