﻿
var Chat = function ($messageContainer, $input, room) {

	var room = room; // specify a room to have a public chat room, or leave null for individual (user to admin) chat only
	var checkServer;
	var interval = 50; // 5 seconds


	var _ctor = function () {
		$.ajax({
			type: "POST",
			url: _baseurl + "Chat/GetSessionID",
			success: function (id) {
				_aspnetSessionID = id
				$input.keyup(function (e) { if (e.keyCode == 13) send($input.val()); }); // send on enter
				checkServer = setInterval(get, 100 * interval);
				get(true);
			}
		});

		$input.focus();
	}


	var resetInterval = function () {
		clearInterval(checkServer);
		checkServer = setInterval(get, 100 * interval); // increase .1 sec 
		interval *= 1.1;
	}


	var get = function (firstStart) {
		if (interval < 100) {
			resetInterval();
		}

		$.ajax({
			type: "POST",
			url: _baseurl + "Chat/Get",
			data: { room: room, clear: firstStart },
			success: drawRows,
			error: onError
		});
	}




	var drawRows = function (rows) {

		//		var lastMsgFromUser = false;

		for (var i = 0; i < rows.length; i++) {
			var d = new Date(rows[i].Time.match(/\d+/)[0] * 1);
			var $row = $("<div class='row'><span class='time'>" + d.getHours() + ":" + (d.getMinutes() < 10 ? "0" : "") + d.getMinutes() + "</span> "
				+ (rows[i].User == _aspnetSessionID ? "" : "<span class='user'>Antwort:</span>")
				+ "<span class='msg " + (rows[i].User != _aspnetSessionID ? "reply" : "") + "'>" + rows[i].Message + "</span></div>").appendTo($messageContainer);
			//			lastMsgFromUser = rows[i].User == _aspnetSessionID;
		}

		if (rows.length) {
			$(".chat .header").hide();
			$messageContainer.scrollTop($messageContainer.height())
		}

		if (rows.length) {
			interval = 6; // .6 seconds
			resetInterval();
		}
	}



	var send = function (msg) {
		interval = 6; // .6 seconds
		resetInterval();
		if(msg)
			$.ajax({
				type: "POST",
				url: _baseurl + "Chat/Send",
				data: { room: room, msg: msg },
				error: onError
			});

		$input.val('');
	}


	var onError = function (err) {
		alert("Error while sending message, please try again!");
	}


	this.Kill = function () {
		clearInterval(checkServer);
		$input.unbind('keyup');
	}
	_ctor();
};
