home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January (DVD) / Chip_2003-01_DVD.iso / ChipCD / tema / incote / js / coolframe.js < prev    next >
Encoding:
Text File  |  2002-08-08  |  24.1 KB  |  542 lines

  1. function makePageCoords(){
  2.     this.x=0;this.x2=(bw.ns4 || bw.ns5)?innerWidth:document.body.offsetWidth-3;
  3.     this.y=0;this.y2=(bw.ns4 || bw.ns5)?innerHeight+3:document.body.offsetHeight;
  4.     this.x50=this.x2/2;    this.y50=this.y2/2;
  5.     this.x10=(this.x2*10)/100-5;this.y10=(this.y2*10)/100-5
  6.     this.x15=(this.x2*15)/100-5;this.y15=(this.y2*15)/100-5; 
  7.     return this;
  8. }
  9.  
  10. /*****************************************************************************
  11. Debugging function
  12. ******************************************************************************/
  13. function debug(txt,ev){
  14.     if(mDebugging==2) self.status=txt
  15.     else alert(txt)
  16.     if(ev) eval(ev)
  17.     return false
  18. }
  19. /********************************************************************************
  20. Checking if the values are % or not.
  21. ********************************************************************************/
  22. function cf_checkp(num,w,check){
  23.     if(num){
  24.         if(num.toString().indexOf("%")!=-1){
  25.             if(w || check && (this.frametype==2 || this.frametype==3)) num=(page.x2*parseFloat(num)/100)
  26.             else num=(page.y2*parseFloat(num)/100)
  27.         }else num=parseFloat(num)
  28.     }else num=0
  29.     return num
  30. }
  31. /*****************************************************************************
  32. General function to check if the frame exists.
  33. ******************************************************************************/
  34. function cf_checkFrame(){
  35.     if(top[this.menuFrameName]) return true
  36.     else return false
  37. }
  38. /*****************************************************************************
  39. Checking if the main frame has been scrolled or not!
  40. ******************************************************************************/
  41. function cf_checkScrolled(){
  42.     if(!top[this.menuFrameName]) return
  43.     if(bw.ns4 || bw.ns5){
  44.         this.scrolledX=top[this.menuFrameName].pageXOffset
  45.         this.scrolledY=top[this.menuFrameName].pageYOffset
  46.     }else{
  47.         this.scrolledX=top[this.menuFrameName].document.body.scrollLeft
  48.         this.scrolledY=top[this.menuFrameName].document.body.scrollTop
  49.     }
  50. }
  51. /*****************************************************************************
  52. General objects function, for frameobjects and regular objects!
  53. ******************************************************************************/
  54. function makeFObj(frame,obj,parent,topnum,subnum,sub2num,sub3num,border){
  55.     if(frame){
  56.         if(!top[frame] && mDebugging) return debug('Frame: '+frame+' doesn\'t exist'+top[frame]) 
  57.           this.evnt=bw.dom?top[frame].document.getElementById(obj):bw.ie4?top[frame].document.all[obj]:bw.ns4?eval('top.'+frame+'.document.'+obj):0;
  58.     }else{
  59.           this.evnt=bw.dom?document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval('document.'+obj):0;
  60.     }
  61.     if(mDebugging){
  62.         if(!this.evnt) return debug('There seems to be an error with this layer:\nFrame: '+frame+'\nLayer: '+obj)
  63.     }
  64.     this.css=bw.dom||bw.ie4?this.evnt.style:bw.ns4?this.evnt:0;            
  65.     this.ref=bw.dom || bw.ie4?document:bw.ns4?this.css.document:0;
  66.     this.writeIt=cf_writeIt;
  67.     this.height=bw.ns4?this.ref.height:this.evnt.offsetHeight;
  68.     this.width=bw.ns4?this.ref.width:this.evnt.offsetWidth;
  69.     this.x=(bw.ns4 || bw.ns5)? parseInt(this.css.left):this.evnt.offsetLeft;
  70.     this.y=(bw.ns4 || bw.ns5)? parseInt(this.css.top):this.evnt.offsetTop;                    
  71.     this.hideIt=cf_hideIt;    this.showIt=cf_showIt; this.clipTo=cf_clipTo;        
  72.     this.moveIt=cf_moveIt; this.bgChange=cf_bgChange;        
  73.     this.parent=parent        
  74.     if(frame && !border){
  75.         this.evnt.onmouseover=new Function(parent.name+".mmover("+subnum+","+sub2num+","+sub3num+")");
  76.         this.evnt.onmouseout=new Function(parent.name+".mmout("+subnum+","+sub2num+","+sub3num+")");
  77.     }else if(!border){
  78.         this.evnt.onmouseover=new Function(parent.name+".mover("+topnum+")");
  79.         this.evnt.onmouseout=new Function(parent.name+".mmout2()");
  80.     }
  81.     this.obj = obj + "Object";     eval(this.obj + "=this")
  82.     this.fcChange=cf_fcChange;
  83.     return this
  84. }
  85. function cf_showIt(){this.css.visibility="visible"}
  86. function cf_hideIt(){this.css.visibility="hidden"}
  87. function cf_bgChange(color){if(color){if(bw.dom || bw.ie4) this.css.backgroundColor=color
  88. else if(bw.ns4) this.css.bgColor=color}}
  89. function cf_clipTo(t,r,b,l,w){if(bw.ns4){this.css.clip.top=t;this.css.clip.right=r
  90. this.css.clip.bottom=b;this.css.clip.left=l
  91. }else{this.css.clip="rect("+t+","+r+","+b+","+l+")"; if(w){this.css.width=r; this.css.height=b}}}
  92. function cf_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x;this.css.top=this.y}
  93. function cf_place(){this.moveIt(this.pagex,this.pagey); this.showIt()}
  94. function cf_writeIt(text){if(bw.ns4){this.ref.write(text);this.ref.close()}
  95. else this.evnt.innerHTML=text}
  96. function cf_fcChange(color){
  97.     if(bw.ie4){
  98.         this.evnt.children[0].style.color=color
  99.     }else{
  100.         this.evnt.childNodes[0].style.color=color
  101.     }
  102. }
  103. /*****************************************************************************
  104. Event functions
  105. ******************************************************************************/
  106. //Mouseover on sub and sub2 menus
  107. function cf_mmover(subnum,sub2num,sub3num){
  108.     clearTimeout(this.tim)
  109.     this.over=1
  110.     if(sub3num>-1){
  111.         this.activeSub3=sub3num
  112.         this.sub3[sub3num].bgChange(this.sub3bgcoloron)
  113.         if(!bw.ns4) this.sub3[sub3num].fcChange(this.sub3hovercolor)
  114.     }else if(sub2num>-1){
  115.         if(this.activeSub2>-1) this.sub2[this.activeSub2].bgChange(this.sub2bgcoloroff)
  116.         this.activeSub2=sub2num
  117.         this.sub2[sub2num].bgChange(this.sub2bgcoloron)
  118.         if(!bw.ns4) this.sub2[sub2num].fcChange(this.sub2hovercolor)
  119.         this.showSub3(sub2num)
  120.     }else if(subnum>-1){
  121.         if(this.activeSub>-1) this.sub[this.activeSub].bgChange(this.subbgcoloroff)
  122.         if(this.activeSub2>-1) this.sub2[this.activeSub2].bgChange(this.sub2bgcoloroff)
  123.         this.activeSub=subnum
  124.         this.sub[subnum].bgChange(this.subbgcoloron)
  125.         if(!bw.ns4) this.sub[subnum].fcChange(this.subhovercolor)
  126.         this.hideSub3()
  127.         this.showSub2(subnum)
  128.     }
  129. }
  130. //Mouseout on sub and sub2 menus
  131. function cf_mmout(subnum,sub2num,sub3num){
  132.     this.tim=setTimeout(this.name+".mout()",500)
  133.     this.over=0
  134.     if(sub3num>-1){
  135.         this.sub3[sub3num].bgChange(this.sub3bgcoloroff)
  136.         if(!bw.ns4) this.sub3[sub3num].fcChange(this.sub3textcolor)
  137.     }else if(sub2num>-1){
  138.         if(this.activeTop>-1 && this.activeSub>-1 && this.mtop[this.activeTop].sub.length!=0){
  139.             if(!bw.ns4) this.sub2[sub2num].fcChange(this.sub2textcolor)
  140.             if(!this.mtop[this.activeTop].sub[this.activeSub].sub[sub2num]) return 
  141.             if(this.mtop[this.activeTop].sub[this.activeSub].sub[sub2num].sub.length==0) this.sub2[sub2num].bgChange(this.sub2bgcoloroff)
  142.         }
  143.     }else if(subnum>-1){
  144.         if(this.activeTop>-1 && this.mtop[this.activeTop].sub.length!=0){
  145.             if(!bw.ns4) this.sub[subnum].fcChange(this.subtextcolor)
  146.             if(!this.mtop[this.activeTop].sub[subnum]) return 
  147.             if(this.mtop[this.activeTop].sub[subnum].sub.length==0)    this.sub[subnum].bgChange(this.subbgcoloroff)
  148.         }
  149.     }
  150. }
  151. function cf_mmout2(name){
  152.     this.tim=setTimeout(this.name+".mout()",500)
  153.     this.over2=0
  154. }
  155. //Mouseover on the top menus
  156. function cf_mover(num){
  157.     if(!this.checkFrame() || !this.loaded) return
  158.     clearTimeout(this.tim)
  159.     if(this.activeTop>-1){
  160.         if(this.bordersize>0) this.sub.border.hideIt()
  161.         this.top[this.activeTop].bgChange(this.mainbgcoloroff)
  162.         if(!bw.ns4) this.top[this.activeTop].css.color=this.maintextcolor
  163.     }
  164.     this.activeTop=num
  165.     this.top[this.activeTop].bgChange(this.mainbgcoloron)
  166.     this.hideSub2(); this.hideSub3()
  167.     this.checkScrolled()
  168.     if(!bw.ns4) this.top[num].css.color=this.mainhovercolor
  169.     this.over2=1
  170.     ln=this.mtop[num].sub.length
  171.     for(i=0;i<this.maxsubs;i++){
  172.         if(i<ln){
  173.             this.sub[i].writeIt('<span class="clSub">'+this.mtop[num].sub[i].text+'</span>')
  174.             this.sub[i].bgChange(this.subbgcoloroff)
  175.             if(bw.ns4){
  176.                 this.sub[i].ref.captureEvents(Event.MOUSEDOWN)
  177.                 this.sub[i].ref.onmousedown=new Function(this.name+".go("+num+","+i+")")
  178.             }else this.sub[i].evnt.onclick=new Function(this.name+".go("+num+","+i+")")
  179.             this.sub[i].bgChange(this.subbgcoloroff)
  180.             this.sub[i].showIt()
  181.             if(this.frametype==0){
  182.                 x=this.subXplacement
  183.                 y=this.top[num].y + (this.subheight*i) +this.subYplacement + (this.bordersize*i)
  184.             }else if(this.frametype==1){
  185.                 x=this.framesize- this.subwidth +this.subXplacement
  186.                 y=this.top[num].y + (this.subheight*i) +this.subYplacement + (this.bordersize*i)
  187.             }else if(this.frametype==2){
  188.                 x=this.top[num].x+this.subXplacement
  189.                 y=this.subYplacement + (this.subheight*i) + (this.bordersize*i)
  190.             }else if(this.frametype==3){
  191.                 x=this.top[num].x+this.subXplacement
  192.                 y=this.framesize - ((ln-i-1)*this.subheight)-this.subheight+this.subYplacement+(this.bordersize*i)-(this.bordersize*ln)
  193.             }
  194.             if(this.pagecheck){
  195.                 if(this.frametype==2 || this.frametype==3){
  196.                     if(x+this.subwidth>page.x2) x=this.top[num].x - this.subwidth + this.top[num].width
  197.                 }
  198.             }
  199.             this.sub[i].moveIt(x+this.scrolledX,y+this.scrolledY)
  200.         }else this.sub[i].hideIt()
  201.     }
  202.     if(this.bordersize>0){
  203.         if(ln!=0){
  204.             this.sub.border.clipTo(0,this.subwidth + this.bordersize*2, this.subheight*ln + this.bordersize*(ln+1) ,0,1)
  205.             this.sub.border.moveIt(this.sub[0].x-this.bordersize, this.sub[0].y-this.bordersize)
  206.             this.sub.border.showIt()
  207.         }else this.sub.border.hideIt()
  208.     }
  209. }
  210. //Mouseout on all menus
  211. function cf_mout(){
  212.     if(!this.checkFrame() || !this.loaded || this.over) return
  213.     this.activeTop=-1
  214.     clearTimeout(this.tim)
  215.     for(i=0;i<this.top.length;i++){this.top[i].bgChange(this.mainbgcoloroff); if(!bw.ns4) this.top[i].css.color=this.maintextcolor}
  216.     for(i=0;i<this.maxsubs;i++){this.sub[i].hideIt()}
  217.     if(this.bordersize>0) this.sub.border.hideIt()
  218.     this.activeSub=-1; this.activeSub2=-1; this.activeSub2=-1
  219.     this.hideSub2(); this.hideSub3()
  220. }
  221. /*****************************************************************************
  222. Function that "resets" the object pointers when a new page loads. 
  223. Without this Explorere crashes.
  224. ******************************************************************************/
  225. function cf_refresh(){
  226.     for(i=0;i<this.maxsubs;i++){
  227.         this.sub[i]=new makeFObj(this.menuFrameName,'divSub'+i,this,-1,i,-1,-1)
  228.     }
  229.     for(i=0;i<this.maxsubs2;i++){
  230.         this.sub2[i]=new makeFObj(this.menuFrameName,'divSub2_'+i,this,-1,-1,i,-1)
  231.     }
  232.     for(i=0;i<this.maxsubs3;i++){
  233.         this.sub3[i]=new makeFObj(this.menuFrameName,'divSub3_'+i,this,-1,-1,-1,i)
  234.     }
  235.     this.loaded=true
  236.     for(i=0;i<this.mtop.length;i++){
  237.         if(this.bordersize>0) this.top[i].border.showIt()
  238.         this.top[i].showIt()
  239.     }
  240.     if(this.frametype==1){ //Right menu
  241.         this.framesize=bw.ns4||bw.ns5?top[this.menuFrameName].innerWidth+5:top[this.menuFrameName].document.body.offsetWidth-3;
  242.     }else if(this.frametype==3){ //Bottom menu
  243.         this.framesize=bw.ns4||bw.ns5?top[this.menuFrameName].innerHeight+5:top[this.menuFrameName].document.body.offsetHeight-1;
  244.     }    
  245.     if(this.bordersize>0){
  246.         this.sub.border=new makeFObj(this.menuFrameName,'divSubBorder',this,-1,-1,-1,-1,1)
  247.         this.sub2.border=new makeFObj(this.menuFrameName,'divSub2Border',this,-1,-1,-1,-1,1)
  248.         this.sub3.border=new makeFObj(this.menuFrameName,'divSub3Border',this,-1,-1,-1,-1,1)
  249.     }
  250. }
  251. /*****************************************************************************
  252. Shows and hides the sub2s
  253. ******************************************************************************/
  254. function cf_showSub2(num){
  255.     if(this.activeTop<0) return 
  256.     if(!this.mtop[this.activeTop].sub[num])return 
  257.     ln=this.mtop[this.activeTop].sub[num].sub.length
  258.     for(i=0;i<this.maxsubs2;i++){
  259.         if(i<ln){
  260.             this.sub2[i].writeIt('<span class="clSub2">'+this.mtop[this.activeTop].sub[num].sub[i].text+'</span>')
  261.             this.sub2[i].bgChange(this.sub2bgcoloroff)    
  262.             if(bw.ns4){
  263.                 this.sub2[i].ref.captureEvents(Event.MOUSEDOWN)
  264.                 this.sub2[i].ref.onmousedown=new Function(this.name+".go("+this.activeTop+","+num+","+i+")")
  265.             }else this.sub2[i].evnt.onclick=new Function(this.name+".go("+this.activeTop+","+num+","+i+")")
  266.             if(this.frametype==3) y=this.sub[num].y- ((ln-i-1)*this.sub2height)+this.sub2Yplacement+(this.bordersize*i)-(this.bordersize*ln)
  267.             else y=this.sub[num].y+(i*this.sub2height)+this.sub2Yplacement+(this.bordersize*i)
  268.             x=this.sub[num].x+this.sub2Xplacement
  269.             if(this.pagecheck){
  270.                 if(this.frametype==2 || this.frametype==3){
  271.                     if(x+this.sub2width>page.x2) x=this.sub[num].x-this.sub2Xplacement
  272.                 }
  273.             }
  274.             this.sub2[i].moveIt(x,y)
  275.             this.sub2[i].bgChange(this.sub2bgcoloroff)
  276.             this.sub2[i].showIt()
  277.         }else this.sub2[i].hideIt()
  278.     }
  279.     if(this.bordersize>0){
  280.         if(ln!=0){
  281.             this.sub2.border.clipTo(0,this.sub2width + this.bordersize*2, this.sub2height*ln + this.bordersize*(ln+1),0,1)
  282.             this.sub2.border.moveIt(this.sub2[0].x-this.bordersize, this.sub2[0].y-this.bordersize)
  283.             this.sub2.border.showIt()
  284.         }else this.sub2.border.hideIt()
  285.     }
  286. }
  287. function cf_hideSub2(num){
  288.     for(i=0;i<this.maxsubs2;i++){
  289.         this.sub2[i].hideIt()
  290.     }
  291.     if(this.bordersize>0) this.sub2.border.hideIt()
  292. }
  293. /*****************************************************************************
  294. Shows and hides the sub3s
  295. ******************************************************************************/
  296. function cf_showSub3(num){
  297.     if(this.activeTop<0 || this.activeSub<0 || this.mtop[this.activeTop].sub.length==0) return 
  298.     if(!this.mtop[this.activeTop].sub[this.activeSub].sub[num]) return 
  299.     ln=this.mtop[this.activeTop].sub[this.activeSub].sub[num].sub.length
  300.     for(i=0;i<this.maxsubs3;i++){
  301.         if(i<ln){
  302.             this.sub3[i].writeIt('<span class="clSub3">'+this.mtop[this.activeTop].sub[this.activeSub].sub[num].sub[i].text+'</span>')
  303.             this.sub3[i].bgChange(this.sub3bgcoloroff)    
  304.             if(bw.ns4){
  305.                 this.sub3[i].ref.captureEvents(Event.MOUSEDOWN)
  306.                 this.sub3[i].ref.onmousedown=new Function(this.name+".go("+this.activeTop+","+this.activeSub+","+num+","+i+")")
  307.             }else this.sub3[i].evnt.onclick=new Function(this.name+".go("+this.activeTop+","+this.activeSub+","+num+","+i+")")
  308.             if(this.frametype==3) y=this.sub2[num].y - ((ln-i-1)*this.sub3height) + this.sub3Yplacement+(this.bordersize*i)-(this.bordersize*ln)
  309.             else y=this.sub2[num].y+ (i*this.sub3height) + this.sub3Yplacement+(this.bordersize*i)
  310.             x=this.sub2[num].x+this.sub3Xplacement
  311.             if(this.pagecheck){
  312.                 if(this.frametype==2 || this.frametype==3){
  313.                     if(x+this.sub3width+10>page.x2) x=this.sub2[num].x-this.sub3Xplacement
  314.                 }
  315.             }
  316.             this.sub3[i].moveIt(x,y)
  317.             this.sub3[i].showIt()
  318.         }else this.sub3[i].hideIt()
  319.     }
  320.     if(this.bordersize>0){
  321.         if(ln!=0){
  322.             this.sub3.border.clipTo(0,this.sub3width + this.bordersize*2, this.sub3height*ln + this.bordersize*(ln+1),0,1)
  323.             this.sub3.border.moveIt(this.sub3[0].x-this.bordersize, this.sub3[0].y-this.bordersize)
  324.             this.sub3.border.showIt()
  325.         }else this.sub3.border.hideIt()
  326.     }
  327. }
  328. function cf_hideSub3(num){
  329.     for(i=0;i<this.maxsubs3;i++){
  330.         this.sub3[i].hideIt()
  331.     }
  332.     if(this.bordersize>0) this.sub3.border.hideIt()
  333. }
  334. /*****************************************************************************
  335. Sets the top menus
  336. ******************************************************************************/
  337. function cf_construct(){
  338.     this.top=new Array()
  339.     this.x=this.checkp(this.fromleft,1); this.y=this.checkp(this.fromtop)
  340.     this.pxbetween=this.checkp(this.pxbetween,0,1)
  341.     for(i=0;i<this.mtop.length;i++){
  342.         this.top[i]=new makeFObj(0,'divTop'+i,this,i,-1,-1,-1)
  343.         this.top[i].bgChange(this.mainbgcoloroff)
  344.         if(this.menuplacement!=0){
  345.             if(this.frametype==2 || this.frametype==3) this.x=this.checkp(this.menuplacement[i],0,1)
  346.             else this.y=this.checkp(this.menuplacement[i],0,1)
  347.         }
  348.         this.w=this.mtop[i].width||this.mainwidth
  349.         this.top[i].moveIt(this.x,this.y)
  350.         this.top[i].bgChange(this.mainbgcoloroff)
  351.         this.top[i].clipTo(0,this.w,this.mainheight,0,1)
  352.         this.top[i].width=this.w
  353.         if(this.bordersize>0){
  354.             this.top[i].border=new makeFObj(0,'divTop'+i+'Border',this,i,-1,-1,-1,1)
  355.             this.top[i].border.moveIt(this.x-this.bordersize,this.y-this.bordersize)
  356.             this.top[i].border.bgChange(this.bordercolor)
  357.             this.top[i].border.clipTo(0,this.w+this.bordersize*2,this.mainheight+this.bordersize*2,0,1)
  358.         }
  359.         if(bw.ns4){
  360.             this.top[i].ref.captureEvents(Event.MOUSEDOWN)
  361.             this.top[i].ref.onmousedown=new Function(this.name+".go("+i+")")
  362.         }else this.top[i].evnt.onclick=new Function(this.name+".go("+i+")")
  363.         if(this.frametype==2 || this.frametype==3) this.x+=this.w+this.pxbetween
  364.         else this.y+=this.mainheight+this.pxbetween
  365.     }
  366.     setTimeout("window.onresize=resized;",500)
  367. }
  368. /*****************************************************************************
  369. Refreshing page if it's resized! - You can disable or change this if you want.
  370. It's not 100% safe, but it should work in most frame enviroments
  371. ******************************************************************************/
  372. function resized(){
  373.     page2=new makePageCoords()
  374.     if(page2.x2!=page.x2 || page.y2!=page2.y2){
  375.         //Trapping what page that's in the frameset!
  376.         if(top[oCFMenu.menuFrameName]) murl=top[oCFMenu.menuFrameName].location.href
  377.         else murl=""
  378.         if(murl.indexOf("http://")>-1){ //if not it's a local test page
  379.             murl=murl.substr(murl.indexOf("/")+2,murl.length)
  380.             currurl=location.href
  381.             sign=currurl.indexOf("?")>-1?"&":"?"
  382.             location.href=location.href  + sign + "resizedurl=" + murl
  383.         }else location.reload()
  384.     }
  385. }
  386. /*****************************************************************************
  387. Make functions
  388. ******************************************************************************/
  389. function cf_makeTop(text,link,target,width,fc){
  390.     this.mtop[this.a]=new Array()
  391.     this.mtop[this.a].sub=new Array()
  392.     this.mtop[this.a].text=text
  393.     this.mtop[this.a].link=link
  394.     this.mtop[this.a].target=target
  395.     this.mtop[this.a].width=width
  396.     this.mtop[this.a].fc=fc
  397.     this.b=0; this.a++
  398.     if(this.bordersize>0) document.write('\n<div id="divTop'+(this.a-1)+'Border" class="clMainBorder"></div>\n')
  399.     document.write('\n<div id="divTop'+(this.a-1)+'" class="clMain">'+text+'</div>\n')
  400. }
  401. function cf_makeSub(text,link,target,fc){
  402.     this.mtop[this.a-1].sub[this.b]=new Array()
  403.     this.mtop[this.a-1].sub[this.b].sub=new Array()
  404.     this.mtop[this.a-1].sub[this.b].text=text
  405.     this.mtop[this.a-1].sub[this.b].link=link
  406.     this.mtop[this.a-1].sub[this.b].target=target
  407.     this.mtop[this.a-1].sub[this.b].fc=fc
  408.     this.c=0; this.b++
  409. }
  410. function cf_makeSub2(text,link,target,fc){
  411.     this.mtop[this.a-1].sub[this.b-1].sub[this.c]=new Array()
  412.     this.mtop[this.a-1].sub[this.b-1].sub[this.c].sub=new Array()
  413.     this.mtop[this.a-1].sub[this.b-1].sub[this.c].text=text
  414.     this.mtop[this.a-1].sub[this.b-1].sub[this.c].link=link
  415.     this.mtop[this.a-1].sub[this.b-1].sub[this.c].target=target
  416.     this.mtop[this.a-1].sub[this.b-1].sub[this.c].fc=fc
  417.     this.d=0; this.c++
  418. }
  419. function cf_makeSub3(text,link,target,fc){
  420.     this.mtop[this.a-1].sub[this.b-1].sub[this.c-1].sub[this.d]=new Array()
  421.     this.mtop[this.a-1].sub[this.b-1].sub[this.c-1].sub[this.d].text=text
  422.     this.mtop[this.a-1].sub[this.b-1].sub[this.c-1].sub[this.d].link=link
  423.     this.mtop[this.a-1].sub[this.b-1].sub[this.c-1].sub[this.d].target=target
  424.     this.mtop[this.a-1].sub[this.b-1].sub[this.c-1].sub[this.d].fc=fc
  425.     this.d++
  426. }
  427. /*****************************************************************************
  428. This function makes the string that will be written out in the main frame
  429. whenever a page loads there.
  430. ******************************************************************************/
  431. function cf_makeFrameString(){
  432.     this.subwidth=this.checkp(this.subwidth,1)
  433.     this.subheight=this.checkp(this.subheight)
  434.     this.sub2width=this.checkp(this.sub2width,1)
  435.     this.sub2height=this.checkp(this.sub2height)
  436.     this.sub3width=this.checkp(this.sub3width,1)
  437.     this.sub3height=this.checkp(this.sub3height)
  438.     sw=bw.ns4?6:3;
  439.     str='\n<style>\n'
  440.         +'SPAN.clSub{'+this.substyle+'; width:'+(this.subwidth-sw)+'; color:'+this.subtextcolor+'}\n'
  441.         +'SPAN.clSub2{'+this.sub2style+'; width:'+(this.sub2width-sw)+'; color:'+this.sub2textcolor+'}\n'
  442.         +'SPAN.clSub3{'+this.sub3style+'; width:'+(this.sub3width-sw)+'; color:'+this.sub3textcolor+'}\n'
  443.         +'DIV.clSubs{'+this.substyle+'; color:'+this.subcolor+'; cursor:hand; position:absolute; visibility:hidden; clip:rect(0,'+this.subwidth+','+this.subheight+',0); left:0; width:'+this.subwidth+'; height:'+this.subheight+'}\n'
  444.     for(i=0;i<this.maxsubs;i++){
  445.         str+='#divSub'+i+'{top:'+(this.subheight*i)+';}\n'    
  446.     }
  447.     if(this.bordersize>0){
  448.         str+='#divSubBorder{position:absolute; background-color:'+this.bordercolor+'; layer-background-color:'+this.bordercolor+'}\n'
  449.         str+='#divSub2Border{position:absolute; background-color:'+this.bordercolor+'; layer-background-color:'+this.bordercolor+'}\n'
  450.         str+='#divSub3Border{position:absolute; background-color:'+this.bordercolor+'; layer-background-color:'+this.bordercolor+'}\n'
  451.     }    
  452.     str+='DIV.clSubs3{'+this.sub3style+'; color:'+this.sub3textcolor+'; cursor:hand; position:absolute; visibility:hidden; clip:rect(0,'+this.sub3width+','+this.sub3height+',0); left:0; width:'+this.sub3width+'; height:'+this.sub3height+'}\n'
  453.     str+='DIV.clSubs2{'+this.sub2style+'; color:'+this.sub2textcolor+'; cursor:hand;position:absolute; visibility:hidden; clip:rect(0,'+this.sub2width+','+this.sub2height+',0); left:0; width:'+this.sub2width+'; height:'+this.sub2height+'}\n'
  454.         +'</style>\n\n'
  455.     this.frameString=str
  456.     str="\n\n"
  457.     if(this.bordersize>0) str+='<div id="divSubBorder"></div>\n\n'
  458.     for(i=0;i<this.maxsubs;i++){
  459.         str+='<div id="divSub'+i+'" class="clSubs"></div>\n'
  460.     }
  461.     if(this.bordersize>0) str+='<div id="divSub2Border"></div>\n\n'
  462.     for(i=0;i<this.maxsubs2;i++){
  463.         str+='<div id="divSub2_'+i+'" class="clSubs2"></div>\n'
  464.     }
  465.     if(this.bordersize>0) str+='<div id="divSub3Border"></div>\n\n'
  466.     for(i=0;i<this.maxsubs3;i++){
  467.         str+='<div id="divSub3_'+i+'" class="clSubs3"></div>\n'
  468.     }
  469.     this.frameString2=str    
  470. }
  471. /*****************************************************************************
  472. Styles for the top items
  473. ******************************************************************************/
  474. function cf_makeStyle(){
  475.     this.mainheight=this.checkp(this.mainheight)
  476.     this.mainwidth=this.checkp(this.mainwidth,1)
  477.     str='\n\n<style>\n'
  478.     str+='\tDIV.clMain{position:absolute; cursor:hand; color:'+this.maintextcolor+'; visibility:hidden; '+this.topstyle+' }\n'
  479.     if(this.bordersize>0)str+='\tDIV.clMainBorder{position:absolute; cursor:hand; visibility:hidden; '+this.topstyle+' }\n'    
  480.     str+='</style>\n\n'    
  481.     document.write(str)
  482. }
  483. /*****************************************************************************
  484. Going to another page
  485. ******************************************************************************/
  486. function cf_go(num,subnum,sub2num,sub3num){
  487.     if(sub3num>-1){
  488.         url=this.mtop[num].sub[subnum].sub[sub2num].sub[sub3num].link
  489.         target=this.mtop[num].sub[subnum].sub[sub2num].sub[sub3num].target
  490.         fc=this.mtop[num].sub[subnum].sub[sub2num].sub[sub3num].fc
  491.     }else if(sub2num>-1){
  492.         url=this.mtop[num].sub[subnum].sub[sub2num].link
  493.         target=this.mtop[num].sub[subnum].sub[sub2num].target
  494.         fc=this.mtop[num].sub[subnum].sub[sub2num].fc
  495.     }else if(subnum>-1){
  496.         url=this.mtop[num].sub[subnum].link
  497.         target=this.mtop[num].sub[subnum].target
  498.         fc=this.mtop[num].sub[subnum].fc
  499.     }else{
  500.         url=this.mtop[num].link
  501.         target=this.mtop[num].target
  502.         fc=this.mtop[num].fc
  503.     }    
  504.     if(url){
  505.         this.over=0; this.mout()
  506.         if(target=="_blank") window.open(url)
  507.         else if(target=="_top" || target=="window") top.location.href=url  
  508.         else top[target].location.href=url
  509.     }else if(fc){
  510.         eval(fc)
  511.     }
  512. }
  513.  
  514. /*****************************************************************************
  515. Making the main CoolFrame menu object
  516. ******************************************************************************/
  517. function coolFrameMenu(name){
  518.     page=new makePageCoords()
  519.     this.name=name
  520.     this.sub=new Array(); this.sub2=new Array()
  521.     this.sub3=new Array(); this.construct=cf_construct;
  522.     this.over=false; this.tim=100
  523.     this.refresh=cf_refresh;
  524.     this.checkFrame=cf_checkFrame; this.mmout2=cf_mmout2
  525.     this.mover=cf_mover; this.mout=cf_mout;
  526.     this.mmover=cf_mmover; this.mmout=cf_mmout;
  527.     this.a=0; this.b=0; this.c=0; this.d=0;
  528.     this.loaded=false; this.mtop=new Array()
  529.     this.makeTop=cf_makeTop; this.makeSub=cf_makeSub;
  530.     this.makeSub2=cf_makeSub2; this.makeSub3=cf_makeSub3;
  531.     this.showSub2=cf_showSub2; this.hideSub2=cf_hideSub2;
  532.     this.showSub3=cf_showSub3; this.hideSub3=cf_hideSub3;
  533.     this.activeTop=-1; this.activeSub=-1
  534.     this.lastSub=-1; this.frameString2=0
  535.     this.makeFrameString=cf_makeFrameString;
  536.     this.makeStyle=cf_makeStyle;
  537.     this.checkp=cf_checkp;
  538.     this.go=cf_go;
  539.     this.scrolledX=0; this.scrolledY=0
  540.     this.checkScrolled=cf_checkScrolled;
  541. }
  542.