var timestamp = 0;
// it is necessary to check, if the form is already submitted
// when trying a ajax call
// because otherwise, the ajax call occurs half a second after resubmitting
// this means, the ajax call and the resubmit can cross, and the formvars are 
// set to session after clearing from session
var form_submitted = 0;
// diese Funktion wird bei onkeyup aufgerufen
// sie sorgt dafür, dass erst 200-250 ms nach der letzten
// Tasteneingabe der ajax-aufruf erfolgt

function on_finished_keystrokes (id, value_ar, type) {
  if (type == undefined) type = 'pbl'; 
  // speichere den Zeitpunkt der letzten Zeicheneingabe
  timestamp = new Date().getTime ();
  window.setTimeout (
    function () {
      // ist mittlerweile noch ein Zeichen eingegeben worden?
      // dann ist die timestamp-differnez signifikant unter 250
      current_timestamp = new Date().getTime ();
      // 1/2-Sekunde muss seit dem letzten Zeichen verstrichen sein
      // only do the ajax call if the form is not yet submitted
      if (current_timestamp - timestamp > 450 && form_submitted == 0) {
        if (type == 'pbl') {
          xajax_return_ajax_pbl (id, value_ar );
        } else if (type == 'live_query') {
          xajax_live_query (id, value_ar );
        }
      }
    }
    // führe die obige Funktion nach 500 ms aus.
    , 500
  )
}
function on_typestop (callback) {
  // speichere den Zeitpunkt der letzten Zeicheneingabe
  timestamp = new Date().getTime ();
  window.setTimeout (
    function () {
      // ist mittlerweile noch ein Zeichen eingegeben worden?
      // dann ist die timestamp-differnez signifikant unter 250
      current_timestamp = new Date().getTime ();
      // 1/2-Sekunde muss seit dem letzten Zeichen verstrichen sein
      // only do the ajax call if the form is not yet submitted
      if (current_timestamp - timestamp > 450 && form_submitted == 0) {
        callback ();
      }
    }
    // führe die obige Funktion nach 500 ms aus.
    , 500
  )
}



function get_input_values (ids) {
  var parameters = []
  for (var i = 0; i < ids.length; i++) {
    var input = document.getElementById (ids[i]);
    if (!input) continue;
    // hack for checkboxes in main page
    if (ids[i].length == 2 && ids[i].charAt (0) == 's') {
      // i think ids[i] is a checkbox
      if (!input.checked) {
        parameters[ids[i]] = '';
        continue;
      }
    }
    parameters[ids[i]] = input.value;
      
  }
  return parameters
}

function qd_feature_search (id) {
  // speichere den Zeitpunkt der letzten Zeicheneingabe
  timestamp = new Date().getTime ();
  window.setTimeout (
    function () {
      // ist mittlerweile noch ein Zeichen eingegeben worden?
      // dann ist die timestamp-differnez signifikant unter 250
      current_timestamp = new Date().getTime ();
      // 1/2-Sekunde muss seit dem letzten Zeichen verstrichen sein
      // only do the ajax call if the form is not yet submitted
      if (current_timestamp - timestamp > 450 && form_submitted == 0) {
        var parameters = []
        var search = document.getElementById ('search').value;
        if (search == '') {
          return;
        }
        parameters['search'] = search;
        var n_checked = 0;
        var checkboxes = ['sn', 'sp', 'st', 'sr', 'so', 'sh', 'sm', 'su'];
        
        for (var i = 0; i < checkboxes.length; i++) {
          var input = document.getElementById (checkboxes[i]);
          if (input && input.checked) {
            parameters[checkboxes[i]] = input.value;
            n_checked ++;
          }
        }
        
        if (n_checked == 0) {
          return;
        }
        
        xajax_live_query (id, parameters );
      }
    }
    // führe die obige Funktion nach 500 ms aus.
    , 500
  )
}

function qd_feature_search_ajax (feature_key, result_id, input_id, function_name) {
  if (function_name == null) {
    function_name = 'xajax_live_query_ajax';
  }
  // speichere den Zeitpunkt der letzten Zeicheneingabe
  timestamp = new Date().getTime ();
  window.setTimeout (
    function () {
      // ist mittlerweile noch ein Zeichen eingegeben worden?
      // dann ist die timestamp-differnez signifikant unter 250
      current_timestamp = new Date().getTime ();
      // 1/2-Sekunde muss seit dem letzten Zeichen verstrichen sein
      // only do the ajax call if the form is not yet submitted
      if (current_timestamp - timestamp > 250 && form_submitted == 0) {
        var parameters = []
        var search = document.getElementById (input_id).value;
        if (search == '') {
          return;
        }
        parameters['search'] = search;
        parameters[feature_key] = 1;
        
        eval (function_name + ' (parameters, result_id)');
        //xajax_live_query_ajax (parameters, result_id)
      }
    }
    // führe die obige Funktion nach 500 ms aus.
    , 300
  )
}
function qd_feature_search_ajax_hidden_tippid (hidden_name, result_id) {
  // speichere den Zeitpunkt der letzten Zeicheneingabe
  timestamp = new Date().getTime ();
  window.setTimeout (
    function () {
      // ist mittlerweile noch ein Zeichen eingegeben worden?
      // dann ist die timestamp-differnez signifikant unter 250
      current_timestamp = new Date().getTime ();
      // 1/2-Sekunde muss seit dem letzten Zeichen verstrichen sein
      // only do the ajax call if the form is not yet submitted
      if (current_timestamp - timestamp > 250 && form_submitted == 0) {
        var parameters = []
        var search = document.getElementById ('tourname').value;
        if (search == '') {
          return;
        }
        var parameters = [];
        parameters['search'] = search;
        if (search != '' && search != 'Namen der Tour eingeben') {
          xajax_live_query_ajax_hidden_tippid (parameters, hidden_name, result_id);
        }
      }
    }
    // führe die obige Funktion nach 500 ms aus.
    , 300
  )
}
