function HomeView()
{ 
    this.prototype = BookessBase.call(this);
    this.requirement = ['jquery', 'bookess.services'];

    var self = this;
    this.urlCalls = {};
    
    this.urlLastConnecteds = null;
    this.urlLastUpdates = null;
    this.urlSignup = null;
    this.urlHideUpdates = null;
    this.requestInterval = 5000;
    this.requestIntervalLastUpdates = 60000;
    
    this.messages =
    {
    	signupButton: 'Criar Minha Conta',
		signup: 'Cadastre-se gratuitamente em menos de 1 minuto!'
    };
    
    this.DOMTemplates =
    {
        '#connected':
         {
            '.connected-user':
             {
                fields: ['id', 'name', 'profile', 'photo', 'lastupdate', 'url'],
                attributes:
                {
    				url: {href: '{profile}', title: '{name}', rel: '{lastupdate}'},
    				photo: {src: '{photo}', alt: '{name}', title: '{name}'}
                }
             }
         },
         
         '#lastupdates':
         {
            '.update':
             {
                fields: ['id', 'name', 'profile', 'photo', 'message', 'date', 'lastupdate', 'url'],
                attributes:
                {
    				url: {href: '{profile}', title: '{name}', rel: '{lastupdate}'},
    				photo: {src: '{photo}', alt: '{name}', title: '{name}'}
                }
             }
         }
    };
    
    this.init = function()
    {
    	this.saveTemplates();
    	
    	$('#updates .close').click(function()
		{
    		self.httpRequest(self.urlHideUpdates, {id: $(this).attr('href')}, function(){});
    		$(this).parent().fadeOut('slow');
    		return false;
		});
    	
    	var $slides = $("a[rel='tour']");
    	
    	var onTourComplete = function()
	    {
	    	var index = $slides.index(this);
	    	
	    	if(index == $slides.length-1)
	    	{
	    		var $content = $('#cboxContent');
	    		var $button = $('<a />').attr({'id': 'tour-signup', 'href': self.urlSignup}).text(self.messages.signupButton).appendTo($content);
	    		var $overlay = $('<div />').attr('id', 'tour-overlay').fadeTo(0, 0).appendTo($content);
	    		var $title = $('<div />').attr('id', 'tour-title').text(self.messages.signup).fadeTo(0, 0).appendTo($content);
	    			    		
	    		var buttonAnimate = function()
	    		{
	    			$button.animate({
						right : '-=20'
					}).animate({
						right : '+=20'
					});
	    		};
	    		
	    		$overlay.animate({bottom: 0, opacity: 0.85});
	    		$title.animate({bottom: 0, opacity: 1});
	    		$button.animate({bottom : $overlay.height() / 2 - $button.height() / 2});
	    		
	    		setInterval(buttonAnimate, 3000);
	    	}
	    	else
	    	{
	    		$('#tour-signup, #tour-title, #tour-overlay').remove();
	    	}
	    };
    	
    	$slides.colorbox
		({
			transition: 'fade',
			slideshow: true,
			slideshowSpeed: 6000,
			loop: false,
			current: 'slide {current} de {total}',
			previous: 'Anterior',
			next: 'Próximo',
			close: 'Fechar',
			slideshowStart: '[ reiniciar apresentação ]',
			slideshowStop: '[ parar apresentação ]',
			onComplete: onTourComplete
		});
    	
    	setTimeout(this.checkConnectedUsers, self.requestInterval);
    	setTimeout(this.checkUpdates, self.requestInterval);
    };
    
    
   
    
   /*
    * * Check Connected Users
    * *
    *   Verifica e exibe novos usuários conectados
    */
   this.checkConnectedUsers = function()
   {
	   var last = $('#connected .users a:first').attr('rel');
	   var onRequestComplete = function(response)
	   {
		   if(response.result)
		   {
			   var data = response.data;
			   var $elm = $('#connected .users a[href="'+data.profile+'"]');
			   
			   // usuários que já estavam na lista
			   if($elm.length > 0)
			   {
				   $elm.attr('rel', data.lastlogin).parent().fadeOut('slow', function()
				   {
					   $(this).prependTo($('#connected .users')).fadeIn();
				   });
			   }
			   else
			   {
				   $elm = self.getNewObject('#connected', '.connected-user', data.id, data.name, data.profile, data.photo, data.lastlogin);
				   var $photo = $('img', $elm);
				   
				   $photo.load(function()
				   {
					   $('#connected .users img:last').fadeOut('slow', function()
					   {
						   $(this).parent().parent().remove();
						   $elm.prependTo($('#connected .users')).fadeIn('slow');
					   });
				   })
				   .attr('src', $photo.attr('src'));
	
				   $elm.hide();
			   }
		   }

		   setTimeout(self.checkConnectedUsers, self.requestInterval);
	   };
	   
	   self.httpRequest(self.urlLastConnecteds, {last: last}, onRequestComplete);	
   };
   
   /*
    * * Check Connected Users
    * *
    *   Verifica e exibe novos usuários conectados
    */
   this.checkUpdates = function(response)
   {
	   var last = parseInt($('#lastupdates .update:first').attr('id').replace(/[^0-9]+/gi, ''));
		var $lastUpdates = $('#lastupdates');

		var already = [];

		$('.photo', $lastUpdates).each(function() 
		{
			var login = $(this).attr('href').replace(/.+\/([^\/]+)\//, '$1');
			already.push(login);
		});

		var onRequestComplete = function(response) 
		{
			if (response.result) 
			{
				var data = response.data;
				var $target = $('.update a[href="' + data.profile + '"]', $lastUpdates);
				var $elm = self.getNewObject('#lastupdates', '.update', data.id, data.name, data.profile, data.photo, data.message, data.date, data.lastupdate).attr('id', 'update-'+data.id);
				
				var $wrapper = $('<div />').css({
					overflow : 'hidden',
					position : 'relative'
				});

				var $wrapperIn = $wrapper.clone();
				var $wrapperOut = $wrapper.clone();

				$wrapperIn.append($elm).prependTo($lastUpdates).css('height', 0);
				$elm.fadeTo(0, 0);
				
				$lastUpdates.css({
					height : $lastUpdates[0].offsetHeight,
					overflow : 'hidden'
				});

				var height = $elm[0].offsetHeight + parseInt($('.update', $lastUpdates).css('margin-bottom'));
				var $photo = $('img', $elm);

				$photo.load(function()
				{
					$(this).unbind('load');
					$target = $target.length > 0 ? $target.parent() : $('.update:last', $lastUpdates);

					$wrapperOut.insertBefore($target).append($target);

					$wrapperOut.animate({
						height : 0,
						opacity : 0
					}, 1000, function() {
						$(this).remove();
					});

					$wrapperIn.animate({
						height : height
					}, 1000, function()
					{
						$elm.fadeTo(1000, 1, function()
						{
							// BUG-fix: última margin-bottom não é
							// calculado na primeira vez
							$lastUpdates.css({
								height : 'auto'
							});
							$('.update:last', $lastUpdates).css('margin-bottom', 0);
							$wrapperIn.replaceWith($elm);
						});
					});

				}).attr('src', $photo.attr('src'));

				setTimeout(self.checkUpdates, self.requestIntervalLastUpdates);
			}
			else
			{
				setTimeout(self.checkUpdates, self.requestIntervalLastUpdates);
			}
		};

		self.httpRequest(self.urlLastUpdates, {
			last : last,
			'already[]' : already
		}, onRequestComplete);
	};

}
