var alreadyDisabled = new Array();
var current_keydown_event;
var current_onclick_event;

function EOLXAjaxOnRequest() {
  toggleEOLXAjaxProgress(true);
  //var tags = getDisableTags();
  //disableTags(tags);
}

function EOLXAjaxBeforeResponseProcessing() {
  toggleEOLXAjaxProgress(false);
  //var tags = getDisableTags();
  //enableTags(tags);
}

function EOLXAjaxProgressHandleEvent(evt) {
  if (window.event) {
    window.event.cancelBubble = true;
  } else {
    evt.cancelBubble = true;
  }
  return false;
}

function toggleEOLXAjaxProgress(busy) {
  if (document.getElementById("EOLXAjaxProgress") == null) {
    var overlay = document.createElement("div");
    overlay.id = "EOLXAjaxProgress";
    document.body.appendChild(overlay);
  } else {
    overlay = document.getElementById("EOLXAjaxProgress");
  }
  if (busy) {
    current_keydown_event = document.onkeydown;
    document.onkeydown = null;//EOLXAjaxProgressHandleEvent;
    current_onclick_event = document.onclick;
    document.onclick = null;//EOLXAjaxProgressHandleEvent;
    overlay.style.display = "";
    overlay.focus();
  } else {
    document.onkeydown = current_keydown_event;
    document.onclick = current_onclick_event;
    overlay.style.display = "none";
  }
}


function enableTags(tags) {
  toggleTags(tags, false);
}


function disableTags(tags) {
  toggleTags(tags, true);
}

function toggleTags(tags, disabled) {
  if (disabled) {
    alreadyDisabled = new Array();
  }
  for (var i=0; i < tags.length; i++) {
    var elements = document.getElementsByTagName(tags[i]);
    for (var j=0; j < elements.length; j++) {
      var element = elements[j];
      if (disabled) {
        // we are going to disable the fucker ...
        if (element.disabled) {
          // het element is al disabled, nu niet disablen + onthouden dat dit zo was
          alreadyDisabled[alreadyDisabled.length] = element.name;
        } else {
          element.disabled = disabled;
        }
      } else {
        // we are going to enable the bastard ...but only if it wasn't disabled to begin with
        if (!inArray(element.name, alreadyDisabled)) {
          element.disabled = disabled;
        }
      }
    }
  }
}

function inArray(needle, haystack) {
  for (var i=0; i < haystack.length; i++) {
    if (haystack[i] == needle) {
      return true;
    }
  }
  return false;
}

function getDisableTags () {
  var tags = new Array("input", "select", "textarea", "button");
  return tags;
}

function EOLXAjaxGetElementData(containerid) {
  var data = [];
  var theForm = document.getElementById(containerid);
  if (theForm == null) {
    alert('element ' + containerid + ' not found');
    return false;
  }
  var elements = $("#" + containerid + " :input");
  elements.each(function () {
    data[this.name] = $(this).val();
  });
  return data;
}

function EOLGetFormValues(formname) {
  updateCKEditors();
  return xajax.getFormValues(formname);
}

function updateCKEditors() {
  if(window.CKEDITOR === undefined) {
    return;
  }
  for(var i in CKEDITOR.instances) {
    CKEDITOR.instances[i].updateElement();
  }
}

function EOLAddHeadScript(js) {
  js = decodeURIComponent(js);
  if (jsExists(js)) {
    // A script element with the same contents already exists
    return true;
  }
  var newScript = document.createElement('script');
  newScript.setAttribute('type','text/javascript'); 
  appendChild(newScript, js);
  var headID = document.getElementsByTagName("head")[0];         
  headID.appendChild(newScript);
}

function jsExists(js) {
  var jsels = document.getElementsByTagName("script");
  js = cleanUpJS(js);
  for (var i=0;i<jsels.length;i++){
    var jsel = cleanUpJS(jsels[i].innerHTML);
    if (jsel.indexOf(js) >= 0) {
      // Found
      return true;
    }
  }
  // Not found
  return false;
}

function cleanUpJS(js) {
  // Strip xajax uri stuff, xajaxrequests are different than regular requests
  if (js.indexOf('xajax.config.requestURI =') >= 0) {
    var subs = js.split(';');
    for (var i = 0; i < subs.length; i++) {
      if (subs[i].indexOf('xajax.config.requestURI =') >= 0) {
        subs[i] = subs[i].replace(/xajax.config.requestURI = .+/,'');
      }
    }
    js = subs.join(';');
  }
  return js;
}

function appendChild(node, text) { 
  if (null == node.canHaveChildren || node.canHaveChildren) { 
    node.appendChild(document.createTextNode(text)); 
  } else { 
    node.text = text; 
  } 
} 



