var AJAXDEBUG = 0;        // 0 = kein Debug, 1 = Anfrage, 2 = Rückgabe, 3 = beides
var AJAXREQUEST = null;
//var AJAXSERVER = "/msu_yellow/AjaxServer/BBajaxServer.php";
var AJAXSERVER = "/AjaxServer/BBajaxServer.php";

//var t = '';
//alert (document.forms.length)
//for(i=0;i<document.forms.length;i++) {
//  t = t+document.forms[i]+' ';
//}
//alert(t);

function ajx(requestid,feldliste,nachfrage) {
  if ( nachfrage == null) nachfrage = '';
  if ( nachfrage > '') {
    if ( !confirm(nachfrage)) return;
  }
  var params  = "REQUESTID=" + requestid;
  if ( feldliste == null) feldliste = '';
  if ( feldliste == '*alle') {
    var form = document.branchenbuch;
    for ( i = 0; i < form.length; i++) {
      var nam = form.elements[i].name;
      if (nam > "") params += '&' + nam + '=' + escape( get_form_var(nam));
    }
  } else {  
    var felder = feldliste.split(',');
    for ( var i = 0; i < felder.length; i++) {
      if (felder[i] > "") params += '&' + felder[i] + '=' + escape( get_form_var(felder[i]));
    }
  }
  params  = encodeURI(params);
  var url = AJAXSERVER;

  AJAXREQUEST = null;
  var ua = navigator.userAgent.toLowerCase();
  if (!window.ActiveXObject)
    AJAXREQUEST = new XMLHttpRequest();
  else if (ua.indexOf('msie 5') == -1)
    AJAXREQUEST = new ActiveXObject("Msxml2.XMLHTTP");
  else
    AJAXREQUEST = new ActiveXObject("Microsoft.XMLHTTP");
  
  if (AJAXREQUEST) { 
    if (AJAXDEBUG == 1 || AJAXDEBUG == 3) alert('msuajax.js: Anfrage an Server:\n\n' + url + ' / ' + params);
    AJAXREQUEST.onreadystatechange = ajax_progress_handler;
    // AJAXREQUEST.open("GET", url+'?'+params);
    // AJAXREQUEST.send(null);
    AJAXREQUEST.open("POST", url);
    AJAXREQUEST.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    // geht wohl so nicht --- AJAXREQUEST.setRequestHeader("Content-Type", "multipart/form-data");
    AJAXREQUEST.send(params);
  }
}

function ajax_progress_handler() {

  // alert(request.readyState);
  document.getElementsByTagName("body")[0].style.cursor = 'wait';
  meldung("Verarbeitung läuft, bitte warten...");
  if (AJAXREQUEST.readyState != 4 ) return;  // not yet finished
  // alert(AJAXREQUEST.status);
  if (AJAXREQUEST.status == 200) {
    // len = AJAXREQUEST.getResponseHeader("Content-Length");
    // len = AJAXREQUEST.getAllResponseHeaders().length;
    // alert(AJAXREQUEST.responseText);
    // alert(AJAXREQUEST.responseXML);
    var datastream = unescape( AJAXREQUEST.responseText);
    var rueckgabe_ok = 0;
    meldung("");
    document.getElementsByTagName("body")[0].style.cursor = 'default';
    if (AJAXDEBUG == 2 || AJAXDEBUG == 3) alert('msuajax.js: Ergebnis vom Server:\n\n' + datastream);
    var resultrows = datastream.split('|||');
    for ( var i = 0; i < resultrows.length; i++) {
      // alert(resultrows[i]);
      if ( resultrows[i].length < 1) continue;
      var d = resultrows[i].split('~~~');  // request~~~was~~~element~~~wert
      if ( d.length < 3) {  // vermutlich ein serverseitiger Fehler, der einfach ausgegeben wurde
        // if (debuglevel > 0) alert('ajax_progress_handler: ' + d[0] + '\n\n' + resultrows[i]);   // debuglevel kommt aus Konfiguration
        continue;
      }
      if ( d[0] == '' || d[1] == '') continue;
      rueckgabe_ok ++;
      if ( d[1] == 'html') {
        set_elem(d[2],d[3])
      } else if ( d[1] == 'setvar') {
        set_form_var(d[2],d[3]);
      } else if ( d[1] == 'clearselect') {
        if (document.branchenbuch.elements[d[2]]) {
          while (document.branchenbuch.elements[d[2]].length > 0) {
            document.branchenbuch.elements[d[2]].options[document.branchenbuch.elements[d[2]].length-1] = null;
          }
        }
      } else if ( d[1] == 'addselect') {
        if (document.branchenbuch.elements[d[2]]) {
          var typ = document.branchenbuch.elements[d[2]].type;
          if ( typ == 'select' || typ == 'select-one') {
            if (d[4] == null || d[4] == '') d[4] = d[3];
            var neu = new Option(d[4],d[3],false,true);
            // alert("addselect: " + d[2] + " - " + d[3] + " - " + d[4]);
            document.branchenbuch.elements[d[2]].options[document.branchenbuch.elements[d[2]].length] = neu;
          } else if ( typ == 'hidden') {
            set_form_var(d[2],d[3]);
            set_elem('hidden_' + d[2],d[4]);
          }
        }
      } else if ( d[1] == 'javascript') {
        var jscode = d[2];
        // alert("Javascript-Code: " + jscode);
        eval(jscode);
      } else if ( d[1] == 'success') {
        successmsg(d[2]);
      } else if ( d[1] == 'error') {
        errormsg(d[2]);
      } else if ( d[1] == 'warning') {
        meldung(d[2]);
      } else if ( d[1] == 'setcookie') {
        set_cookie(d[2],d[3]);
      }
    }
    if ( rueckgabe_ok < 1) alert('msuajax.js: Ergebnis vom Server:\n\n' + datastream);
  }
}


function get_form_var(feldname) {

  if ( document.branchenbuch.elements[feldname]) {
    var feld = document.branchenbuch.elements[feldname];
    var typ = '';
    try {
      typ = feld.type;
    } catch( error) {
      alert( "get_form_var: feldname = " + feldname);
    }  
    if ( typ == 'select' || typ == 'select-one') {
      if (feld.options.length < 1) return '';
      var sel = feld.selectedIndex;
      if (sel < 0) sel = 0;
      return feld.options[sel].value;
    } else if ( typ == 'text' || typ == 'textarea' || typ == 'hidden' || typ == 'password') {
      var wert = '';
      try {
        wert = feld.value;
      } catch( error) {
        alert( "get_form_var: feldname = " + feldname);
      }
      return wert;
    } else if ( typ == 'checkbox') {
      return feld.checked ? feld.value : '';
    } else {
      var formular = document.branchenbuch;
      var zahl = formular.length;
      for ( i = 0; i < zahl; i++) {
        var name = formular.elements[i].name;
        var typ2  = formular.elements[i].type;
        if (feldname == name && typ2 == "radio") {
          if (formular.elements[i].checked) return formular.elements[i].value;
        }
      }
    }
 
  } else {
    if (AJAXDEBUG > 0) alert("get_form_var: Unbekanntes Feld " + feldname);
  }
  return '';
}


function set_form_var(feldname,wert) {
  if ( document.branchenbuch.elements[feldname]) {
    var feld = document.branchenbuch.elements[feldname];
    if ( feld.type == 'select' || feld.type == 'select-one') {
      if (feld.options.length < 1) return;
      for ( var i = 0; i < feld.options.length; i++) {
        // alert(wert + ' / ' + feld.options[i].value);
        if ( wert == feld.options[i].value) {
          feld.selectedIndex = i;
          break;
        }
      }
    } else if ( feld.type == 'text' || feld.type == 'textarea' || feld.type == 'hidden') {
      feld.value = wert;
    } else if ( feld.type == 'checkbox') {
      //alert("checkbox setzen: " + feldname + " / " + wert + " - " + feld.value);
      feld.checked = (wert == feld.value) ? true : false;
    } else {   // radio ???
      var zahl = document.branchenbuch.length;
      for ( var i = 0; i < zahl; i++) {
        var fname = document.branchenbuch.elements[i].name;
        var ftyp  = document.branchenbuch.elements[i].type;
        if (fname == feldname && ftyp == "radio") {
          // alert("radio");
          document.branchenbuch.elements[i].checked = ( document.branchenbuch.elements[i].value == wert);
          // break;
        }
      }
    }
  } else {
    if (AJAXDEBUG > 0) alert("set_form_var: Unbekanntes Feld " + feldname);
  }
  return;
}


function set_selected_value(current_elem,name_of_selectbox) {
  // alert(name_of_selectbox);
  if (document.branchenbuch.elements[name_of_selectbox]) {
    var wert = current_elem.value.toLowerCase();
    wert = wert.replace(/ß/,"ss");
    // alert(wert);
    var len = wert.length;
    // alert(len);
    var sb = document.branchenbuch.elements[name_of_selectbox];
    for ( var i = 0; i < sb.length; i++) {
      var txt = sb.options[i].text.toLowerCase();
      txt = txt.replace(/ß/,"ss");
      // alert(txt);
      if (txt.substring(0,len) == wert) {
        sb.selectedIndex = i;
        break;
      }
    }
  }
}

function sel_edit_helper(name_of_textfield) {
  // alert(name_of_textfield);
  var taste = 0;
  taste = String.fromCharCode(taste);
  if (document.branchenbuch.elements[name_of_textfield]) {
    document.branchenbuch.elements[name_of_textfield].style.display = 'inline';
    // if (document.branchenbuch.elements[name_of_textfield].value == "") document.branchenbuch.elements[name_of_textfield].focus();
    document.branchenbuch.elements[name_of_textfield].value = taste;
    document.branchenbuch.elements[name_of_textfield].focus();
    document.branchenbuch.elements[name_of_textfield].select();
  }
}

function uncheck_all_checkboxes(prefix) {

  var len = prefix.length;
  var zahl = document.branchenbuch.length;
  for ( var i = 0; i < zahl; i++) {
    var feld = document.branchenbuch.elements[i];
    if ( feld.type == 'checkbox' && feld.name.substring(0,len) == prefix) feld.checked = false;
  }
}


function set_cookie(name,wert) {
  document.cookie = name + "=" + wert;
  // alert(document.cookie);
}

function set_elem(id,wert) {
  // if ( document.getElementById(id)) document.getElementById(id).innerHTML = wert;
  if (document.getElementById(id)) {
    document.getElementById(id).innerHTML = wert;
  } else {
    meckern(id,wert);
  }
}

function get_elem(id) {
  if (document.getElementById(id)) {
    return document.getElementById(id).innerHTML;
  } else {
    meckern(id,'???');
  }
  return '';
}

function show_span(id) {
  if ( document.getElementById(id)) {
    document.getElementById(id).style.display = "inline";
    document.getElementById(id).style.visibility = "visible";
  } else {
    meckern(id,"");
  }
}

function show_elem(id) {
  if ( document.getElementById(id)) {
    document.getElementById(id).style.display = "block";
    document.getElementById(id).style.visibility = "visible";
  } else {
    meckern(id,"");
  }
}

function hide_elem(id) {
  if ( document.getElementById(id)) {
    document.getElementById(id).style.display = "none";
    document.getElementById(id).style.visibility = "hidden";
  } else {
    alert("Element nicht gefunden: "+id);
    meckern(id,"");
  }
}

function show_input(name) {
  if ( document.branchenbuch.elements[name]) {
    document.branchenbuch.elements[name].style.display = "inline";
    document.branchenbuch.elements[name].style.visibility = "visible";
  }
}

function hide_input(name) {
  if ( document.branchenbuch.elements[name]) {
    document.branchenbuch.elements[name].style.display = "none";
    document.branchenbuch.elements[name].style.visibility = "hidden";
  }
}

function meckern(id,wert) {
  if (AJAXDEBUG > 0) alert("msuajax.js: Template-Fehler: Der Datenbereich\n\n»" + id + "«\n\nfür Wert\n\n»" + wert + "«\n\nist in dieser Seite nicht definiert!")
}

function successmsg(msg) {
  meldung("<span style='color:#339900;'>"+msg+"</span>");
}

function errormsg(msg) {
  meldung("<span style='color:#ff0000;'>"+msg+"</span>");
}

function meldung(msg) {
  if (document.getElementById('meldungsbereich')) document.getElementById('meldungsbereich').innerHTML = msg;
}


function getCookie( name ) {
  var start = document.cookie.indexOf( name + "=" );
  var len = start + name.length + 1;
  if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
    return null;
  }
  if ( start == -1 ) return null;
  var end = document.cookie.indexOf( ";", len );
  if ( end == -1 ) end = document.cookie.length;
  return unescape( document.cookie.substring( len, end ) );
}





//////////////////////////////////////////////

function setCookie( name, value, expires, path, domain, secure ) {
  var today = new Date();
  today.setTime( today.getTime() );
  if ( expires ) {
    expires = expires * 1000 * 60 * 60 * 24;
  }
  var expires_date = new Date( today.getTime() + (expires) );
  document.cookie = name+"="+escape( value ) +
    ( ( expires ) ? ";expires="+expires_date.toGMTString() : "" ) + //expires.toGMTString()
    ( ( path ) ? ";path=" + path : "" ) +
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ( ( secure ) ? ";secure" : "" );
}

function deleteCookie( name, path, domain ) {
  if ( getCookie( name ) ) document.cookie = name + "=" +
    ( ( path ) ? ";path=" + path : "") +
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}