var NaviAni = new Class({
	Implements: [Options,Events],
	options: {
		tween: {
			duration: "short",
			link: "cancel",
			property: "opacity"
		},
		fromTween: 0.6,
		toTween: 1,
		elements: null	
	},
	initialize: function(options) {
		this.setOptions(options);
		this.elements = this.options.elements;
		if(this.elements) {
			this.elements.each(function(item,index) {
				if(!item.hasClass("act")) {
					item.set("tween",this.options.tween);
					item.setStyle("opacity",this.options.fromTween);
					item.addEvents({
						"mouseenter": function() {
							item.get("tween").start(this.options.toTween);
						}.bind(this,item),
						"mouseleave": function() {
							item.get("tween").start(this.options.fromTween);
						}.bind(this,item)
					});
				}	
			}.bind(this));
		}
	}
});

var NaviSub = new Class({
	Implements: [Options,Events],
	options: {
		itemsTop: null,
		prefixTop: "top_",
		prefixSub: "sub_",
		hideDelay: 1500
	},
	initialize: function(options) {
		this.setOptions(options);
		if(this.options.itemsTop) {
			this.overDelay = Array();
			this.openedUls = Array();
			this.options.itemsTop.each(function(item,index) {
				if(item.getProperty("id")) {
					var id = item.getProperty("id").substring(this.options.prefixTop.length);
					if($(this.options.prefixSub+id) && !$(this.options.prefixSub+id).hasClass("act")) {
						var subNaviItem = $(this.options.prefixSub+id);
						subNaviItem.getFirst("ul").addEvents({
							"mouseenter": function() {
								$clear(this.overDelay[index]);
							}.bind(this,index,subNaviItem),
							"mouseleave": function() {
                                if(subNaviItem.hasClass("act")) {
									this.overDelay[index] = this.hideNavUl.delay(500,this,{subNaviItem: subNaviItem,index: index});							
                                }
							}.bind(this,index,subNaviItem)
						});
						item.addEvents({
							"mouseenter": function() {
								$clear(this.overDelay[index]);
								if(!subNaviItem.hasClass("act")) {
									this.openNavUl({ subNaviItem: subNaviItem, index: index });
								}	
							}.bind(this,subNaviItem,index),
							"mouseleave": function() {
								if(subNaviItem.hasClass("act")) {
									this.overDelay[index] = this.hideNavUl.delay(this.options.hideDelay,this,{ subNaviItem: subNaviItem,index: index });
								}	
							}.bind(this,subNaviItem,index)
						});
					}
				}
			}.bind(this));
		}	
	},
	openNavUl: function(data) {
		this.openedUls.each(function(item,index) {
			this.hideNavUl(item);
		}.bind(this));
		this.openedUls.empty();
		this.openedUls.include(data);
		data.subNaviItem.addClass("act");
		data.subNaviItem.getFirst("ul").setStyle("display","block");
	},
	hideNavUl: function(data) {
		data.subNaviItem.removeClass("act");
		data.subNaviItem.getFirst("ul").setStyle("display","none");
	} 
});

