
var opmenu = new Class({Implements:Options,
		options: {openDelay:150, closeDelay:2000, injectMains:true, cTop:-7, cLeft:-5, byRight:false },
		initialize: function(a, o){
			this.menu = a;
			this.setOptions(o);
			if (Browser.Engine.webkit){ window.addEvent('domready', this.domReady.delay(200, this)); }
			else{ window.addEvent('domready', this.domReady.bind(this)); }
		},
		domReady: function(){
			this.menu = $(this.menu);
			if(!$defined(this.menu)) return false; 
			if(this.menu.get('tag') != 'ul'){
				this.menu = this.menu.getElement('ul');
				if(!$defined(this.menu)) return false;
			}
			this.loadAssets();
		},
		loadAssets:function(){
			this.assets = new Element('div',{styles:{width:1,height:1,'position':'absolute'}}).addClass('topbox').addClass('opm').addClass('opmtop').addClass('opmbot').addClass('opmmid').inject(document.body).setStyle('display','none');
			new Element('div').inject(this.assets);
			this.prepare();
		},
		prepare:function(){
			this.holder = new Element('div',{'class':'opm'}).wraps(this.menu);
			this.sbs = new Element('div').inject(document.body);
			this.subs = [];
			this.menu.getChildren("li").each(function(li){
				var a = this.build(li).inject(this.holder);
				if (a.sub != null) a.addClass(a.hasClass('active')?'activesubs':'subs');
			},this);
			this.menu.dispose();
			this.assets.dispose();
			this.menu = this.holder;
		},
		build: function(li){
			var aa = [];
			var ul = li.getFirst("ul");
			var sub = null;
			var cn;
			var activated = false;
			if ($defined(ul)) {
				sub = new Element('div',{'class':'opmtmp','styles':{'position':'absolute','display':'none'}}).inject(this.sbs);
				new Element('div',{'class':'opmtop','html':'<div>&nbsp;</div>'}).inject(sub);
				var cn = new Element('div',{'class':'opmmid'}).inject(sub);
				cn = new Element('div').inject(cn);
				ul.getElements('li').each(function(l){
					var aa = l.getFirst("a");
					if($defined(aa) && aa.hasClass('active')) activated = true;
					if(!$defined(aa)) aa = new Element('div',{'html':l.innerHTML});
					else aa = aa.clone();
					aa.inject(cn);
				},this);
				new Element('div',{'class':'opmbot','html':'<div></div>'}).inject(sub);
				ul.dispose();
				sub.opened = false;
				sub.hold = false;
				sub.addEvent('mouseenter',function(e){sub.hold = true; }.bind(this));
				sub.addEvent('mouseleave',function(e){sub.hold = false; sub.close.delay(500); }.bind(this));
				sub.close = function(){
					if(sub.hold) return;
					sub.opened = false;
					sub.setStyles({'display':'none','z-Index':0});	
				}.bind(this);
				sub.open = function(a){
					if(sub.opened) return;
					this.subs.each(function(ss){ if(ss.opened) ss.close(); },this);
					var p = a.getCoordinates();
					p.dx = p.left + this.options.cLeft;
					p.dy = p.top + this.options.cTop;
					sub.setStyles({'display':'block','z-Index':100});
					if(this.options.byRight === true) p.dx = p.dx - sub.getSize().x + p.width;
					sub.setPosition({x:p.dx, y:p.dy});
					sub.opened = true;
					sub.close.delay(this.options.closeDelay);
				}.bind(this);
			}
			
			var a = li.getFirst("a");
			if(!$defined(a)) a = new Element('span', {'html':li.innerHTML});
			else{
				if(this.options.injectMains && sub != null) {
					var b = a.clone().inject(cn,'top');
					if(activated)b.removeClass('active');
				}	
				if(sub != null) {
					this.subs.push(sub);
					a.addEvent('mouseenter', function(e){ sub.open(a); }.bind(this));
				}
				a.sub = sub;
			}
			return a;
		}
});



