//通知
//取得+Streaming接続
function notf(acct_id, tlid, sys) {
	todo("Notifications Loading...");
	var domain = localStorage.getItem("domain_" + acct_id);
	var at = localStorage.getItem(domain + "_at");
	var start = "https://" + domain + "/api/v1/notifications";
	fetch(start, {
		method: 'GET',
		headers: {
			'content-type': 'application/json',
			'Authorization': 'Bearer ' + at
		},
		//body: JSON.stringify({})
	}).then(function(response) {
		return response.json();
	}).catch(function(error) {
		todo(error);
		console.error(error);
	}).then(function(json) {
		var templete = parseNotf(json, -1, tlid, acct_id);
		if (sys == "direct") {
			$("#timeline_" + tlid).html(templete[0]);
		} else {
			$("#notifications_" + tlid).html(templete[0]);
		}
		jQuery("time.timeago").timeago();
		$("#notf-box").addClass("fetched");
		todc();
	});
	var start = "wss://" + domain + "/api/v1/streaming/?stream=user&access_token=" +
		at;
	console.log(start);
	var websocket = new WebSocket(start);
	console.log(websocket);
	websocket.onopen = function(mess) {
		console.log("Connect Streaming API:");
		console.log(mess);
	}
	websocket.onmessage = function(mess) {
		console.log("Receive Streaming API:");
		var obj = JSON.parse(JSON.parse(mess.data).payload);
		console.log(obj);
		var type = JSON.parse(mess.data).event;
		if (type == "notification") {
			var popup = localStorage.getItem("popup");
			if (!popup) {
				popup = 0;
			}
			var templete = parseNotf([obj], popup, tlid, acct_id);
			var notices = templete[1];
			console.log(templete);
			if (sys == "direct") {
				$("#timeline_" + tlid).prepend(templete[0]);
			} else {
				$("#notifications_" + tlid).prepend(templete[0]);
			}
			jQuery("time.timeago").timeago();
		}
	}
	websocket.onerror = function(error) {
		console.error('WebSocket Error ' + error);
	};
}
//通知トグルボタン
function notfToggle(acct, tlid) {
	$("#notf-box_" + tlid).toggleClass("hide");
	if (!$("#notf-box_" + tlid).hasClass("fetched")) {
		notf(acct, tlid);
	}
	$(".notf-icon_" + tlid).removeClass("red-text");
}
//通知オブジェクトパーサー
function parseNotf(obj, popup, tlid, acct_id) {
	var templete = '';
	var datetype = localStorage.getItem("datetype");
	var nsfwtype = localStorage.getItem("nsfw");
	if (!nsfwtype || nsfwtype == "yes") {
		var nsfw = "ok";
	} else {
		var nsfw;
	}
	var cwtype = localStorage.getItem("cw");
	if (!cwtype || cwtype == "yes") {
		var cw = "ok";
	} else {
		var cw;
	}
	if (!datetype) {
		datetype = "absolute";
	}
	Object.keys(obj).forEach(function(key) {
		var eachobj = obj[key];
		var toot = eachobj.status;
		//トゥートである
		if (toot) {
			if (!toot.application) {
				var via = "Unknown";
			} else {
				var via = toot.application.name;
			}
			if (toot.account.locked) {
				var locked = ' ';
			} else {
				var locked = "";
			}
			var id = toot.id;
			if (eachobj.type == "mention") {
				var what = "返信しました";
			} else if (eachobj.type == "reblog") {
				var what = "ブーストしました";
			} else if (eachobj.type == "favourite") {
				var what = "ふぁぼしました";
			}
			var noticetext = eachobj.account.display_name + "(" + eachobj.account.acct +
				")が" + what;
			if (popup >= 0 && obj.length < 5) {
				Materialize.toast(noticetext, popup * 1000);
				$(".notf-icon_" + tlid).addClass("red-text");
			}
			if (toot.spoiler_text && cw) {
				var spoiler = "cw cw_hide_" + toot.id;
				var spoiler_show = '見る';
			} else {
				var spoiler = "";
				var spoiler_show = "";
			}
			var viewer = "";
			var youtube = "";
			var mediack = toot.media_attachments[0];
			if (mediack) {
				Object.keys(toot.media_attachments).forEach(function(key2) {
					var media = toot.media_attachments[key2];
					var purl = media.preview_url;
					var url = media.url;
					if (toot.sensitive && nsfw) {
						var sense = "sensitive"
					} else {
						var sense = ""
					}
					viewer = viewer + '';
				});
			} else {
				viewer = "";
			}
			var menck = toot.mentions[0];
			var mentions = "";
			if (menck) {
				mentions = "Links: ";
				Object.keys(toot.mentions).forEach(function(key3) {
					var mention = toot.mentions[key3];
					mentions = mentions + '@' + mention.acct + ' ';
				});
			}
			var tagck = toot.tags[0];
			var tags = "";
			if (tagck) {
				if (!menck) {
					tags = "Links: ";
				}
				Object.keys(toot.tags).forEach(function(key4) {
					var tag = toot.tags[key4];
					tags = tags + '#' + tag.name + ' ';
				});
			}
			if (toot.favourited) {
				var if_fav = " yellow-text";
				var fav_app = "faved";
			} else {
				var if_fav = "";
				var fav_app = "";
			}
			if (toot.reblogged) {
				var if_rt = "teal-text";
				var rt_app = "rted";
			} else {
				var if_rt = "";
				var rt_app = "";
			}
			if (toot.account.acct == localStorage.getItem("user_" + acct_id)) {
				var if_mine = "";
			} else {
				var if_mine = "hide";
			}
			if (toot.favourited) {
				var if_fav = " yellow-text";
				var fav_app = "faved";
			} else {
				var if_fav = "";
				var fav_app = "";
			}
			if (toot.reblogged) {
				var if_rt = "teal-text";
				var rt_app = "rted";
			} else {
				var if_rt = "";
				var rt_app = "";
			}
			templete = templete + '