// SLIDING MENU
// (c) Kruglov S.A. 2003, 2004
// www.kruglov.ru

// requires kmenu.js, klayers.js

// class kslide //////////////////////////////////////////////////////////////////////

function kslide(argv){
	this.menu=new kmenu(argv, this)

	var buffer=[]
	this.show=function(start){
		if(!start) start=0
		var level=this.items[start].level
		var i
		var preloaderbuffer=[]
		var parent=-1
		var menuN=this.number
		if(start==0){
			buffer=[]
			preloaderbuffer=[]
			document.write("<div id='k_menu_preloader_"+menuN+"' style='position:absolute;top:0px;left:0px;width:1px;height:1px;overflow:hidden;visibility:visible'>PRELOADING!!!...</div>")

			var d_c="cursor:pointer;cursor:hand;" // default cursor

			this.menu_styles=[]
			this.item_styles=[]
			this.max_menu_style_level=0
			this.max_item_style_level=0
			
			var sep=["style","item"]
			var a,b
			for(a in this.attr){
				for(b in sep){
					if(a.indexOf('style')>0 && a.indexOf('level')==0 && (a.indexOf(sep[b])==6||a.indexOf(sep[b])==7)){
						var lvl=1*(a.charAt(5)+(!isNaN(a.charAt(6))?a.charAt(6):''))
						if(sep[b]=="item"){
							this.item_styles[lvl]=true
							if(lvl>this.max_item_style_level) this.max_item_style_level=lvl
						}else{
							this.menu_styles[lvl]=true
							if(lvl>this.max_menu_style_level) this.max_menu_style_level=lvl
						}
						
					}
				}
			}
			//menuitems styles
			var j
			var last=0
			var i_s=""
			var i_hc_s=""
			var i_h_s=""
			var i_hc_o_s=""
			var i_hc_h_s=""
			var i_hc_o_h_s=""
			var i_c_s=""
			var i_c_hc_s=""
			var i_cs_s=""

			for(j=1;j<=this.max_item_style_level;j++){
				if(this.item_styles[j]){
					last=j
				}
				i_s+=		phpstring(this.attr["level"+last+"itemstyle"])+";"
				i_h_s=		phpstring(this.attr["level"+last+"itemhoverstyle"])+";"
				i_hc_s=	phpstring(this.attr["level"+last+"itemhaschildrenstyle"])+";"
				i_hc_o_s=	phpstring(this.attr["level"+last+"itemhaschildrenopenstyle"])+";"
				i_hc_h_s=	phpstring(this.attr["level"+last+"itemhaschildrenhoverstyle"])+";"
				i_hc_o_h_s=phpstring(this.attr["level"+last+"itemhaschildrenopenhoverstyle"])+";"
				i_c_s=		phpstring(this.attr["level"+last+"itemcurrentstyle"])+";"

				buffer.push("<style>.level"+j+ "_item_"+this.number+"{"+d_c+i_s+"}</style>")
				buffer.push("<style>.level"+j+ "_item_current_"+this.number+"{"+d_c+i_s+i_c_s+"}</style>")
				buffer.push("<style>.level"+j+ "_item_haschildren_"+this.number+"{"+d_c+i_s+i_hc_s+"}</style>")
				buffer.push("<style>.level"+j+ "_item_haschildren_open_"+this.number+"{"+d_c+i_s+i_hc_s+i_hc_o_s+"}</style>")
				buffer.push("<style>.level"+j+ "_item_hover_"+this.number+"{"+d_c+i_s+i_h_s+"}</style>")
				buffer.push("<style>.level"+j+ "_item_haschildren_hover_"+this.number+"{"+d_c+i_s+i_hc_s+i_h_s+i_hc_h_s+"}</style>")
				buffer.push("<style>.level"+j+ "_item_haschildren_open_hover_"+this.number+"{"+d_c+i_s+i_hc_s+i_h_s+i_hc_h_s+i_hc_o_h_s+"}</style>")

				preloaderbuffer.push("<div class=level"+j+"_item_"+this.number+">&nbsp;</div>")
				preloaderbuffer.push("<div class=level"+j+"_item_current_"+this.number+">&nbsp;</div>")
				preloaderbuffer.push("<div class=level"+j+"_item_haschildren_"+this.number+">&nbsp;</div>")
				preloaderbuffer.push("<div class=level"+j+"_item_haschildren_open_"+this.number+">&nbsp;</div>")
				preloaderbuffer.push("<div class=level"+j+"_item_hover_"+this.number+">&nbsp;</div>")
				preloaderbuffer.push("<div class=level"+j+"_item_haschildren_hover_"+this.number+">&nbsp;</div>")
				preloaderbuffer.push("<div class=level"+j+"_item_haschildren_open_hover_"+this.number+">&nbsp;</div>")

				if(isDOM) layer('k_menu_preloader_'+menuN).object.innerHTML=preloaderbuffer.join('')
			}
			//submenus styles
			last=0
			for(j=2;j<=this.max_menu_style_level;j++){
				if(this.menu_styles[j]){
					last=j
				}
				buffer.push("<style>.level"+j+"_"+this.number+"{"+phpstring(this.attr["level"+last+"style"])+"}</style>")
			}
			buffer.push("<div class=menu style='"+this.attr.menustyle+"'>")
		}

		if(level>1){
			parent=start-1
			buffer.push("<div class='k_slidemenu_submenu' "+((this.items[start-1].opened || this.attr.opencurrent && this.items[start-1].currentsection)?(isMSIE?"style='height:0px'":""):"style='display:none'")+" id='k_submenu_"+this.number+"_"+parent+"'><table style='width:100%' cellspacing=0 cellpadding=0 border=0 id='k_submenu_"+this.number+"_"+parent+"_content'><tr><td><div class='level"+((level>this.max_menu_style_level)?this.max_menu_style_level:level)+"_"+this.number+"'>")

		}

		for(i=start; i < this.items.length; i++){
			var it=this.items[i]
			it.open=this.attr.opencurrent && it.currentsection || it.opened
			if(it.level>level){
				i=this.show(i)
			}else if(it.level<level){
				break;
			}else{
				it.parent=parent

				it.closing=null
				it.opening=null

				buffer.push("<div id='kmenuitem_"+this.number+"_"+i+"' class='"+this.getclassname_item(i)+"' ")

				if(!it.current || !this.attr.linkfromcurrent){
					buffer.push("onmouseover='kmenus["+this.number+"].mouseover_item(\""+it.id+"\")' ")
					buffer.push("onmouseout='kmenus["+this.number+"].mouseout_item(\""+it.id+"\")' ")
				}

				buffer.push("onclick='kmenus["+this.number+"].click_item(\""+it.id+"\");return false' ")
				buffer.push("onselectstart='return false'>")

				buffer.push(phpstring((level==1)?this.attr.menuitembefore:this.attr.submenuitembefore)+ it.title+phpstring((level==1)?this.attr.menuitemafter:this.attr.submenuitemafter))

				buffer.push("</div>")
				
				buffer.push(phpstring((level==1)?this.attr.menumedium:this.attr.submenumedium))
			}
		}
		
		if(level>1) buffer.push("</div></td></tr></table></div>")
		
		if(start==0){
			document.write(buffer.join('\n')+"</div>")
			
		}
		return i-1;
	}

	this.getclassname_item=function(n){
		var it=this.items[n]
		var level=it.level
		return "level"+((level>this.max_item_style_level)?this.max_item_style_level:level)+"_item_"+(it.current?"current_":"")+(it.haschildren?"haschildren_":"")+((it.open && it.haschildren)?"open_":"")+((it.hover)?"hover_":"")+this.number
	}

	this.updatestyle_item=function(n){
		layer("kmenuitem_"+this.number+"_"+n).object.className=this.getclassname_item(n)
	}

	this.mouseover_item=function(n){
		n=this.id_to_items[n]
		var it=this.items[n]
		it.hover=true
		this.updatestyle_item(n)
		window.status=phpstring(it.href)
	}

	this.mouseout_item=function(n){
		n=this.id_to_items[n]
		var it=this.items[n]
		it.hover=false
		this.updatestyle_item(n)
		window.status=""
	}


	this.click_item=function(n){
		n=this.id_to_items[n]
		var it=this.items[n]
		if(!it.haschildren){
			var target=this.attr.target
			if(it.target && it.target.toLowerCase()!="_self"){
				target=it.target
			}else{
				target=''
			}
			if(!this.attr.linkfromcurrent || !it.current){
				if(target){
					if(top.frames && top.frames[target]){
						top.frames[target].location.href=this.items[n].href				
					}else{
						window.open(it.href, target)
					}
				}else{
					window.location.href=it.href
				}
			}
		}else{
			if(it.open){
				this.close_submenu(n)
			}else{
				this.open_submenu(n)
			}
		}
	}
	
	this.open_submenu=function(n,y){
		var it=this.items[n]
		
		if(!it.haschildren) return
		it.open=true
		this.updatestyle_item(n)
//alert(n)
		var l=layer("k_submenu_"+this.number+"_"+n)
		var ll=layer("k_submenu_"+this.number+"_"+n+"_content")

		if(!y || y<=0){
			l.setHeight(y=1)
			l.style.overflow='hidden'
			l.style.display=''

			if(this.attr.onlyone){ // если держать открытым одну линию пунктов
				// close open menuitem

				for(i=0;i<this.items.length;i++){
					if(i!=n && this.items[i].open && this.items[i].level>=this.items[n].level){
						this.close_submenu(i)
						//break
					}
				}
			}
		}else{
			if(y>ll.getHeight()){
				// кончили ползать.
				l.style.overflow='visible'
				if(isMozilla) l.style.height='' // Mozilla sux

				return
			}
			l.setHeight(y)
		}
		setTimeout("kmenus["+this.number+"].open_submenu("+n+","+(y+phpnumber(this.attr.step))+")",this.attr.delay);
	}

	this.close_submenu=function(n,y){
		var it=this.items[n]
		if(it.opened) return
		if(!it.haschildren) return
		it.open=false
		this.updatestyle_item(n)

		var l=layer("k_submenu_"+this.number+"_"+n)
		var ll=layer("k_submenu_"+this.number+"_"+n+"_content")

		if(''+y=='undefined'){
			l.setHeight(y=ll.getHeight())
			l.style.overflow='hidden'
		}

		if(y<=0){
			l.style.display='none'
			if(this.attr.onlyone){ // если держать открытым одну линию пунктов
				for(i=n+1;i<this.items.length && this.items[i].level>this.items[n].level;i++){
					this.close_submenu(i)
				}
			}
		}else{
			l.setHeight(y)
			setTimeout("kmenus["+this.number+"].close_submenu("+n+","+(y-this.attr.step)+")",this.attr.delay);
		}
	}
}
