/*
Copyright (c) 2000 - 2001 Prolog Development Center A/S
Written by: Andrey Basukinsky (ab@pdc.spb.su)
*/
var isWin  = (navigator.userAgent.toLowerCase().indexOf("win")!=-1)? true:false;

var barL, barT, barH, barW, barId, barCnt = 0; barBG = '';
var mnuL, mnuT, mnuH, mnuW, mnuId, mnuCnt = 0; mnuBC = '',mnuSep = '', mnuW = 0;
var subL, subT, subH, subW, subId, subCnt = 0; subOffs = -6; openedSubmenu = null;
var itmL, itmT, itmCnt = 0, itmId, itmOffs = 12;
var imgCnt  = 0;
var pdcScr  =  true;
var currentSubmenu = null; currentItem = null; currentLink = null;
var cssStr  = '\n<style type="text/css">';
var barStr  = '', mnuStr = '', subStr = '';
var bgName  = 'background-image:URL';
var bcName  = 'background-color:'
var winW =  document.body.clientWidth;

function barStart(left,top,height,rel_url){
    bgImg = formURL(rel_url);
    barL=left; barT=top; barH=height; barBG=bgImg;
    barId = 'pdcBar'+barCnt;
    barStr += '\n<div id='+dq(barId)+' onMouseOver="subHide(event)"></div>';
}

function barEnd(space){
    barW = (winW > mnuL + itmL)? winW - barL : mnuL + itmL - barL;
    addCss(barId,barL,barT,barH,barW,null,barBG,'z-index:0;');
    barStr += '\n'+space+'\n';
    barCnt ++;
}

function mnuImage(rel_url,imgW){
    imgUrl = formURL(rel_url);
    imgId = "img" + imgCnt;
    subStr += '\n<div id='+dq(imgId)+' />';
    imgL = mnuL + itmL;
    addCss(imgId,imgL,mnuT,mnuH,imgW,null,imgUrl,'z-index:9;');
    imgCnt ++;
    mnuL += imgW + itmOffs;
}

function barImage(rel_url,imgL,imgT,imgH,imgW){
    imgUrl = formURL(rel_url);
    imgId = "img" + imgCnt;
    subStr += '\n<div id='+dq(imgId)+' />';
    addCss(imgId,imgL,imgT,imgH,imgW,null,imgUrl,'z-index:9;');
    imgCnt ++;
}

function mnuStyle(font,size,style,weight,color,over){
    var mnuStyle = 'font-family:'+font+';font-size:'+size+'px;font-style:'+style+';font-weight:'+weight+';text-decoration:none;';
    cssStr += '\n.itmOut  {color:'+color+';'+mnuStyle+'}';
    cssStr += '\n.itmOut:visited  {color:'+color+';'+mnuStyle+'}';
    cssStr += '\n.itmOut:hover  {color:'+color+';'+mnuStyle+'}';
    cssStr += '\n.itmOver {color:'+over +';'+mnuStyle+'}';
    cssStr += '\n.itmOver:visited {color:'+over +';'+mnuStyle+'}';
    cssStr += '\n.itmOver:hover {color:'+over +';'+mnuStyle+'}';
}

function mnuSeparator(){
    sepId = "mnuSep" + itmCnt;
    mnuStr += '<span id='+dq(sepId)+' class="itmOut">|</span>';
    cssStr +='\n#'+sepId+' {position:absolute;top:0px;height:'+mnuH+'px;left:'+itmL+'px;}';
    itmL += 12;
}

function mnuStart(left,top,height,bgColor){
    mnuL=left; mnuT=top; mnuH=height; mnuBC=bgColor;
    itmL    = itmOffs;
    mnuId   = 'mnuLin' + mnuCnt;
    mnuStr += '\n<table border="0" cellpadding="0" cellspacing="0"><tr><td nowrap="true">';
    mnuStr += '<div id='+dq(mnuId)+'>';
    if(mnuCnt == 0)
    {
        cssStr += '\n.mnuItm {position:absolute;top:0px;height:'+mnuH+'px;}';
        cssStr += '\n.subItm {position:absolute;left:6px;height:'+mnuH+'px;}';
    }
}

function mnuEnd(fitToWin){
    if(fitToWin)
    {
        mnuW = (winW > itmL + mnuL)? winW - mnuL : itmL;
    }
    else
    {
        mnuW    = itmL;
    }
    addCss(mnuId,mnuL,mnuT,mnuH,mnuW,mnuBC,null,'z-index:1;');
    mnuStr += '</div>';
    mnuStr += '</td></tr></table>';
    mnuCnt ++;
}

function mnuItem(title,rel_url,width,haveSubMnu){
    url = formURL(rel_url);
    itmId = 'mnuItm' + itmCnt;
    subId = haveSubMnu ? 'subMnu' + itmCnt : null;
    var itmEH  = ' onMouseOver="mnuOver(event,'+sq(subId)+','+sq(itmId)+',this)"';
    itmEH += ' onMouseOut="mnuOut(event,'+sq(subId)+','+sq(itmId)+',this)"';
    var itmHtm ='<span id='+dq(itmId)+' class="mnuItm"><a class="itmOut" href='+dq(url)+itmEH+'>'+title+'</a></span>';
    mnuStr += itmHtm;
    cssStr +='\n#'+itmId+' {left:'+itmL+'px;}';
    subL    = mnuL + itmL + subOffs;
    itmL   += width; itmCnt++;
}

function subMnuStart(subWidth){
    subW  = subWidth;
    subT  = mnuT + mnuH; subItmT = 0;
    subH  = 0; subCnt = 0
    subStr +='\n<div id='+dq(subId)+' onmouseout="subHide(event)">';
    subSep(0,5);
}

function subMnuEnd(){
    subH += 6;
    subStr += '\n</div>';
    addCss(subId,subL,subT,subH,subW,mnuBC,null,"visibility:hidden;z-index:9;");
}

function subItem(title,rel_url){
    url = formURL(rel_url);
    var itmId  = 'subItm' + itmCnt + subCnt;
    var itmEH  = ' onMouseOver="mnuOver(event,null,'+sq(itmId)+',this)"';
    itmEH += ' onMouseOut="mnuOut(event,null,'+sq(itmId)+',this)"';
    var itmHtm ='\n<span id='+dq(itmId)+' class="subItm"><a class="itmOut" href='+dq(url)+itmEH+'>'+title+'</a></span>';
    subStr += itmHtm;
    cssStr +='\n#'+itmId+' {top:'+subItmT+'px;}'
    subItmT += mnuH; subCnt++;
    subH += mnuH;
}

function subSeparator(){
    subSep(6,6);
}

function subSep(topOffs,nextOffs){
    var offs = topOffs + nextOffs + 1;
    var sepT = subItmT + topOffs;
    var sepId = "subSep" + itmCnt + subCnt;
    subStr +='\n<span id='+dq(sepId)+'></span>';
    addCss(sepId,0,sepT,1,subW,"#FFFFFF",null,"");
    subH += offs;
    subItmT += offs;
}

function mnuOver(e,subId,itmId,lnk){
    var sub = document.getElementById(subId);
    var itm = document.getElementById(itmId);
    mnuOut(e,currentSubmenu,currentItem,currentLink);
    subShow(e,sub,itm);
    lnk.className = 'itmOver';
    stopPropagation(e);
    currentSubmenu = sub; currentItem = itm; currentLink = lnk;
}

function mnuOut(e,subId,itmId,lnk){
    var sub = document.getElementById(subId);
    var itm = document.getElementById(itmId);
    if(itm != null)
    {
        lnk.className = 'itmOut';
        e.c = true;
        currentSubmenu = null; currentItem = null; currentLink = null;
    }
}

function subShow(e,sub,itm){
    if(itm.id.search("mnuItm")==0)
    {
        subHide(e);
    }
    if(sub != null)
    {
        sub.style.visibility='visible';
        stopPropagation(e);
        openedSubmenu = sub;
    }
}

function subHide(e){
    if (!e) {
        e = window.event;
    }
    if(openedSubmenu != null)
    {
        if ( ! contains(openedSubmenu,related(e)) )
        {
            openedSubmenu.style.visibility='hidden';
            stopPropagation(e);
            openedSubmenu = null;
        }
    }
}

function allDraw(){
    cssStr +='\n</style>\n';
    /* debug lines
    alert(cssStr);
    alert(mnuStr);
    alert(subStr);
    alert(barStr);
    */
    document.write(cssStr);
    document.write(mnuStr);
    document.write(subStr);
    document.write(barStr);
}

function cssClass(className,rules){
    cssStr += '\n.'+className+' {'+rules+'}';
}

function addCss(itmId,l,t,h,w,bc,bg,other){
    cssStr += '\n#'+itmId+' {position:absolute;';
    cssStr += 'left:'+l+'px;top:'+t+'px;';
    if(h != null)
    {
        cssStr += 'height:'+h+'px;width:'+w+'px;';
        cssStr += 'clip:rect(0px,'+w+'px,'+h+'px,0px);';
    }
    if(bc != null)
    {
        cssStr += bcName+bc+';';
    }
    if(bg != null)
    {
        cssStr += bgName+'('+bg+');';
    }
    cssStr += other + '}';
}

function redraw(){
   history.go(0);
}

function formURL(url){
    var lowUrl = url.toLowerCase();
    if(lowUrl.search("mailto:") != -1 ||
        lowUrl.search("http:") != -1 ||
        lowUrl.search("https:") != -1 ||
        lowUrl.search("ftp:") != -1 ||
        lowUrl.search("javascript:") != -1)
    {
        return url;
    }
    else
    {
        return toRoot + url;
    }
}

function stopPropagation(e) {
    if (e.stopPropagation)
    {
        e.stopPropagation();
    }
    else if (e.cancelBubble)
    {
        c.cancelBubble = true;
    }
}
// Finds out if a is an ancestor of b
function contains(a, b)
{
    // we climb through b parents
    // till we find a
    while(b && (a!=b) && (b!=null))
        b = b.parentNode;
    return a == b;
}

function related(e){
    if (e.toElement)
    {
        return e.toElement; // IE does not support relatedTarget
    }
    else
    {
        return e.relatedTarget;
    }
}

function sq(s){
    return "'"+s+"'";
}

function dq(s){
    return '"'+s+'"';
}


