/**
* @author: Jan Mentzel http://jan.islandofwaiting.de
* @date: 2007-07-10
*/
/**
* @param str original string
* @return Array of obfuscated charcodes
*/
function obfuscate(str) {
	var arr = [];
	for(var i=0; i < str.length; i++) {
		arr.push(str.charCodeAt(i) ^ (i+obfuscate.base)); 
	}
	return arr;
}
obfuscate.base = 32;
/**
* @param arr Array of obfuscated charcodes
* @return String original string
*/
function deobfuscate(arr) {
	base = obfuscate.base;
	var buf = [];
	for(var i=0; i < arr.length; i++) {
		buf.push(String.fromCharCode(  (arr[i]-0) ^ (i+base) ));
	}
	return buf.join('');
}

/** 
* TESTS
*/
function vor() {
	document.meinform.ausgabe.value =
		obfuscate(document.meinform.eingabe.value);
}
function zurueck() {
	document.meinform.eingabe.value =
		deobfuscate(document.meinform.ausgabe.value.split(','));
}
function anzeigen() {
	var arr = document.meinform.ausgabe.value.split(',');
	var buf = [];
	for(var i=0; i < arr.length; i++) {
		buf.push(String.fromCharCode( (arr[i]-0) ));
	}
	document.meinform.zeichen.value = buf.join('');
}
function assertEquals(a, b, msg) {
	if(a != b) {
		assertEquals.assertions++;
		document.getElementById('errors').innerHTML += "\n"+ a +" != "+ b +" "+msg;
	}
}
assertEquals.assertions = 0;

function test() {
	var str = "ABCD"
	assertEquals(str.charCodeAt(0), 65, 'A');
	assertEquals(str.charCodeAt(1), 66, 'B');
	assertEquals(str.charCodeAt(2), 67, 'C');
	assertEquals(str.charCodeAt(3), 68, 'D');
	
	assertEquals(((56 ^ 3) ^ 3), 56, "56^3^3");
	
	var a = "x";
	var encode = a.charCodeAt(0) ^ 10;
	var decoded = String.fromCharCode(encode ^ 10);
	assertEquals(a, decoded, "x ^10 ^10");
	
	var arr = obfuscate("ABCD");
	//debug.dump(obfuscate("ABCD"));
	assertEquals(arr[0] ^ (0+obfuscate.base), 65, "65");
	assertEquals(arr[1] ^ (1+obfuscate.base), 66, "66");
	assertEquals(arr[2] ^ (2+obfuscate.base), 67, "67");
	assertEquals(arr[3] ^ (3+obfuscate.base), 68, "68");
	
	assertEquals(deobfuscate(arr), "ABCD", "deobfuscated");
	
	
	assertEquals(deobfuscate(obfuscate("müller fügen@bogen")), "müller fügen@bogen", "deobfuscate(obfuscate(ABCD)");
	
	if(assertEquals.assertions == 0) {
		document.getElementById('errors').innerHTML += '\n<span class="ok">ok</span>';
	} else {
		document.getElementById('errors').innerHTML += '\n'+ assertEquals.assertions +' errors';
	}
}
