var RHMenu = new Class({
	//Implements: [Log],
	menus: $empty(),
	main: $empty(),
	fade: false,
	isopen: false,
	stackCount: 0,
	oldStackCount: 0,
	docWidth: 0,
	initialize: function(element, main){
		this.menus = element;
		this.main = main;
		//this.enableLog();
		this.docWidth = window.getSize().x;
		var RHMenu = this;
		this.menus.each(function(item){
			new Element('span', {'class':'subsep'}).inject(item, 'before');
			item.addEvent('click', function(e){
				e.preventDefault();
				RHMenu.SubToggle(item);
			});
		});
		
		this.badges();
		
		this.main.getElements('li > a[href]').addEvents({
			'mousedown' : function(e){
				this.getParent('li').addClass('active');
			},
			'mouseup' : function(e){
				this.getParent('li').removeClass('active');
			},
			'mouseleave' : function(e){
				this.getParent('li').removeClass('active');
			}
		});
		
		window.addEvent('scroll',function(){
			var position = window.getScroll();

			if(position.y > 120 && !RHMenu.fade && !RHMenu.isopen){
				RHMenu.main.fade(0.5);
				RHMenu.fade = true;
			}
			else if(position.y < 120 && RHMenu.fade){
				RHMenu.main.fade(1);
				RHMenu.fade = false;
			}
		});
			
		var subResize = function(){
			var mainwidth = this.getMainWidth();//RHMenu.main.getScrollSize().x;
			var docwidth = window.getSize().x;
			var lis = this.main.getElements('li');
			
			var decrease = (this.docWidth >= docwidth);
	
			if(!decrease)
			{
				while(mainwidth < docwidth && this.stackCount > 0)
				{
//					this.setStackCount(this.stackCount - 1);
					this.setStackMenu(this.stackCount-1);
					docwidth = window.getSize().x;
					mainwidth = this.getMainWidth();
				}
			}
			
			while(mainwidth > docwidth && this.stackCount*2 < lis.length)
			{	
				this.setStackMenu(this.stackCount+1);
				docwidth = window.getSize().x;
				mainwidth = this.getMainWidth();
//				this.setStackCount(this.stackCount + 1);
			}
			
			this.docWidth = docwidth;
		};
		
		
		window.addEvent('resize', subResize.bind(this));
		this.setStackMenu(this.stackCount);
		subResize.run(null, RHMenu)
	
		this.main.addEvents({
			mouseenter: function(){
				if(RHMenu.fade){
					this.fade(1);
					RHMenu.fade = false;
				}
			},
			mouseleave: function(){
				var position = window.getScroll();
				if(position.y > 120 && !RHMenu.fade && !RHMenu.isopen){
					this.fade(0.5);
					RHMenu.fade = true;
				}
			}
		});
		
		$(document.body).addEvent('click',function(e){
			if(RHMenu.isopen && !e.target || !$(e.target).getParents().contains(this.main)){
				RHMenu.SubToggle(null);
			}
		}.bind(this));
		
	},
	getMainWidth: function()
	{
		var lis = this.main.getElements('li');
		var w = 0;
		lis.each(function(el){
			if(el.isDisplayed()){
				w += el.getStyle('width').toInt();
				w += el.getStyle('marginLeft').toInt();
			}
		});
			
		return w;
	},
	setStackCount: function(value){
		this.oldStackCount = this.stackCount;
		this.stackCount = value;
	},
	setStackMenu: function(count){
		this.setStackCount(count);
			
		var RHMenu = this;
		var lis = RHMenu.main.getElements('li');
		var stackMenu = lis[lis.length-2].getElement('dl');
		var menuLength = lis.length-2;
		var showMore = function(show){
			//lis.show('inline-block');
			if(lis[lis.length-2].isDisplayed() && !show)
			{
				for(var i = lis.length-2;  i < lis.length; i++)
				{
					lis[i].hide();
				}
			}
			else if(!lis[lis.length-2].isDisplayed() && show) {
				for(var i = lis.length-2;  i < lis.length; i++)
				{
					lis[i].show();
				}
			}
		};
		
		var makeSub = function(li){
			var aMenu = li.getElement('a').clone();
			var dtMenu = new Element('dt').grab(aMenu);
			if(li.hasClass('hot'))
			{
				li.getElement('span').clone().inject(dtMenu);
				dtMenu.addClass('hot');
			}
			if(li.getElement('dl'))
			{				
				var subMenu = li.getElement('dl').clone();
				aMenu.addClass('submenu');
				subMenu.inject(dtMenu);
				subMenu.addClass('floatLeftMenu');
				dtMenu.addEvents({
					'mouseenter': function(){
						var a = this.getElement('a');
						a.addClass('hover');
						var dl = this.getElement('dl');
						dl.setStyle('top', a.getPosition(this.getParent('dl')).y-5)
						dl.show();
					},
					'mouseleave': function(){
						this.getElement('a').removeClass('hover');
						this.getElement('dl').hide();
					}
				});
			}
			dtMenu.inject(stackMenu, 'top');
		}.bind(this);
		
		if(!count || count == 0)
		{
			stackMenu.empty();
			lis.show('inline-block');
			showMore(false);
		}
		else {
			//stackMenu.empty();
			
			showMore(true);

			var stackItems = stackMenu.getElements('dt');
			
			if(this.oldStackCount >= count)
			for(var i = (menuLength-this.oldStackCount*2);  i < (menuLength-count*2); i++)
			{
				var li = lis[i];
				if(!li)
					continue;
									
				li.show();
				
				if(li.hasClass('msep'))
					continue;
					
				stackItems[0].dispose();

			}
			else
			{
				for(var i = (menuLength-count*2);  i < (menuLength-this.oldStackCount*2); i++)
				{
					var li = lis[i];
					if(!li)
						continue;
					li.hide();
					if(li.hasClass('msep'))
						continue;
					makeSub(li);
				}
			}
		}
	},
	SubToggle: function(currentSub){
		var RHMenu = this;
		this.menus.each(function(item){
			var li = item.getParent('li');
			if(item == currentSub){
				var subMenu = item.getNext();
				subMenu.setStyle('minWidth', li.getSize().x+10);
				subMenu.toggle();
				if(subMenu.getStyle('display') == 'block')
				{
					RHMenu.main.setStyle('height', RHMenu.main.getStyle('minHeight').toInt() + subMenu.getStyle('height').toInt());
					RHMenu.isopen = true;
				}
				else
				{
					RHMenu.main.setStyle('height', 'auto');
					RHMenu.isopen = false;
				}
				li.addClass('mOpen');
				item.toggleClass('mArrowOn');
			}
			else {
				item.getNext().hide();
				li.removeClass('mOpen');
				item.removeClass('mArrowOn');
			}
			if(currentSub == null){
				RHMenu.main.setStyle('height', 'auto');
				RHMenu.isopen = false;
			}
		});
	},
	badges: function(){
		var frame = 1;
		var animation = $empty();
		
		var animate = function(){
			
			switch(frame)
			{
				case 1:
					this.setStyle('backgroundPosition', '0 0');
				break;
				
				case 2:
					this.setStyle('backgroundPosition', '-32px 0');
				break;

				case 3:
					this.setStyle('backgroundPosition', '0 -32px');
				break;
				
				case 4:
					this.setStyle('backgroundPosition', '-32px -32px');
				break;
			}
			
			 frame = (frame == 4) ? 1 : frame+1;
			
		};
		
		this.main.getElements('li.hot').each(function(elem){
			var spn = new Element('span').inject(elem, 'top');
			
			elem.addEvents({
				mouseenter: function(){
					animation = animate.periodical(25, spn);
				},
				mouseleave: function(){
					$clear(animation);
					frame = 1;
				}
			});
		});

	}
	
});

var forumUpdate = new Class({
	timeURL: 'http://rshun.hu/server_time.php',
	endTime: $empty(),
	updateText: 'Forum update in: %t',
	elapse: '10:00',
	initialize: function(ends){
		this.endTime = new Date().parse(ends);
		this.elapse = this.formatedToSeconds(this.elapse);
	},
	letsBegin: function(){
		var self = this;
		new Request({url: this.timeURL,
			onSuccess: function(text){
				var serverTime = new Date().parse(text);
				var div = new Element('div', {'styles': {
					position: 'fixed',
					bottom: 5,
					left: 5,
					color: '#FFFF00',
					fontSize: 12,
					textShadow: '#000 0 1px 1px'
				}}).inject($(document.body));
				
				(function(){
					serverTime = serverTime.increment('second', 1);
					
					if(this.endTime > serverTime)
						var remainder = serverTime.diff(this.endTime, 'second');
					else
						var remainder = 0;		
					
					if(remainder < this.elapse)
					{
						if(remainder < 5 && remainder > 0)
						{
							div.toggle();
							(function(){
								div.toggle();
							}).delay(500)
						}
						remainder = this.formatSeconds(remainder);
						
						div.set('text', this.updateText.replace('%t', remainder));
					}
				}).periodical(1000, self);
				
			}
		}).send();
	},
	formatSeconds: function(seconds)
	{
		var mins = (seconds / 60).floor()
		seconds = (seconds - mins*60);
		seconds = (seconds) < 10 ? '0' + seconds : seconds;
		return mins + ':' + seconds;
	},
	formatedToSeconds: function(formated)
	{
		formated = formated.split(':');
		var minutes = formated[0].toInt();
		var seconds = formated[1].toInt();
		seconds += minutes*60;
		return seconds;
	}
	
});

window.addEvent('domready', function (){
	setActiveSide();
	
	if($('LeftPanel'))
	$('LeftPanel').addEvent('click',function(e){
		e.stop();
		switchSide();
	});
		
	new RHMenu($$('#menu2010 span.mmore'), $('menu2010'));
	if($('mChat'))
		$('mChat').addEvent('click', function(e){
			e.preventDefault();
			window.open('http://chat.rshun.hu', '_rshunchat', 'WIDTH=700,HEIGHT=508,resizable=yes,scrollbars=no');
		});
		
	//new forumUpdate('2011-07-30 12:35').letsBegin();
});
function switchSide(){
		
		var active = getActiveStyleSheet();
		switch (active)
		{
			default:
				setActiveStyleSheet('Left');
				createCookie('panePos','Left',365);
			break;
			case 'Right':
				setActiveStyleSheet('Left');
				createCookie('panePos','Left',365);
			break;
			case 'Left':
				setActiveStyleSheet('Right');
				createCookie('panePos','Right',365);
			break;
		}
		return false;
}
function setActiveSide() {
	if(typeof readCookie != 'function')
		return false;
		
	var pos = readCookie('panePos');
	switch (pos)
	{
		case null:
		createCookie('panePos','Right',365);
		setActiveStyleSheet('Right');
		break;
		case 'Right':
		setActiveStyleSheet('Right');
		break;
		case 'Left':
		setActiveStyleSheet('Left');
		break;
	}
}
