//alert('ajax.js');
function ajax ( file, query, callback ) {
	strURL = kHomeDir + file;
	url = strURL + ( query ? "?" + query : "" );
	_ajax ( url, callback );
//	var http = new getHTTP();
//	http.open ( 'POST', url, true );
//	http.onreadystatechange = function() {
//		if ( http.readyState == 4 ) {
//			callback ( trim ( http.responseText ) );
//			delete http;
//		}
//	}
//	http.send ( null );
}

function _ajax ( url, callback ) {
//	strURL = kHomeDir + file;
//	url = strURL + ( query ? "?" + query : "" );
	var http = new getHTTP();
	http.open ( 'POST', url, true );
	http.onreadystatechange = function() {
		if ( http.readyState == 4 ) {
			callback ( trim ( http.responseText ) );
			delete http;
		}
	}
	http.send ( null );
}

function trim (zeichenkette) {
  return zeichenkette.replace (/^\s+/, '').replace (/\s+$/, '');
}

function base64_encode( data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Tyler Akins (http://rumkin.com)
    // +   improved by: Bayron Guevara
    // +   improved by: Thunder.m
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)        
    // -    depends on: utf8_encode
    // *     example 1: base64_encode('Kevin van Zonneveld');
    // *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
 
    // mozilla has this native
    // - but breaks in 2.0.0.12!
    //if (typeof window['atob'] == 'function') {
    //    return atob(data);
    //}
        
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = ac = 0, enc="", tmp_arr = [];
//    data = utf8_encode(data);
    
    do { // pack three octets into four hexets
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);
 
        bits = o1<<16 | o2<<8 | o3;
 
        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;
 
        // use hexets to index into b64, and append result to encoded string
        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);
    
    enc = tmp_arr.join('');
    
    switch( data.length % 3 ){
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }

    return enc.replace(/\+/g,"*");
}

function base64_decode( data ) {
	// http://kevin.vanzonneveld.net
	// +   original by: Tyler Akins (http://rumkin.com)
	// +   improved by: Thunder.m
	// +      input by: Aman Gupta
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   bugfixed by: Onno Marsman
	// -    depends on: utf8_decode
	// *     example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');
	// *     returns 1: 'Kevin van Zonneveld'
	
	// mozilla has this native
	// - but breaks in 2.0.0.12!
	//if (typeof window['btoa'] == 'function') {
	//    return btoa(data);
	//}
		
	var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	var o1, o2, o3, h1, h2, h3, h4, bits, i = ac = 0, dec = "", tmp_arr = [];
	
	data += '';
		
	do {  // unpack four hexets into three octets using index points in b64
		h1 = b64.indexOf(data.charAt(i++));
		h2 = b64.indexOf(data.charAt(i++));
		h3 = b64.indexOf(data.charAt(i++));
		h4 = b64.indexOf(data.charAt(i++));
			
		bits = h1<<18 | h2<<12 | h3<<6 | h4;
			
		o1 = bits>>16 & 0xff;
		o2 = bits>>8 & 0xff;
		o3 = bits & 0xff;
			
		if (h3 == 64) {
			tmp_arr[ac++] = String.fromCharCode(o1);
		} else if (h4 == 64) {
			tmp_arr[ac++] = String.fromCharCode(o1, o2);
		} else {
			tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
		}
	} while (i < data.length);
		
	dec = tmp_arr.join('');
//	dec = utf8_decode(dec);
		
	return dec;
}

function utf8_encode ( string ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    string = (string+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
    var utftext = "";
    var start, end;
    var stringl = 0;
 
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
 
        if (c1 < 128) {
            end++;
        } else if((c1 > 127) && (c1 < 2048)) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc != null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
 
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
 
    return utftext;
}

function utf8_decode ( str_data ) {
	// http://kevin.vanzonneveld.net
	// +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
	// +      input by: Aman Gupta
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: Norman "zEh" Fuchs
	// +   bugfixed by: hitwork
	// +   bugfixed by: Onno Marsman
	// *     example 1: utf8_decode('Kevin van Zonneveld');
	// *     returns 1: 'Kevin van Zonneveld'
	
	var tmp_arr = [], i = ac = c1 = c2 = c3 = 0;
	
	str_data += '';
	
	while ( i < str_data.length ) {
		c1 = str_data.charCodeAt(i);
		if (c1 < 128) {
			tmp_arr[ac++] = String.fromCharCode(c1);
			i++;
		} else if ((c1 > 191) && (c1 < 224)) {
			c2 = str_data.charCodeAt(i+1);
			tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
			i += 2;
		} else {
			c2 = str_data.charCodeAt(i+1);
			c3 = str_data.charCodeAt(i+2);
			tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
			i += 3;
		}
	}
	
	return tmp_arr.join('');
}

function str_repeat(i, m) {
	for (var o = ''; m-- > 0; o += i);
	return o;
}

function sprintf () {
	var a, f = arguments[0], fi= '', i = 1, m = [''], o = '', p;
	while (f = f.substring (m[0].length)) {
		m = /^([^\%]*)(?:(\x25)((\x25)|(?:(\d+)\$)?(\+)?(0|'([^$]))?(-|\^)?(\d+)?(?:\.(\d+))?([bcdefosuxX])))?/.exec(f);
		if (a = m[12]) {
			if (arguments.length < (i = m[5] || i))
				throw("sprintf '" + m[0] + "' : No argument " + i);
			a = arguments[i++];
			s = (/[def]/.test(m[12]) && m[6] && a > 0) ? '+':'';
			switch (m[12]) {
				case 'b': a = a.toString(2); break;
				case 'c': a = String.fromCharCode(a); break;
				case 'd': a = parseInt(a,10); break;
				case 'e': a = m[11] ? a.toExponential(m[11]) : a.toExponential(); break;
				case 'f': a = m[11] ? parseFloat(a).toFixed(m[11]) : parseFloat(a); break;
				case 'o': a = a.toString(8); break;
				case 's': a = ((a = String(a)) && m[11] ? a.substring(0, m[11]) : a); break;
				case 'u': a = Math.abs(a); break;
				case 'x': a = a.toString(16); break;
				case 'X': a = a.toString(16).toUpperCase(); break;
			}
			if (m[10] && (m[10] > a.length)) {
				fir=fil=str_repeat(m[7] ? m[8] || '0' : ' ', m[10]-a.length);
				if (m[9] == '^') {
					fil = fil.substr(0, fil.length / 2);
					fir = fir.substr(fil.length);
				} else
					m[9] == '-' ? (fil = '') : (fir = '');
				a = fil + a + fir;
			}
		}
		o += m[1] + ((m[3] ? m[4] || (s + a) : m[2]) || '');
	}
	return o;
}

try {
	var arg = [];
	var argArr = String(document.location).split('?');
	if ( argArr.length > 1 ) {
		var argArr = String(argArr[1]).split('&');
		for (var i = 0; i < argArr.length; ++i) {
			var p = argArr[i].split('=');
			arg[p[0]] = p[1];
		}
		if ( arg['groups'] )
			arg.groups = arg['groups'].split(',');
		else
			arg.groups = [];
	}
	else
		arg.groups = [];
}
catch (e) {alert('catch');}
/*
function $( id ) {
	return document.getElementById(id);
}*/