var PortalMenu = {
  activeElement: null,
  init : function() {
  	var sfEls = document.getElementById("nav").getElementsByTagName("li");
  	for (var i=0; i<sfEls.length; i++) {
  		sfEls[i].onmouseover=function() {this.className+=" over";}
  	  sfEls[i].onmouseout=function() {this.className=this.className.replace(new RegExp(" over\\b"), "");}
  		var vLinks =sfEls[i].children;
      for(var ii=0;ii<vLinks.length;ii++){
  		  if (vLinks[ii].nodeName =="A"){
  		    if(vLinks[ii].href.length==0){
             vLinks[ii].href="#";
             vLinks[ii].onclick =function(){return false;} 
             vLinks[ii].className="hideLink";
           } 
        	vLinks[ii].onkeydown = PortalMenu.onkeydown;
        	vLinks[ii].onfocus = function() {PortalMenu.keyIn(this.parentNode);}
        	vLinks[ii].onblur = PortalMenu.onblur;
        }
  	  }
    }
  },
  
  keyIn: function (e){e.className+=" over"; },

  checkParent: function(child,parent){
  
   if (!child||child.id =="nav")
     return false;
   if (child.parentNode ==parent)
     return true;
  return PortalMenu.checkParent(child.parentNode,parent);
  },
  
  ParentHouver: function (p,e){
    if (!e||p==e||e.id =="nav")return;
    if(e.nodeName=="LI") 
      e.className= e.className.replace(new RegExp(" over\\b"), "");
    return PortalMenu.ParentHouver(p,e.parentNode);
  },
  onblur:function(e){
    var vNewMenu =null;
    if(!e) {
      vNewMenu =document.activeElement.parentNode;
    }else if(e.explicitOriginalTarget){
      if (e.explicitOriginalTarget == e.target) 
         vNewMenu = (PortalMenu.activeElement)?PortalMenu.activeElement.parentNode:null;
      else  
         vNewMenu = e.explicitOriginalTarget.parentNode;
    }else{
       vNewMenu = document.activeElement.parentNode;
    }
    PortalMenu.activeElement =null;
    var vLi =this.parentNode;
    if(!PortalMenu.checkParent(vNewMenu ,vLi)){
      PortalMenu.ParentHouver(vNewMenu.parentNode,vLi);
    }
  },
  
  key:function (e){
   if( !e ) {
      if( window.event ) 
         e = window.event;
      else return null;
   }
   if( typeof( e.keyCode ) == 'number'  ) {
     //DOM
     return  e.keyCode;
   } else if( typeof( e.which ) == 'number' ) {
     //NS 4 compatible
     return  e.which;
   } else if( typeof( e.charCode ) == 'number'  ) {
     //also NS 6+, Mozilla 0.9+
     return  e.charCode;
   } else {
     //total failure, we have no way of obtaining the key code
     return null;
   }
  },
  
  onkeydown:function (e){ 
   e = PortalMenu.key(e);

  var vCurLI = this.parentNode;
 
  if (!vCurLI) return;
  switch(e){
    case 37:
      var vUl = vCurLI.parentNode;
      if (!vUl) return;
      if (vUl.id =="nav") return;
      vUl = vUl.parentNode;
      PortalMenu.activeElement = vUl.children[0];
      PortalMenu.activeElement.focus();
      
      break;
    case 38:
      var  vLi = PortalMenu.keyUp(vCurLI); 
      if(vLi){ 
        PortalMenu.activeElement = vLi.children[0];
        PortalMenu.activeElement.focus();
      }
      break;
    case 39:
      var vUl = vCurLI.children[1];
      if (!vUl) return;
      vUl = vUl.children[0];
      PortalMenu.activeElement =vUl.children[0];
      PortalMenu.activeElement.focus();
      break;
    case 40:
    
      var  vLi = PortalMenu.keyDn(vCurLI);
     
      if(vLi){ 
         PortalMenu.activeElement =vLi.children[0];
         PortalMenu.activeElement.focus();
      }
    
    default:
   return true;
  }
},
addLoadEvent:function (pFunction) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = pFunction;
  } else {
    window.onload = function() {
      if (oldonload) {oldonload();}
      pFunction();
    };
  }
},
focus:function (e){
  e= PortalMenu.key(e);
  if (e==123){
    var nav =document.getElementById("nav");
     nav = nav.children[0];
     nav =nav.children[0].focus();
    return;
  }
 
},
 keyDn:function(e){ 
   var  vLi = (e.nextSibling==null||e.nextSibling.tagName)?e.nextSibling:e.nextElementSibling;
   if (!vLi){
     vLi = e.parentNode.children[0];
     if(!vLi) return null;
     if(vLi.tagName =='LI')    
       return vLi;
     else  
       return PortalMenu.keyDn(vLi);
   }
     
   if(vLi.tagName =='LI')
     return vLi;
   else
     return PortalMenu.keyDn(vLi);
 },
 
  keyUp:function(e){ 
   var  vLi = (e.previousSibling==null||e.previousSibling.tagName)?e.previousSibling:e.previousElementSibling;
   if (!vLi){
     vLi = e.parentNode.children[e.parentNode.children.length-1];
     if(!vLi) return null;
     if(vLi.tagName =='LI')    
       return vLi;
     else  
       return PortalMenu.keyUp(vLi);
   }
     
   if(vLi.tagName =='LI')
     return vLi;
   else
     return PortalMenu.keyUp(vLi);
 }
}

PortalMenu.addLoadEvent(PortalMenu.init);
document.onkeydown = PortalMenu.focus;






