var oldResults = Array();
var searchUpdateTimer = null;
var searchUpdatePeriod = 10000;
var chatStatusUpdateTime  = null;
var chatStatusUpdatePeriod = 60000;
var postedCache = Array();

var meReplyOnly = false;
var channelSettingsOpened = false;
var activeOpened = false;

var maxSearchPerPage = 25;
var currentSearchPerPage = 0;

function updateChannel() {
	makeSearchRequest(currentchannel.q, displayChannelData);
}

function makeSearchRequest(q, func) {
	$("#contentTitle").html("<a href='' onclick='updateChannel();return false;'>refresh</a> "+ (searchUpdatePeriod/1000) + " sec");
	clearTimeout(searchUpdateTimer);
	// alert(addTagSigns(q));
	q = addTagSignsSpaces(q);
	$.ajax({
		dataType: "jsonp",
		url: "http://search.twitter.com/search.json",
		data: {
				"q":q,
				"rpp":50
				},
		success: function (data, textStatus) {
						// try {
							results = data["results"];
							func(results);
							$('.statusesLoader').hide();
							$('.contBlock').show();
						/*
						 * } catch(e) { alert("Wrong result"); }
						 */
					searchUpdateTimer = setTimeout("updateChannel();", searchUpdatePeriod);
					}
			
	});
	$("#search_query").text(q);
}

function createStatusData(item) {
	var elem = $("#clone_status").clone();
	elem.find(".set_tweet_id").text(item["id"]);
	elem.find(".set_status_image").attr("src", item["profile_image_url"]);
	var txtstat = elem.find(".set_status_text");
	txtstat.html(item["text"].links().user().hashtags());
	if (authenticatedUser != '') {
		var reg = RegExp('@'+ authenticatedUser);
		if (item['text'].search(reg,'i')!=-1)
		{	
			elem.attr('merep','1');
		} else {
			elem.attr('merep','0');
		}
	}
	elem.find(".set_status_author").text(item["from_user"]);
	//elem.find(".set_user_anchor").attr('name',item["from_user"] );
	elem.prepend($('<a class="set_user_anchor" name="'+item["from_user"]+'"></a>'));
	elem.find(".set_status_author_link").attr("href", 'http://twitter.com/'+item["from_user"]);
	elem.find(".set_status_time").text(item["created_at"].substr(0, item["created_at"].length-9));
	elem.find(".set_status_client").html(strUnescape(strUnescape(item["source"])));
	
		if (!currentchannel.nu || !mychannel || currentchannel.un == item["from_user"]) {
			elem.find(".set_block_enabled").css("display", "none");
		}
		if (currentchannel.nu || !mychannel || currentchannel.un == item["from_user"]){
			elem.find(".set_kick_enabled").css("display", "none");
		}
	if (channelPostingEnabled || authenticatedUser=='')
		elem.find(".set_modify_enabled").css("display","inline");
		
	
	return elem;
}

function displayChannelData(results) {
	results = filterUsers(results);
	var updateMode = false;
	resultsLength = (results.length <= maxSearchPerPage)?results.length:maxSearchPerPage;
	if (oldResults!=null && oldResults.length) {
		var oldFirst = oldResults[0]["id"];
		var oldFirstIndex = -1;
		for (var i=0; i< resultsLength;i++) {
			if (oldFirst == results[i]["id"]) {
				oldFirstIndex = i;
				break;
			}
		}
		if (oldFirstIndex != -1) {
			if (oldFirstIndex)	
				for (var i = oldFirstIndex - 1  ; i >= 0; i--) {
					if (jQuery.inArray(results[i]['id'], postedCache)==-1) {
						var elem = createStatusData(results[i]);
						$("#search_content").prepend(elem.attr("id","").css('height','80px').slideDown(1000,
															function() {$('#search_content .onestatus_blk').css('height','auto');}));
						pushChatAvatar(results[i]['from_user_id'], results[i]['from_user'], results[i]['profile_image_url']);
						currentSearchPerPage++;
					}
				}
			updateMode = true;
		}
	}
	if (!updateMode) {
		for (var i =resultsLength - 1 ; i>=0; i--) {
			if (jQuery.inArray(results[i]['id'], postedCache)==-1) {
				var elem = createStatusData(results[i]);
				$("#search_content").prepend(elem.attr("id",""));
				// elem.show();
				
				pushChatAvatar(results[i]['from_user_id'], results[i]['from_user'], results[i]['profile_image_url']);
				currentSearchPerPage++;
			}
			
			
		}
		$('#search_content .onestatus_blk').css('height','80px').slideDown(1000 - (i*10),
				function() {$('#search_content .onestatus_blk').css('height','auto')});
		if (!usersInChatVisible)
			toggleUsersInChat();
		
	}

	if (results.length) {
		$('.no_posts_yet').hide();
		$('#search_content').show();
	} 
	oldResults = results;
	while(currentSearchPerPage > maxSearchPerPage) {
		$('#search_content .onestatus_blk:last').remove();
		currentSearchPerPage--;
	}
}



function filterUsers(messageList, channel) {
	if (typeof channel == 'undefined')
		channel = currentchannel;
	var sw = "";
	if (typeof channel["sw"] != 'undefined')
		sw.split(',');
	var stopWords = sw.split(",");
	if (stopWords.length==1 && stopWords[0]=="")
		stopWords  = Array();
	for (var i=0;i<stopWords.length;i++) {
		stopWords[i] = stopWords[i].toLowerCase();
	}
	var userList = channel["uf"].split(",");
	if (userList.length == 1 && userList[0]=="")
		userList = Array();
	if (!userList.length) {
		if (!stopWords.length)
			return messageList;
		var result = new Array();
		for (var i = 0; i< messageList.length; i++) {
			if (!checkStopword(messageList[i]["text"], stopWords))
				result.push(messageList[i]);
		}
		return result;
	}
	var result = new Array();
	if (channel["nu"]){
		for (i = 0; i< messageList.length; i++) {
			var del = false;
			for (j=0;j<userList.length;j++) {
				if (messageList[i]["from_user"] == userList[j]) {
					del = true;
					break;
				}
			}
			if (!del) {
				if (!checkStopword(messageList[i]["text"], stopWords))
					result.push(messageList[i]);
			}
		}
	} else {
		for (i = 0; i< messageList.length; i++) {
			for (j=0;j<userList.length;j++) {
				if (messageList[i]["from_user"] == userList[j]) {
					if (!checkStopword(messageList[i]["text"], stopWords))
						result.push(messageList[i]);
				}
			}
		}
	}
	return result;
}

function checkStopword(text, sw) {
	for (var i=0; i<sw.length; i++) {
		text = text.toLowerCase();
		if (text.search(sw[i])!=-1) {
			return true;	
		}
	}
	return false;
}

function filterOnlyReplies(messageList) {
	newMessages = Array();
	for (i = 0; i< messageList.length; i++) {
		if (messageList[i]['text'].search("@"+newMessages))
			newMessages.append(messageList[i]['text']);
	}
	return newMessages;
}

function blockUserInChannel(node) {
	
	var name = $(node).parent().parent().parent().parent().parent().parent()
						.find(".set_status_author").text();
	$.ajax({
		url: "/pchannel2/block_user",
		dataType: "text",
		type: "post",
		data: {
			"channel": currentchannel["lid"],
			"username": name
		},
		success: blockUserSuccess
		
	});
	$.each($("#search_content .onestatus_blk"), function() {
		
		if ($(this).find(".set_status_author").text()==name) {
			$(this).slideUp(500, function () {$(this).remove();});
		}
	});
	
}

function kickUserFromChannel(node) {
	
	var name = $(node).parent().parent().parent().parent().parent().parent()
					.find(".set_status_author").text();
	$.ajax({
		url: "/pchannel2/kick_speaker",
		dataType: "text",
		type: "post",
		data: {
			"channel": currentchannel["lid"],
			"username": name
		},
		success: kickUserSuccess
		
	});
	$.each($("#search_content .onestatus_blk"), function() {
		
		if ($(this).find(".set_status_author").text()==name) {
			$(this).slideUp(500, function () {$(this).remove();});
		}
	});
	
}

function blockUserSuccess(data) {
	currentchannel["uf"] = data;
	$("#userFilterList").text(data.replace(/,/g,", "));
	oldResults = null;
	// updateChannel();
}

function kickUserSuccess(data) {
	updateCurrentChannelStatus();
}

// var userFilterHeader = false;
function toggleUserFilterHeader(userFilterHeader) {
	
	if (!userFilterHeader) {
		$("#user_filter_header").css("height", "12pt");
		// userFilterHeader = false;
		$("#userInfo .more_btn").show();
		$("#userInfo .less_btn").hide();
	} else {
		$("#user_filter_header").css("height", "auto");
		$("#userInfo .more_btn").hide();
		$("#userInfo .less_btn").show();
		// userFilterHeader = true;
	}
}
function delCurrentChannel() {
	$('.deletepopup .set_delete_name').text(currentchannel.n);
	$('.deletepopup .set_click_options').attr('pub','');
	$(".deletepopup").modal({overlayClose: true, closeClass:"modalClose"});
}

function deleteCurrentChannel() {
	
	$.ajax({
		url: "/pchannel2/delete_public_channel",
		dataType: "text",
		success: function (data) {
				window.location = "/";
		},
		type: "POST",
		data: {
			"channel": currentchannel["lid"]
		}
	});
}


function leaveCurrentChannel() {
	$.ajax({
		url: "/pchannel2/delete_public_channel",
		dataType: "text",
		success: function (data) {
				window.location = "/";
		},
		type: "POST",
		data: {
			"channel": currentchannel["lid"]
		}
	});
}

function askInvite() {
	$.ajax({
		url: "/pchannel2/ask_invite",
		dataType: "text",
		type: "post",
		data: {
			"channel": currentchannel["lid"]
		},
		success: function(data) {
			if (data == "Ok") {
				notifyBar("You have asked invitation to this chat.");
				// window.location.reload();
			}
			else alert(data);
		}
		
	});
}

function textLimit(block) {
	var keywords = addTagSignsSpaces(currentchannel["k"]);
	var text = $(block).find("textarea").val();
	var left = 139 - keywords.length - text.length;
	$(block).find(".characters_num").text(left);
	$(block).find(".post_msg_keywords").text(keywords);
	$('.tags_post').text(keywords.substr(0, 50));
	if (left >= 0 && text.length) {
		$(block).find("button").removeAttr('disabled');
		return true;
	} else {
		$(block).find("button").attr("disabled", "disabled");
		return false;
	}
}

function postMessage(block) {
	$('.error_message').hide();
	if (!textLimit(block))
		return;
	var elem = $(block);
	elem.find("input,textarea").attr("disabled", "disabled");
	
	var keywords = addTagSignsSpaces(currentchannel["k"]);
	var message = elem.find("textarea").val() + " " + keywords;
	var repid = elem.find("textarea").attr('rep');
	textLimit(block);
	$.ajax({
		url: "/chats/post_message/",
		dataType: "json",
		type: "post",
		data: {
			"message": message,
			"repid": repid
		},
		success: function (item) {
			elem.find("textarea").val("");
			elem.find(".posted_msg").show().css("color","green").text("Message posted").fadeOut(3000);
			elem.find("input,textarea").removeAttr('disabled');
			
			var elem2 = $("#clone_status").clone();
			elem2.find(".set_tweet_id").text(item["id"]);
			elem2.find(".set_status_image").attr("src", item['user']["profile_image_url"]);
			elem2.find(".set_status_text").html(item["text"].links().user().hashtags());
			elem2.find(".set_status_author").text(item['user']["screen_name"]);
			elem.prepend($('<a class="set_user_anchor" name="'+item['user']["screen_name"]+'"></a>'));
			//elem2.find(".set_user_anchor").attr('name', item['user']['screen_name']);
			elem2.find(".set_status_author_link").attr("href", 'http://twitter.com/'+item["from_user"]);
			elem2.find(".set_status_time").text(item["created_at"].substr(0, item["created_at"].length-10));
			elem2.find(".set_status_client").html(strUnescape(strUnescape(item["source"])));
			elem2.find(".set_block_enabled").css("display", "none");
			elem2.find(".set_kick_enabled").css("display", "none");
			var reg = RegExp('@'+ authenticatedUser);
			if (item['text'].search(reg,'i')!=-1)
			{	
				elem2.attr('merep','1');
			} else {
				elem2.attr('merep','0');
				
			}
			postedCache.push(item["id"]);
			pushChatAvatar(item['user']["id"], item['user']["screen_name"], item['user']["profile_image_url"]);
			
			$("#search_content").prepend(elem2.attr("id","").css('height','80px').slideDown( 1000,
								function() {elem2.css('height','auto'); }));
			$('.no_posts_yet').hide();
			$('#search_content').show();
			notifyBar('Your message was posted');
			
		},
		error: function (XMLHttpRequest, data, errorThrown) {
			// elem.find(".posted_msg").show().css("color","red").text(data).fadeOut(3000);
			elem.find("input,textarea").removeAttr('disabled');
			//$('.error_message').show();
			notifyBar('Your message was not posted due to a network error.');
		}
	});	
}

function updateCurrentChannelStatus() {
	$.ajax({
		url: window.location.href,
		dataType: "json",
		type: "get",
		data: {
			"json": 1
		},
		success: function (data) {
			currentchannel = data["channel"];
			setCurrentChannelStatus(currentchannel);
			if (data["post"] && data['posten']) {
				enableChannelPosting();
			} else {
				disableChannelPosting();
			}
			$("#userInfo .btn_block").html(data["buttons"]);
			chatStatusUpdateTimer = setTimeout(
									"updateCurrentChannelStatus();",
									chatStatusUpdatePeriod);
			if (channelPostingEnabled)
				textLimit("#post_message_blk");
			
		}
	});
}

function setCurrentChannelStatus(status) {
	$("#curchannel_name").text(status["n"]);
	$("#curchannel_desc").text(status["d"]);
	$("#curchannel_subs").text(status["sc"]);
	$("#curchannel_key").text(addTagSigns(status["k"]));
	$("#curchannel_uf").text(status["uf"].replace(/,/g,", "));
	$("#curchannel_stop").text(status["sw"].replace(/,/g,", "));
	
}

function replyTweet(obj) {
	if (!$("#post_message_blk:visible").length)
		openPostMessage();
	var elem = $(obj).parent().parent().parent().parent().parent().parent();
	var name = elem.find(".set_status_author").text();
	var message = "@"+ name + " ";
	var repid  = elem.find(".set_tweet_id").text();
	$("#post_message_blk textarea").focus().val(message).attr('rep',repid);
	textLimit("#post_message_blk");
	
}

function reTweet(obj) {
	if (!$("#post_message_blk:visible").length)
		openPostMessage();
	var elem = $(obj).parent().parent().parent().parent().parent().parent();
	var name = elem.find(".set_status_author").text();
	var text = elem.find(".set_status_text").text();
	var message = "RT @"+ name + ": " + text;
	$("#post_message_blk textarea").focus().val(message);
	textLimit("#post_message_blk");
	
}

function favoriteTweet(obj) {
	var elem = $(obj).parent().parent().parent();
	var id = elem.find(".set_tweet_id").text();
	var d = "";
	if (elem.find(".favorites_link").attr("cr")=="1") {
		d = "1";	
	}
	
	$.ajax({
		url: "/chats/create_favorite/",
		dataType: "text",
		type: "post",
		data: {
			"id": id,
			"d": d
		},
		success: function(data){
			if (data=="Created") {
				elem.find(".favorites_link").attr("cr", "1");
				elem.find(".favorites_link img").attr("src", "/static/images/star_y.png");
			} else if (data=="Destroyed") {
				elem.find(".favorites_link").attr("cr", "");
				elem.find(".favorites_link img").attr("src", "/static/images/star_g.png");
			}
			else notifyBar(data);
		},
		error: function () {
			notifyBar("Some error occured");
		}
	});
	
}

function makeBackgroundSearchRequest(lChannel) {
	var q = lChannel['q'];
	q = addTagSignsSpaces(q);
	$.ajax({
		dataType: "jsonp",
		url: "http://search.twitter.com/search.json",
		data: {
				"q":q,
				"rpp":50
				},
		success: function (data, textStatus) {
							results = data["results"];
							results = filterUsers(results, lChannel);
							
							var newmes = results.length;
							if (typeof lChannel['stat']!='undefined' &&
										lChannel['stat']['lr']) {
								newmes = 0;
								for (var i=0;i<results.length;i++) {
									var twcreated = Date.parse(results[i]['created_at'])/1000;
									// alert("cr"+twcreated+", lr:" +
									// lChannel['stat']['lr'])
									if (twcreated <= lChannel['stat']['lr'])
										break;
									newmes++;
								}
							}
							
							// Submit data back to server
							$.ajax({
								url: "/pchannel2/submit_bg_update",
								dataType: "text",
								type: "post",
								data: {
									"lid": lChannel["lid"],
									"newmes":newmes
								},
								success: function(data) {
								}
								
							});
					}
			
	});
}

function switchPostMessage(obj) {
	if ($("#post_message_blk:visible").length)
		closePostMessage();
	else
		openPostMessage();
}

function openPostMessage() {
	$("#post_message_blk").slideDown();
	$('a.btnOnlyPost').addClass('btnOnlyPostOn').removeClass('btnOnlyPost');
	$("#post_message_blk textarea").focus();
}

function closePostMessage() {
	$("#post_message_blk").slideUp();
	$('a.btnOnlyPostOn').addClass('btnOnlyPost').removeClass('btnOnlyPostOn');
}



function switchOnlyToMe(obj) {
	if (!meReplyOnly)
	{
		meReplyOnly = true;
		var elem2 = $('.onestatus_blk[merep=0]');
		elem2.css('display','none');
		var elem = $('.onestatus_blk[merep=1]');
		elem.css('display','block');
		if (!elem.length && elem2.length)
			$('.no_reply_yet').show();
		
		$('a.btnOnly').addClass('btnOnlyTurn').removeClass('btnOnly');
	} else {
		meReplyOnly = false;
		$('.onestatus_blk[merep=0]').css('display','block');
		$('div.no_reply_yet').hide();
		$('a.btnOnlyTurn').addClass('btnOnly').removeClass('btnOnlyTurn');
	}
}

function switchChannelSettings() {
	if (channelSettingsOpened) {
		channelSettingsOpened = false;
		$('.chSettingsWindow').slideUp(300);
		$('a.btnOnlySettOn').addClass('btnOnlySett').removeClass('btnOnlySettOn');
	} else {
		channelSettingsOpened = true;
		$('.chSettingsWindow').slideDown(300);
		$('a.btnOnlySett').addClass('btnOnlySettOn').removeClass('btnOnlySett');
	}
}

function switchUsersInChat() {
	if (activeOpened) {
		activeOpened = false;
		$('a.btnOnlyActiveOn').addClass('btnOnlyActive').removeClass('btnOnlyActiveOn');
		$('.chUsersInWindow').slideUp(300);
	} else {
		$('a.btnOnlyActive').addClass('btnOnlyActiveOn').removeClass('btnOnlyActive');
		activeOpened = true;
		$('.chUsersInWindow').slideDown(300);
	}
}

var refreshSettingsTimer = null;
var refreshSettingCurrent = 0;
function refreshSettingUpdater(setting) {
	refreshSettingCurrent = setting;
	if (refreshSettingsTimer !=null) {
		clearTimeout(refreshSettingsTimer);
	}
	refreshSettingsTimer = setTimeout("refreshSettingSend();", 3000);
	searchUpdatePeriod = parseInt(setting)*1000;
}

function refreshSettingSend() {
	refreshSettingsTimer = null;
	$.ajax({
		dataType: "text",
		url: "/chats/set_channel_refresh",
		data: {
				"channel":currentchannel.lid,
				"refresh":refreshSettingCurrent
				},
		success: function (data, textStatus) {
					
				}
	});
}

var channelPostingEnabled  = true;
function disableChannelPosting() {
	if (!channelPostingEnabled)
		return;
	var elem = $("#post_message_blk");
	elem.find(".btnPost").css('display','none');// attr('disabled',
															// 'disabled');
	elem.find("textarea").css('display','none');// .attr('disabled','disabled').text('You
															// must be a member
															// of the chat to
															// post messages.');
	elem.find('.cannot_post').show();
	channelPostingEnabled = false;
}

function enableChannelPosting() {
	if (channelPostingEnabled)
		return;
	
	var elem = $("#post_message_blk");
	elem.find(".btnPost").css('display','block');// .removeAttr('disabled');
	elem.find("textarea").css('display','block'); // .removeAttr('disabled').text('');
	elem.find('.cannot_post').hide();
	channelPostingEnabled = true;
}

function toggleUsersInChat() {
	if (usersInChatVisible) {
		$("#usersInChatBalloon .ddCont_c").slideUp(500);
		$("#usersInChatBalloon .ddTitle").removeClass("ddTitle_opened").addClass("ddTitle_closed");
		usersInChatVisible = false;
		// saveSidebarState("ml", false);
	} else {
		usersInChatVisible = true;
		$("#usersInChatBalloon .ddTitle").removeClass("ddTitle_closed").addClass("ddTitle_opened");
		// saveSidebarState("ml", true);
		$("#usersInChatBalloon .ddCont_c").slideDown(500);
	}
}

var maxSize = 36;
var currentInChatSize = 0;
var usersInChat = {};
function pushChatAvatar(userid, username, image) {
	var elem;
	if (authenticatedUser == '')
		elem= $("#usersInChatList");
	else {
		maxSize = 19;
		elem= $("#usersInChatList2");
	}
	if (typeof usersInChat[userid]!='undefined') {
		elem.find("a[userid='"+userid+"']").remove();
		currentInChatSize--;
	}
	while (currentInChatSize >= maxSize) {
		var delel = elem.find("a:last");
		var delid = parseInt(delel.attr('userid'));
		delete(usersInChat[delid]);
		delel.remove();
		currentInChatSize--;
	}
	var elem2 = $('<a class="userInChatLnk" title="'+
				username+'" href="#'+username+'" userid="'+userid+'" ><img /></a>');
	elem2.find('img').attr('src',image);
	elem.prepend(elem2);
	usersInChat[userid] = image;
	currentInChatSize++;
}
var chatPaused = false;
function switchPauseChat(obj) {
		if (searchUpdateTimer)
			clearTimeout(searchUpdateTimer);
		
		var elem = $(obj);
		if (chatPaused) {
			chatPaused = false;
			updateChannel();
			elem.removeClass('btnOnlyPauseTurn');
			elem.addClass('btnOnlyPause');
			elem.find('p').text('Pause');
		} else {
			chatPaused = true;
			elem.removeClass('btnOnlyPause');
			elem.addClass('btnOnlyPauseTurn');
			elem.find('p').text('Paused');
		}
}
