var RdxMenu = new Class({

    initialize: function(ul) {

		this.isIphone	= navigator.userAgent.indexOf('Mobile') != -1;

        this.dropdowns	= new Element('div',{'class':'rdxdropdowns'});

		this.counter	= 0;

		

		if (!$(ul)) return false;

		$(document.body).adopt(this.dropdowns);

		

		$each($(ul).getChildren(),function(li) {

			this.level = 1;

			li.holder = 0;

			this.scanul(li);

        },this);

    },

	

	root: new Object(),

	offsets: {

			top:0,

			left:3,

			right:3,

			top2:3,

			bottom2:3

	},

	delay: 1000,

	speed: 150,

	timer: false,

	

	scanul: function(el){

		this.counter++;

		

		var level = this.level;

		el.ul	  = el.getElement('ul');

		el.level  = level;

		el.lid	  = this.counter;

		

		if (el.ul){

			$each(el.ul.getChildren(),function(li){

				this.level = level+1;

				li.holder = el;

				this.scanul(li);

			},this);

			

			var newclass = el.className.replace('expand-open','').replace('mitemfirst','')

									   .replace('expand','').replace('active-cur','')

									   .replace('active','').replace('mitemlast','')

									   .replace(/itemnum\d+/,'');



			//module

			el.module = new Element();

			var modules = el.ul.getElement('li.modules');

			if (modules) {

				el.module = new Element('div',{'class':'modules'}).setHTML(modules.innerHTML);

				modules.remove();modules=1;

			}			

			

			/*var ulChildren = el.ul.getChildren();

			if (modules && ulChildren.length>4) {

				newclass  = 'rdxulframe-mega3' + newclass;			

			} else if (modules && ulChildren.length<=4) {

				newclass  = 'rdxulframe-mega2' + newclass;

			} else if (ulChildren.length>4) {

				newclass  = 'rdxulframe-mega' + newclass;

			}*/

			

			//mega splitting

			el.ul2 = new Element();

			if (el.ul.getChildren().length>999) {

				el.ul.addClass('ulfirst clearfix');

				el.ul2 = new Element('ul',{'class':'ulsecond clearfix'});

							

				var lastInCol = Math.ceil(ulChildren.length/2);

				

				$each(ulChildren,function(li,i){

					if (i>=lastInCol) el.ul2.adopt(li);

				},this);

			}

				

			el.div1 = new Element('div',{'class':'rdxulframe '+newclass}).injectTop(this.dropdowns);				

			el.div2 = new Element('div',{'class':'ulholder'}).adopt(new Element('div',{'class':'top'}))

															 .adopt(new Element('div',{'class':'main clearfix'}).adopt(el.ul).adopt(el.ul2).adopt(el.module))

															 .adopt(new Element('div',{'class':'bottom'}))

															 .injectInside(el.div1);

															 

			el.div2.w = el.div1.getSize().size.x;

			el.div2.h = el.div1.getSize().size.y;	

			

			if (el.level == 1 ) {

				el.div2.fx = new Fx.Style(el.div2, 'marginTop',{duration: this.speed}).set(-el.div2.h);

			} else {

				el.div2.fx = new Fx.Style(el.div2, 'marginLeft',{duration: this.speed}).set(-el.div2.w);

			}

				

			el.div2.fx.addEvent('onComplete',function(){

				if ((el.level==1 && el.div2.getStyle('marginTop') != '0px') || (el.level!=1 && el.div2.getStyle('marginLeft') != '0px')) {

					el.div1.setStyle('left', '-999em');

				}

            });				



			el.div2.addEvent('mouseleave',function(){this.hide(el,true)}.bind(this));

			el.div2.addEvent('mouseenter',function(){this.timer = $clear(this.timer)}.bind(this));

		}

		

		el.addEvent('mouseenter',function(){this.show(el);}.bind(this));

		if (el.level == 1 && el.div1)

			el.addEvent('mouseleave',function(){this.hide(el,true);}.bind(this));				

	},

	

	show: function(li){

		if(this.timer)

			this.timer = $clear(this.timer);

		if (this.root[li.level] && this.root[li.level].lid != li.lid)

			this.hide(this.root[li.level],false);

		this.root[li.level] = li;

		if (!li.size)

			li.size = li.getSize().size;

		if (!li.hasClass('hover') && li.div1) {

			li.addClass('hover');

		} else {

			return;

		}

			

		if (li.div1) {

			var w = window.getSize();

			if (li.level == 1) {

				var leftpos = li.getLeft()-this.offsets.left;

				var toppos  = li.getTop()+li.size.y;

				var start	= -li.div2.h;

				if ((w.size.x-li.div2.w-leftpos)<0) {

					var leftpos = w.size.x-li.div2.w;

				}

			} else {

				var toppos  = li.getTop()-this.offsets.top2;

				var leftpos = li.getLeft()+li.size.x-this.offsets.left;

				var start	= -li.div2.w;



				if ((w.size.x-li.div2.w-leftpos)<0) {

					var leftpos = li.getLeft()-li.div2.w+this.offsets.right;

					var start	= li.div2.w;

				}

				

				if ((w.size.y+w.scroll.y-toppos-li.div2.h)<0)

					var toppos  = li.getTop()+li.size.y-li.div2.h+this.offsets.bottom2;

			}

			li.div2.fx.stop();

			li.div2.fx.set(start);

			li.div1.setStyles({'left':leftpos,'top':toppos});			

			li.div2.fx.start(0);

		}	

	},

	

	hide: function(li,delay){

		if (delay) {

			this.timer = this.hideElements.delay(this.delay,this);

		} else {

			this.hideElement(li);

			if (this.root[li.level+1]) {

				var level = li.level+1;

				while (this.root[level]) {

					this.hideElement(this.root[level]);

					level++;

					if(level>10) break; 					

				}			

			}

		}

	},

	

	hideElements: function(){

		$each(this.root,function(el){

			if (el.div1) this.hideElement(el);

		},this);		

	},



	hideElement: function(el){

		if (el.div1) {

			var coord = -el.div2.h;

			if (el.level != 1)

				coord = (el.div1.getLeft() < el.getLeft())?el.div2.w:-el.div2.w;

				

			el.div2.fx.stop();				

			el.div2.fx.start(coord);

		}

		el.removeClass('hover');				

	}	

	

});

window.addEvent("domready",function(){

	new RdxMenu('menu');

	//var wrh = $('wrapper').getSize().size.y;

	//var wh = window.getHeight();

	//if (wrh<wh) $('wrapper').setStyle('height',wh);

	

});

