"use strict";
//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;
  }
}

//externelinks

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");
        window.open(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;
}

//DOMElement voor ie

/*var DOMElement = {
  extend: function(name, fn) {
    if(!document.all) {
      HTMLElement.prototype[name] = fn;
    }
    else {
      // IE doesn't allow access to HTMLElement
      // so we need to override
      // *document.createElement
      // *document.getElementById
      // *document.getElementsByTagName

      var _createElement = document.createElement;
      document.createElement = function(tag) {
        var _elem = _createElement(tag);
        _elem[name] = fn;
        return _elem;
      }

      var _getElementById = document.getElementById;
      document.getElementById = function(id) {
        var _elem = _getElementById(id);
        _elem[name] = fn;
        return _elem;
      }

      var _getElementsByTagName = document.getElementsByTagName;
      document.getElementsByTagName = function(tag) {
        var _arr = _getElementsByTagName(tag);
        for(var _elem=0;_elem<_arr.length;_elem++)
          _arr[_elem][name] = fn;
        return _arr;
      }

      var _getElementsByClassName = document.getElementsByClassName;
      document.getElementsByClassName = function(tag) {
        var _arr = _getElementsByClassName(tag);
        for(var _elem=0;_elem<_arr.length;_elem++)
          _arr[_elem][name] = fn;
        return _arr;
      }
    }
  }
};

//hideElement/showElement

DOMElement.extend("hideElement", function(elementToHide) {
  var aElementToHide = elementToHide || this;
  aElementToHide.style.display = "none";
});

DOMElement.extend("showElement", function(elementToShow) {
  var aElementToShow = elementToShow || this;
  aElementToShow.style.display = "inherit";
});

//makeFullSize

DOMElement.extend("makeFullSize", function() {
  var elementToResize = this;
  function resizeThis(aElementToResize) {
    aElementToResize.style.width = (window.innerWidth || document.body.offsetWidth)+"px";
    aElementToResize.style.height = (window.innerHeight || document.body.offsetHeight)+"px";
  }
  resizeThis(elementToResize);
  addEvent(window, "resize", function() {
    resizeThis(elementToResize);
  });
});*/
