function flip(textToFlip)
{
	return flipStr(textToFlip.toLowerCase(), flipTable);
}

function flipStr(aString, tbl)
{
	var last = aString.length - 1;
	var result = new Array(aString.length);
	for (var i = last; i >= 0; --i)
	{
		var c = aString.charAt(i);
		var r = tbl[c];
		result[last - i] = r != undefined ? r : c
	}
	return result.join('');
}

function initFlipTable(tbl)
{
	for (i in tbl)
	{
		tbl[tbl[i]] = i;
	}
}

var flipTable = {
	a : '\u0250',
	b : 'q',
	c : '\u0254',
	d : 'p',
	e : '\u01DD',
	f : '\u025F',
	g : '\u0183',
	h : '\u0265',
	i : '\u0131',
	j : '\u027E',
	k : '\u029E',
	l : 'l',
	m : '\u026F',
	n : 'u',
	o : 'o',
	p : 'd',
	q : 'b',
	r : '\u0279',
	s : 's',
	t : '\u0287',
	u : 'n',
	v : '\u028C',
	w : '\u028D',
	y : '\u028E',
	z : 'z',
	1 : '\u21C2',
	2 : '\u1105',
	3 : '\u1110',
	4 : '\u3123',
	5 : '\u078E',  /* or u03DB */
	6 : '9',
	7 : '\u3125',
	8 : '8',
	9 : '6',
	0 : '0',
	'.' : '\u02D9',
	',' : "\'",
	"\'" : ',',
	"\"" : ',,',
	"´" : ',',
	"`" : ',',
	';' : '\u061B',
	'!' : '\u00A1',
	'\u00A1' : '!',
	'?' : '\u00BF',
	'\u00BF' : '?',
	'[' : ']',
	']' : '[',
	'(' : ')',
	')' : '(',
	'{' : '}',
	'}' : '{',
	'<' : '>',
	'>' : '<',
	'_' : '\u203E',
	'\r' : '\n'
};

function flip_init(obj)
{
	initFlipTable(flipTable);
}
