
/*mjscript.js*/

/* mjscript.js */
function removeChildren(elem)
{
	while (elem.firstChild)
	{
		elem.removeChild(elem.firstChild);
	}
}

function setSrcDstForLinks(idPattern, srcLang, dstLang)
{
	var i = 0;
	var elem;
	var id = idPattern + i;
	var src = 'srclang=' + srcLang;
	var dst = 'dstlang=' + dstLang;
	while ((elem = document.getElementById(id)) != null)
	{
		var href = elem.href;
		href = href.replace(/(srclang\=)../, src);
		href = href.replace(/(dstlang\=)../, dst);
		elem.href = href;
		++i;
		id = idPattern + i;
	}
}

function updateLinks(srcLang, dstLang)
{
	setSrcDstForLinks('menu', srcLang, dstLang);
	setSrcDstForLinks('link', srcLang, dstLang);
	// setSrcDstForLinks('langlink', srcLang, dstLang);
	setSrcDstForLinks('sitelang', srcLang, dstLang);
	
	var sSrcLang = mglot_langmap[srcLang];
	var sDstLang = mglot_langmap[dstLang];
	
	document.getElementById('link_setlangsrc').title = mglot_titleformat.replace('%LANG%', sSrcLang);
	document.getElementById('link_setlangdst').title = mglot_titleformat.replace('%LANG%', sDstLang);
	// updatePlaceHolders(srcLang);
}

function updateLanguages()
{
	var elemFrom = document.getElementById("srclang");
	var elemTo = document.getElementById("dstlang");
	elemFrom.value = mglot_srclang;
	elemTo.value = mglot_dstlang;
	updateLinks(mglot_srclang, mglot_dstlang);
	updateFlags();

	Dropdown_request('', null);
}

function swapLang()
{
	var elemFrom = document.getElementById("srclang");
	var elemTo = document.getElementById("dstlang");
	var dstLang = elemFrom.value;
	var srcLang = elemTo.value;

	mglot_srclang = srcLang;
	mglot_dstlang = dstLang;
	updateLanguages();

	return false;
}

function updateFlag(elemID, lang)
{
	elemFlag = document.getElementById(elemID);
	elemFlag.src = 'lang' + lang + 's.gif';
}

function updateFlags()
{
	updateFlag("ImageButtonSrc", mglot_srclang);
	updateFlag("ImageButtonDst", mglot_dstlang);
	hideLangPicker();
}

function hideLangPicker()
{
	var elemPopup = document.getElementById("langpicker");
	elemPopup.style.display = "none";
}

function selectLangPicker(lang, dir)
{
	if (dir > 0)
		mglot_srclang = lang;
	else
		mglot_dstlang = lang;
		
	updateLanguages();
}

function activateLangPickerPopUp(elemPopupId, elemAnchorId, curlang, dir)
{
	var elemLangFlag = document.getElementById(elemAnchorId);
	var elemPopup = document.getElementById(elemPopupId);
	
	removeChildren(elemPopup);
	
	var lfnOnClick = {
		nl : function() {selectLangPicker('nl' , dir); return false;},
		en : function() {selectLangPicker('en' , dir); return false;},
		de : function() {selectLangPicker('de' , dir); return false;},
		fr : function() {selectLangPicker('fr' , dir); return false;},
		es : function() {selectLangPicker('es' , dir); return false;},
		se : function() {selectLangPicker('se' , dir); return false;}
	};
	
	// Add flags
	var languages = ['nl', 'en', 'de', 'fr', 'es', 'se'];
	
	for (var i in languages)
	{
		var lang = languages[i];
		var elemAnchor = document.createElement('a');
		elemAnchor.href = '#';
		
		var elemFlag = document.createElement('img');
		elemFlag.src = 'lang' + lang + 'xs.gif';
		if (lang == curlang)
		{
			elemFlag.className = 'langFlagSelectedXS';
		}
		else
		{
			elemFlag.className = 'langFlagXS';
		}
		
		elemFlag.title = mglot_langmap[lang];
		
		elemAnchor.appendChild(elemFlag);
		elemAnchor.onclick = lfnOnClick[lang];
		elemPopup.appendChild(elemAnchor);
	}
	
	elemPopup.style.display = 'block';
	var x = elemLangFlag.offsetLeft;
	var y = elemLangFlag.offsetTop - 10;
	if (dir > 0)
	{
		x -= 40;
	}
	else
	{
		x -= 0;
	}
	elemPopup.style.left = x + "px";
	elemPopup.style.top = y + "px";
	
	return false;
}

function GenerateSearchKey(word)
{
	return word.toLowerCase();
}

var Dropdown_position = -1;
var Dropdown_active_list = null;
var Dropdown_skey = '';

function FillInDropdown(elemDropdown, words)
{
	removeChildren(elemDropdown);
	
	var iLimit = (words.length < 3) ? words.length : 3;
	
	if (iLimit > 0)
	{
		var elemList = document.createElement('ul');
		elemList.className = 'dropdownlist';
		for (var i = 0; i < iLimit; ++i)
		{
			var word = words[i];
			var urlword = encodeURI(word).replace(/%20/g, '+');
			var href = mglot_dropdown_url.replace('%WORD%', urlword);
			href = href.replace('%SRCLANG%', mglot_srclang);
			href = href.replace('%DSTLANG%', mglot_dstlang);

			var elemListItem = document.createElement('li');
			if (i == Dropdown_position)
				elemListItem.className = 'dropdownListItemSelected';
			else
				elemListItem.className = 'dropdownListItem'
			var elemLink = document.createElement('a');
			elemLink.href = href;
			elemLink.appendChild(document.createTextNode(word));
			elemListItem.appendChild(elemLink);
			elemList.appendChild(elemListItem);
		}
		
		elemDropdown.appendChild(elemList);
	}
}

function Dropdown_show(elemDropdown, elemInput, key)
{
	var reqKey = Dropdown_EncodeKey(mglot_srclang, mglot_dstlang, key);

	if (reqKey in mglot_dropdown_list)
	{
		elemDropdown.style.display = "block";
		elemDropdown.style.width = (elemInput.offsetWidth-11) + "px";
		elemDropdown.style.left = (elemInput.offsetLeft+5) + "px";

		FillInDropdown(elemDropdown, mglot_dropdown_list[reqKey]);
		Dropdown_active_list = mglot_dropdown_list[reqKey];
	}
}

function Dropdown_EncodeKey(langSrc, langDst, key)
{
	return  langSrc + langDst + ':' + key.replace(/\s/g, '');
}

function Dropdown_process_response(langSrc, langDst, lWordList)
{
	for(var subkey in lWordList)
	{
		mglot_dropdown_list[Dropdown_EncodeKey(langSrc, langDst, subkey)] = lWordList[subkey];
	}
}

function Dropdown_request(key, fnCallback)
{
	var langSrc = mglot_srclang;
	var langDst = mglot_dstlang;
	var reqKey = Dropdown_EncodeKey(langSrc, langDst, key);
	
	var fnHttpCallback = function(sJSON)
	{
		var pendingCalls = mglot_dropdown_key_requests[reqKey];
		mglot_dropdown_key_requests[reqKey] = null;  // complete

		var oResponse = null;

		try
		{
			oResponse = eval('(' + sJSON + ')');
		}
		catch(e)
		{
		}

		if (oResponse != null)
		{
			var lWordList = oResponse.words;
			Dropdown_process_response(langSrc, langDst, lWordList);

			if (!(reqKey in mglot_dropdown_list))
			{
				var lRootWords = [];
				var iCount = 0;
				for(var subkey in lWordList)
				{
					var subList = lWordList[subkey];
					for (i = 0; i < subList.length && iCount < 3; ++i)
					{
						lRootWords.push(subList[i]);
						++iCount;
					}

					if (iCount >= 3) break;
				}
				mglot_dropdown_list[reqKey] = lRootWords;
			}
		}

		for (var i = 0; i < pendingCalls.length; ++i)
		{
			var fn = pendingCalls[i];
			if (fn !== null) fn();
		}
	};
	
	var fnHttpErrorCallback = function(status, statusText)
	{
		delete mglot_dropdown_key_requests[reqKey];
	};
	
	if (!(reqKey in mglot_dropdown_key_requests))
	{
		mglot_dropdown_key_requests[reqKey] = [fnCallback];  // pending
		var urlGet = mglot_dropdown_query_url.replace('%KEY%', encodeURI(key).replace('%20', '+'));
		urlGet = urlGet.replace('%SRCLANG%', mglot_srclang);
		urlGet = urlGet.replace('%DSTLANG%', mglot_dstlang);
		HTTPlite.getText(urlGet, fnHttpCallback, fnHttpErrorCallback);
	}
	else if (fnCallback !== null)
	{
		fnCallback();
	}
	/*
	else if (mglot_dropdown_key_requests[reqKey] != null)
	{
		mglot_dropdown_key_requests[reqKey].push(fnShowDropdown);
	}
	*/
}

function Dropdown_onkeyup(idInput, idDropdown, keyevent)
{
	var elemDropdown = document.getElementById(idDropdown);
	var elemInput = document.getElementById(idInput);

	if (document.cookie.indexOf('uid=') < 0) return;
	var e = keyevent || window.event;
	var keyCode = e.keyCode;

	if (Dropdown_active_list && Dropdown_active_list.length > 0 && (keyCode == 38 || keyCode == 40))
	{
		if (keyCode == 38)
			--Dropdown_position;
		else
			++Dropdown_position;
			
		if (Dropdown_position >= Dropdown_active_list.length)
			Dropdown_position = 0;
		if (Dropdown_position < 0)
			Dropdown_position = Dropdown_active_list.length-1;
			
		elemInput.value = Dropdown_active_list[Dropdown_position];

		var sKey = Dropdown_skey;
		Dropdown_show(elemDropdown, elemInput, GenerateSearchKey(sKey));
	}
	else
	{
		var sText = elemInput.value;
		if (sText.length > 0)
		{
			var key = GenerateSearchKey(sText);

			var fnShowDropdown = function()
			{
				var sKey = elemInput.value;
				if (sKey.substring(0,sText.length) == sText)
				{ 
					Dropdown_show(elemDropdown, elemInput, GenerateSearchKey(sKey));
				}
			};

			Dropdown_position = -1;
			Dropdown_skey = elemInput.value;

			Dropdown_request(key, fnShowDropdown);	
		}
		else
		{
			// There are no characters, hide the dropdown box.
			elemDropdown.style.display = "none";
			Dropdown_active_list = null;
		}
	}
}

function Dropdown_onblur(idDropdown)
{
	var fnClear = function()
	{
		var elem = document.getElementById(idDropdown);
		elem.style.display = "none";
	};
	
	setTimeout(fnClear, 200);
	Dropdown_active_list = null;
}

/*
function Dropdown_preload()
{
	
}
*/
