NP = {}
NP.UI = {}
NP.Event = {}
NP.DOM = {}

 
/*
Event handling
*/
NP.Event.attachEventHandler = function(obj, eventType, eventHandler){  
  if(obj.attachEvent){       
    obj.attachEvent(eventType, eventHandler)
  }
  else if(obj.addEventListener){  
    obj.addEventListener(eventType.substr(2), eventHandler, false);      
  }
}


NP.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;
  }
NP.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;
    }


NP.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;
    }

NP.UI.EnhanceListItems = {}
NP.UI.EnhanceListItems.init = function(){  
  var lists = NP.DOM.getElementsByTagAndClassName('ul', 'enhanced')  
  for(var i=0,ilength=lists.length; i<ilength;i++){
    var list = lists[i];    
    var listitems = list.getElementsByTagName('li');   
    for(var j=0,jlength=listitems.length; j<jlength; j++){      
      var listitem = listitems[j];
      NP.Event.attachEventHandler(listitem, 'onclick', NP.UI.EnhanceListItems.onclickHandler)
      NP.Event.attachEventHandler(listitem, 'onmouseover', NP.UI.EnhanceListItems.onMouseoverHandler)
      NP.Event.attachEventHandler(listitem, 'onmouseout', NP.UI.EnhanceListItems.onMouseoutHandler)
    }
  }  
}
NP.UI.EnhanceListItems.onclickHandler = function(e){
  var listElement = e.target || e.srcElement;
  while(listElement.tagName != 'LI'){
    listElement = listElement.parentNode
  }
  links = listElement.getElementsByTagName('a')
  if(links){
    link = links[0]
    location.href = link
  }
}
NP.UI.EnhanceListItems.onMouseoverHandler = function(e){
  var listElement = e.target || e.srcElement;
  while(listElement.tagName != 'LI'){
    listElement = listElement.parentNode
  }
  NP.DOM.addElementClass(listElement, 'enhanced')
  
}
NP.UI.EnhanceListItems.onMouseoutHandler = function(e){
  var listElement = e.target || e.srcElement;
  while(listElement.tagName != 'LI'){
    listElement = listElement.parentNode
  }
  NP.DOM.removeElementClass(listElement, 'enhanced')
}
NP.UI.InputValueTogglers = {}
NP.UI.InputValueTogglers.init = function(){
  var inputs = NP.DOM.getElementsByTagAndClassName('input', 'toggler')
  for(var i=0,ilength=inputs.length; i<ilength;i++){
    var input = inputs[i];
    NP.Event.attachEventHandler(input, 'onfocus', NP.UI.InputValueTogglers.onfocusHandler)
    NP.Event.attachEventHandler(input, 'onblur', NP.UI.InputValueTogglers.onblurHandler)
  }
}
NP.UI.InputValueTogglers.onfocusHandler = function(e){
  var src = e.target || e.srcElement;  
  if(src.value == src.alt){
    src.value = ""
  }
  
}
NP.UI.InputValueTogglers.onblurHandler = function(e){
  var src = e.target || e.srcElement;
  if(!src.value){
    src.value = src.alt;  
  }  
}
NP.UI.SectionToggler = {}
NP.UI.SectionToggler.init = function(){
  var sections = NP.DOM.getElementsByTagAndClassName('div', 'toggler')  
  for(var i=0,ilength=sections.length;i<ilength;i++){
    var section = sections[i]
    NP.DOM.addElementClass(section, 'dn')
    var gpNode = section.parentNode.parentNode
    pnode = section.parentNode
    var openlink = document.createElement('a')
    openlink.section = section;   
    NP.DOM.addElementClass(openlink, 'arrow')
    NP.DOM.addElementClass(openlink, 'arrow_003365')
    NP.DOM.addElementClass(openlink, 'marginbottom')
    NP.DOM.addElementClass(openlink, 'block')
    openlink.innerHTML = section.title;
    pnode.appendChild(openlink)
    pnode.insertBefore(openlink, section)        
    NP.Event.attachEventHandler(openlink, 'onclick', NP.UI.SectionToggler.onclickHandler)    
  }  
}
NP.UI.SectionToggler.onclickHandler = function(e){  
  if (!e){ 
    var e = window.event;     
    e.cancelBubble = true;
  }
  if (e.stopPropagation){    
    e.stopPropagation();
  } 
  var src = e.target || e.srcElement;

  NP.DOM.addElementClass(src, 'dn')
  NP.DOM.removeElementClass(src, 'block')
  var section = src.section;
  if(section){
    NP.DOM.removeElementClass(section, 'dn')
  }
  return false;
}






registerEventListener(window, "load", NP.UI.EnhanceListItems.init);
/*
registerEventListener(window, "load", NP.UI.InputValueTogglers.init);
registerEventListener(window, "load", NP.UI.SectionToggler.init);
*/