//XMLHttpRequest

if (!window.XMLHttpRequest) {
  window.XMLHttpRequest = function() {
    var types = [
      'Microsoft.XMLHTTP',
      'MSXML2.XMLHTTP.6.0',
      'MSXML2.XMLHTTP.5.0',
      'MSXML2.XMLHTTP.4.0',
      'MSXML2.XMLHTTP.3.0',
      'MSXML2.XMLHTTP'
    ];

    for (var i = 0; i < types.length; i++) {
      try {
        return new ActiveXObject(types[i]);
      }
      catch(e) {
      }
    }

    return undefined;
  }
}

//addEvent
// written by Dean Edwards, 2005
// with input from Tino Zijdel - crisp@xs4all.nl
// http://dean.edwards.name/weblog/2005/10/add-event/

function addEvent(element, type, handler) {
  if (element.addEventListener) {
    element.addEventListener(type, handler, false);
  }
  else {
    if (!handler.$$guid) {
      handler.$$guid = addEvent.guid++;
    }
    if (!element.events) {
      element.events = {};
    }
    var handlers = element.events[type];
    if (!handlers) {
      handlers = element.events[type] = {};
      if (element['on' + type]) handlers[0] = element['on' + type];
      element['on' + type] = handleEvent;
    }
  
    handlers[handler.$$guid] = handler;
  }
}
addEvent.guid = 1;

function removeEvent(element, type, handler) {
  if (element.removeEventListener) {
    element.removeEventListener(type, handler, false);
  }
  else if (element.events && element.events[type] && handler.$$guid) {
    delete element.events[type][handler.$$guid];
  }
}

function handleEvent(event) {
  event = event || fixEvent(window.event);
  var returnValue = true;
  var handlers = this.events[event.type];

  for (var i in handlers) {
    if (!Object.prototype[i]) {
      this.$$handler = handlers[i];
      if (this.$$handler(event) === false) {
        returnValue = false;
      }
    }
  }

  if (this.$$handler) {
    this.$$handler = null;
  }

  return returnValue;
}

function fixEvent(event) {
  event.preventDefault = fixEvent.preventDefault;
  event.stopPropagation = fixEvent.stopPropagation;
  return event;
}
fixEvent.preventDefault = function() {
  this.returnValue = false;
}
fixEvent.stopPropagation = function() {
  this.cancelBubble = true;
}

// This little snippet fixes the problem that the onload attribute on the body-element will overwrite
// previous attached events on the window object for the onload event
if (!window.addEventListener) {
  document.onreadystatechange = function() {
    if (window.onload && window.onload != handleEvent) {
      addEvent(window, 'load', window.onload);
      window.onload = handleEvent;
    }
  }
}

//getElementsByClassName

if(typeof getElementsByClassName == 'undefined') {
  document.getElementsByClassName = function(needle) {
    var s = document.getElementsByTagName('*'), i = s.length, e, r = [];
    var re = new RegExp('(^|\\s)' + needle + '(\\s|$)');
    while(i--) {
      e = s[i];
      if(e.className && re.test(e.className)) {
        r.push(e);
      }
    }
    return r;
  }
}

//isempty

function isempty(aTextField) {
  if((aTextField.length==0)||(aTextField==null)) {
    return true;
  }
  else {
    return false;
  }
}

//nieuwvenster

function nieuwvenster(url) {
  window.open(url);
}

function externelinks() {
  var aclass = "extern";
  for(var i=0;i<document.getElementsByClassName(aclass).length;i++) {
    var externelinks = document.getElementsByClassName(aclass)[i];
    externelinks.onclick =
      function() {
        var url = this.getAttribute("href");
        nieuwvenster(url);
        return false;
      };
  }
}

addEvent(window,"load",externelinks);
addEvent(document,"DOMSubtreeModified",externelinks);

//splitInclusive

function sortNumber(a,b)
{
return a - b
}

String.prototype.indexesOf = function() {
  if(arguments.length==0||String(arguments[0]).length==0) {
    return new Array();
  }
  var s = String(arguments[0]),outArray = new Array(),l = this.length,beginat = 0,t;
  while(beginat<=this.length) {
    t=this.indexOf(s,beginat);
    if(t==-1) {
      break;
    }
    outArray[outArray.length] = t;
    beginat = t+1;
  }
  return outArray;
}

String.prototype.splitInclusive = function() {
  function indexesOfMultiple() {
    
    var zoekstringlengte_array = new Array();
    for(var i=0;i<arguments[0].length;i++) {
      zoekstringlengte_array[i] = arguments[0][i].length;
    }
    
    var multipleindexes_array = new Array();
    for(var i=0;i<arguments[0].length;i++) {
      multipleindexes_array = multipleindexes_array.concat(arguments[1].indexesOf(arguments[0][i]));
    }    
    var multipleindexeszoekstring_array = new Array();
    for(var i=0;i<multipleindexes_array.length;i++) {
      multipleindexeszoekstring_array[i] = multipleindexes_array[i]+1;//+zoekstringlengte_array[i]
    }
    multipleindexes_array = multipleindexes_array.concat(multipleindexeszoekstring_array).sort(sortNumber);
    return multipleindexes_array;
  }
  
  var strings_array = new Array();
  strings_array[0] = this.substring(0,indexesOfMultiple(arguments,this)[0]);
  for(var i=1;i<indexesOfMultiple(arguments,this).length;i++) {
    strings_array[i] = this.substring(indexesOfMultiple(arguments,this)[i-1],indexesOfMultiple(arguments,this)[i]);
  }
  strings_array[indexesOfMultiple(arguments,this).length] = this.substring(indexesOfMultiple(arguments,this)[indexesOfMultiple(arguments,this).length-1],this.length);
  return strings_array;
}
