(function(){
	var template = '\
		<div id="shout"> \
			<div id="shout_content"> \
				<div id="shout_highlight"> \
					<a id="shout_avatar_link"><img id="shout_avatar"/></a> \
					<a id="shout_username_link"><div id="shout_username"></div></a> \
					<span id="shout_date"></span> \
					{{#authenticated}} \
					<img id="shout_troll" onclick="javascript:Shoutbox.troll($(\'#shout_username\').html());" src="/Comunidade/images/troll.gif" alt=""/> \
					{{/authenticated}} \
					<div id="shout_message"> \
						<div id="shout_message_container"></div> \
					</div> \
					<div id="shout_button" onclick="javascript:Shoutbox.toggle();" \
							onmouseover="javascript:$(\'#shout_button\').css(\'color\', \'#000000\'); $(\'#shout_plus\').attr(\'src\', \'/Comunidade/images/shout_bt_over.png\');" \
							onmouseout="javascript:$(\'#shout_button\').css(\'color\', \'#ffffff\'); $(\'#shout_plus\').attr(\'src\', \'/Comunidade/images/shout_bt.png\');">SHOUT \
							<img id="shout_plus" src="/Comunidade/images/shout_bt.png" \
										onmouseover="javascript:$(\'#shout_button\').css(\'color\', \'#000000\'); $(\'#shout_plus\').attr(\'src\', \'/Comunidade/images/shout_bt_over.png\');" \
										onmouseout="javascript:$(\'#shout_button\').css(\'color\', \'#ffffff\'); $(\'#shout_plus\').attr(\'src\', \'/Comunidade/images/shout_bt.png\');"/> \
					</div> \
				</div> \
			</div> \
		</div> \
		';
	
	var listTemplate ='\
		<div id="shoutbox_list" style="display:none;"> \
			<div id="shoutbox_close_icon" onclick="javascript:Shoutbox.toggle();"/> \
			<div id="shoutbox_history"></div> \
		</div> \
		';
	
	var smiliesTemplate = '<div id="shout_smilies"></div>';
		
	var shoutBoxTemplate = '\
		<div id="shoutbox_shout" style="display:none;"> \
			<span class="shoutbox_shout_title">ESCREVE O TEU SHOUT PARA TODOS VEREM!</span> \
				<input type="text" id="shout_input" maxlength="140" \
							onkeydown="javascript:Shoutbox.keyEvent(event.keyCode);" \/> \
				<img src="/Comunidade/images/smiley.png" id="shout_smiley" onclick="javascript:Shoutbox.toggleSmilies();"/> \
				<img id="shout_ok" src="/Comunidade/images/ok.gif"/> \
				<span id="shout_submit" class="text_button" onclick="javascript:Shoutbox.send();">OK!</span> \
			</div> \
		';
	
	var shoutTemplate = '\
		{{#shouts}} \
		<div id="shoutbox_history_entry_{{id}}" class="shoutbox_history_entry"> \
		<div class="shoutbox_history_entry_container"> \
			<a href="#/{{username}}"> \
				<img  id="shoutbox_history_entry_avatar_{{id}}" class="shoutbox_history_entry_avatar" \
						src="/userAvatar?thumb=true&width=28&height=28&user={{username}}"/> \
			</a> \
			<a href="#/{{username}}"> \
				<span id="shoutbox_history_entry_username_{{id}}" class="shoutbox_history_entry_username">{{username}}</span> \
			</a> \
			{{#authenticated}} \
			<div class="shoutbox_history_entry_troll"> \
				<img src="/Comunidade/images/troll.gif" onclick="javascript:Shoutbox.troll(\'{{username}}\');"/> \
			</div> \
			{{/authenticated}} \
			<span class="shoutbox_history_entry_date">{{date}}</span> \
			<div class="shoutbox_history_entry_shout">{{{text}}}</div> \
		</div> \
		</div> \
		{{/shouts}} \
		';
		
	var open = false;
	var maxElements = 15;
	var maxHeight;
	var timeout;
	var currentShout = null;
	
	var authenticated = (typeof(authenticatedUsername) != 'undefined' && authenticatedUsername != null && authenticatedSession != null && authenticatedUsername != 'guest') ? true : false;
	
	var list = null;
	var pendingList = null;
	
	var smiliesOpen = false;
	
	var resize = function(event){
		if(open) resizeList();
	};

	
	var onFault = function(fault){	
		showMessage(fault);
	};
	
	var getStartIndex = function(){
		var index = 0;
		
		if(list == null) return maxElements;
		
		for(var i = 0; i < maxElements; i++){
			if(list.shouts[0].id == pendingList.shouts[i].id){
				break;
			}
			
			index ++;
		}
		
		return index;
	};
	
	var loadShout = function(){
		$('#shout_username').html(currentShout.username);
		$('#shout_message_rotation').html(parseText(currentShout.text));
		$('#shout_date').html(currentShout.date);
		$('#shout_avatar').attr('src', '/userAvatar?thumb=true&width=40&height=40&user=' + currentShout.username);
		$('#shout_avatar_link').attr('href', '#/' + currentShout.username);
		$('#shout_username_link').attr('href', '#/' + currentShout.username);
		
		loadList();
	
		try{
			getMovieName('shout_message_container').drawMessage(currentShout.text);
		} catch(e){}
	};
	
	var loadList = function(){
		var index = getStartIndex();

		for(var i = maxElements - index + 1; list != null &&i <= maxElements; i++){
			$('#shoutbox_history_entry_' + list.shouts[i].id).remove();
		}
	
		var items = [];
		
		for(var i = index; pendingList != null && pendingList.shouts != null && i > 0; i--){
			var shout = pendingList.shouts[i];
			shout.authenticated = authenticated;
			shout.text = parseText(shout.text);
		
			items.push(shout);
		}
		
		Mustache.to_html(shoutTemplate, { shouts : items }, {}, function(val){
			$('#shoutbox_list').append(val);
		});
		
		list = pendingList;
		
		resizeList();
	};
	
	var resizeList = function(){
		var maxH =$(window).height() - 160 - ((authenticated) ? 60 : 0 );
		var arr = jQuery.makeArray($('.shoutbox_history_entry'));
    	arr.reverse();
    	var h = 0;
    
    	for(var i = 0; i < arr.length; i++){
    		var elem = arr[i];
    	
    		if(h + $(elem).height() <= maxH){
    			$(elem).show();
    		} else $(elem).hide();
    	
    		h +=  $(elem).height();
    	}
	};
	
	var getShouts = function(){
		$.ajax({
			url: '/Comunidade/html/ShoutBoxRequests.jsp',
			type: 'GET',
			dataType: 'json',
			data: 'action=list',
  			error: function(fault){},
			success: function(result){
				if(result.status == 1){
					currentShout = result.shouts[0];
					
					loadShout();
					
					pendingList = result;
					loadList();
				}
				else if(result.status == 0){
					showMessage(result.message);
				}
				else if(result.status == -1){
					AuthenticationPanel.load('');
					return;
				}
			}
		});
	};

	var openShoutbox = function(){
		open = true;
		
		if(authenticatedUsername)
			$('#shoutbox_shout').show();
		
		$('#shoutbox_list').show();
		
		resizeList();
	};
	
	var closeShoutbox = function(){
		open = false;
		
		if(smiliesOpen) closeSmiliesPanel();
		
		if(authenticatedUsername)
			$('#shoutbox_shout').hide();
		
		$('#shoutbox_list').hide();
	};
	
	var openSmiliesPanel = function(){
		smiliesOpen = true;
	
		$('body').append( '<div id="shout_smilies"></div>');
		
		for(var i = 0; i < smilies.elements.length; i++){
			$('#shout_smilies').append(
				'<div style="width:40px;height:20px; margin-top:15px;position:relative;display:inline;' +
									'margin-left:3px;cursor:pointer;float:left;text-align:center;overflow:visible;z-index:' + (100 - i) + ';"' +
									'onclick="javascript:Shoutbox.selectSmiley(\'' +smilies.elements[i].label.replace("'", "\\'") + '\')">' +
					'<img src="/Comunidade/images/smilies/smile_' + smilies.elements[i].suffix + '.gif" ' +
								'style="border: 0px solid #000;margin-top:-31px;margin-bottom:-6px;"' +
				'</div>'
			);
		}
	};
	
	var closeSmiliesPanel = function(){
		$('#shout_smilies').remove();
		smiliesOpen = false;
	};
	
	var loadRotation = function(){
		var flashvars = {};
		
		var params = { quality : 'high', allowfullscreen : 'false', allowscriptaccess : 'always', wmode : 'transparent', base : '.', scale : 'noScale' };
		var attributes = {id : 'shout_message_container' };

		swfobject.embedSWF('/Comunidade/swf/Scroller.swf?handler=Shoutbox.get', 'shout_message_container', '230', '20', '9.0.0', false, flashvars, params, attributes);
	};
	
	var lastShoutText = null;
	
	var S = {
		init :function(){
			if(!isIE6 && !isIE7)
				$(window).bind('resize', function(){ resize(); });
			
			Mustache.to_html(template, { authenticated : authenticated }, {}, function(val){
				$('body').append(val);
			});
			
			if(authenticated){
				Mustache.to_html(shoutBoxTemplate, {}, {}, function(val){
					$('#shout').prepend(val);
				});
			}
		
			Mustache.to_html(listTemplate, {}, {}, function(val){
				$('#shout').prepend(val);
			});
			
			loadRotation();
			
			getShouts();
		},
		toggle : function(){
			(open) ? closeShoutbox() : openShoutbox();
		},
		send : function(){
			$('#shout_input').attr("disabled", true); 
			
			closeSmiliesPanel();
			
			if($('#shout_input').val() == ''){
				 $('#shout_input').removeAttr("disabled");
				return;
			}
			
			if(lastShoutText == trim($('#shout_input').val())){
			 	$('#shout_input').removeAttr("disabled");
				return;
			}
			
			$.ajax({
				url: '/Comunidade/html/ShoutBoxRequests.jsp',
				type: 'POST',
				dataType: 'json',
				data: 'action=send&shout=' + encodeURIComponent($('#shout_input').val()),
  				error: function(fault){ showMessage('Ocorreu um erro! Tenta mais tarde.'); },
				success: function(result){
					if(result.status == 1){
						var t = trim($('#shout_input').val());
						if(t != '') lastShoutText = t; 
						
						$('#shout_input').val('');
						$('#shout_submit').hide();
						$('#shout_input').attr("disabled", true); 
						
						$('#shout_ok').fadeIn(1000, function(){
							$('#shout_ok').fadeOut(1000, function(){
								$('#shout_submit').show();
								$('#shout_input').removeAttr("disabled");
							});
						});
					} 
					else if(result.status == 0){
						showMessage(result.message);
					}
					else if(result.status == -1){
						AuthenticationPanel.load('');
					}
				}
			});
		},
		toggleSmilies : function(){
			(smiliesOpen) ? closeSmiliesPanel() : openSmiliesPanel();
		},
		selectSmiley : function(smilie){
			$('#shout_input').val($('#shout_input').val() + ' ' + smilie);
			closeSmiliesPanel();
		},
		troll : function(owner){
			$.ajax({
				url: '/Comunidade/html/ShoutBoxRequests.jsp',
				type: 'POST',
				dataType: 'json',
				data: 'action=troll' ,
  				error: function(fault){ showMessage('Ocorreu um erro! Tenta mais tarde.'); },
				success: function(result){
					var count = 0;
					
					if(result.count != null)
						count = result.count;

					if(count > 0)
						ReportApplication.load(owner, 40, -1, 4, count);
					else showMessage('N\u00E3o tens trolls para usar!');
				}
			});
		},
		get : function(){
			getShouts();
		},
		stopUpdates : function(){
			clearInterval(timeout);
		},
		keyEvent : function(code){
			if(code == 13) Shoutbox.send();
		}
	};
	
	window.Shoutbox = S;
})();


(function(){
	
	var template = '\
		<img id="community_shout_avatar" onclick="javascript:window.location = (\'/Comunidade/\' + $(\'#community_shout_username\').html());"/> \
		<div id="community_shout_username" onclick="javascript: window.location = (\'/Comunidade/\' + $(\'#community_shout_username\').html());"></div> \
		<span id="community_shout_date"></span> \
		<div id="community_shout_message"> \
			<div id="community_shout_message_container"></div> \
		</div> \
		';
	
	var timeout;
	var currentShout = null;
	
	var getShouts = function(){
		$.ajax({
			url: '/Comunidade/html/ShoutBoxRequests.jsp',
			type: 'GET',
			dataType: 'json',
			data: 'action=get',
  			error: function(fault){timeout = setTimeout(getShouts, 15000);},
			success: function(result){
				if(result.status == 1){
					currentShout = result.shout;
					
					loadShout();
				}
				
				timeout = setTimeout(getShouts, 15000);
			}
		});
	};
	
	var loadShout = function(){
		$('#community_shout_username').html(currentShout.username);
		$('#community_shout_date').html(currentShout.date);
		$('#community_shout_avatar').attr('src', '/userAvatar?thumb=true&width=40&height=40&user=' + currentShout.username);

		try{
			getMovieName('community_shout_message_container').drawMessage(currentShout.text);
		} catch(e){}
	};
	
	var loadRotation = function(){
		var flashvars = {};
		
		var params = { quality : 'high', allowfullscreen : 'false', allowscriptaccess : 'always', wmode : 'transparent', base : '.', scale : 'noScale' };
		var attributes = {id : 'community_shout_message_container' };
		
		swfobject.embedSWF('/Comunidade/swf/Scroller.swf?handler=CommunityShout.get', 'community_shout_message_container', '316', '20', '9.0.0', false, flashvars, params, attributes);
	};
	
	var C = {
		init :function(){
			Mustache.to_html(template, {}, {}, function(val){
				$('#community_shout').html(val);
			});
			
			loadRotation();
			
			getShouts();
		},
		get : function(){
			loadShout();
		}
	};
	
	window.CommunityShout = C;
})();

