﻿// Original code from http://www.sevenwires.com/play/UpsideDownLetters.html
// Modified by Michael Zhang http://www.folksonomy.org

function flip() {
	var result = flipString(document.f.original.value.toLowerCase());
	document.f.flipped.value = result;
}
function randOrd(){
	return (Math.round(Math.random())-0.5); 
} 
function flipString(aString) {
	// split the string into an array of words
	var style = document.f.style.value;

	if(style == 0) {
		var words =  aString.split(" ");
		
		for(var i = 0; i < words.length; ++i) {
			if(i % 2 != 1) {
				continue;
			}
			
			var last = words[i].length - 1;
			var result = new Array(words[i].length);
			for (var j = last; j >= 0; --j) {
				var c = words[i].charAt(j);
				var r = flipTable[c];
				result[last - j] = r != undefined ? r : c;
			}
			words[i] = result.join('');
		}
		
		return words.join(" ");
	}
	else if(style == 1) {
		var words =  aString.split(" ");
		
		for(var i = 0; i < words.length; ++i) {
			
			var last = words[i].length;
			var result = new Array(words[i].length);
			for (var j = 0; j < last; ++j) {
				var c = words[i].charAt(j);
				if(j % 2 != 1) {
					result[j] = c;
					continue;
				}
				var r = flipTable[c];
				result[j] = r != undefined ? r : c;
			}
			words[i] = result.join('');
		}
		
		return words.join(" ");
	}
	else if(style == 2) {
		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 = flipTable[c]
			result[last - i] = r != undefined ? r : c
		}
		return result.join('')
	}
	else if(style == 3) {
		var words =  aString.split(" ");
		
		for(var i = 0; i < words.length; ++i) {
			// shuffle the word
			words[i] = words[i].split("");
			words[i].sort(randOrd);
			words[i] = words[i].join("");
		}
		
		return words.join(" ");
	}
	else if(style == 4) {
		var words =  aString.split(" ");
		
		for(var i = 0; i < words.length; ++i) {
			// shuffle the word
			words[i] = words[i].split("");
			words[i].sort(randOrd);
			words[i] = words[i].join("");
			
			var last = words[i].length;
			var result = new Array(words[i].length);
			for (var j = 0; j < last; ++j) {
				var c = words[i].charAt(j);
				// randomly flip letters
				if(Math.floor(Math.random()*11) % 2 != 1) {
					result[j] = c;
					continue;
				}
				var r = flipTable[c];
				result[j] = r != undefined ? r : c;
			}
			words[i] = result.join('');
		}
		
		return words.join(" ");
	}
	else if(style == 5) {
		var words =  aString.split(" ");
		
		for(var i = 0; i < words.length; ++i) {
			
			var last = words[i].length;
			var result = new Array(words[i].length);
			for (var j = 0; j < last; ++j) {
				var c = words[i].charAt(j);
				if(Math.floor(Math.random()*11) % 2 != 1) {
					result[j] = c;
					continue;
				}
				var r = flipTable[c];
				result[j] = r != undefined ? r : c;
			}
			words[i] = result.join('');
		}
		
		return words.join(" ");
	}
	else if(style == 6) {
		var last = aString.length;
		var result = new Array(aString.length)
		for (var i = 0; i < last; ++i) {
			var c = aString.charAt(i)
			var r = flipTable[c]
			result[i] = r != undefined ? r : c
		}
		return result.join('')
	}
	else if(style == 7) {
		var words =  aString.split(" ");
		
		for(var i = 0; i < words.length; ++i) {
			
			var last = words[i].length;
			var result = new Array(words[i].length);
			for (var j = 0; j < last; ++j) {
				var c = words[i].charAt(j);
				var r = leetTable[c];
				result[j] = r != undefined ? r : c;
			}
			words[i] = result.join('');
		}
		
		return words.join(" ");
	}
	else if(style == 8) {
		var words =  aString.split(" ");
		
		for(var i = 0; i < words.length; ++i) {
			
			var last = words[i].length;
			var result = new Array(words[i].length);
			for (var j = 0; j < last; ++j) {
				var c = words[i].charAt(j);
				var r = encoderTable[c];
				result[j] = r != undefined ? r : c;
			}
			words[i] = result.join('');
		}
		
		return words.join(" ");
	}
	
	return aString;

}
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 : '\u05DF',
	m : '\u026F',
	n : 'u',
	r : '\u0279',
	t : '\u0287',
	v : '\u028C',
	w : '\u028D',
	y : '\u028E',
	'.' : '\u02D9',
	'[' : ']',
	'(' : ')',
	'{' : '}',
	'?' : '\u00BF',
	'!' : '\u00A1',
	"\'" : ',',
	'<' : '>',
	'_' : '\u203E',
	'"' : '\u201E',
	'\\' : '\\',
	';' : '\u061B',
	'\u203F' : '\u2040',
	'\u2045' : '\u2046',
	'\u2234' : '\u2235'
}
var leetTable = {
	a : '@',
	b : 'ß',
	c : '©',
	d : 'Ð',
	e : 'Ë',
	f : 'ƒ',
	g : 'Ⓖ',
	h : 'ℋ',
	i : 'Î',
	j : 'ʝ',
	k : 'k',
	l : '£',
	m : 'm',
	n : 'ℵ',
	o : 'Ø',
	p : 'þ',
	q : '¶',
	r : '®',
	s : '§',
	t : 'ƫ',
	u : 'µ',
	v : '√',
	w : 'ɰ',
	x : 'Ж',
	y : '¥',
	z : '2'
}
var encoderTable = {
	a : 'p',
	b : 'i',
	c : 'z',
	d : 'n',
	e : 'h',
	f : 'g',
	g : 'f',
	h : 'e',
	i : 'b',
	j : 't',
	k : 'w',
	l : 'r',
	m : 'v',
	n : 'd',
	o : 'x',
	p : 'a',
	q : 'u',
	r : 'l',
	s : 'y',
	t : 'j',
	u : 'q',
	v : 'm',
	w : 'k',
	x : 'o',
	y : 's',
	z : 'c',
	'!' : '?',
	'?' : '!'
}
for (i in flipTable) {
flipTable[flipTable[i]] = i
}

function SelectAll(id)
{
  document.getElementById(id).focus();
  document.getElementById(id).select();
}