﻿
$(document).ready(function() {
	$("#searchtext").focus();
	
	$("#searchtext").autocomplete({
		source: function(request, response) {
			$.ajax({
				url: "/dict/dict/index",
				dataType: "json",
				data: { direction: $("#rdEstEng").attr("checked"), term: request.term },
				success: function(data) {
					response(data);
				}
			});

		},
		minLength: 3,
		select: function(event, ui) {
			ui.item ? translate(ui.item.value) : "";
		}
	});


	$("#btSearch").click(function() {
		translate($("#searchtext").val());
	});


	$('html').bind("keydown", function(e) {
		var code = (e.keyCode ? e.keyCode : e.which);
		if (code == 13) {
			translate($("#searchtext").val());
			$("#searchtext").focus();
			return;
		}
		if (code == 9) {
			if ($("#langselect :checked").attr("id") == "rdEngEst") {
				$("#rdEstEng").attr("checked", "checked");
				$("#rdEngEst").attr("checked", "");
			}
			else {
				$("#rdEngEst").attr("checked", "checked");
				$("#rdEstEng").attr("checked", "");
			}
			$("#searchtext").focus();
			e.preventDefault();
			return;
		}

	});

	$("#showhelp").click(function() {
		$("#helptext").html('<img src="/dict/Content/wait.gif" alt="wait">');
		$("#helpholder").fadeIn(200);
		$.getJSON('/dict/dict/help', { language: $("#uiEst").hasClass("active") }, function(data) {
			$("#helptext").html(data);
		});



	});

	$("#closebt").click(function() {
		$("#helpholder").fadeOut(200);
	});

	$(".langflag").click(function() {
		$(".langflag").removeClass("active");
		$(this).addClass("active");
		if (this.id == "uiEng")
			uiToEnglish();
		else uiToEstonian();
		setCookie("EngEstDict_uiLanguage", this.id, 30);
	});

	$("#langselect input").click(function() { setCookie("EngEstDict_direction", this.id, 30); });


	var lc = getCookie("EngEstDict_uiLanguage");
	if (lc == "uiEng") {
		$(".langflag").removeClass("active");
		$("#uiEng").addClass("active");
		uiToEnglish();
	}

	var rc = getCookie("EngEstDict_direction");
	if (rc != "")
		$("#" + rc).attr("checked", "checked");

	var w = getParam("term");
	if (w != "") {
		var t = getParam("direction");
		if (t == "EngEst")
			$("#rdEngEst").attr("checked", "checked");
		else $("#rdEstEng").attr("checked", "checked");
		$("#searchtext").val(decodeURIComponent(w));
		translate(decodeURIComponent(w));
	}
});



function translate(word) {
	if ($.trim(word) == "") return;
	
	$("#searchtext").autocomplete('close');
	$("#searchtext").autocomplete('disable');	
	document.location.hash = ($("#rdEstEng").attr("checked") ? "&direction=EstEng" : "&direction=EngEst") + "&term=" + encodeURIComponent(word);

	$("#waitpic").fadeIn("fast");
	$.ajax({
		url: "/dict/dict/translate",
		dataType: "json",
		data: { direction: $("#rdEstEng").attr("checked"), term: word },
		success: function(data) {
			showMatches(data, word);
			$("#searchtext").autocomplete('close');
		},
		complete: function() {
			$("#searchtext").autocomplete('close');
			$("#waitpic").fadeOut("fast");
			$("#searchtext").autocomplete('enable');
		}
	});
}


function uiToEnglish() {

	$("#lbesteng").html("Estonian-English");
	$("#lbengest").html("English-Estonian");
	$("#btSearch").val("Search");
	$("#resetbt").val("Reset");
}


function uiToEstonian() {
	$("#lbesteng").html("Eesti-inglise");
	$("#lbengest").html("Inglise-eesti");
	$("#btSearch").val("Otsi");
	$("#resetbt").val("Puhasta");
}

function showMatches(data, word) {
	var duration = "<span id='duration'>" + data.Duration + "s</span>";
	if (data.Matches.length == 0) {
		$("#results").html("<span><strong>" + word + "</strong>: " + ($("#uiEst").hasClass("active") ? "vastet ei leitud" : "no matches found") + "</span><br>" + duration);
		return;
	}
	var res = "<div id='infoholder'><span id='info'><strong>" + word + "</strong>: " + data.Matches.length + ($("#uiEst").hasClass("active") ? " vastet" : " matches") + "</span><br>" + duration + "</div><div id='matches'>";
	var exactMatch = "";
	for (var i = 0; i < data.Matches.length; i++) {
         exactMatch = data.Matches[i].Original.toLowerCase() == word.toLowerCase() ? " class='exactMatch'" :"";
		res += "<span" + exactMatch + "><strong>" + data.Matches[i].Original + "</strong>: " + data.Matches[i].Translation.replace(/\t/g, ", ") + "</span><br>";
	}


	res += "</div>";
	$("#results").html(res);
}


function setCookie(c_name, value, expiredays) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	document.cookie = c_name + "=" + value +
((expiredays == null) ? "" : ";expires=" + exdate.toUTCString() + ";path=/");
}


function getCookie(c_name) {
	if (document.cookie.length > 0) {
		c_start = document.cookie.indexOf(c_name + "=");
		if (c_start != -1) {
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(";", c_start);
			if (c_end == -1) c_end = document.cookie.length;
			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return "";
}


function getParam(name) {
	name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
	var regexS = "[\\?&]" + name + "=([^&#]*)";
	var regex = new RegExp(regexS);
	var results = regex.exec(window.location.href);
	if (results == null)
		return "";
	else
		return results[1];
}
