Kildenett = {}
Kildenett.UI = {}
Kildenett.Event = {}
Kildenett.DOM = {}

 
/*
Event handling
*/
Kildenett.Event.attachEventHandler = function(obj, eventType, eventHandler){  
  if(obj.attachEvent){       
    obj.attachEvent(eventType, eventHandler)
  }
  else if(obj.addEventListener){  
    obj.addEventListener(eventType.substr(2), eventHandler, false);      
  }
}
Kildenett.Event.detachEventHandler = function(obj, eventType, eventHandler){  
  if(obj.detachEvent){       
    obj.detachEvent(eventType, eventHandler)
  }
  else if(obj.removeEventListener){  
    obj.removeEventListener(eventType.substr(2), eventHandler, false);      
  }
}


Kildenett.DOM.getElementsByTagAndClassName = function (tagName, className, parent) {    
    if (typeof(tagName) == 'undefined' || tagName === null) {
      tagName = '*';
    }
    if (typeof(parent) == 'undefined' || parent === null) {
      parent = document;
    }        
    var children = (parent.getElementsByTagName(tagName) || self._document.all);        
    var elements = [];
    for (var i = 0; i < children.length; i++) {
      var child = children[i];
      var cls = child.className;
      if (!cls) {
        continue;
      }
      var classNames = cls.split(' ');
      for (var j = 0; j < classNames.length; j++) {
        if (classNames[j] == className) {
            elements.push(child);
            break;
        }
      }
    }
    return elements;
  }
Kildenett.DOM.addElementClass = function (obj, className) {
        var cls = obj.className;
        // trivial case, no className yet
        if (cls == undefined || cls.length === 0) {
            obj.className = className;
            return true;
        }
        // the other trivial case, already set as the only class
        if (cls == className) {
            return false;
        }
        var classes = cls.split(" ");
        for (var i = 0; i < classes.length; i++) {
            // already present
            if (classes[i] == className) {
                return false;
            }
        }
        // append class
        obj.className = cls + " " + className;
        return true;
    }

    
Kildenett.DOM.removeElementClass = function (obj, className) {
        var cls = obj.className;
        // trivial case, no className yet
        if (cls == undefined || cls.length === 0) {
            return false;
        }        
        var classes = cls.split(" ");
        for (var i = 0; i < classes.length; i++) {
            // already present
            if (classes[i] == className) {
                // only check sane case where the class is used once
                classes.splice(i, 1);
                obj.className =  classes.join(" ");
                return true;
            }
        }
        // not found
        return false;
    }

Kildenett.UI.ImageHoover = {}
Kildenett.UI.ImageHoover.Globals = {}
Kildenett.UI.ImageHoover.Globals.currentHoover = null;
Kildenett.UI.ImageHoover.init = function(){  
  var imagelist = Kildenett.DOM.getElementsByTagAndClassName('ul', 'imagelist');  
  for(var i=0,ilength=imagelist.length; i<ilength;i++){    
    var container = imagelist[i];   
    var items  = container.getElementsByTagName('li');    
    for(var j=0,jlength=items.length; j<jlength;j++){
      var  item = items[j];      
      var enlargelink = item.getElementsByTagName('a')[0];  
      enlargelink.style.display = "none";
      Kildenett.Event.attachEventHandler(item, 'onmouseover', Kildenett.UI.ImageHoover.onMouseoverHandler)        
    }
  }
  
  
  /*
  var imagecontainers = Kildenett.DOM.getElementsByTagAndClassName('div', 'hoover_images');  
  for(var i=0,ilength=imagecontainers.length; i<ilength;i++){    
    var imagecontainer = imagecontainers[i];   
    var images = imagecontainer.getElementsByTagName('img');
    
    for(var j=0,jlength=images.length; j<jlength;j=j+2){
      var image = images[j];    
      image.style.zIndex = "-100";
      Kildenett.Event.attachEventHandler(image, 'onmouseover', Kildenett.UI.ImageHoover.onMouseoverHandler)
      Kildenett.Event.attachEventHandler(image, 'onmouseout', Kildenett.UI.ImageHoover.onMouseoutHandler)   
    }
  }
  */
}


Kildenett.UI.ImageHoover.onMouseoverHandler = function(e){  
  
  var listElement = e.target || e.srcElement;
  while(listElement.tagName != 'LI'){
    listElement = listElement.parentNode
  }
  
  
  image = listElement.getElementsByTagName('img')[0]
  
  newListElement = listElement.cloneNode(true);
  //listElement.style.visibility = "hidden"
  newListElement.proto = listElement;
  Kildenett.DOM.addElementClass(newListElement, "hoover")
  
  if(Kildenett.UI.ImageHoover.Globals.currentHoover){
    pnode =   Kildenett.UI.ImageHoover.Globals.currentHoover.parentNode;
    pnode.removeChild(Kildenett.UI.ImageHoover.Globals.currentHoover)
  }
  Kildenett.UI.ImageHoover.Globals.currentHoover = newListElement;
    
  newListElement.style.position = 'absolute';
  var width = parseInt(image.width);
  var height = parseInt(image.height);
  newwidth = width * 1.2;
  
  newheight = height * 1.2;
  diffwidth = newwidth - width;
  
  //offsetLeft = diffwidth /2;
  //TODO: do something more clever here
  offsetLeft = ((((listElement.clientWidth-width)/2)-diffwidth)/2+5)*-1
  
  diffheight = newheight - height;
  offsetTop = diffheight / 2;
  
  newListElement.style.width = parseInt(image.width) + 25 +"px"; 
  newListElement.style.height =  parseInt(image.height) + 25 +"px";
  newListElement.style.top = (listElement.offsetTop-offsetTop)+"px";
  newListElement.style.left = listElement.offsetLeft-offsetLeft+"px";
  Kildenett.Event.detachEventHandler(newListElement, 'onmouseover', Kildenett.UI.ImageHoover.onMouseoverHandler)
  Kildenett.Event.attachEventHandler(newListElement, 'onmouseout', Kildenett.UI.ImageHoover.onMouseoutHandler)
  
  var enlargelink = newListElement.getElementsByTagName('a')[0];
  var href = enlargelink.href;  
  Kildenett.Event.attachEventHandler(newListElement, 'onclick', function(){
    location.href = href;
  })
    

  Kildenett.DOM.addElementClass(newListElement, 'hoover');
  listElement.parentNode.appendChild(newListElement);
  
}
Kildenett.UI.ImageHoover.onMouseoutHandler = function(e){
  /*
  var listElement = e.target || e.srcElement;
  while(listElement.tagName != 'LI'){
    listElement = listElement.parentNode
  }
  */
  listElement =  Kildenett.UI.ImageHoover.Globals.currentHoover;
  if(!listElement){
    listElement = e.target || e.srcElement;
    while(listElement.tagName != 'LI'){
      listElement = listElement.parentNode
    }
  }
  //listElement.proto.style.visibility = "visible";
  pnode = listElement.parentNode;
  if(pnode){
    Kildenett.Event.detachEventHandler(newListElement, 'onmouseout', Kildenett.UI.ImageHoover.onMouseoverHandler);  
    listElement.parentNode.removeChild(listElement);
    Kildenett.UI.ImageHoover.Globals.currentHoover = null;
  } 
}

Kildenett.Event.attachEventHandler(window, "onload", Kildenett.UI.ImageHoover.init);


