
var menu = new Class({
	
	Implements: Options,
	
	options: {
		timeShow: 200,
		timeHide: 150
	},
	
	initialize: function(element, options){		
		this.element = $(element);
		if(!this.element){
			return;
		}
		this.setOptions(options);
		this.initMenu();
	},
	
	initMenu: function(){
		var that = this;

		var timeOut = null;
		var isSubMenuOver = false;		
		var navUL = that.element.getChildren('ul')[0];
		var navULLI = navUL.getChildren();
		var currentActive = null;		
		navULLI.each(function(li, index){			
			if(li.hasClass('current')) currentActive = li;
			var aLink = li.getFirst();		
			aLink.li = li;			
			aLink.divWrapper = li.getElement('div.wrapper');
			if(aLink.divWrapper){
				aLink.divWrapper.setStyles({
					'left': li.getCoordinates().left						
				});				
			}		
			aLink.ulContent = li.getElement('ul.submenu');					
			
			if(aLink.ulContent){				
				aLink.height = aLink.ulContent.getCoordinates().height;				
				aLink.fx = new Fx.Tween(aLink.ulContent, {
					property: 'top',
					duration: that.options.timeShow								
				}).set(-aLink.height);
				
				aLink.ulContent.addEvent('mouseenter', function(e){
					//e.stop();	
					//window.clearTimeout(timeOut);
					aLink.divWrapper.setStyle('visibility', 'visible');
					aLink.divWrapper.setStyle('zIndex', 10000);						
					aLink.li.addClass('current');					
					isSubMenuOver = true;					
				});
				aLink.ulContent.addEvent('mouseleave', function(e){
					//e.stop();					
					isSubMenuOver = false;					
					timeOut = window.setTimeout(function(){
						if(isSubMenuOver) return;
						if(aLink.ulContent){							
							aLink.fx.cancel().start(-aLink.height).chain(function(){
								aLink.divWrapper.setStyle('visibility', 'hidden');																				
							});
							aLink.divWrapper.setStyle('visibility', 'hidden');										
							aLink.divWrapper.setStyle('zIndex', 9998);																				
						}	
						if(currentActive && currentActive != aLink.li)
							aLink.li.removeClass('current');												
					}, that.options.timeHide);					
				});
				
				aLink.subULLIContent = aLink.ulContent.getChildren();
				aLink.subULLIContent.each(function(item){					
					if(item.hasClass('submenu2')){	
						item.getFirst().addEvents({
							'mouseover': function(){
								this.setStyles({
									color:'#fff',
									textDecoration:'none',
									background:'#dc7c00 url(/templates/korealife/images/ico_arrow_03.gif) 94% 50% no-repeat'
								});							
							},
							'mouseout': function(){
								timeOut = window.setTimeout(function(){
									if(item.isSubMenuOver2) return;
									this.setStyles({
										color:'',
										backgroundColor: ''
									});	
									this.removeClass('current2');
								}.bind(this), that.options.timeHide);															
							}
						});
						item.isSubMenuOver2 = false;
						item.ulContent = item.getElement('ul');						
						item.aLink = item.getFirst();
						if(item.ulContent){
							item.ulContent.ul = item.ulContent.clone().addClass('submenu2');	
							item.addEvent('mouseenter', function(e){
								e.stop();	
								if(!item.ulContent.isCreated){
									item.ulContent.isCreated = true;
									item.ulContent.ul.inject(document.body);	
								}
								item.ulContent.ul.setStyle('opacity' , 0.8);							
								item.ulContent.ul.setStyles({
									'position': 'absolute',
									'top': item.getCoordinates().top,
									'left': item.getCoordinates().left.toInt() + 210									
								});
								isSubMenuOver = true; 
								item.isSubMenuOver2 = false;
							});
							item.addEvent('mouseleave', function(e){
								timeOut = window.setTimeout(function(){
									if(item.isSubMenuOver2) return;
									item.ulContent.ul.setStyle('top', -1000);									
								}, that.options.timeHide);					
							});
							item.ulContent.ul.addEvent('mouseenter', function(e){
								e.stop();
								item.aLink.addClass('current2');	
								window.clearTimeout(timeOut);
								isSubMenuOver = true;					
								item.isSubMenuOver2 = true;					
							});
							item.ulContent.ul.addEvent('mouseleave', function(e){
								e.stop();
								item.getFirst().setStyles({
									color:'',
									backgroundColor: ''
								});								
								item.isSubMenuOver2 = false;
								isSubMenuOver = false;
								item.aLink.removeClass('current2');	
								item.ulContent.ul.setStyle('top', -1000);									
								timeOut = window.setTimeout(function(){
									if(isSubMenuOver) return;
									if(aLink.ulContent){							
										item.ulContent.ul.setStyle('top', -1000);									
										aLink.fx.cancel().start(-aLink.height).chain(function(){
											aLink.divWrapper.setStyle('visibility', 'hidden');																				
										});
										aLink.divWrapper.setStyle('visibility', 'hidden');										
										aLink.divWrapper.setStyle('zIndex', 9998);															
										
									}	
									if(currentActive && currentActive != aLink.li)
										aLink.li.removeClass('current');
								}, that.options.timeHide);					
							});
						}
					}	
					else{
						item.getFirst().addEvents({
							'mouseover': function(){
								this.setStyles({
									color:'#fff',
									background:'#dc7c00',
									textDecoration:'none'
								});							
							},
							'mouseout': function(){
								this.setStyles({
									color:'',
									background:'',
									textDecoration:''
								});							
							}
						});
					}					
				});		
				aLink.ulContent.setStyle('opacity' , 0.8);				
			}
			
			aLink.addEvent('mouseenter', function(e){
				e.stop();									
				aLink.li.addClass('current');
				if(isSubMenuOver){
					window.clearTimeout(timeOut);
				}
				if(aLink.ulContent){					
					aLink.divWrapper.setStyle('visibility', 'visible');					
					aLink.fx.cancel().start(0);
				}				
			});	
			
			aLink.addEvent('mouseleave', function(e){
				e.stop();	
				isSubMenuOver = false;	
				timeOut = window.setTimeout(function(){
					if(isSubMenuOver) return;
					if(aLink.ulContent){
						aLink.fx.cancel().start(-aLink.height);
						aLink.fx.cancel().start(-aLink.height).chain(function(){
							aLink.divWrapper.setStyle('visibility', 'hidden');																				
						});
					}
					if(currentActive && currentActive != aLink.li)
						aLink.li.removeClass('current');
				}, that.options.timeHide);
			});				
		});
	}
});	

window.addEvent('domready', function(){
	new menu('nav');
});