nn = (document.getElementById && navigator.appName == "Netscape") ? 1 : 0;
ns = (document.layers) ? 1 : 0;
op = (!nn && !ns && ( navigator.appName == "Opera" || navigator.userAgent.indexOf('Opera') != -1)) ? 1 : 0;
ie = (!nn && !op && !ns && document.all) ? 1 : 0;

var hidemenu = null;
var oldSrc = Array();

function load(location){
 if (document.images){
   image=new Image();
   image.src=location;
   return image;
       }
}

function getx(elem)
{
 x = 0;
 do { x += elem.offsetLeft; }
 while((elem = elem.offsetParent) != null);
 return x;
}

function gety(elem)
{
 y = 0;
 do { y += elem.offsetTop; }
 while((elem = elem.offsetParent) != null);
 return y;
}


function hide(num)
{

 if(ie){
   document.all["sub_menu_" + num].style.visibility = "hidden";
   document.all["sub_menu_" + num].style.left = 0;
   if (document.images['main_menu_img_'+num] && oldSrc[num] != null){
     document.images['main_menu_img_'+num].src = oldSrc[num];
   }
 }
 if(ns){
   document.layers["sub_menu_" + num].visibility = "hidden";
   document.layers["sub_menu_" + num].left = 0;
   if (document.images['main_menu_img_'+num] && oldSrc[num] != null){
     document.images['main_menu_img_'+num].src = oldSrc[num];
   }
 }
 if(nn || op){
   document.getElementById("sub_menu_" + num).style.visibility = "hidden";
   document.getElementById("sub_menu_" + num).left = 0;
   images = document.getElementsByTagName("IMG");
   if (images && images['main_menu_img_'+num] && oldSrc[num] != null){
     images['main_menu_img_'+num].src = oldSrc[num];
  }
 }
}

function load(location){
    if(document.images){
        var image = new Image();
        image.src = location;
        return image;
    }
}

function getElementPosition(oElement){
    var res = new Array(0, 0);
    do{
        res[0] += oElement.offsetLeft;
        res[1] += oElement.offsetTop;
    }while((oElement = oElement.offsetParent) != null);
    return res;
}

function positioningMenu(smNum, relateToParentX, relateToParentY, deltaX, deltaY){
    var menuId = "sub_menu_" + smNum;
    var menuObj = document.getElementById(menuId);
    
    var parentId = "j" + smNum;
    var parentObj = document.getElementById(parentId);
    var parentPosition = getElementPosition(parentObj);

    if(typeof(deltaX) == "undefined")
        deltaX = 0;
    if(relateToParentX == "right" || relateToParentX == "center"){
        parentWidth = parentObj.offsetWidth;
        if(relateToParentX == "center")
            parentWidth = parentWidth/2;
        deltaX += parentWidth;
    }
    
    if(typeof(deltaY) == "undefined")
        deltaY = 0;
    if(relateToParentY == "bottom" || relateToParentY == "center"){
        parentHeight = parentObj.offsetHeight;
        if(relateToParentY == "center")
            parentHeight = parentHeight/2;
        deltaY += parentHeight;
    }
    
    menuObj.style.left = parentPosition[0] + deltaX;
    menuObj.style.top = parentPosition[1] + deltaY;
}

var hTmMenuHide = null;
var hTmSubMenuHide = {"init":0};
var prevImgSrc = Array();
var openedMenusStack = Array();

function showMenu(smNum, parentNum, relateToParentX, relateToParentY, deltaX, deltaY, imgOver){
    clearTimeout(hTmMenuHide);
    clearTimeout(hTmSubMenuHide[smNum]);
    
    hideMenuById(parentNum, true, true);
    positioningMenu(smNum, relateToParentX, relateToParentY, deltaX, deltaY);
  
    if(document.images['main_menu_img_'+smNum]){
        prevImgSrc[smNum] = document.images['main_menu_img_'+smNum].src;
        document.images['main_menu_img_'+smNum].src = imgOver;
    }
    
    document.getElementById("sub_menu_" + smNum).style.display = 'block';
    openedMenusStack.push(smNum);
    
}

function hideMenu(smNum){
    var menuObj = document.getElementById("sub_menu_" + smNum);
    menuObj.style.display = 'none';
    images = document.getElementsByTagName("IMG");
    if(document.images && document.images['main_menu_img_'+smNum] && prevImgSrc[smNum] != null){
        document.images['main_menu_img_'+smNum].src = prevImgSrc[smNum];
    }
}

function hideMenuById(smNum, isIdParent, hideAllIfNotFound){
    if(smNum == 0){
        hideMenuAll();
    }else{
        var removeFromPos = -1;
        for(i = 0; i < openedMenusStack.length; i++){
            if(openedMenusStack[i] == 0)
                break;
            if(removeFromPos == -1 && openedMenusStack[i] == smNum){
                removeFromPos = i;
                if(isIdParent){
                    removeFromPos += 1;
                    continue;
                }
            }
            if(removeFromPos > -1){
                hideMenu(openedMenusStack[i]);
            }
        }
        if(hideAllIfNotFound && removeFromPos == -1){
            hideMenuAll();
        }else if(removeFromPos > -1 && removeFromPos < openedMenusStack.length){
            openedMenusStack.splice(removeFromPos, openedMenusStack.length-removeFromPos);
        }
    }
} 

function hideMenuAll(){
    for(i = 0; i < openedMenusStack.length; i++){
        hideMenu(openedMenusStack[i]);
    }
    openedMenusStack = new Array();
    
    // Switch to next block if you have some problems with div hiding caused special custom processing
    /*oDivs = document.getElementsByTagName("DIV");
    for(i = 0; i < oDivs.length; i++){
        if(oDivs[i].id.substr(0, 9) == "sub_menu_"){
            hideMenu(oDivs[i].id.substr(9));
        }
    }*/
} 

function hideMenuAllByTimeout(){
    hTmMenuHide = setTimeout('hideMenuAll()', 500);
}
function hideMenuIdByTimeout(smNum){
    hTmSubMenuHide[smNum] = setTimeout('hideMenuById('+smNum+', false, false)', 250);
}

/* HTML handlers */
function mon(smNum, smParentId){
    clearTimeout(hTmMenuHide);
    if(typeof(smNum) != "undefined" && smNum > 0){
        clearTimeout(hTmSubMenuHide[smNum]);
    }
    if(typeof(smParentId) != "undefined" && smParentId > 0){
        clearTimeout(hTmSubMenuHide[smParentId]);
    }
}
function moff(smNum){
    hideMenuAllByTimeout();
    if(typeof(smNum) != "undefined"){
        hideMenuIdByTimeout(smNum);
    }
}

function submoff(menuId){
    hideMenuIdByTimeout(menuId);
}
function ck(num,state){
}
function smclick(){
    hideMenuAll();
}

function show(num, img_over)
{
  hideall();
  clearTimeout(hidemenu);
  setposition(num);
  
  if (document.images['main_menu_img_'+num]){
    oldSrc[num] = document.images['main_menu_img_'+num].src;
    document.images['main_menu_img_'+num].src = img_over;
  }

  if(ie){
  document.all["sub_menu_" + num].style.visibility = "visible";
  }
  if(ns){
  document.layers["sub_menu_" + num].visibility = "visible";
  }
  if(nn || op){
  document.getElementById("sub_menu_" + num).style.visibility = "visible";
  }
}

function hideall() {
  if(ie){
    divs = document.all.tags("DIV");
  }
  if(ns){
    divs = document.layers;
  }
  if(nn || op){
    divs = document.getElementsByTagName("DIV");
  }
  for (i=0; i<divs.length; i++ ){
     if (divs[i].id.substr(0, 9) == "sub_menu_"){
        hide(divs[i].id.substr(9, divs[i].id.length));
     }
  }
}

function setposition(num)
{
 var scrollbarsWidth = 20;
 var yc = -12;

 if(ie){
   mc = document.all["sub_menu_" + num].offsetWidth - document.all["v" + num].offsetWidth;
 }
 if(ns){
   mc = document["sub_menu_" + num].width - document["v" + num].width;
 }
 if(nn || op){
   mc = document.getElementById("sub_menu_block_" + num).offsetWidth - document.getElementById("j" + num).offsetWidth;
 }

 mc -= 162;
 if(ie){
  tc = gety(document.all["v" + num])+document.all["v" + num].offsetHeight;
  lc = getx(document.all["v" + num]);
  document.all["sub_menu_" + num].style.top = tc + yc;
  if (lc - mc + document.all["sub_menu_" + num].offsetWidth > document.body.scrollWidth){ 
    document.all["sub_menu_" + num].style.left = document.body.scrollWidth - document.all["sub_menu_" + num].offsetWidth - mc;  
  }else{
    document.all["sub_menu_" + num].style.left = lc - mc;
 }
 }
 if(ns){
  tc = document.all["v" + num].y + document.all["v" + num].height;
  lc = document["v" + num].x;
  document.layers["sub_menu_" + num].top = tc + yc;
  if (lc - mc + document.all["sub_menu_" + num].width > document.body.width){ 
    document.layers["sub_menu_" + num].left = document.body.width - document.all["sub_menu_" + num].width - scrollbarsWidth - mc;
  }else{
    document.layers["sub_menu_" + num].left = lc - mc;
  }

 }
 if(nn || op){
  //mc = 20;// mc-12;
  //yc = 5;
  tc = gety(document.getElementById("j" + num)) + document.getElementById("j" + num).offsetHeight;
  lc = getx(document.getElementById("j" + num));
  submenu_item = document.getElementById("sub_menu_" + num);
  submenu_item.style.top = tc + yc;
  if (lc - mc + submenu_item.offsetWidth > document.body.scrollWidth){ 
    submenu_item.style.left = document.body.scrollWidth - submenu_item.offsetWidth - mc;  
  }else{
    submenu_item.style.left = lc - mc;
  }
 }

}
