/* ------------- Initialisierung -------------------------------------------*/

function init_gb()
{
	// Hat IE ActiveX aktiviert?
	if (navigator.appName == "Microsoft Internet Explorer")
	{
		var ibkgb_use = true;
		try { a = new ActiveXObject("Shell.UIHelper") }
		catch(e) { ibkgb_use = false }	
	}
	else ibkgb_use = true;
		
	if(ibkgb_use == true) 
	{ 
	  // Captcha ziehen
	  ibkgbGetCaptcha();
	  
	  // Eintraege holen
		ibkgbGetEntries(0);
	}
	else alert('Um das Gästebuch nutzen zu können, müssen Sie ActiceX aktivieren!');
}

function ibkgbSwitchForm()
{
	Effect.toggle('ibkgb_form_div', 'blind');
	var sw = document.getElementById('ibkgb_switcher')
}

/* ------------- Einlesen -------------------------------------------*/

function ibkgbGetCaptcha()
{
	var where = ibkgb_server + '/guestbook/captcha.php';
	
	// existiert schon eine id -> mitsenden um session zu l&ouml;schen
	var pbody = '&' + Form.Element.serialize('cap_sess');
	var opt = {
		method: 'post',
		postBody: pbody,
	    onSuccess: function(t) { 
	    	  document.getElementById('cap_sess').value = t.responseText;
	    	  document.getElementById('cap_img').src    = ibkgb_server + '/guestbook/captcha_img.php?im=' + t.responseText;
	    	  
	    },
	    on404: function(t) {
	    	  Element.update('ibkgb_captcha', 'Error 404: location "' + t.statusText + '" was not found.<br>');
	    },
	    onFailure: function(t) {
	    	  Element.update('ibkgb_captcha', 'Error ' + t.status + ' -- ' + t.statusText + '<br>');
	    },
	    	    
	    asynchronous: true
		}
		
	  new Ajax.Request(where, opt);
}

/* ------------- Einlesen -------------------------------------------*/

function ibkgbGetEntries(nr)
{
	document.getElementById('ibkgb_start').value = nr;
	var mydata   = '&' + Form.serialize("ibk_guestbook");
	var where    = ibkgb_server + '/guestbook/get.php';
	var opt = {
	    method: 'post',
	    postBody: mydata,
	    onSuccess: function(t) {
	    	  ibkgbUpdateEntries(t.responseText);
	    },
	    on404: function(t) {
	    	  Element.update('ibkgb_theentries', 'Error 404: location "' + t.statusText + '" was not found.<br>');
	    },
	    onFailure: function(t) {
	    	  Element.update('ibkgb_theentries', 'Error ' + t.status + ' -- ' + t.statusText + '<br>');
	    },
	    	    
	    asynchronous: true,
	    evalScripts:  false
		}
		
	  new Ajax.Request(where, opt);
}

function ibkgbUpdateEntries(txt)
{
	var output  = txt; 
	
	var outarr  = output.parseQuery();

	// kopieren der Dummy-Tabelle
	var objekt1, objekt2, kopie, kopie_tds, i;
	
  objekt1 = document.getElementById('ibkgb_entry_dummy').getElementsByTagName('table')[0];
  objekt2 = document.getElementById('ibkgb_browser_dummy').getElementsByTagName('table')[0];
	
	// leeren von theentries
	Element.update('ibkgb_theentries','');
  
  // Seitenwechsler oben
  kopie  = objekt2.cloneNode(objekt2);
	document.getElementById('ibkgb_theentries').appendChild(kopie);
	kopie.id  = 'browser_1';
	kopie_tds = kopie.getElementsByTagName('td');

	if(outarr['ergebnisse'] > 0)
	{
		if(outarr['ranges'] != undefined) kopie_tds[0].innerHTML = outarr['prev'] + ' ' + outarr['ranges'] + ' ' + outarr['next'];
		
	  // Aufbau der Eintraege
	  for (i=0;i<outarr['ergebnisse'];i++)
	  {
		  kopie  = objekt1.cloneNode(objekt1);
		  document.getElementById('ibkgb_theentries').appendChild(kopie);
		  kopie.id  = 'table_' + i;
		  kopie_tds = kopie.getElementsByTagName('td');
		  var zeile1a = 'name_'  + i;
		  var zeile1b = 'date_'  + i;
		  var zeile2  = 'entry_' + i;
		  kopie_tds[0].innerHTML = outarr[zeile1a] + ' schrieb am ' + outarr[zeile1b];
		  kopie_tds[1].innerHTML = outarr[zeile2];
		}
		
		// Seitenwechsler unten
	  kopie  = objekt2.cloneNode(objekt2);
		document.getElementById('ibkgb_theentries').appendChild(kopie);
		kopie.id  = 'browser_2';
		kopie_tds = kopie.getElementsByTagName('td');
		if(outarr['ranges'] != undefined) kopie_tds[0].innerHTML = outarr['prev'] + ' ' + outarr['ranges'] + ' ' + outarr['next'];
	}
	else kopie_tds[0].innerHTML = 'Es liegen noch keine Eintr&auml;ge im G&auml;stebuch vor.'
}

/* ------------- Versenden -------------------------------------------*/

function ibkgbVersenden(where)
{	
	// first: clear all info-texts
	Element.update('ibkgb_info_text', '');
	var mycheck = ibkgbCheckPflicht();
	
	if (mycheck == '') 
	{
		indid = setInterval('ibkgbPulse()',2500);
	  ibkgbShow('ibkgb_geduld');
	  ibkgbSender(where);
	}
	else
	{
		Element.update('ibkgb_info_text', mycheck);
		ibkgbShow('ibkgb_info');
	}
	
}

function ibkgbSender(where)
{	
	  var mydata   = '&' + Form.serialize("ibk_guestbook");
	  
	  // Timeout check starten
	  var timeout = setTimeout('sendfailure()',10000);

	  var opt = {
	    method: 'post',
	    postBody: mydata,
	    onSuccess: function(t) {
	    	switch (t.responseText)
	    	{
	    		case '0':
	    			document.getElementById('ibk_guestbook').reset();
		    	  document.getElementById('ibkgb_start').value=0;
		    	  var nr_text = 'Ihr G&auml;stebucheintrag ist erfolgt!';
		    	  ibkgbGetCaptcha();
		    	  //ibkgbPreview();
		    	  ibkgbGetEntries(0);
	    		break;
	    		
	    		case '1':
						var nr_text = 'Der eingegebene Code ist leider falsch!';
	    		break;
	    		
	    		case '2':
						var nr_text = 'Bitte geben Sie zum Versenden den Bild-Code ein.';
	    		break;
	    		
	    		case '3':
						var nr_text = 'Ihre Session f&uuml;r den Code ist abgelaufen.<br />Bitte erzeugen Sie einen neuen Code';
	    		break;
	    		
	    		case '4':
						var nr_text = 'Sie hatten 3 fehlerhafte Versuche!<br />Bitte erzeugen Sie einen neuen Code';
	    		break;
	    		
	    		default:
	    			var nr_text = 'Ein unbekannter Fehler ist aufgetreten!: ' + t.responseText;
	    		break;

	    	}
	    	clearTimeout(timeout);
	    	//Element.update('ibkgb_preview_area','');
	    	clearInterval(indid);
    	  Element.hide('ibkgb_geduld');
    	  Element.update('ibkgb_info_text',nr_text);
    	  Element.show('ibkgb_info');
	    },
	    on404: function(t) {
	    		Effect.Fade('ibkgb_geduld');
	    },
	    onFailure: function(t) {
	    		Effect.Fade('ibkgb_geduld');
	    },
	    	    
	    asynchronous: true,
	    evalScripts:  false
		}
		
	  new Ajax.Request(where, opt);
	  
	  return true;
}

function sendfailure() 
{
	var failureText = 'Leider ist keine Rückmeldung erfolgt, ob Ihr Beitrag in das G&auml;stebuch eingetragen wurde.<br />' +
										'Bitte laden Sie die Seite neu, um zu sehen, ob der Eintrag durchgef&uuml;hrt wurde.';
	Element.hide('ibkgb_geduld');
	Element.update('ibkgb_info_text',failureText);
	Element.show('ibkgb_info');
}
/* ------------- Vorschau -------------------------------------------*/

function ibkgbPreview()
{
	mymatch  = new Array();
	myformat = new Array('b','u','i');
	
	myn = document.getElementById('ibkgb_nachricht');
	myp = document.getElementById('ibkgb_preview_area');
	
	mytext = myn.value;
	
	/* keine tags */
	re = /</gi;
	mytext = mytext.replace(re, '&lt;');
	re = />/gi;
	mytext = mytext.replace(re, '&gt;');
	
	/* emoticons */
	var re = /:([^:]+):/gi
	
	if(re.test(myn.value))
	{
		mymatch = myn.value.match(re);
		
		for(i=0;i<mymatch.length;i++)
		{
			var my_img = "<img src='" + ibkgb_server + "/guestbook/emoticons/e_" + mymatch[i].substring(1,mymatch[i].length-1) + ".gif' />";
			mytext = mytext.replace(mymatch[i],my_img);
		}
	}
	/* Formatierung */
	
	re = /\[b\]/gi;
	mytext = mytext.replace(re, '<b>');
	re = /\[\/b\]/gi;
	mytext = mytext.replace(re, '</b>');
	
	re = /\[u\]/gi;
	mytext = mytext.replace(re, '<u>');
	re = /\[\/u\]/gi;
	mytext = mytext.replace(re, '</u>');	
	
	re = /\[i\]/gi;
	mytext = mytext.replace(re, '<i>');
	re = /\[\/i\]/gi;
	mytext = mytext.replace(re, '</i>');
	
	re = /\n/gi;
	mytext = mytext.replace(re, '<br />');
	
	myp.innerHTML = mytext;
}

/* ------------- kleine Hilfs-Funktionen -------------------------------------------*/

function ibkgbShow(what)
{
	//alert(what);
	Element.show(what);
	Effect.Appear('ibkgb_waiter');
	new Effect.Opacity('ibkgb_maintable', {duration:1.0, from:1.0, to:0.3});
	return true;
}

function ibkgbHide(what)
{
	new Effect.Opacity('ibkgb_maintable', {duration:1.0, from:0.3, to:1.0});	
	Effect.Fade('ibkgb_waiter');
	Effect.Fade(what);
	return true;
}

function ibkgbCheckPflicht()
{
	var nc = document.getElementById('ibkgb_nachricht').value;
	var nm = document.getElementById('ibkgb_name').value;
	var fehler = '';
	
	if (trim(nc) == '') fehler += "Bitte geben Sie eine Nachricht ein, die Sie eintragen m&ouml;chten<br />";
	if (trim(nm) == '') fehler += "Bitte geben Sie Ihren Namen ein!<br />";
	
	return fehler;	
}

function ibkgbFragnach()
{
	var antwort = confirm('Wollen Sie die Formularfelder wirklich leeren?');
	return antwort;
}

function ibkgbPulse()
{
	new Effect.Opacity('ibkgb_redgif', {duration:1.0, from:1.0, to:0.1});
  new Effect.Opacity('ibkgb_redgif', {duration:1.0, from:0.1, to:1.0, queue: 'end'});
}

/* ------------- trim-Funktionen -------------------------------------------*/

function lTrim(sString)
{
	while (sString.substring(0,1) == ' ') sString = sString.substring(1, sString.length);
	return sString;
}

function rTrim(sString)
{
	while (sString.substring(sString.length-1, sString.length) == ' ') sString = sString.substring(0,sString.length-1);
	return sString;
}

function trim(sString)
{
	sString = lTrim(sString);
	sString = rTrim(sString);
	return sString;
}

/* ------------- Vorschau -------------------------------------------*/

function ibkgbShowPreview(aTag, eTag) 
{
  var input = document.forms['ibk_guestbook'].elements['ibkgb_nachricht'];
  input.focus();
  /* fuer Internet Explorer */
  if(typeof document.selection != 'undefined') {
    /* Einfuegen des Formatierungscodes */
    var range = document.selection.createRange();
    var insText = range.text;
    range.text = aTag + insText + eTag;
    /* Anpassen der Cursorposition */
    range = document.selection.createRange();
    if (insText.length == 0) {
      range.move('character', -eTag.length);
    } else {
      range.moveStart('character', aTag.length + insText.length + eTag.length);      
    }
    range.select();
  }
  /* fuer neuere auf Gecko basierende Browser */
  else if(typeof input.selectionStart != 'undefined')
  {
    /* Einfuegen des Formatierungscodes */
    var start   = input.selectionStart;
    var end     = input.selectionEnd;
    var insText = input.value.substring(start, end);
    input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
    /* Anpassen der Cursorposition */
    var pos;
    if (insText.length == 0) {
      pos = start + aTag.length;
    } else {
      pos = start + aTag.length + insText.length + eTag.length;
    }
    input.selectionStart = pos;
    input.selectionEnd   = pos;
  }
  /* fuer die uebrigen Browser */
  else
  {
    /* Abfrage der Einfuegeposition */
    var pos;
    var re = new RegExp('^[0-9]{0,3}$');
    while(!re.test(pos)) {
      pos = prompt("Einf&uuml;gen an Position (0.." + input.value.length + "):", "0");
    }
    if(pos > input.value.length) {
      pos = input.value.length;
    }
    /* Einfuegen des Formatierungscodes */
    var insText = prompt("Bitte geben Sie den zu formatierenden Text ein:");
    input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos);
  }
  ibkgbPreview();
}