
  /* ++++++++++++++++++++++++++++

    THIES IT - JS LIBRARY
    - erik 2011

  ++++++++++++++++++++++++++++ */


  //Objektcontainer
  var thies = {};

  //reload der seite, falls sie in einem frameset aufgerufen wurde (um fremde aufrufe zu verhindern)
  if (self != top) {
    top.location.replace(location.href);
  }

  //simpler funktionsaufruf der das element für eine ID zurückliefert
  function $(id) {
    return document.getElementById(id);
  }

  /*
  //lade zeug beim verlassen der seite
  window.onunload = function () {
    // execute unload routine of page, if present
    alert('exit page');
  }

  //lade zeug beim aufruf der seite
  window.onload = function () {
    //code ausführen sobald die seite geladen wurde
    alert('init');
  }
  */

  //element generieren func
  thies.createElement = function(parent,elem,id,str) {
    var d = document.createElement(elem);
    if(id != null) {
      d.setAttribute('id',id);
    }
    if(str != null) {
      d.innerHTML = str;
    }
    if(parent=="body") {
      document.body.appendChild(d);
    } else {
      parent.appendChild(d);
    }
    return d;
  }

  //create ajax loader image that can be appended to any object
  thies.createAjaxImage = function(url) {
    var img = document.createElement("img");
    img.src = url;
    img.alt = 'loading...';
    img.title = 'loading...';
    return img;
  }

  //remove the element
  thies.removeChild = function(elem) {
    if(elem.parentNode) {
      elem.parentNode.removeChild(elem);
    }
  }

  //alle elemente des eines objektes entfernen func
  thies.removeAllChilds = function(obj) {
    while(obj.hasChildNodes()) {
      obj.removeChild(obj.lastChild);
    }
  }

  //add event func
  thies.addEventSimple = function(obj,evt,fn) {
    if (obj.addEventListener)
      obj.addEventListener(evt,fn,false);
    else if (obj.attachEvent)
      obj.attachEvent('on'+evt,fn);
  }


  //remove event func
  thies.removeEventSimple = function(obj,evt,fn) {
    if (obj.removeEventListener)
      obj.removeEventListener(evt,fn,false);
    else if (obj.detachEvent)
      obj.detachEvent('on'+evt,fn);
  }


  //xml http request calls
  var XMLHttpFactories = function() {
    return [
      function () {return new XMLHttpRequest()},
      function () {return new ActiveXObject("Msxml2.XMLHTTP")},
      function () {return new ActiveXObject("Msxml3.XMLHTTP")},
      function () {return new ActiveXObject("Microsoft.XMLHTTP")}
    ];
  }

  //suche nach dem passenden objekt
  var createXMLHTTPObject = function() {
    var xmlhttp = false;
    var factories = XMLHttpFactories();
    for (var i=0;i<factories.length;i++) {
      try {
        xmlhttp = factories[i]();
      }
      catch (e) {
        continue;
      }
      break;
    }
    return xmlhttp;
  }

  //new ajax function, inklsuive callback aufruf und optionaler postdata
  thies.sendRequest = function(url,callback,postData) {
    var req = createXMLHTTPObject();
    if (!req) return;
    var method = (postData) ? "POST" : "GET";
    req.open(method,url,true);
    //req.setRequestHeader('User-Agent','XMLHTTP/1.0');
    req.setRequestHeader("If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 GMT");
    req.setRequestHeader("Cache-Control", "no-cache");
    if (postData) {
      req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
    }
    req.onreadystatechange = function () {
      if (req.readyState != 4) return;
      if (req.status != 200 && req.status != 304) {
      //  alert('HTTP error ' + req.status);
        return;
      }
      callback(req);
    }
    if (req.readyState == 4) return;
    req.send(postData);
  }

  //calc page size
  thies.calcPageWidth = function() {
    return document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth;
  }

  thies.calcPageHeight = function() {
    return document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
  }

  thies.calcScrollTop = function() {
    return document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
  }

  thies.calcScrollLeft = function() {
    return document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft;
  }


  // image loader
  // @author Cuong Tham
  var ImageLoader = function(url){
    this.url = url;
    this.image = null;
    this.loadEvent = null;
  };

  ImageLoader.prototype = {
    load:function(){
      //this.image = document.createElement("img");
      this.image = new Image();
      var url = this.url;
      var image = this.image;
      var loadEvent = this.loadEvent;
      thies.addEventSimple(this.image, "load", function(e){
        if(loadEvent != null){
          loadEvent(url, image);
        }
      });
      this.image.src = this.url;
    },
    getImage:function(){
      return this.image;
    }
  };

  thies.wdd = window.document.documentElement;
