
var pKaraoke;
var pPublisher;

function initKaraoke(karaoke, publisher) {
	pKaraoke = karaoke;
	pPublisher = publisher;
}

function openSong(song) {
	pPublisher.loadVideo(Number(song.id), String(song.name), Number(song.kChannel));
	var performance = {
		userId: me.userId,
		nick: me.nick,
		songId: song.id,
		songName: song.name,
		kChannel: song.kChannel,
		mediaServer: karaokeStreamingServers[0]
	};
	pKaraoke.raiseHand(performance);
}

function openZingSong(song) {
	pPublisher.loadVideo(Number(song.id+100000), String(song.title), 1);
	var performance = {
		userId: me.userId,
		nick: me.nick,
		songId: song.id+100000,
		songName: song.title,
		kChannel: 1,
		zingMp3Link: song.mp3Link,
		mediaServer: karaokeStreamingServers[0]
	};
	pKaraoke.raiseHand(performance);
}

var enterSongDialog = null;

function enterSong() {
	if (enterSongDialog == null) {
		enterSongDialog = $("<div></div>")
			.html(
				"<p>T\u00EAn B\u00E0i H\u00E1t:</p>" +
				"<p><form name='enter-song-form' action='javascript:songEntered()'>" +
				"<input type='text' name='songName'/>" +
				"<input type='submit' value=' OK '/></form></p>"
			)
			.dialog({
				autoOpen: false,
				title: "H&#x00E1;t Nh&#x1EA1;c Ngo&#x00E0;i DiepKhuc.com"
			});
	}
	enterSongDialog.dialog('open');
}

function songEntered() {
	var songName = document['enter-song-form'].songName.value;
	if (songName != '') {
		pPublisher.loadVideo(0, songName, 0);
		var performance = {
			userId: me.userId,
			nick: me.nick,
			songId: 0,
			songName: songName,
			kChannel: 0,
			mediaServer: karaokeStreamingServers[0]
		};
		pKaraoke.raiseHand(performance);
		enterSongDialog.dialog('close');
	}
}

var editRoomDialog = null;

function editRoomInfo() {
	var form = document["edit-room-form"];
	if (form.roomName.value == '')
		$('#create-room-errors').html("T&#x00ea;n room kh&#x00f4;ng th&#x1ec3; b&#x1ecf; tr&#x1ed1;ng");
	else if (form.hostPass.value == '')
		$('#create-room-errors').html("M&#x1ead;t kh&#x1ea9;u ch&#x1ee7; room kh&#x00f4;ng th&#x1ec3; b&#x1ecf; tr&#x1ed1;ng");
	else if (form.emceePass.value == '')
		$('#create-room-errors').html("M&#x1ead;t kh&#x1ea9;u cho EMCEE kh&#x00f4;ng th&#x1ec3; b&#x1ecf; tr&#x1ed1;ng");
	else {
		var noChange = "[Kh\u00f4ng thay \u0111\u1ed5i]";
		var roomInfo = new Object();
		if (form.roomName.value != noChange)
			roomInfo.name = form.roomName.value;
		if (form.roomDescription.value != noChange)
			roomInfo.description = form.roomDescription.value;
		if (form.hostPass.value != noChange)
			roomInfo.hostPass = form.hostPass.value;
		if (form.emceePass.value != noChange)
			roomInfo.emceePass = form.emceePass.value;
		if (form.singPass.value != noChange)
			roomInfo.singPass = form.singPass.value;
		pKaraoke.editRoomInfo(roomInfo);
		editRoomDialog.dialog('close');
	}
}

function openEditRoomForm() {
	if (editRoomDialog == null) {
		editRoomDialog = $("<div></div>").dialog({
			autoOpen: false,
			width: 500,
			title: "Edit Room"
		});
		$.get("include/editKaraokeRoom.html", function(data) {
			editRoomDialog.html(data).dialog('open');
			resetEditRoomForm();
		});
	}
	else {
		editRoomDialog.dialog('open');
		resetEditRoomForm();
	}
}

function resetEditRoomForm() {
	var form = document["edit-room-form"];
	form.roomName.value = 
	form.roomDescription.value = 
	form.hostPass.value =
	form.emceePass.value = 
	form.singPass.value = "[Kh\u00f4ng thay \u0111\u1ed5i]";
}

var karaokePasswordDialog = null;

function openKaraokePasswordDialog() {
	if (karaokePasswordDialog == null) {
		karaokePasswordDialog = $("<div></div>").dialog({
			autoOpen: false,
			title: "M&#x1ead;t Kh&#x1ea9;u"
		});
		var html = new StringBuilder();
		html.append("<form name='karaoke-password-form' action='javascript:submitKaraokePassword()'>");
		html.append("<input type='text' name='password'/>");
		html.append("<input type='submit' value='Nh&#x1ead;p'/></form>");
		karaokePasswordDialog.html(html.toString());
	}
	karaokePasswordDialog.dialog('open');
}

function submitKaraokePassword() {
	var form = document["karaoke-password-form"];
	if (form.password.value != '') {
		pKaraoke.enterPassword(form.password.value);
		karaokePasswordDialog.dialog('close');
	}
}

var roomControlPanel = null;

function openRoomControlPanel() {
	if (roomControlPanel == null) {
		roomControlPanel = $("<div></div>").dialog({
			autoOpen: false,
			title: "Control Panel"
		});
	}
	roomControlPanel.dialog('open');
}

function updateRoomControlPanel() {
	if (roomControlPanel != null) {
		roomControlPanel.dialog('option', 'title', 'Control Panel');
		roomControlPanel.html('');
	}
	var currentRoom = roomLists[currentRoomList].roomsInfo[currentRoomIndex];
	if (typeof(userList[me.userId].karaokeRole) != 'undefined') {
		if (userList[me.userId].karaokeRole == 'host') {
			openRoomControlPanel();
			roomControlPanel.dialog('option', 'title', 'B&#x1ea1;n l&#x00e0; ch&#x1ee7; ph&#x00f2;ng');
			roomControlPanel.html(
				"<form action='javascript:host_skipToNextSinger()'><input type='submit' value=' Cho qua b&#x00e0;i n&#x00e0;y '/></form>" +
				"<form action='javascript:openEditRoomForm()'><input type='submit' value=' Edit Room '/></form>"
			);
		}
		else if (userList[me.userId].karaokeRole == 'emcee') {
			openRoomControlPanel();
			roomControlPanel.dialog('option', 'title', 'B&#x1ea1;n l&#x00e0; EMCEE');
			roomControlPanel.html("<form action='javascript:emcee_raiseHand()'><input type='submit' value=' Xin microphone '/></form>");
		}
	}
}

function host_skipToNextSinger() {
	pKaraoke.runCmd("/next");
}

function emcee_raiseHand() {
	pPublisher.loadVideo(0, "Emcee gi\u1edbi thi\u1ec7u", 0);
	var performance = {
		userId: me.userId,
		nick: me.nick,
		songId: 0,
		songName: "Emcee gi\u1edbi thi\u1ec7u",
		kChannel: 0,
		mediaServer: karaokeStreamingServers[0]
	};
	pKaraoke.raiseHand(performance);
}

getUserIconURL = override(getUserIconURL, function(superHandler, userInfo) {
	if (typeof(userInfo.karaokeRole) != 'undefined') {
		if (userInfo.karaokeRole == 'host')
			return 'images/host_icon.png';
		else if (userInfo.karaokeRole == 'singer')
			return 'images/singer_icon.png';
		else if (userInfo.karaokeRole == 'emcee')
			return 'images/emcee_icon.png';
	}
	return superHandler(userInfo);
});


//chat agent callbacks -------------------------------------------

var karaokeCb = new Object();

handleCallback = override(handleCallback,
	function(superHandler, method, args) {
		if (method == 'userList')
			karaokeCb.userList(superHandler, args);
		else if (method == 'userUpdate')
			karaokeCb.userUpdate(superHandler, args);
		else if (method == 'serverMessage')
			karaokeCb.serverMessage(superHandler, args);
		else
			return superHandler(method, args);
		return true;
	});

karaokeCb.userList = function(superHandler, args) {
	superHandler("userList", args);
	updateRoomControlPanel();
}

karaokeCb.userUpdate = function(superHandler, args) {
	superHandler("userUpdate", args);
	var userInfo = args[0];
	if (userInfo.userId == me.userId && typeof(userInfo.karaokeRole) != 'undefined')
		updateRoomControlPanel();
}

karaokeCb.serverMessage = function(superHandler, args) {
	var msg = args[0];
	if (msg == "Password required to sing")
		alert("B\u1ea1n ph\u1ea3i c\u00f3 m\u1eadt kh\u1ea9u \u0111\u1ec3 h\u00e1t trong room n\u00e0y");
	else if (msg == "Invalid password")
		alert("M\u1eadt kh\u1ea9u kh\u00f4ng \u0111\u00fang");
	else if (msg == "Nobody is singing")
		alert("C\u00f3 ai h\u00e1t \u0111\u00e2u m\u00e0 cho qua");
	else
		superHandler("serverMessage", args);
}

function cb_perform() {
	pPublisher.perform(String(me.userId));
}


//publisher callbacks ----------------------------

function performanceFinished() {
	pKaraoke.returnMic();
}

function performanceStarted(mediaServer) {
	pKaraoke.takeMic(mediaServer);
}
