Event.observe(window,"load",initChat,false);

var chatStatus;
var longinterval = 10000;
var shortinterval = 2000;
var statustimer;
var statustimerinterval = longinterval;
var typingactivitysent = 0;

function initChat() {
	intervalStatusUpdate();
	Event.observe('chatinput',"keypress",function(e) { if(e.keyCode == Event.KEY_RETURN) postMessage();});
}

function intervalStatusUpdate() {
	getChatStatus();
	statustimer = setTimeout(intervalStatusUpdate, statustimerinterval);
}

function getChatStatus() {
	doAjax(handleChatStatusResponse,"getChatStatus");
}

function updateStatus() {
	var status;
	if(chatStatus.className == "UserChat") {
		status = "Du er logget på chatten - <a href=\"#\" onClick=\"logUserOut(); return false;\">Afslut chatten</a>";
		Element.hide($('chatstart'));
		Element.show($('chatactive'));
		getNewMessages();
		statustimerinterval = shortinterval;
	} else if (chatStatus.className == "OperatorChat") {
		status = "DU ER ONLINE";
		if (chatStatus.has_peer) {
			status += " og i gang med at rådgive - <a href=\"#\" onClick=\"logUserOut(); return false;\">Afslut denne samtale</a>";
			Element.addClassName('chatstatus', 'busy');
			Element.removeClassName('chatstatus', 'free');
			Element.show($('chatactive'));
			getNewMessages();
			getTypingActivity();
		} else if(chatStatus.is_busy) {
			status += " og vises som optaget - <a href=\"#\" onClick=\"unsetBusy(); return false;\">Vise som ledig</a>";
			Element.addClassName('chatstatus', 'busy');
			Element.removeClassName('chatstatus', 'free');
			Element.hide($('chatactive'));
			clearHistory();
			registerActivity();
		} else {
			status += " MEN INGEN BESØGENDE - chatten vises som åben<br/><a href=\"#\" onClick=\"setBusy(); return false;\">Vise som optaget</a>";
			Element.addClassName('chatstatus','free');
			Element.removeClassName('chatstatus','busy');
			Element.hide($('chatactive'));
			clearHistory();
			registerActivity();
		}
		status += " - <a href=\"#\" onClick=\"logOperatorOut(); return false;\">Logud</a>";
		Element.hide($('chatstart'));
		statustimerinterval = shortinterval;
	} else if(chatStatus.has_operator) {
		if(chatStatus.has_privileged_access) {
			status = "Andre rådgiver er logget på - <a href=\"#\" onClick=\"logOperatorIn(); return false;\">Logpå</a>";
		} else {
			status = "Chatten er åben";
			if(chatStatus.is_free) {
				status += " og ledig";
				Element.show($('chatstart'));
			} else {
				status += " men optaget";
				Element.hide($('chatstart'));
			}
		}
		Element.hide($('chatactive'));
		clearHistory();
		statustimerinterval = longinterval;
	} else {
		if(chatStatus.has_privileged_access) {
			status = "Ingen andre rådgivere er logget på - <a href=\"#\" onClick=\"logOperatorIn(); return false;\">Logpå</a>";
		} else {
			status = "Chatten er lukket";
			Element.hide($('chatstart'));
		}
		Element.hide($('chatactive'));
		Element.removeClassName('chatstatus','busy');
		Element.removeClassName('chatstatus','free');
		clearHistory();
		statustimerinterval = longinterval;
	}
	$('chatstatusstring').innerHTML = status;
}

function logOperatorIn() {
	//if(!chatStatus.has_operator || confirm("En anden rågiver er allerede online, vil du overtage?")) {
		doAjax(getChatStatus,"logOperatorIn");
	//}
}

function logUserIn() {
	age = $F('i2');
	sex = $F('i3');
	region = $F('i4');
	//console.log(age);
	if(age && sex && region) {
		var parameters = {
			age: age,
			sex: sex,
			region: region
		};
		doAjax(getChatStatus,"logUserIn",parameters);
	} else {
		alert("Alle felter skal udfyldes - dette er anonymt");
	}
}

function logOperatorOut() {
	doAjax(getChatStatus,"logOperatorOut");
	clearHistory();
}

function logUserOut() {
	doAjax(getChatStatus,"logUserOut");
	clearHistory();
}

function postMessage() {
	message = $('chatinput').value;
	if(message) {
		parameters = {
			message: message
		}
		doAjax(function(request,json) {handleSentMessage(request,json,message)},'postMessage',parameters);
	}
}

function getNewMessages() {
	doAjax(handleNewMessages,'getMessages');
}

function getTypingActivity() {
	doAjax(handleTypingActivity,'getLastTypingInterval')
}

function registerActivity() {
	doAjax(null,'registerActivity');
}

function registerTyping() {
	if(typingactivitysent == 0) {
		typingactivitysent = 1;
		t=setTimeout("typingactivitysent=0",shortinterval);
		doAjax(null, 'registerTyping');
	}
}

function handleChatStatusResponse(request,json) {
	var oldStatus = chatStatus;
	var newStatus = json.response;
	if(oldStatus) {
		if(oldStatus.className == "OperatorChat" && oldStatus.has_peer && !newStatus.has_peer) {
			var alertmessage = "Den besøgende loggede ud";
		}
	}
	chatStatus = newStatus;
	updateStatus();
	if(alertmessage) {
		alert(alertmessage);
	}
}

function handleSentMessage(request,json,message) {
	if(!json.response) {
		alert("Beskeden blev ikke afsendt korrekt. Prøv igen");
	} else {
		$('chatinput').value = "";
		addLine(message,"Jeg","self");
	}
}

function handleTypingActivity(request, json){
	if(json.response < shortinterval*1.5) {
		Element.addClassName('chattypingindicator','active');
	} else {
		Element.removeClassName('chattypingindicator','active');
	}
}

function handleNewMessages(request,json) {
	json.response.each(function(row) {
		if(chatStatus.className == "UserChat") {
			sender = "Rådgiver";
		} else {
			sender = "Besøgende";
		}
		if(row.type == "system") {
			sender = "System";
		}
		if(row.type == "info") {
			sender = "Info";
		}
		addLine(row.text,sender,"other");
	});
}

function addLine(message,sender,sendertype) {
	d = new Date();
	new Insertion.Bottom('chathistory', "<p class=\""+sendertype+"Message\">" + formatTime(d.getHours()) + ":" + formatTime(d.getMinutes()) + ":" + formatTime(d.getSeconds()) + " - <strong>"+sender+":</strong> " + message + "</p>");
	$('chathistory').scrollTop = $('chathistory').scrollHeight;
	if(sender == "System") {
		alert(message);
	}
	$('chatinput').focus();
}

function formatTime(number) {
	if(number < 10) {
 		number = "0" + number;
 	}
	return number;
}

function clearHistory() {
	$('chathistory').innerHTML = "";
}

function setBusy() {
	doAjax(getChatStatus,"setBusy");
}

function unsetBusy() {
	doAjax(getChatStatus,"unsetBusy");
}

function doAjax(responseHandler,action,parameters) {
	var url = "chat.php";
	if(parameters) {
		parameters.action = action;
	} else {
		parameters = {action: action};
	}
	
	var pars = $H(parameters).toQueryString();
	var myAjax = new Ajax.Request(
			url, 
			{
				method: 'post', 
				parameters: pars,
				onSuccess: responseHandler,
				onFailure: function() {if(action != "getChatStatus") getChatStatus();}
			});
}

