var scrollStatus=new Class
(
	{
		Implements: Options,
		
    options: 
    {
    	speed: 20,
    	parseOne: false
    },
    
		initialize: function(className,options)
		{
			this.setOptions(options);
			
			this.timer = null;
			
			$$((this.options.parseOne ? [className] : '.'+className)).each(function(item)
			{
				item.addEvents
				(
					{
						'mouseenter': function(event)
						{
							if ($defined(item.getFirst('div.status').getFirst()) && item.getFirst('div.status').getFirst().getSize().x<item.getFirst('div.status').getFirst().getFirst().getSize().x)
							{
								var scroll = function(){this.startScroll(item);};
								this.timer = scroll.delay(this.options.speed, this)
							}
						}.bind(this),
				
						'mouseleave':function(event)
						{
							if ($defined(item.getFirst('div.status').getFirst()) && item.getFirst('div.status').getFirst().getSize().x<item.getFirst('div.status').getFirst().getFirst().getSize().x)
							{
								this.stopScroll(item);
							}
						}.bind(this)
					}
				);
			}.bind(this));
		},
		
		startScroll: function(item)
		{
			var status=item.getFirst('div.status').getFirst().getFirst();
			
			var pos=status.getStyle('left').toInt();
			if (pos-1+status.getSize().x==0) status.setStyle('left','15px'); 
			else status.setStyle('left',(pos-1)+'px');
			
			var scroll = function(){this.startScroll(item)};
			this.timer = scroll.delay(this.options.speed, this)
		},
		
		stopScroll: function(item)
		{
			if ($defined(item.getFirst('div.status').getFirst()))
			{
				var status=item.getFirst('div.status').getFirst().getFirst();
			}
			else return;
			
			status.setStyle('left','0px');
			$clear(this.timer);	
		}
	}
);

var userMenu=new Class
(
	{
		Implements: Options,
		
    options: 
    {
    	overMenuClass: 'overUserMenu',
    	overMenuContainerClass: 'overUserMenuContainer',
    	delay: 100
    },
    
		initialize: function(className,options)
		{
			this.setOptions(options);
			
			this.keepMenu=false;
			this.isOnElement=false;
			
			this.menuContainer=new Element('div')
				.addClass(this.options.overMenuContainerClass)
				.inject($('pageLayout'))
				.addEvents
				({
					'mouseenter': function(event)
					{
						this.keepMenu=true;
					}.bind(this),
			
					'mouseleave': function(event)
					{
						this.keepMenu=false;
						this.menuMouseLeave.delay(this.options.delay,this,event);
					}.bind(this)
				});
			
			$$('.'+className).each(this.parseItem.bind(this));
		},
		
		parseItem: function(item)
		{
			item.addEvents
			(
				{
					'mouseenter': function(event)
					{
						this.showMenu.delay(this.options.delay,this,[item,event]);
					}.bind(this),
			
					'mouseleave': function(event)
					{
						this.hideMenu.delay(this.options.delay,this,[event]);
					}.bind(this)
				}
			);
		},
		
		showMenu: function(container,event)
		{
			this.isOnElement=true;
			
			var position=container.getPosition($('pageLayout'));
			if ($defined(container.getElement('div.'+this.options.overMenuClass))) 
			{
				this.realMenu=menu=container.getElement('div.'+this.options.overMenuClass);
				
				this.menuContainer.empty();
				this.currentMenu=this.realMenu.clone();
				
				this.menuContainer.grab(this.currentMenu).setStyles
				({
					left: position.x,
					top: position.y
				});
				
				this.parseLinks(this.currentMenu);
			}
		},
		
		hideMenu: function(event)
		{
			this.isOnElement=false;
			
			if (!this.keepMenu && $defined(this.currentMenu)) 
			{
				this.currentMenu.dispose();
			}
		},
		
		menuMouseLeave: function()
		{
			if (!this.isOnElement && $defined(this.currentMenu))
			{
				this.currentMenu.dispose();
			}
		},
		
		parseLinks: function(container)
		{
			container.getElements('a.overMenuLink').each(function(item)
			{
				item.addEvent('click',function(event)
				{
					event.stop();
					
					if (event.target.hasClass('zoomPhoto')) this.zoomPhoto(event.target);
					else if (event.target.hasClass('sendMessage')) this.sendMessage(event.target);
					//else if (event.target.hasClass('addToFriends')) this.addToFriends(event.target);
					else if (event.target.hasClass('removeFromFriends')) this.removeFromFriends(event.target);
					else if (event.target.hasClass('requestOperation')) this.requestOperation(event.target);
					else if (event.target.hasClass('addToFavorites')) this.addToFavorites(event.target);
					else if (event.target.hasClass('removeFromFavorites')) this.removeFromFavorites(event.target);
					else if (event.target.hasClass('sendWink')) this.sendWink(event.target);
					/*else if (event.target.hasClass('blockUser')) this.blockUser(event.target);
					else if (event.target.hasClass('unblockUser')) this.unblockUser(event.target);*/
				}.bind(this));
			}.bind(this));
		},
		
		zoomPhoto: function(item)
		{
			var href=item.get('href').replace('profile/id','profile/quick_view');
			SqueezeBox.fromElement(null,{handler:'iframe',size:{x:730,y:500},url:href});
		},
		
		sendMessage: function(item)
		{
			//alert(item);
		},
		
		addToFriends: function(item)
		{
			if (confirm(MooTools.lang.get('msg','addToFriendsConfirm')))
			{
				new Request.JSON
				(
					{
						url: item.get('href'),
						method: 'post',
						data: {'act':'overLinkMenuAction','token':item.get('token')},
						onSuccess: function(json)
						{
							item.removeClass('addToFriends').addClass('removeFromFriends');
							item.set('html',MooTools.lang.get('btn','removeFromFriends'));
							item.set('href',item.get('href').replace('add_to_friends','remove_from_friends'));
						}.bind(this)
					}
				).send();	
			}
		},
		
		removeFromFriends: function(item)
		{
			if (confirm(MooTools.lang.get('msg','removeFromFriendsConfirm')))
			{
				new Request.JSON
				(
					{
						url: item.get('href'),
						method: 'post',
						data: {'act':'overLinkMenuAction','token':item.get('token')},
						onSuccess: function(json)
						{
							var realItem=this.realMenu.getElement('a.removeFromFriends');
							
							if (item.hasClass('deleteWithDispose'))
							{
								if ($defined(this.currentMenu)) this.currentMenu.dispose();
								var parent=realItem.getParent().getParent().getParent().getParent().getParent();
								realItem.getParent().getParent().getParent().dispose();
								parent.fade(0.3);
							}
							else
							{
								item.removeClass('removeFromFriends').addClass('addToFriends');
								item.set('html',MooTools.lang.get('btn','addToFriends'));
								item.set('href',item.get('href').replace('remove_from_friends','add_to_friends'));
								
								realItem.removeClass('removeFromFriends').addClass('addToFriends');
								realItem.set('html',MooTools.lang.get('btn','addToFriends'));
								realItem.set('href',realItem.get('href').replace('remove_from_friends','add_to_friends'));
							}
						}.bind(this)
					}
				).send();	
			}
		},
		
		requestOperation: function(item)
		{
			new Request.JSON
			(
				{
					url: item.get('href'),
					method: 'post',
					data: {'act':'overLinkMenuAction','token':item.get('token')},
					onSuccess: function(json)
					{
						var realItem=this.realMenu.getElement('a.requestOperation');
						
						var parent=realItem.getParent().getParent().getParent().getParent().getParent();
						realItem.getParent().getParent().getParent().dispose();
						parent.fade(0.3);
						
						if ($defined(this.currentMenu)) this.currentMenu.dispose();
					}.bind(this)
				}
			).send();	
		},
		
		addToFavorites: function(item)
		{
			if (confirm(MooTools.lang.get('msg','addToFavoritesConfirm')))
			{
				new Request.JSON
				(
					{
						url: item.get('href'),
						method: 'post',
						data: {'act':'overLinkMenuAction','token':item.get('token')},
						onSuccess: function(json)
						{
							var realItem=this.realMenu.getElement('a.addToFavorites');
							
							item.removeClass('addToFavorites').addClass('removeFromFavorites');
							item.set('html',MooTools.lang.get('btn','removeFromFavorites'));
							item.set('href',item.get('href').replace('add_to_favorites','remove_from_favorites'));
							
							realItem.removeClass('addToFavorites').addClass('removeFromFavorites');
							realItem.set('html',MooTools.lang.get('btn','removeFromFavorites'));
							realItem.set('href',realItem.get('href').replace('add_to_favorites','remove_from_favorites'));
						}.bind(this)
					}
				).send();	
			}
		},
		
		removeFromFavorites: function(item)
		{
			if (confirm(MooTools.lang.get('msg','removeFromFavoritesConfirm')))
			{
				new Request.JSON
				(
					{
						url: item.get('href'),
						method: 'post',
						data: {'act':'overLinkMenuAction','token':item.get('token')},
						onSuccess: function(json)
						{
							var realItem=this.realMenu.getElement('a.removeFromFavorites');
							
							if (item.hasClass('deleteWithDispose'))
							{
								var parent=realItem.getParent().getParent().getParent().getParent().getParent();
								realItem.getParent().getParent().getParent().dispose();
								parent.fade(0.3);
							}
							else
							{
								item.removeClass('removeFromFavorites').addClass('addToFavorites');
								item.set('html',MooTools.lang.get('btn','addToFavorites'));
								item.set('href',item.get('href').replace('remove_from_favorites','add_to_favorites'));
								
								realItem.removeClass('removeFromFavorites').addClass('addToFavorites');
								realItem.set('html',MooTools.lang.get('btn','addToFavorites'));
								realItem.set('href',realItem.get('href').replace('remove_from_favorites','add_to_favorites'));
							}
						}.bind(this)
					}
				).send();	
			}
		},
		
		sendWink: function(item)
		{
			mesasge=item.hasClass('forman') ? MooTools.lang.get('msg','sendWink_man') : MooTools.lang.get('msg','sendWink_woman');
			if (confirm(mesasge))
			{
				new Request.JSON
				(
					{
						url: item.get('href'),
						method: 'post',
						data: {'act':'overLinkMenuAction','token':item.get('token')},
						onSuccess: function(json)
						{
							
						}.bind(this)
					}
				).send();	
			}
		},
		
		blockUser: function(item)
		{
			if (confirm(MooTools.lang.get('msg','addToBlockedConfirm')))
			{
				new Request.JSON
				(
					{
						url: item.get('href'),
						method: 'post',
						data: {'act':'overLinkMenuAction','token':item.get('token')},
						onSuccess: function(json)
						{
							item.removeClass('blockUser').addClass('unblockUser');
							item.set('html',MooTools.lang.get('btn','unblockUser'));
							item.set('href',item.get('href').replace('block_user','unblock_user'));
						}.bind(this)
					}
				).send();	
			}
		},
		
		unblockUser: function(item)
		{
			if (confirm(MooTools.lang.get('msg','removeFromBlockedConfirm')))
			{
				new Request.JSON
				(
					{
						url: item.get('href'),
						method: 'post',
						data: {'act':'overLinkMenuAction','token':item.get('token')},
						onSuccess: function(json)
						{
							if (item.hasClass('deleteWithDispose'))
							{
								var parent=item.getParent().getParent().getParent().getParent().getParent();
								item.getParent().getParent().getParent().dispose();
								parent.fade(0.3);
							}
							else
							{
								item.removeClass('unblockUser').addClass('blockUser');
								item.set('html',MooTools.lang.get('btn','blockUser'));
								item.set('href',item.get('href').replace('unblock_user','block_user'));
							}
						}.bind(this)
					}
				).send();	
			}
		}
	}
);		