//*********************************
//*** Pull Down Menus: Source Code
//*** Language: JavaScript 1.2
//*** Author: Spyros Kontogiannis
//*** Last Modified: 10-8-1999
//*********************************

//*** Global Variables

var     systemIsNS      =(document.layers!=null);// Is it a Netscape browser

var     systemMouseDn   =false; // mousemove dragging

var     systemLayers    =(document.all)?document.all:document.layers;

var     systemMaxZ      =0; 

var     systemNullChk   =((systemIsNS)?((navigator.appVersion.substring(0,4)=="4.05")?"null":"undefined"):"null")

var     menuTimeOut     =null;  // mouseout Cancel menu timer

var     menuCurrentItem =null;  // currently highlighted object.

var     menuCurrentPath ="";    // The open menu list.

var     menuScreenWidth =0;



//*** General Menu  configuration variables

var     baseURL ="http://odysseia.cti.gr/"; 
//The Base URL of our Site...

var     menuSubSymbol   =  "<img src='" + baseURL + "images/red_arrow.gif' width=7 height=11>";
// html to indicate sub menu

var     menuRoll        =false  ;
// Show menu items as built

var     menuCharHeight  =18     ;
// Avg Char Height. -- was 18

var     menuCharWidth   =6      ;
// Avg Char Width.

var     menuYpopoff     =menuCharHeight;

var     menuXpopoff     =0      ;
// -- was 0

var     menuBcolor      ="#df7000";
// background -- was #ff8000

var     menuTcolor      ="#990000";
// Text

var     menuFont        ="geneva,ms sans serif";
// menu label font

var     menuFontSize    =0      ;
// menu font size -- was 2

var     menuBold        =false  ;
// Use bold

var     Firstpass       =true   ;

var     lastEVENT=null;

/* Called by the jsLAYERclass to create
a layer if the layer does not already exist.*/

function jsLAYERcreateLayer(Homeboy,x,y,w,h,bColor)

        {

        if(systemIsNS)

          {

          var lyr= document.layers[Homeboy.lyrName] = new Layer(w)

          lyr.left=x;lyr.top=y; lyr.clip.height=h;

          lyr.bgColor=((jsLAYERcreateLayer.arguments.length>5)?bColor:menuBcolor);

          lyr.visibility='hidden';lyr.zIndex=1;

          lyr.isHighlight=false;

          }else{

          var str = '\n<DIV id='+Homeboy.lyrName+' style="visibility: hidden; position:absolute; left:'+x+'; top:'+y+'; width:'+w

          str += '; height:'+menuCharHeight+'; clip:rect(0,'+w+','+h+',0)'

          str += '; background-color:'+((jsLAYERcreateLayer.arguments.length>5)?bColor:menuBcolor)+';"> </DIV>';

          document.body.insertAdjacentHTML("BeforeEnd",str);

          }

        Homeboy.jsLAYERobject=systemLayers[Homeboy.lyrName];

        if(systemIsNS)

          {

          Homeboy.jsLAYERdocument       =document.layers[Homeboy.lyrName].document;

          Homeboy.jsLAYERcss            =document.layers[Homeboy.lyrName];

          }else{

          Homeboy.jsLAYERdocument       =document.all[Homeboy.lyrName];

          Homeboy.jsLAYERcss            =document.all[Homeboy.lyrName].style;

          Homeboy.jsLAYERcss.zIndex     =systemMaxZ++;

          }

        Homeboy.jsLAYERobject.HomeBoy=Homeboy;

        Homeboy.jsLAYERobject.W =w;

        Homeboy.jsLAYERobject.X =x;

        Homeboy.jsLAYERobject.Y =y;

        Homeboy.jsLAYERobject.H =h;

        Homeboy.jsLAYERobject.MOUSEHANDLER="MOUSEVECTOR";

        return Homeboy;

        }

function jsLAYERsetHandler(Homeboy,szHANDLER) // named function for events

        {

        Homeboy.jsLAYERobject.MOUSEHANDLER=szHANDLER;

        MOUSECAPTURE(Homeboy,Homeboy.lyrName);

        }

function jsLAYERhomeboy(layername){return systemLayers[layername].HomeBoy;}

function jsLAYERopen(Homeboy){if(systemIsNS){Homeboy.jsLAYERobject.document.open();  }else{  Homeboy.jsLAYERobject.innerHTML="";}}

function jsLAYERwrite(Homeboy,Text){if(systemIsNS){Homeboy.jsLAYERdocument.write(Text);}else{Homeboy.jsLAYERobject.innerHTML+=Text;}}

function jsLAYERclose(Homeboy)

        {

        if(systemIsNS)

          {

          Homeboy.jsLAYERdocument.close();

          MOUSECAPTURE(Homeboy,Homeboy.lyrName);

          }

        }

function jsLAYERsetContent(Homeboy,text)

        {

        jsLAYERopen(Homeboy);

        jsLAYERwrite(Homeboy,text);

        jsLAYERclose(Homeboy);return;

        }

function jsLAYERshow(Homeboy,vis){Homeboy.jsLAYERcss.visibility=((vis)?"visible":"hidden");}

function jsLAYERgetX(Homeboy){return parseInt((document.all)?Homeboy.jsLAYERcss.left:Homeboy.jsLAYERcss.x);}

function jsLAYERgetY(Homeboy){return parseInt((document.all)?Homeboy.jsLAYERcss.top:Homeboy.jsLAYERcss.y);}

function jsLAYERxy(Homeboy,x,y,InLayer)

        {

        this.InX=x;this.InY=y;

        if(document.all)

          {

          if(InLayer)

            {

            this.InX+=parseInt(document.all[Homeboy.lyrName].style.left);

            this.InY+=parseInt(document.all[Homeboy.lyrName].style.top);

            }

          systemLayers[Homeboy.lyrName].style.left=InX

          systemLayers[Homeboy.lyrName].style.top=InY

          }else{

          if(InLayer)

            {

            InX+=InLayer.jsLAYERcss.left;

            InY+=InLayer.jsLAYERcss.top;

            }

          Homeboy.jsLAYERobject.x=this.InX;

          Homeboy.jsLAYERobject.y=this.InY;

          }

        }

/*Function      :MEVENT

**Parameters    :Homeboy        - Layer Class Pointer

**               Evt            - javascript Browser Event

**Description   :Noramalizes Netscape/MSIE evnts to 

**a class containing variables for both, with Netscape names

**superceding MSIE names. It is this psudeo event class that

**is passed to all MOUSE... event handler functions.

*/

function MEVENT(Homeboy,Evt) //normalizes the differences in NS and MSIE events

        {

        this.type=Evt.type;

        this.screenX=Evt.screenX;

        this.screenY=Evt.screenY;

        if(systemIsNS)

          {

        this.pageX=Evt.pageX;

        this.pageY=Evt.pageY;

        this.locationX=Homeboy.jsLAYERobject.x;

        this.locationY=Homeboy.jsLAYERobject.y;

        this.layerX=Evt.layerX;

        this.layerY=Evt.layerY;

        this.which=Evt.which;

        this.target=Evt.target;

        this.modifiers=Evt.modifiers;

          }else{

        this.pageX=Evt.x;

        this.pageY=Evt.y;

        this.locationX=parseInt(Homeboy.jsLAYERobject.style.left);

        this.locationY=parseInt(Homeboy.jsLAYERobject.style.top);

        this.layerX=this.pageX-this.locationX;

        this.layerY=this.pageY-this.locationY;

        this.which=Evt.button+1;

        this.target=Evt.srcElement;

        this.modifiers=(((Evt.altKey)?1:0)+((Evt.ctrlKey)?2:0)+((Evt.AltKey)?4:0));

          }

        }

function MOUSEVECTOR(layername,Evt)// handles the actuall prep and call of mouse events

        {

        Homeboy=systemLayers[layername].HomeBoy;return false;

        }

// Sets up mouse event NOTE: Use of "new Function" is important

function MOUSECAPTURE(Homeboy,layername)

        {

var NFD="return "+Homeboy.jsLAYERobject.MOUSEHANDLER+"('"+layername+"',"+((systemIsNS)?"arguments[0]":"window.event")+")"

Homeboy.jsLAYERobject.onmouseover=new Function(NFD)

Homeboy.jsLAYERobject.onmouseout=new Function(NFD)

Homeboy.jsLAYERdocument.onmousemove=new Function(NFD)

Homeboy.jsLAYERdocument.onmousedown=new Function(NFD)

Homeboy.jsLAYERdocument.onmouseup=new Function(NFD)

if(systemIsNS)Homeboy.jsLAYERdocument.captureEvents(  Event.MOUSEUP |   Event.MOUSEDOWN   | Event.MOUSEMOVE);

        }

function NSResizePatch(){document.location.href=document.location.href;}

function jsNULLvector(layername,Evt){return true;}

var MPTYPE ="",MSTYPE ="";

function jsMPANELvector(panelName,Evt)  // Vectors mouse messages for the panel

        {

        Homeboy=jsLAYERhomeboy(panelName);

        if(menuTimeOut)clearTimeout(menuTimeOut);

        if(Evt.type=="mouseout" || Evt.type=="mouseover") 

          {

          MPTYPE=Evt.type;

          if(MPTYPE==MSTYPE&&MPTYPE=="mouseout")menuTimeOut=setTimeout("menuPOPDN()",200);

          }

        if(Evt.type!="mousemove" )return false;

        EVENT=new MEVENT(Homeboy,Evt);



        EntryNum=0;

        EntryNotch=EVENT.layerY;

        if(EntryNotch)

          {

          EntryNotch-=(EntryNotch%menuCharHeight);

          EntryNum=(EntryNotch/menuCharHeight)

          }

        if(Homeboy.mParent.Items.length<=EntryNum)return true;

        lastEVENT=EVENT;

        if(Homeboy.mParent.EntryNum==EntryNum)return false;

        jsLAYERsetContent(Homeboy.mParent.mSELECT,Homeboy.mParent.Items[EntryNum].RENDER);

        jsLAYERxy(Homeboy.mParent.mSELECT,jsLAYERgetX(Homeboy),jsLAYERgetY(Homeboy)+(EntryNum*menuCharHeight));

        Homeboy.mParent.EntryNum=EntryNum;

        return false;

        }

/*

** Vectors mouse messages for the menu selector

*/

function jsMSELECTvector(panelName,Evt)

        {

        if(menuTimeOut)clearTimeout(menuTimeOut);

        if(Evt.type=="mouseout" || Evt.type=="mouseover") 

          {

          MSTYPE=Evt.type;

          if(MPTYPE==MSTYPE&&MPTYPE=="mouseout")menuTimeOut=setTimeout("menuPOPDN()",200);

          return false;

          }

        if(Evt.type!="mouseup")return false;

        Homeboy=jsLAYERhomeboy(panelName);

        var action = Homeboy.mParent.Items[Homeboy.mParent.EntryNum].ACTION;



        if(menuCurrentPath.indexOf(Homeboy.jsLAYERobject.GROUP)>0)

          {

          var FindGroup = ":"+Homeboy.jsLAYERobject.GROUP+":";

          var killList = menuCurrentPath.substring(menuCurrentPath.indexOf(FindGroup)+FindGroup.length-1);

          menuPOPDN(killList);

          }

        if(action.length<1){window.status="[Not Available]";return false;}

        var isMenu = action.substring(0,1)=="@";

        if(isMenu)

          {

          menuPOPUP(jsLAYERgetX(Homeboy)+Homeboy.jsLAYERobject.W,jsLAYERgetY(Homeboy),action.substring(1));

          }else{

          document.location.href=action;

          }

        return false;

        }

/*

** This is the menu panel

*/

function jsMPANELclass(group,entry,label,action,x,y,w,h)

        {

        this.lyrName            =group+entry;

        if(!systemLayers[this.lyrName])jsLAYERcreateLayer(this,x,y,w,h,"#003366");

        jsLAYERsetHandler(this,"jsMPANELvector");

        this.jsLAYERobject.GROUP=group;this.jsLAYERobject.ENTRY=entry;

        this.jsLAYERobject.rtWidth=8;

        this.jsLAYERobject.rtSymbol="&raquo;";

        }

/*

** This is the highlite bar

*/

function jsMSELECTclass(group,entry,label,action,x,y,w,h)

        {

        this.lyrName            =group+entry;

        if(!systemLayers[this.lyrName])jsLAYERcreateLayer(this,x,y,w,h);

        jsLAYERsetHandler(this,"jsMSELECTvector");

        this.jsLAYERobject.GROUP=group;

        this.jsLAYERobject.ENTRY=entry;

        this.jsLAYERobject.rtWidth=8;

        this.jsLAYERobject.rtSymbol="&raquo;";

        }

/*

** Create the menu label obeject string for display

*/

function menuLABEL(Homeboy,text,isHighlight,isSub)

        {

        var fontstart="<FONT FACE='"+menuFont+"' SIZE="+menuFontSize+" COLOR='"+((isHighlight)?menuBcolor:menuTcolor)+"'>"+((menuBold)?"<B>":"");

        var CONTENT="&nbsp;";

        if(text)CONTENT=text.length?"&nbsp;"+text:"&nbsp;";

        var lyrtxt="<TABLE BORDER=0 CELLPADDING=0 STYLE='cursor:hand' CELLSPACING='0' BGCOLOR='";

        lyrtxt+=((isHighlight)?menuTcolor:menuBcolor);

        lyrtxt+="' WIDTH='"+Homeboy.jsLAYERobject.W+"' HEIGHT='"+menuCharHeight+"'><TR VALIGN=MIDDLE>";

        twidth=parseInt(Homeboy.jsLAYERobject.W)-parseInt(Homeboy.jsLAYERobject.rtWidth);

        lyrtxt+="<TD WIDTH='"+twidth.toString();

        lyrtxt+="'>"+fontstart+CONTENT+((menuBold)?"</B>":"")+"</FONT></TD>";

        lyrtxt+="<TD WIDTH='8'>"+fontstart+((isSub)?menuSubSymbol:"&nbsp;")+((menuBold)?"</B>":"")+"</FONT></TD></TR></TABLE>";

        return lyrtxt;

        }

function MenuItem(label,action)

        {

        this.LABEL      =label  ;

        this.ACTION     =action ;

        this.SUB        =this.ACTION.substring(0,1)=="@";

        this.RENDER     =""     ;

        }

function MenuListAPPEND(label,action)   //Appends an item to the menuobject

        {

        this.Items[this.Items.length]=new MenuItem(label,action);

        if(label.length>this.greatestCharWidth)this.greatestCharWidth=label.length;

        }

function menuPop(tobj) //Pops up menu relative to <A> tag location on screen.

        {

        objectName=tobj.href.substring(tobj.href.lastIndexOf("/")+1);

        if(objectName.indexOf(".html")>-1)objectName=objectName.substring(0,objectName.indexOf("."))

        if(menuCurrentPath.indexOf(":"+objectName+":")==0)return false;

        if(menuCurrentPath.length>0)menuPOPDN();

        if(navigator.appVersion.indexOf("MSIE")>-1&&navigator.appVersion.indexOf("Mac")>-1)

          {// compatible mac

          if(tobj.href.indexOf(".html")==-1)tobj.href+=".html";

          return true;

          }

        this.MX=((systemIsNS)?(tobj.x):window.event.clientX-window.event.offsetX+tobj.offsetLeft);

        this.MY=((systemIsNS)?(tobj.y):window.event.clientY-window.event.offsetY+tobj.offsetTop);

        if(!systemIsNS)MSIEmeasure(tobj,this);    

        this.MY+=menuYpopoff;

        this.MX+=menuXpopoff;

        menuPOPUP(this.MX,this.MY,objectName);

        menuTimeOut=setTimeout("menuPOPDN()",4500);

        return false;

        }

function menuPopAside(ImageWidth,tobj) 
//Pops up menu relative to <A> tag location on screen, next to an image of width x pixels.

        {

        objectName=tobj.href.substring(tobj.href.lastIndexOf("/")+1);

        if(objectName.indexOf(".html")>-1)objectName=objectName.substring(0,objectName.indexOf("."))

        if(menuCurrentPath.indexOf(":"+objectName+":")==0)return false;

        if(menuCurrentPath.length>0)menuPOPDN();

        if(navigator.appVersion.indexOf("MSIE")>-1&&navigator.appVersion.indexOf("Mac")>-1)

          {// compatible mac

          if(tobj.href.indexOf(".html")==-1)tobj.href+=".html";

          return true;

          }

        this.MX=((systemIsNS)?(tobj.x):window.event.clientX-window.event.offsetX+tobj.offsetLeft);

        this.MY=((systemIsNS)?(tobj.y):window.event.clientY-window.event.offsetY+tobj.offsetTop);

        if(!systemIsNS)MSIEmeasure(tobj,this);    

//      this.MY+=menuYpopoff;

//      this.MX+=menuXpopoff;

        this.MX+=ImageWidth;

        menuPOPUP(this.MX,this.MY,objectName);

        menuTimeOut=setTimeout("menuPOPDN()",4500);

        return false;

        }


function menuPOPUP(x,y,menulist)        //*** Opens named menu at given location

        {

        var DL=eval(menulist);

        if(!DL){alert("menuPOPUP NULL "+menulist);return;}

        menuSHOW(menulist,x,y);

        if(!menuScreenWidth)

          menuScreenWidth=(systemIsNS)?document.width:document.body.offsetWidth;

        mkw=(DL.greatestCharWidth*menuCharWidth)+10;

        var atX = ((x+mkw+20)>=menuScreenWidth)?x-mkw:x;

        if(jsLAYERgetX(DL.mPANEL)!=atX)menuXY(DL,atX,y);

        }

function menuCREATE(szMlist,iLeft,iTop)

        {

        Left= 20;Top = 40;

        if(menuCREATE.arguments.length>1)Left=iLeft;

        if(menuCREATE.arguments.length>2)Top=iTop;

        Mlist=eval(szMlist);

        if(Mlist.mPANEL ==null)

          {

          Mlist.mPANEL=new jsMPANELclass(szMlist,0,"Hello","alert('hi')",Left,Top,(Mlist.greatestCharWidth+10)*menuCharWidth,menuCharHeight*Mlist.Items.length);

          Mlist.mPANEL.mParent=Mlist;

          var menuContent='';

          for(x=0;x<Mlist.Items.length;x++)

           {

           menuContent+=menuLABEL(Mlist.mPANEL,Mlist.Items[x].LABEL,false,Mlist.Items[x].SUB);

           Mlist.Items[x].RENDER=menuLABEL(Mlist.mPANEL,Mlist.Items[x].LABEL,true,Mlist.Items[x].SUB);

           }

          jsLAYERsetContent(Mlist.mPANEL,menuContent);

          }

        if(Mlist.mSELECT==null)

          {

          Mlist.mSELECT=new jsMSELECTclass(szMlist,1,"Hello","alert('hi')",Left,Top,(Mlist.greatestCharWidth+10)*menuCharWidth,menuCharHeight);

          Mlist.mSELECT.mParent=Mlist;

          jsLAYERsetContent(Mlist.mSELECT,Mlist.Items[0].RENDER);

          }

        }

function menuSHOW(szMlist,iLeft,iTop)   // SHOW the menu

        {

        Left= 20;Top = 40;

        if(menuSHOW.arguments.length>1)Left=iLeft;

        if(menuSHOW.arguments.length>2)Top=iTop;

        Mlist=eval(szMlist);

        if(Mlist.mPANEL==null)menuCREATE(szMlist,iLeft,iTop);

        if(jsLAYERgetX(Mlist.mPANEL)!=Left || jsLAYERgetY(Mlist.mPANEL)!=Top)

            {

            jsLAYERxy(Mlist.mPANEL,Left,Top)   

            jsLAYERxy(Mlist.mSELECT,Left,Top+(Mlist.EntryNum*menuCharHeight));   

            }; 

        if(menuCurrentPath.indexOf(":"+szMlist+":")<0)menuCurrentPath+=((menuCurrentPath.length)?"":":")+szMlist+":";

        jsLAYERshow(Mlist.mPANEL,true);

        jsLAYERshow(Mlist.mSELECT,true);

        }

function menuHIDE(szMlist)      //  Hides the named menu

        {

        Mlist=eval(szMlist);

        jsLAYERshow(Mlist.mSELECT,false);

        jsLAYERshow(Mlist.mPANEL,false);

        }

function menuXY(Mlist,x,y)      // Moves the referenced menu

        {

        jsLAYERxy(Mlist.mPANEL,x,y)

        jsLAYERxy(Mlist.mSELECT,x,y+(Mlist.EntryNum*menuCharHeight));

        }

function menuPOPDN(treeList)    // closes a list of menus

        {

        if(menuTimeOut)clearTimeout(menuTimeOut);

        if(menuPOPDN.arguments.length<1)treeList=menuCurrentPath;

        while(treeList.length>1)

             {          

             killboy =treeList.substring(1);

             killboy =killboy.substring(0,killboy.indexOf(":"));

             treeList=treeList.substring(killboy.length+1);

             menuHIDE(killboy);

             }

        if(menuPOPDN.arguments.length<1)menuCurrentPath="";

        };

/*

** MAIN MENU OBJECT

*/

var mSELECT=null;

function MenuList(Mlist)

        {

        this.mPANEL=null;this.mSELECT=null;

        this.Items=new Array();this.EntryNum=0;

        this.APPEND=MenuListAPPEND;

        this.greatestCharWidth=0;

        }



/*      Function        :MSIEmeasure

**      Since I have found no straight forward method of obtaining IE x,y

**      coords for the clicked link, this function recurses up the object tree

**      to measure the screen location of the <A> involved

*/

function MSIEmeasure(btobj,HB)

        {

        var tobj=btobj;

        HB.MX=tobj.offsetLeft;

        HB.MY=tobj.offsetTop;

        while(tobj.parentElement)

          {

          if(!tobj.parentElement)break;

          tobj = tobj.parentElement;

          if(tobj.tagName=="TABLE")

            {

            HB.MX+=tobj.offsetLeft;

            HB.MY+=tobj.offsetTop;

            }

          if(tobj.parentElement.tagName=="BODY")break;

          }

        return ;

        }

/****************************************

** A message window                     *

*****************************************/

var StatusMsgWin=null;

function jsMESSAGEclass(group,entry,x,y,w,h)

        {

        this.lyrName            =group+entry;

        if(!systemLayers[this.lyrName])jsLAYERcreateLayer(this,x,y,w,h,"#FFFFCC");

        jsLAYERsetHandler(this,"jsNULLvector");

        jsLAYERshow(this,true);

        this.jsLAYERobject.GROUP=group;this.jsLAYERobject.ENTRY=entry;

        }

/*

** Set the contents of the message window;

*/

function jsStatusMsg(txtMESSAGE)

        {

        if(!StatusMsgWin)

          {

          StatusMsgWin= new jsMESSAGEclass("E",1,1,1,355,100);

          jsLAYERshow(StatusMsgWin,true);

          }

        jsLAYERsetContent(StatusMsgWin,txtMESSAGE);

        }

function PreLoads(treeList)

        {

return;

        window.status="Loading ...";

        if(!document.links.length)

          {

          setTimeout("PreLoads('"+treeList+"')",500);return;    

          }

        while(treeList.length>1)

             {          

             killboy =treeList.substring(1);

             killboy =killboy.substring(0,killboy.indexOf(":"));

             treeList=treeList.substring(killboy.length+1);

             window.status="Loading "+killboy;

             menuCREATE(killboy,0,0);

             }

        window.status="";

        }

//*** End of Pull-Down-Menus Script