function no_ajax()
{
  $("#ajax_fade, #ajax_load_img").fadeOut(200);
  if (ajax_tmr) clearTimeout(ajax_tmr); ajax_tmr = null;   
}
//                             a[2] = Tekst of 1/2 voor verwerken/ophalen, a[3] = param
ajax = function(url, callback)
{
  //this.url = url;
  
  if (arguments.length > 2 || callback == "r")
  {
    if (typeof(arguments[2]) == "string") var str = arguments[2];
    else var str = arguments[2] === 2 ? "Gegevens ophalen..." : "Gegevens verwerken...";
    if (arguments[2] != "none") handle_ajax(str);
  }
  
  if (typeof(callback) == "string" && callback == "r")
  {
    callback = function(xml) 
    {
      var data = xml.responseText;
      no_ajax();
      document.location.reload();
    };
  }
  var idx = url.indexOf("?");
  if (idx > 0)
  {
    var raw_url = url.substring(0, idx);
    var post_vars = url.substr(raw_url.length+1);
  } else
  {
    var raw_url = url;
    var post_vars = null;
  }
  
  var params = typeof(arguments[3]) != "undefined" ? arguments[3] : null;
  
  jQuery.ajax( { 
    url: raw_url,
    data: post_vars,
    type: "post",
    success: function(data)
    {
      no_ajax();
      callback({responseText:data}, params);
    }
  });
};
ajax_json = function(url, callback)
{
  //this.url = url;
  
  if (arguments.length > 2 || callback == "r")
  {
    if (typeof(arguments[2]) == "string") var str = arguments[2];
    else var str = arguments[2] === 2 ? "Gegevens ophalen..." : "Gegevens verwerken...";
    if (arguments[2] != "none") handle_ajax(str);
  }
  
  if (typeof(callback) == "string" && callback == "r")
  {
    this.callback_action = callback;
    callback = function(xml) 
    {
      //var data = xml.responseText;
      no_ajax();
      /*if (data != "SUCCESS")
      {
        try {
          var a = $.parseJSON(data);
        } catch(error) { alert(data); return; }
        if (!a.succes) { alert(a.msg); return; }
      }*/
      //alert(xml.callback_action);
      document.location.reload();
    };
  }
  var idx = url.indexOf("?");
  if (idx > 0)
  {
    var raw_url = url.substring(0, idx);
    var post_vars = url.substr(raw_url.length+1);
  } else
  {
    var raw_url = url;
    var post_vars = null;
  }
  
  var params = typeof(arguments[3]) != "undefined" ? arguments[3] : null;
  
  jQuery.ajax( { 
    url: raw_url,
    data: post_vars,
    type: "post",
    success: function(data)
    {
      no_ajax();
      if (data != "SUCCESS")
      {
        try {
          var a = $.parseJSON(data);
        } catch(error) { alert(data); return; }
        if (!a) { alert("Geen (json) resultaat."); return; }
        if (!a.succes) { alert(a.msg); return; }
        if (typeof(callback) == "function") callback({responseText:data, json: a}, params);
      } else if (typeof(callback) == "function") callback({responseText:data}, params);
    }
  });
};

var ajax_tmr = null;
function handle_ajax(str)
{
  str = str ? str : "Bezig met laden...";
  $("#ajax_info_txt").html(str);
  $("#ajax_load_img").css("top", (350 + document.documentElement.scrollTop) + "px");
  clearTimeout(ajax_tmr); ajax_tmr = null;
  ajax_tmr = setTimeout(_handle_ajax, 700);
}
function _handle_ajax(str)
{
  $("#ajax_fade").fadeIn(300);//.style.display = "block
  $(ajax_load_img).show().centerScreen();
  var img = $(ajax_load_img).find("img");
  img.css("margin-top", (($(ajax_load_img).height() / 2) - img.height()) + "px");
}

/* AJAX SEARCH */

function ajax_document_click(e)
{
  var obj = get_target(e);
  if ($(obj).closest(".ajax_results").length <= 0 && $(obj).closest(".ajax_input").length <= 0)
  {
    $(".ajax_results").fadeOut(200);
  }    
}
$(document).bind("mousedown", ajax_document_click);

function input_ajax_focus(obj)
{
  if (obj.actived == undefined) { obj.className = ""; obj.value = ""; obj.actived = true; }
}

function input_ajax_blur(obj)
{
  if (obj.actived == undefined || obj.value == "") { obj.className = "grayed"; obj.value = "zoeken..."; obj.actived = undefined; }
}

// ######################### FORM SUBMIT ######################## \\
function form_submit()
{
  if (arguments.length > 0) var f = document.forms[arguments[0]];
  else var f = document.forms[0];
  if (!f) return true;
  var params = "";
  for (n = 0; n < f.elements.length; n++)
  {
    var o = f.elements[n];
    if (!o || !o.tagName || !o.name || o.name == "") continue;
    var v = "";
    switch(o.tagName.toUpperCase())
    {
      case "INPUT": 
        v = encodeURIComponent(o.value);
        if ( (o.type != "checkbox" && o.type != "radio") || o.checked)
          params += "&" + o.name + "=" + v; 
        break;
      case "TEXTAREA": 
        if (tinyMCE.get(o.id))
          v = encodeURIComponent(tinyMCE.get(o.id).getContent());
        else
          v = encodeURIComponent(o.value.replace(/\n/g, "<br/>"));
        params += "&" + o.name + "=" + v; 
        break;
      case "SELECT": 
      {
        var ops = o.options;
        if (o.multiple)
        {
          var added = false;
          for(on = 0; on < ops.length; on++)
          {
            if (ops[on] && ops[on].tagName && ops[on].tagName.toUpperCase() == "OPTION" && (ops[on].selected || o.getAttribute("save_all") == "true") && parseInt(on) == on)
            {
              params += "&" + o.name + "=" + ops[on].value;
              added = true;
            }
          }
          if (!added) params += "&" + o.name + "=";
        } else if (o.selectedIndex >= 0) params += "&" + o.name + "=" + ops[o.selectedIndex].value;
        break;
      }
    }
  }
  return params;
}
function ajax_form_submit()
{
  if (arguments.length > 0) var form = arguments[0]; else var form = 0;
  var url = document.forms[form].getAttribute("action");
  url = url + (url.indexOf("?")<0?"?":"&") + form_submit(form);
  //alert(url);return;
  //document.location.href = url;
  //document.forms[form].submit();return;
  var callback = arguments.length > 1 ? arguments[1] : "r";
  new ajax(url, callback);
}
function ajax_form_submit_json()
{
  if (arguments.length > 0) var form = arguments[0]; else var form = 0;
  var url = document.forms[form].getAttribute("action");
  url = url + (url.indexOf("?")<0?"?":"&") + form_submit(form);
  var callback = arguments.length > 1 ? arguments[1] : "r";
  var param = arguments.length > 2 ? arguments[2] : null;
  
  // Kijken of het een form is met file input, dan mottie effe anders werken.
  
  if ($("form[name=" + form + "]").attr("enctype") == "multipart/form-data")
  { // Is voor file input. Is hij ook getarget naar een bestaande iframe?
    var form = $("form[name=" + form + "]");
    var target = form.attr("target");
    if (!target)
    { // Geen target, dus eerst target naam genereren en toewijzen
      var tmp = 1;
      while ($("iframe[name=ajax_upload_frame_" + tmp + "]").length > 0 && tmp < 100)
        tmp++;
      target = "ajax_upload_frame_" + tmp;
      form.attr("target", target);
    }
    if ($("iframe[name=" + target + "]").length <= 0)
    { // Geen iframe, 
      $(form).parent().prepend("<iframe name='" + target + "' style='display: none;'></iframe>");
      var iframe = $("iframe[name=" + target + "]");
      iframe.attr("src", "about:blank");
      iframe.bind("load", function()
      {
        var data = $(this).contents().find("body").html();
        data = data.replace(/--\[--/g, "<").replace(/--\]--/g, ">");
        $(this).remove();
        try {
          var a = $.parseJSON(data);
        } catch(error) { alert("Parse fout: \n" + data); return; }
        
        if (!a) { alert("Geen (json) resultaat."); return; }
        if (!a.succes) { alert(a.msg); return; }
        if (typeof(callback) == "function") callback({responseText:data, json: a}, param);
      });      
      form.trigger("submit");
    }
  }
  else new ajax_json(url, callback, null, param);
}

