var chatScrollValue = 999999;
var chatOffset = 0;
var activeTab = 'chat';

$(function() {
	$.fn.extend({
		scrollTo : function(elem, speed, easing) {
			return this.each(function() {
				var targetOffset = elem.offset().top;
				if (chatScrollValue >= $('#chat_block').offset().top) {
					chatScrollValue = $('#chat_block').offset().top;
					if (chatOffset > 1000000)
						chatOffset = 500000;
					chatOffset += targetOffset;
					$(this).animate({scrollTop: chatOffset}, speed, easing);
				}
			});
		},
		control : function(type) {
			var user = UserList.get($(this).attr('user_id'));
			// check type
			switch (type) {
				case 'answer': 
					$(this).click(function() {
						if (!$('#chat_text') || !user) return;
						$('#chat_text').val($('#chat_text').val()+user.username+': ');
						$('#chat_text').focus();
					});
					return;
				case 'private_answer': 
					$(this).click(function() {
						if (!$('#chat_text') || !user) return;
						$('#chat_text').val('/private_'+user.broadcast_id+' '+$('#chat_text').val());
						$('#chat_text').focus();
					});
					return;
				case 'messages': 
				case 'video': break;
				default: return;
			}

			var cur_ctl = $(this);
			$(this).click(function() {
				var user_id = cur_ctl.attr('user_id');
				var state = cur_ctl.attr('state');
				$.ajax({
					type: 'get',
					url: '/bg/bc_close.php',
					cache: false,
					data: { 
						user_id: user_id, 
						type: type, 
						action: state == 'enabled' ? 'ignore' : 'show' 
					}
				});

				var new_src = '';
				switch (type) {
					case 'messages': 
						new_src = state == 'enabled' ? '/images/lico-02.gif' : '/images/lico-01.gif'; 
						break;
					case 'video':
					default: new_src = state == 'enabled' ? '/images/kamera-02.gif' : '/images/kamera-01.gif';
				}
				var new_ph = '';
				switch (type) {
					case 'messages':
						new_ph = state == 'enabled' ? ph1 : ph2;
						break;
					case 'video':
					default: new_ph = state == 'enabled' ? ph3 : ph4;
				}

				$('img[mission='+cur_ctl.attr('mission')+'][user_id='+user_id+']').each(function() {
					$(this).attr({
						src: new_src,
						state: state == 'enabled' ? 'disabled' : 'enabled',
						alt: new_ph,
						title: new_ph
					});
				});
				$('a[mission='+cur_ctl.attr('mission')+'][user_id='+user_id+']').each(function(){
					$(this).text(new_ph);
					$(this).attr('state', state == 'enabled' ? 'disabled' : 'enabled');
				});
			});
		}
	});

	/*************** TABS ****************/
	$("[mission=btn_clear]").each(function() {
		$(this).click(function() {
			$('#chat_block').html('');
			$(this).blur();
			return false;
		});
	});
	$("[mission=btn_show_chat]").each(function() {
		$(this).css({ color: '#c5d8ec' });
		$(this).click(function() {
			activeTab = 'chat';
			$(this).css({ color: '#c5d8ec' });
			$("[mission=btn_show_contacts]").each(function() {
				$(this).css({ color: '#6699cc' });
			});
			// restore clear button decoration
			$("[mission=btn_clear]").each(function() {
				//$(this).css({ 'text-decoration': 'underline', cursor: 'pointer' });
				$(this).css({ 'display': '' });
				$(this).click(function() { 
					$('#chat_block').html('');
					return false;
				});
				$('#block_outside').scrollTo($('#chat_block > span:last'), 1);
			});
			$('#chat_block').css({ display: '' });
			$('#contacts_block').css({ display: 'none' });
			$(this).blur();
			return false;
		});
	});
	$("[mission=btn_show_contacts]").each(function() {
		$(this).click(function() {
			activeTab = 'contacts';
			$(this).css({ color: '#c5d8ec' });
			$("[mission=btn_show_chat]").each(function() {
				$(this).css({ color: '#6699cc' });
			});
			// remove clear button decoration
			$("[mission=btn_clear]").each(function() {
				//$(this).css({ 'text-decoration': 'none', cursor: 'default' });
				$(this).css({ 'display': 'none' });
				$(this).unbind();
			});
			$('#chat_block').css({ display: 'none' });
			$('#contacts_block').css({ display: '' });
			$(this).blur();
			return false;
		});
	});

	/************** BBCODES **************/
	// highlight tag
	$('[mission=btn_highlight]').each(function() {
		$(this).click(function() {
			$('#chat_text').addTag('b');
			$('#chat_text').focus();
			return false;
		});
	});
	// add link
	$('[mission=btn_add_link]').each(function() {
		$(this).click(function() {
			var link = prompt(p1, 'http://');
			if (link == 'http://' || link == '') {
				$('#chat_text').focus();
				return false;
			}
			var text = prompt(p2);
			if (text == '') text = link;
			$('#chat_text').addTag('url', text, link);
			$('#chat_text').focus();
			return false;
		});
	});
	
	// color 
	$('[mission=btn_color]').each(function() {
		$(this).click(function() {
			var color = prompt(p1, '#ff00ff');
			if (color == '') { 
				$('#chat_text').focus(); 
				return false; 
			}
			$('#chat_text').addTag('color', null, color);
			$('#chat_text').focus();
			return false;
		});
	});
	
	// send message function
	$('[mission=btn_send_message]').each(function () { 
		var send_message = function () {
			if ($.trim($('#chat_text').val()).length == 0) return;
			if ($('#chat_text').val().length > 1000)
				$('#chat_text').val($('#chat_text').val().substring(0,995) + ' [..]');
			$.ajax({
				type: 'get',
				url: '/bg/room.php', 
				cache: false,
				data: { 'act': 'push_message', 'room_id': room_id, 'message': $('#chat_text').val() },
				dataType: 'json',
				success: function(json) {
					if (json.result == 0) {
						$('#chat_text').val('');
					} else {
						$.showError(json.errors);
					}
				}
			});
		};

		$.shortcut.add("Ctrl+Enter", send_message);
		$(this).bind('click', send_message);
	});
	
	$('[mission=btn_toggle_camera]').each(function() {
		$(this).click(function() {
			$.ajax({
				type: 'get',
				url: '/bg/room.php', 
				cache: false,
				data: { 'act': 'toggle_camera', 'room_id': room_id },
				dataType: 'json',
				success: function(json) {
					if (json.result == 0) {
						window.location.reload();
					} else {
						$.showError(json.errors);
					}
				}
			});
		});
	});
	
	// the messages and 'who there' loading process  
	$(document).everyTime(3000, loadChatData);
	
});

initMessagesLoaded = false;
function loadChatData() {
	var act = initMessagesLoaded ? 'load_new_data' : 'load_init_data';
	initMessagesLoaded = true;
	$.ajax({
		type: 'get',
		url: '/bg/room.php', 
		cache: false,
		data: { 'act': act, 'room_id': room_id },
		dataType: 'json',
		success: function(json) {
			if (json.result == 0) {
				
				$('#chat_block').append(json.data.messages);

				var contactsBlock = $('#contacts_block');
				$('[binded=yes]', contactsBlock).each(function() {
					$(this).unbind();
				});
				contactsBlock.html(json.data.who_there);
				
				$('[mission=btn_answer][binded=no]').each(function() {
					$(this).click(function() {
						if (!$('#chat_text')) return;
						$('#chat_text').val($('#chat_text').val()+$(this).text()+': ');
						$('#chat_text').focus();
					});
					$(this).attr('binded', 'yes');
				});	
				$('[mission=btn_private_answer][binded=no]').each(function() {
					$(this).click(function() {
						if (!$('#chat_text')) return;
						$('#chat_text').val('/private_'+$(this).attr('userid')+' '+$('#chat_text').val());
						$('#chat_text').focus();
					});
					$(this).attr('binded', 'yes');
				});
				$('img[mission=btn_toggle_video][binded=no]').each(function() {
					var obj = $(this);
					$(this).click(function() {
						$.ajax({
							type: 'get',
							url: '/bg/room.php', 
							cache: false,
							data: { 'act': 'toggle_video_ban', 'user_id': $(this).attr('userid') },
							dataType: 'json',
							success: function(json) {
								if (json.result == 0) {
									var src = obj.attr('togglesrc');
									obj.attr('togglesrc', obj.attr('src'));
									obj.attr('src', src);
								} else {
									$.showError(json.errors);
								}
							}
						});
					});
					$(this).attr('binded', 'yes');
				});
				$('img[mission=btn_toggle_messages][binded=no]').each(function() {
					var obj = $(this);
					$(this).click(function() {
						$.ajax({
							type: 'get',
							url: '/bg/room.php', 
							cache: false,
							data: { 'act': 'toggle_messages_ban', 'user_id': $(this).attr('userid') },
							dataType: 'json',
							success: function(json) {
								if (json.result == 0) {
									var src = obj.attr('togglesrc');
									obj.attr('togglesrc', obj.attr('src'));
									obj.attr('src', src);
								} else {
									$.showError(json.errors);
								}
							}
						});
					});
					$(this).attr('binded', 'yes');
				});
				
				$('#bc_stat_how_long').text(json.data.stat.how_long);
				$('#bc_stat_spectators_count').text(json.data.stat.spectators_count);
				
				var lastMessage = $('#chat_block > span:last');
				if (lastMessage && activeTab == 'chat') 
					$('#block_outside').scrollTo(lastMessage, 1000);
				
			} else {
				$.showError(json.errors);
			}
		}
	});
}
