/** XHConn - Simple XMLHTTP Interface - brad@xkr.us - 2005-01-24             **
 ** Code licensed under Creative Commons Attribution-ShareAlike License      **
 ** http://creativecommons.org/licenses/by-sa/2.0/                           **/
function XHConn()
{
  var xmlhttp;
  try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  catch (e) { xmlhttp = false; }}}
  if (!xmlhttp) return null;
  this.connect = function(sURL, sMethod, sVars, fnDone)
  {
    if (!xmlhttp) return false;
    sMethod = sMethod.toUpperCase();

    try {
      if (sMethod == "GET")
      {
        xmlhttp.open(sMethod, sURL+"?"+sVars, true);
        sVars = "";
      }
      else
      {
        xmlhttp.open(sMethod, sURL, true);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type",
          "application/x-www-form-urlencoded");
      }
      xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4) {
        fnDone(xmlhttp); }};
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
  return this;
}

function addEvent(obj, type, fn ) {
	if ( obj.attachEvent ) {
		obj['e'+type+fn] = fn;
		obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
		obj.attachEvent( 'on'+type, obj[type+fn] );
	} else {
		obj.addEventListener( type, fn, false );
	}
}

function removeEvent(obj, type, fn ) {
	if ( obj.detachEvent ) {
		obj.detachEvent( 'on'+type, obj[type+fn] );
		obj[type+fn] = null;
	} else {
		obj.removeEventListener( type, fn, false );
	}
}

function utf8t2d(t)
		{
		t = t.replace(/\r\n/g,"\n");
		var d=new Array; var test=String.fromCharCode(237);
		if (test.charCodeAt(0) < 0) 
			for(var n=0; n<t.length; n++)
				{
				var c=t.charCodeAt(n);
				if (c>0)
					d[d.length]= c;
				else {
					d[d.length]= (((256+c)>>6)|192);
					d[d.length]= (((256+c)&63)|128);}
				}
		else
			for(var n=0; n<t.length; n++)
				{
				var c=t.charCodeAt(n);
				// all the signs of asci => 1byte
				if (c<128)
					d[d.length]= c;
				// all the signs between 127 and 2047 => 2byte
				else if((c>127) && (c<2048)) {
					d[d.length]= ((c>>6)|192);
					d[d.length]= ((c&63)|128);}
				// all the signs between 2048 and 66536 => 3byte
				else {
					d[d.length]= ((c>>12)|224);
					d[d.length]= (((c>>6)&63)|128);
					d[d.length]= ((c&63)|128);}
				}
		return d;
		}
		
function utf8d2t(d)
		{
		var r=new Array; var i=0;
		while(i<d.length)
			{
			if (d[i]<128) {
				r[r.length]= String.fromCharCode(d[i]); i++;}
			else if((d[i]>191) && (d[i]<224)) {
				r[r.length]= String.fromCharCode(((d[i]&31)<<6) | (d[i+1]&63)); i+=2;}
			else {
				r[r.length]= String.fromCharCode(((d[i]&15)<<12) | ((d[i+1]&63)<<6) | (d[i+2]&63)); i+=3;}
			}
		return r.join("");
		}

function b64arrays() {
	var b64s='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
		b64 = new Array();f64 =new Array();
		for (var i=0; i<b64s.length ;i++) {
			b64[i] = b64s.charAt(i);
			f64[b64s.charAt(i)] = i;
		}
	}

function b64d2t(d) {
		var r=new Array; var i=0; var dl=d.length;
		// this is for the padding
		if ((dl%3) == 1) {
			d[d.length] = 0; d[d.length] = 0;}
		if ((dl%3) == 2)
			d[d.length] = 0;
		// from here conversion
		while (i<d.length)
			{
			r[r.length] = b64[d[i]>>2];
			r[r.length] = b64[((d[i]&3)<<4) | (d[i+1]>>4)];
			r[r.length] = b64[((d[i+1]&15)<<2) | (d[i+2]>>6)];
			r[r.length] = b64[d[i+2]&63];
			if ((i%57)==54)
				r[r.length] = "\n";
			i+=3;
			}
		// this is again for the padding
		if ((dl%3) == 1)
			r[r.length-1] = r[r.length-2] = "=";
		if ((dl%3) == 2)
			r[r.length-1] = "=";
		// we join the array to return a textstring
		var t=r.join("");
		return t;
		}

function b64t2d(t) {
		var d=new Array; var i=0;
		// here we fix this CRLF sequenz created by MS-OS; arrrgh!!!
		t=t.replace(/\n|\r/g,""); t=t.replace(/=/g,"");
		while (i<t.length)
			{
			d[d.length] = (f64[t.charAt(i)]<<2) | (f64[t.charAt(i+1)]>>4);
			d[d.length] = (((f64[t.charAt(i+1)]&15)<<4) | (f64[t.charAt(i+2)]>>2));
		  	d[d.length] = (((f64[t.charAt(i+2)]&3)<<6) | (f64[t.charAt(i+3)]));
		  	i+=4;
			}
		if (t.length%4 == 2)
			d = d.slice(0, d.length-2);
		if (t.length%4 == 3)
			d = d.slice(0, d.length-1);
		return d;
		}

b64arrays();

/* Action */

function action_newsletter() {
	removeEvent(document.getElementById('newsletterlink'), 'click', action_newsletter);
	addEvent(document.getElementById('newsletterlink'), 'click', action_newsclose);
	var myConn = new XHConn();
	document.getElementById("topin").innerHTML = "<p class='message'>Übertragung erfolgt...</p><div class='c_spacer' style='height: 10px;'></div>";	
	if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
	myConn.connect("/class.ajax.action.php", "POST", "action=newsletter", handle_res);
}

function action_newsclose() {
	removeEvent(document.getElementById('newsletterlink'), 'click', action_newsclose);
	addEvent(document.getElementById('newsletterlink'), 'click', action_newsletter);
	document.getElementById("topin").innerHTML = "";		
}

function action_prospektclose() {
	removeEvent(document.getElementById('prospektlink'), 'click', action_prospektclose);
	addEvent(document.getElementById('prospektlink'), 'click', action_prospekt);
	document.getElementById("topin").innerHTML = "";		
}

function action_prospekt() {
	removeEvent(document.getElementById('prospektlink'), 'click', action_prospekt);
	addEvent(document.getElementById('prospektlink'), 'click', action_prospektclose);
	var myConn = new XHConn();
	document.getElementById("topin").innerHTML = "<p class='message'>Übertragung erfolgt...</p><div class='c_spacer' style='height: 10px;'></div>";	
	if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
	myConn.connect("/class.ajax.action.php", "POST", "action=prospekt", handle_res);
}

function nlf_send() {
	if (document.callback.vorname.value == "") {
		alert("Bitte Ihren Namen angeben");
		return false;
	}
	if (document.callback.nachname.value == "") {
		alert("Bitte Ihren Namen angeben");
		return false;
	}
	if (document.callback.email.value.indexOf('@') == -1) {
		alert("Bitte Ihre E-Mailadresse angeben");
		return false;
	}

	var titel_arr = utf8t2d(document.callback.titel.value);
	var titel = b64d2t(titel_arr);

	var firma_arr = utf8t2d(document.callback.firma.value);
	var firma = b64d2t(firma_arr);

	var vorname_arr = utf8t2d(document.callback.vorname.value);
	var vorname = b64d2t(vorname_arr);

	var nachname_arr = utf8t2d(document.callback.nachname.value);
	var nachname = b64d2t(nachname_arr);

	var adresse_arr = utf8t2d(document.callback.adresse.value);
	var adresse = b64d2t(adresse_arr);

	var land_arr = utf8t2d(document.callback.land.value);
	var land = b64d2t(land_arr);

	var plz_arr = utf8t2d(document.callback.plz.value);
	var plz = b64d2t(plz_arr);

	var ort_arr = utf8t2d(document.callback.ort.value);
	var ort = b64d2t(ort_arr);


	var email_arr = utf8t2d(document.callback.email.value);
	var email = b64d2t(email_arr);

	var myConn = new XHConn();
	document.getElementById("topin").innerHTML = "<p class='message'>Anmeldung erfolgt...</p><div class='c_spacer' style='height: 10px;'></div>";	
	if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
	myConn.connect("/class.ajax.action.php", "POST", "action=add&titel=" + titel + "&firma=" + firma + "&vorname=" + vorname + "&nachname=" + nachname + "&adresse=" + adresse + "&land=" + land + "&plz=" + plz + "&ort=" + ort + "&email=" + email, handle_res);

}



handle_res = function(z)  {
	// alert(z.responseText);
	var con_arr = b64t2d(z.responseText);
	document.getElementById("topin").innerHTML = utf8d2t(con_arr);
}



