var publicChatEventsObserver = Class.create({
	initialize: function(observer) {
		this.observer = observer;
		
		this.publicChatMessage = $('public_chat_message');
		
		this.publicChatName = $('public_chat_name').getValue();
		this.publicChatLastUpdateTime = $('public_chat_last_sync_time');
		this.publicChatHistoryWindow = $('public_chat_history_window');
		this.publicChatHistoryContainer = $('public_chat_history');
		
		this.publicChatSendMessageButton = $('public_chat_send');
		this.publicChatLoadHistory = $('load_public_chat_history');
		
		this.tpl = {};
		
		this.init();
	},
	
	init: function () {
		if (this.publicChatName) {
			// сообщим всем о том, какой публичный групповой чат у нас активен
			this.observer.fire('publicChat.setPublicGroupChat', this.publicChatName);
			
			this.publicChatSendMessageButton.observe('click', this.sendMessage.bind(this));
			this.publicChatLoadHistory.observe('click', this.loadHistory.bind(this, this.publicChatName));
			
			// слушаем событие по синку истории
			this.observer.on('publicChat.syncHistory', this.syncHistory.bind(this));

			// Отправляем по Enter, перенос строки - Control+Enter
			this.publicChatMessage.observe('keyup', function(e) {
				
				if (e.keyCode == 13 && e.ctrlKey) {
					this.publicChatMessage.value += "\n";
					return true;
				}
				if (e.keyCode == 13) {
					this.sendMessage();
					this.publicChatMessage.value = '';
					this.publicChatMessage.focus();
					return false;
				}
			}.bind(this));

		}
		
		// шаблон сообщения в хистори
		this.tpl.message = new Template(
			'<li style="padding:5px;">' +
				'<p><img height="16" width="16" src="#{avatar}" alt="#{displayName}" title="#{displayName}" class="va" /> <b><a href="http://kigol.com.br/#{from}">#{displayName}</a></b> [#{time}]</p>' +
			
			'#{message}</li>'
		);
	},

	sendMessage: function () {
		this.observer.fire(
			'publicChat.sendMessage', {
				'message': this.publicChatMessage.getValue(),
				'publicChatName': this.publicChatName
			}
		);
		this.publicChatMessage.setValue('');
	},

	loadHistory: function () {
		this.observer.fire('publicChat.testSyncHistory', {
			'publicChatName': this.publicChatName
		});
	},

	syncHistory: function (data) {
		if (data.lastMessageTime > this.publicChatLastUpdateTime.getValue()) {
			
			this.publicChatHistoryContainer.update('');
			
			data.history.each(function (item) {
				var date = new Date(item.datetime);

				if (item.from) {
					var from = item.from.stripScripts().stripTags();

					// парсим шаблон сообщения
					var tpl = this.tpl.message.evaluate({
						'time': date.getHours()+':'+date.getMinutes()+':'+date.getSeconds(),
						'displayName': data.displayNames[from],
						'avatar': data.avatars[from],
						'message':  item.body.stripScripts().stripTags(),
						'from': Strophe.getNodeFromJid(item.from)
					});
					
					Element.insert(this.publicChatHistoryContainer, tpl);
				}
			}.bind(this));
			
			this.drainPublicChatScroll();
			this.publicChatLastUpdateTime.setValue(new Date().getTime());
		}
	},
	
	drainPublicChatScroll: function () {
		this.publicChatHistoryWindow.scrollTop = this.publicChatHistoryWindow.scrollHeight;
	}
});
