var connection_options = {
	'sync disconnect on unload':true,
	'secure': true,
	'force new connection': true
};
var socket = io.connect(window.location.protocol + '//' + window.location.hostname + ':8080', connection_options);
var api_token_list;
$(document).ready(function(){
	 $('ul.tabs').tabs();
	 api_token_list = $("#api_token_list").clone();
	 $("#api_token_list").remove();
	 loaded();
 });
$(document).on("click", "#refresh_all", function(e){
	e.preventDefault();
	$("#descriptions_cont").empty();
	$("#thumbnails_cont").empty();
	$(".api_token_container").remove();
	if(!$(".channel_things").hasClass("hide")) {
		$(".channel_things").addClass("hide")
	}
	$(".preloader-wrapper").removeClass("hide");
	loaded();
	$("#listeners").empty();
	socket.emit("get_spread");
});
function decodeChannelName(str) {
  var _fn = decodeURIComponent;
  str = str.toUpperCase();
  var toReturn = _fn(str.replace(/%5F/g, "_"));
  return toReturn.toLowerCase();
}
socket.on("spread_listeners", function(obj){
	$("#listeners").append("
Private listeners: " + obj.offline + "
");
	$("#listeners").append("Total listeners: " + obj.total + "
");
	$("#listeners").append("
");
	for(var x in obj.online_users){
		if(obj.online_users[x]._id != "total_users" && obj.online_users[x].hasOwnProperty("users") && obj.online_users[x].users.length > 0){
			$("#listeners").append("" + decodeChannelName(obj.online_users[x]._id) + ": " + obj.online_users[x].users.length + "
");
		}
	}
});
if(!$(".channel_things").hasClass("hide")) {
	$(".channel_things").addClass("hide")
}
$(".preloader-wrapper").removeClass("hide");
$(document).on("click", ".update_api_token", function(e) {
	e.preventDefault();
	var id = $(this).attr("data-id");
	var limit = $("#" + id + "-limit").val();
	var that = this;
	$(that).toggleClass("disabled");
	$("#" + id + "-delete").toggleClass("disabled");
	$.ajax({
		type: "PUT",
		url: "api/api_token",
		data: {
			id: id,
			limit: limit,
		},
		success: function(response) {
			if(response == "OK") {
				Materialize.toast("Updated limit!", 2000, "green lighten");
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
			}
			$(that).toggleClass("disabled");
			$("#" + id + "-delete").toggleClass("disabled");
		}
	});
});
$(document).on("click", ".delete_api_token", function(e) {
	e.preventDefault();
	var id = $(this).attr("data-id");
	var that = this;
	$(that).toggleClass("disabled");
	$("#" + id + "-limit").toggleClass("disabled");
	$.ajax({
		type: "DELETE",
		url: "api/api_token",
		data: {
			id: id
		},
		success: function(response) {
			if(response == "success") {
				Materialize.toast("Removed token!", 2000, "green lighten");
				$("#" + id).remove();
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
				$(that).toggleClass("disabled");
				$("#" + id + "-limit").toggleClass("disabled");
			}
		},
	});
});
function loaded() {
	$.ajax({
		type: "GET",
		url: "/api/api_token",
		success: function(response) {
			if(response.length == 0) {
				if(!$(".header-api-fields").hasClass("hide")) {
					$(".header-api-fields").addClass("hide");
				}
				return;
			}
			$(".header-api-fields").removeClass("hide");
			for(var i = 0; i < response.length; i++) {
				var to_add = api_token_list.clone();
                to_add.find(".api_token_limit").val(response[i].limit);
				to_add.attr("id", response[i]._id);
				to_add.find(".api_token_name").text(response[i].name);
				to_add.find(".api_token_usage").text(response[i].usage);
                to_add.find(".api_token_origin").text(response[i].origin);
				to_add.find(".update_api_token").attr("id", response[i]._id + "-update");
				to_add.find(".api_token_limit").attr("id", response[i]._id + "-limit");
				to_add.find(".delete_api_token").attr("id", response[i]._id + "-delete");
				to_add.find(".delete_api_token").attr("data-id", response[i]._id);
				to_add.find(".update_api_token").attr("data-id", response[i]._id);
				if(response[i].active) {
                    to_add.find(".check").removeClass("hide");
                } else {
                    to_add.find(".uncheck").removeClass("hide");
                }
				$("#api_keys").append(to_add);
			}
		},
		error: function(err) {
		}
	});
	$.ajax({
		type: "GET",
		url: "/api/lists",
		success: function(response){
			response = response.sort(predicate({
                name: '_id',
                reverse: false
            }));
			var output_pinned = '';
			var output_delete = '';
			for(var x = 0; x < response.length; x++){
				if(response[x].count > 2){
					output_pinned += "";
				}
				output_delete += "";
			}
			$("#frontpage_pinned").html(output_pinned);
			$("#remove_thumbnail").html($("#frontpage_pinned").clone().html());
			$("#remove_description").html($("#frontpage_pinned").clone().html());
			$("#delete_list_name").html($("#frontpage_pinned").clone().html());
			$("#delete_userpass_name").html($("#frontpage_pinned").clone().html());
			$("#delete_channel_name").html($("#frontpage_pinned").clone().html());
			$("select").material_select();
			if(!$(".preloader-wrapper").hasClass("hide")) {
				$(".preloader-wrapper").addClass("hide")
			}
			$(".channel_things").removeClass("hide");
		}
	});
	$.ajax({
	    type: "GET",
	    url: "/api/names",
	    success: function(response) {
			for(var i = 0; i < response.length; i++) {
				var icon = "";
				if(response[i].icon && response[i].icon != "") {
					icon = "
";
				}
				$(".names-container").append("");
			}
	    },
	});
	$.ajax({
		type: "GET",
		url: "/api/thumbnails",
		success: function(response){
			if(response.length > 0){
				$(".thumbnails-badge").removeClass("hide");
				$(".thumbnails-badge").text(response.length);
			}
			add_to_tab("thumbnails", response);
		}
	});
	$.ajax({
		type: "GET",
		url: "/api/descriptions",
		success: function(response){
			if(response.length > 0){
				$(".descriptions-badge").removeClass("hide");
				$(".descriptions-badge").text(response.length);
			}
			add_to_tab("descriptions", response);
		}
	});
}
$(document).on("click", ".approve_name", function(e) {
	var that = this;
	var name = $(that).attr("data-name");
	var value = $("." + name + "_input").val();
	$.ajax({
		type: "POST",
		url: "/api/names",
		data: {
			icon: value,
			name: name,
		},
		success: function(resp) {
			if(resp == true) {
				Materialize.toast("Approved image!", 2000, "green lighten");
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
			}
		}
	});
});
$(document).on("click", ".thumbnail_link", function(e) {
	e.preventDefault();
	window.open("https:" + this.value,'_blank');
});
function add_to_tab(dest, resp){
	for(var x = 0; x < resp.length; x++){
		if(dest == "thumbnails"){
			$("#" + dest + "_cont").append("");
		} else {
			$("#" + dest + "_cont").append("");
		}
	}
}
$(document).on("click", "#get_token", function(e){
	e.preventDefault();
	$.ajax({
		type: "GET",
		url: "/api/token",
		success: function(response){
			if(response != false){
				$("#new_token").val(response.token);
				$("#get_token").toggleClass("hide");
				$("#remove_token").toggleClass("hide");
			}
		}
	})
});
$(document).on("click", ".approve_thumbnails", function(e){
	e.preventDefault();
	var channel = $(this).attr("data-channel");
	if(!channel) {
		Materialize.toast("Something went wrong...", 2000, "red lighten");
		return;
	}
	var that = this;
	$.ajax({
		type: "POST",
		url: "/api/approve_thumbnail",
		data: {
			channel: channel
		},
		success: function(response){
			if(response){
				$(that).parent().remove();
				var length = parseInt($(".thumbnails-badge").text());
				length = length - 1;
				$(".thumbnails-badge").text(length);
				if(length <= 0 && !$(".thumbnails-badge").hasClass("hide")){
					$(".thumbnails-badge").addClass("hide");
				}
				Materialize.toast("Approved Thumbnail!", 2000, "green lighten");
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
			}
		}
	});
});
$(document).on("click", ".deny_thumbnails", function(e){
	e.preventDefault();
	var channel = $(this).attr("data-channel");
	if(!channel) {
		Materialize.toast("Something went wrong...", 2000, "red lighten");
		return;
	}
	var that = this;
	$.ajax({
		type: "POST",
		url: "/api/deny_thumbnail",
		data: {
			channel: channel
		},
		success: function(response){
			if(response){
				$(that).parent().remove();
				var length = parseInt($(".thumbnails-badge").text());
				length = length - 1;
				$(".thumbnails-badge").text(length);
				if(length <= 0 && !$(".thumbnails-badge").hasClass("hide")){
					$(".thumbnails-badge").addClass("hide");
				}
				Materialize.toast("Denied thumbnail!", 2000, "green lighten");
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
			}
		}
	});
});
$(document).on("click", ".approve_descriptions", function(e){
	e.preventDefault();
	var channel = $(this).attr("data-channel");
	if(!channel) {
		Materialize.toast("Something went wrong...", 2000, "red lighten");
		return;
	}
	var that = this;
	$.ajax({
		type: "POST",
		url: "/api/approve_description",
		data: {
			channel: channel
		},
		success: function(response){
			if(response){
				$(that).parent().remove();
				var length = parseInt($(".descriptions-badge").text());
				length = length - 1;
				$(".descriptions-badge").text(length);
				if(length <= 0 && !$(".descriptions-badge").hasClass("hide")){
					$(".descriptions-badge").addClass("hide");
				}
				Materialize.toast("Approved description!", 2000, "green lighten");
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
			}
		}
	});
});
$(document).on("click", ".deny_descriptions", function(e){
	e.preventDefault();
	var channel = $(this).attr("data-channel");
	if(!channel) {
		Materialize.toast("Something went wrong...", 2000, "red lighten");
		return;
	}
	var that = this;
	$.ajax({
		type: "POST",
		url: "/api/deny_description",
		data: {
			channel: channel
		},
		success: function(response){
			if(response){
				$(that).parent().remove();
				var length = parseInt($(".descriptions-badge").text());
				length = length - 1;
				$(".descriptions-badge").text(length);
				if(length <= 0 && !$(".descriptions-badge").hasClass("hide")){
					$(".descriptions-badge").addClass("hide");
				}
				Materialize.toast("Denied description!", 2000, "green lighten");
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
			}
		}
	});
});
$(document).on("click", "#remove_description_button", function(e){
	e.preventDefault();
	var channel = $("#remove_description").val();
	if(!channel) {
		Materialize.toast("Something went wrong...", 2000, "red lighten");
		return;
	}
	var that = this;
	$.ajax({
		type: "POST",
		url: "/api/remove_description",
		data: {
			channel: channel
		},
		success: function(response){
			if(response){
				Materialize.toast("Removed description!", 2000, "green lighten");
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
			}
		}
	});
});
$(document).on("click", "#remove_thumbnail_button", function(e){
	e.preventDefault();
	var channel = $("#remove_thumbnail").val();
	if(!channel) {
		Materialize.toast("Something went wrong...", 2000, "red lighten");
		return;
	}
	var that = this;
	$.ajax({
		type: "POST",
		url: "/api/remove_thumbnail",
		data: {
			channel: channel
		},
		success: function(response){
			if(response){
				Materialize.toast("Removed thumbnail!", 2000, "green lighten");
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
			}
		}
	});
});
$(document).on("submit", "#delete_channel", function(e){
	e.preventDefault();
	var to_delete = $("#delete_channel_name").val();
	if(!to_delete) {
		Materialize.toast("Something went wrong...", 2000, "red lighten");
		return;
	}
	var r = confirm("Delete list \""+ decodeChannelName(to_delete) + "\"?");
	if (r == true) {
		$.ajax({
			type: "POST",
			url: "/api/delete",
			data: {
				_id: to_delete
			},
			success: function(response){
				if(response == true){
					loaded();
					Materialize.toast("Deleted channel!", 2000, "green lighten");
				} else {
					Materialize.toast("Something went wrong...", 2000, "red lighten");
				}
			}
		})
	}
});
$(document).on("click", "#delete_channel_button", function(e){
	e.preventDefault();
	$("#delete_channel").submit();
});
$(document).on("click", "#remove_token", function(e){
	e.preventDefault();
	$.ajax({
		type: "GET",
		url: "/api/remove_token",
		success: function(response){
			if(response != false){
				$("#new_token").val("");
				$("#get_token").toggleClass("hide");
				$("#remove_token").toggleClass("hide");
			}
		}
	})
});
$(document).on("submit", "#change_pinned", function(e){
	e.preventDefault();
	var to_pin = $("#frontpage_pinned").val();
	if(!to_pin) {
		Materialize.toast("Something went wrong...", 2000, "red lighten");
		return;
	}
	$.ajax({
		type: "POST",
		url: "/api/pinned",
		data: {
			_id: to_pin
		},
		success: function(response){
			if(response == true){
				Materialize.toast("Pinned channel!", 2000, "green lighten");
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
			}
		}
	})
});
$(document).on("click", "#change_pinned_button", function(){
	$("#change_pinned").submit();
});
$(document).on("click", "#delete_admin_button", function(){
	$("#delete_list").submit();
});
$(document).on("click", "#delete_userpass_button", function(){
	$("#delete_userpass").submit();
});
$(document).on("submit", "#delete_list", function(e){
	e.preventDefault();
	var to_remove_password = $("#delete_list_name").val();
	if(!to_remove_password) {
		Materialize.toast("Something went wrong...", 2000, "red lighten");
		return;
	}
	$.ajax({
		type: "POST",
		url: "/api/admin",
		data: {
			_id: to_remove_password
		},
		success: function(response){
			if(response == true){
				Materialize.toast("Removed admin password!", 2000, "green lighten");
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
			}
		}
	})
});
$(document).on("submit", "#delete_userpass", function(e){
	e.preventDefault();
	var to_remove_password = $("#delete_userpass_name").val();
	if(!to_remove_password) {
		Materialize.toast("Something went wrong...", 2000, "red lighten");
		return;
	}
	$.ajax({
		type: "POST",
		url: "/api/userpass",
		data: {
			_id: to_remove_password
		},
		success: function(response){
			if(response == true){
				Materialize.toast("Removed userpass password!", 2000, "green lighten");
			} else {
				Materialize.toast("Something went wrong...", 2000, "red lighten");
			}
		}
	})
});
function predicate() {
	var fields = [],
	n_fields = arguments.length,
	field, name, cmp;
	var default_cmp = function (a, b) {
		if(a == undefined) a = 0;
		if(b == undefined) b = 0;
		if (a === b) return 0;
		return a < b ? -1 : 1;
	},
	getCmpFunc = function (primer, reverse) {
		var dfc = default_cmp,
		// closer in scope
		cmp = default_cmp;
		if (primer) {
			cmp = function (a, b) {
				return dfc(primer(a), primer(b));
			};
		}
		if (reverse) {
			return function (a, b) {
				return -1 * cmp(a, b);
			};
		}
		return cmp;
	};
	// preprocess sorting options
	for (var i = 0; i < n_fields; i++) {
		field = arguments[i];
		if (typeof field === 'string') {
			name = field;
			cmp = default_cmp;
		} else {
			name = field.name;
			cmp = getCmpFunc(field.primer, field.reverse);
		}
		fields.push({
			name: name,
			cmp: cmp
		});
	}
	// final comparison function
	return function (A, B) {
		var name, result;
		for (var i = 0; i < n_fields; i++) {
			result = 0;
			field = fields[i];
			name = field.name;
			result = field.cmp(A[name], B[name]);
			if (result !== 0) break;
		}
		return result;
	};
}
socket.emit("get_spread");