/*********************************************************
Code Written by Tamir Mordo 
www.tetitu.co.il
no use of this code is allowed 
without written permition
from tetitu
***********************************************************/    
    
    var tetitu_menu_class = Class.create();   
    
    
    tetitu_menu_class.prototype = {   
        menuOverArray : new Array(),
        menuTimeArray : new Array(),
        ver: '0.002b',
        created:boolean = false,
        initialize: function() 
        {   
            var objBody = document.getElementsByTagName("body").item(0);
		    var menuholder= document.createElement("span");
		    menuholder.setAttribute('id','tetitumenuholder');
		    //menuholder.style.display = 'none';
		    objBody.appendChild(menuholder);
		    created = true;
		
        },
        buildmenu:function (menuitem)
        {
            
            var main = $(menuitem);
            $("tetitumenuholder").innerHTML+=(this.buildmenutable(main.identify(),"t_" + main.identify()))
        },
        menuMouseOver:function (element,depth)
        {
            
            //var direction = (depth==1)?'bl':'tr';
            if ($('tbl_' + element)!= null )
            {
                var direction  = this.getAttributeString('tbl_' + element.toString(),"direction ").toString().strip()
                var top = this.getAttributeString ('tbl_' + element.toString(),'fixtop'); 
                var left = this.getAttributeString('tbl_' + element.toString(),'fixleft');
                if (top.toString().empty()==true)top = 0;
                if (left.toString().empty()==true)left= 0;
                if (direction.empty()) direction = 'tr'
                //alert (top  + " " + left)
                this.showSubMenu(element,direction,top,left,'tbl_' + element)
                
            }
            //delete autohide()
                var mye
                var z  = element.split("_")
                var zbuilder = ""
                var zlength = z.length
                for (var i = 0 ;i< zlength ;i++)
                {
                    zbuilder  += (i==0)?"":"_"; // dont add if first
                    zbuilder  += z[i]
                    // drill down from current and change class
                    
                    if (this.menuTimeArray[zbuilder]!= undefined) window.clearTimeout(this.menuTimeArray[zbuilder])
                    
                    //$("zzz").innerHTML+=zbuilder + "<br>"
                    this.setOverClasses(zbuilder)
                    
                    
                }
        },
        setOverClasses:function (mye)
        {
            mye = $(mye)
            if (mye != null && mye != undefined)
            {
                var cl = this.getAttributeString(mye.identify(),"overclass");
                if (mye.className != cl) mye.className = cl;
            
            }
        },
        setOutClasses:function (mye)
        {
            mye = $(mye)
            if (mye != null && mye != undefined)
            {
                var cl = this.getAttributeString(mye.identify(),"oldclass");
                if (mye.className != cl) mye.className = cl;
            
            }
        
        
        },
        
    menuMouseOut:function (element,hideoverride)
    {
        // and all sones too
//            var mye    
  //          mye = $(element)
    //        if (mye != null && mye != undefined)mye.className = this.getAttributeString(mye.identify(),"oldclass");
            this.setOutClasses(element)
            var z  = element.split("_")
            var zbuilder = ""
            
            for (var i = 0 ;i< z.length;i++)
            {

            zbuilder  += (i==0)?"":"_"; 
            zbuilder  += z[i]
                if ($('tbl_' + zbuilder)!= null )
                {
                    if (this.menuTimeArray[zbuilder]!= undefined)  window.clearTimeout(this.menuTimeArray[zbuilder])
                    {
                        if (hideoverride.toString().strip().empty()) 
                        {
                            var hidetime = this.getAttributeString('tbl_' + zbuilder.toString(),"hidetime").toString()
                            if (hidetime== "") hidetime = 250
                        }
                        else
                        hidetime = hideoverride;
                        
		                this.menuTimeArray[zbuilder]= window.setTimeout('tetitu_menu.hideSubMenu("tbl_' + zbuilder.toString() + '")',hidetime);

                    
		                
	                }
		        }
            }        
    },
    hideSubMenu:function (element)
    {
    
        this.doEffect(element,"hide");
    },
    showSubMenu:function (parent,startfrom,xoffset,yoffset,whatelement)
    {
    // delete the px in ie
        this.setOverClasses(parent)
                    
        var myt
        if (isNaN(xoffset))
        {
            myt = xoffset.toString();
            if (myt.length >=3) myt = myt.substring(0,myt.length-2);
            xoffset = parseInt(myt);
        }
        if (isNaN(yoffset))
        {
            myt = yoffset.toString();
            if (myt.length >=3) myt = myt.substring(0,myt.length-2);
            yoffset = parseInt(myt);
        }
        
        var parentLocation = Element.cumulativeOffset($(parent))
        var parentDimensions = Element.getDimensions($(parent))
        
        switch (startfrom.toString().toLowerCase())
        {
            case "bl":// bottom left
                this.setlocation(whatelement,parentLocation[0]+xoffset,parseInt(parentLocation[1]) + parseInt(yoffset) + parseInt(parentDimensions.height))
                break;
            case "tr":// Top Right
                this.setlocation(whatelement,parentLocation[0] + xoffset + parentDimensions.width,parentLocation[1] + yoffset)
                break;

            case "tl":// Top Right
                this.setlocation(whatelement,parentLocation[0] + xoffset,parentLocation[1] + yoffset)
                break;

            case "br":// Top Right
                this.setlocation(whatelement,parentLocation[0] + xoffset + parentDimensions.width,parentLocation[1] + yoffset + parentDimensions.height)
                break;
                
            case "1bl":// bottom left
                $(whatelement).absolutize(); 
                $(whatelement).setStyle({left:parentLocation[0]+xoffset});
                $(whatelement).style.top({top:parentLocation[1]+yoffset + parentDimensions.height});
                break;
            case "1tr":// Top Right
                $(whatelement).absolutize(); 
                $(whatelement).setStyle({left:parentLocation[0] + xoffset + parentDimensions.width});
                $(whatelement).style.top({top:parentLocation[1] + yoffset});
                break;

            case "1tl":// Top Right
                $(whatelement).absolutize(); 
                $(whatelement).setStyle({left:parentLocation[0] + xoffset});
                $(whatelement).setStyle({top:parentLocation[1] + yoffset});
                break;

            case "1br":// Top Right
                $(whatelement).absolutize(); 
                $(whatelement).setStyle({left:parentLocation[0] + xoffset + parentDimensions.width});
                $(whatelement).setStyle({top:parentLocation[1] + yoffset + parentDimensions.height});
                break;                
        }
                $(whatelement).style.zIndex = this.getNextHighestZindex(document.body)+1;
                this.menuOverArray[$(parent).identify()] = true
                this.doEffect(whatelement,"show");
    },
    setlocation: function (whatelement,x,y)
    {
        //if ($(whatelement).getStyle("position")!= 'absolute') $(whatelement).absolutize(); // it couses width=0 and height=0
        if($(whatelement).style.position!= 'absolute') $(whatelement).style.position="absolute";
        $(whatelement).style.left= (x).toString() + "px"
        $(whatelement).style.top= (y).toString() + "px";
    },
    doEffect:function (whatelement,showhide)
    {
       
        this.clearque(whatelement )
        var extra = this.getAttributeString(whatelement,showhide + "effectex");
        if (extra == "")
            extra = "queue: {position:'end', scope: '" + whatelement + "'}"
        else
            extra += ",queue: {position:'end', scope: '" + whatelement + "'}"
        extra =("{" + extra + "}").evalJSON()
        switch (this.getAttributeString(whatelement,showhide + "effect").toString().toLowerCase())
        {
            case "appear":
                new Effect.Appear (whatelement,extra);
                break;
            case "fade":
                new Effect.Fade (whatelement,extra );
                break;
            case "puff":
                new Effect.Puff (whatelement,extra );
                break;
            case "dropout":
                new Effect.DropOut (whatelement,extra );
                break;
            case "shake":
                new Effect.Shake (whatelement,extra );
                break;                        
            case "switchoff":
                new Effect.SwitchOff (whatelement,extra );
                break;                        
             case "blinddown":
                new Effect.BlindDown (whatelement,extra );
                break; 
             case "slideup":
                new Effect.SlideUp (whatelement,extra );
                break;   
             case "slidedown":
                new Effect.SlideDown (whatelement,extra );
                break; 
             case "blindup":
                new Effect.BlindUp (whatelement,extra );
                break;                        
             case "pulsate":
                new Effect.Pulsate (whatelement,extra );
                break;  
             case "squish":
                new Effect.Squish(whatelement,extra );
                break;  
             case "fold":
                new Effect.Fold(whatelement,extra );
                break;                        
             case "grow":
                new Effect.Grow(whatelement,extra );
                break;
             case "shrink":
                new Effect.Shrink(whatelement,extra );
                break;                        
                
            default :
                if (showhide=='show')
                    $(whatelement).show()
                else
                    $(whatelement).hide()
        }
        //$(whatelement).show()
    },
    clearque:function (whatelement)
    {
       var queue = Effect.Queues.get(whatelement);
       queue.each(function(e) { e.cancel() });
    },
    buildmenutable:function (ulelementid ,identifier)
    {
    
        return this.buildtable(ulelementid ,0,identifier,0)
    },
    buildtable:function (ulelementid ,myid,identifier,depth)
    {
    
        depth++
        //if (depth==1) jsonbuilder[identifier]=""
        //jsonbuilder[identifier]+="{sun:["
        var zcount = 0
        var mytext = ""
        var mytextaddtolast = ""
        var ulelement= $(ulelementid).childElements();  // get all the li's
        if (ulelement.length>0)
        {
            for (var i=0;i<ulelement.length;i++)
            {
//            alert (ulelement[i].nodeName.toLowerCase());
                if (ulelement[i].nodeName.toLowerCase()=="li")
                {
                //check if i have another ul inside!
                // to the td i need the classname and the style
                zcount=zcount+1;
                    var z = ulelement[i].childElements();
                    if (z.length>0)
                    {
                        for (var j=0;j<z.length;j++)
                        {
                            if (Object.isElement(z[j]) && z[j].nodeName.toLowerCase()=="ul")
                            {
                               // i need recoursive
//                               jsonbuilder[identifier]+="{id:'" + identifier + "_" + myid.toString() + "_" + zcount.toString() + "'},"
                               mytextaddtolast = mytextaddtolast + this.buildtable(z[j].identify(),myid.toString() + "_" + zcount.toString() ,identifier,depth)
                            }
                            // after removing the ul i can get the content !
                        }
                    }
                    //if (jsonbuilder[identifier].endsWith(",")) jsonbuilder[identifier] = jsonbuilder[identifier].subString(0,jsonbuilder[identifier].length) ;
                        var cn  = $w(ulelement[i].className)
                        //var mouseover=""
                        //var mouseout=""
                        var classnames=""
                        var overclass = ""
                        for (var cni=0;cni< cn.length;cni++)
                        {
                           // mouseover+='$(this).addClassName("' + cn[cni] + 'over");'
                            //mouseout+='$(this).removeClassName("' + cn[cni] + 'over");'
                            overclass += cn[cni] + 'over' + ' ';
                            classnames += cn[cni] + ' ';
                        }
                        //mouseover=""
                        //mouseout=""
                        //alert (ulelement[i].getAttribute("onclick"))
                        mytext= mytext + "<tr><td  id='" + identifier.toString() + "_" + myid.toString() + "_" + zcount.toString() + "' onmouseover='tetitu_menu.menuMouseOver(this.id," + (depth+1).toString() + ");' onmouseout='tetitu_menu.menuMouseOut(this.id,\"\");' class='" + classnames + "' oldclass='" + classnames + "' overclass='" + overclass + "'>" + ulelement[i].innerHTML + "</td></tr>"
                }
            }
        }
        
        
        
        mytext =  ("<table  border='0' cellspacing='0' cellpadding='0' style='display:none;" + this.getstyleString(ulelementid) + "' class='" + $(ulelementid).classNames() + "' oldclass='" + $(ulelementid).classNames() + "' id='tbl_" + identifier + "_" + myid + "' onmouseout='tetitu_menu.menuMouseOut(\"" + identifier + "_" + myid + "\",\"\")' showeffect=\"" + this.getAttributeString(ulelementid,"showeffect") + "\" showeffectex=\"" + this.getAttributeString(ulelementid,"showeffectex") + "\" hideeffect=\"" + this.getAttributeString(ulelementid,"hideeffect") + "\" hideeffectex=\"" + this.getAttributeString(ulelementid,"hideeffectex") + "\" hidetime='" + this.getAttributeString(ulelementid,"hidetime") + "' >" + mytext + "</table>");


        $(ulelementid).remove()
//        if (jsonbuilder[identifier].endsWith(",sun:[")) 
//            jsonbuilder[identifier] = jsonbuilder[identifier].subString(0,jsonbuilder[identifier].length-5) ;
//        else
//            jsonbuilder[identifier]+="]}"
        return mytext + mytextaddtolast
    },
    getAttributeString:function (element,attribute)
    {
    var testStr = $(element).getAttribute(attribute)
        if (Object.isString(testStr) )
        {
            return testStr
        }
        else
        return ""
    
    },
 
 getNextHighestZindex:function (obj){  
 return 1050 
   var highestIndex = 0;   
   var currentIndex = 0;   
   var elArray = Array();   
   if(obj){ elArray = obj.getElementsByTagName('*'); }else{ elArray = document.getElementsByTagName('*'); }   
   for(var i=0; i < elArray.length; i++){   
      if (elArray[i].currentStyle){   
         currentIndex = parseFloat(elArray[i].currentStyle['zIndex']);   
      }else if(window.getComputedStyle){   
         currentIndex = parseFloat(document.defaultView.getComputedStyle(elArray[i],null).getPropertyValue('z-index'));   
      }   
      if(!isNaN(currentIndex) && currentIndex > highestIndex){ highestIndex = currentIndex; }   
   }   
   return(highestIndex+1);   
},
    getstyleString:function (element)
    {
    var mystyle = $(element).getAttribute("style")
    var myundefiend
        if (Object.isString(mystyle) )
        {

            return mystyle 
        }
        else
        {
            if (mystyle== myundefiend)
            return ""
            else
            {
            // its objext
                var JSONObject  = Object.toJSON(mystyle).evalJSON();
                var builder = ""
                for(key in JSONObject)
                if(!(key in Object.prototype) || JSONObject[key]!==Object.prototype[key]){
                    if (JSONObject[key].toString().strip().empty()== false)  builder+= key + ":" + JSONObject[key] + ";";
                  }

                  return builder
            }
            
        }
    }
}
    
    
    
    var tetitu_menu 
    document.observe("dom:loaded", function() {   
    tetitu_menu = new tetitu_menu_class();   
    tetitu_menu.buildmenu('mapmenu');
    tetitu_menu.buildmenu('tourmenutop');
        });  