﻿function BabelWord(strID, strWord)
{
	this.strID = (strID != undefined ? strID : "");
	this.strWord = (strWord != undefined ? strWord : "");
};

function BabelLanguage(strLangID, arrBabelWords)
{
	this.strLangID = strLangID;
	this.arrWords = (arrBabelWords != undefined && arrBabelWords != null) ? arrBabelWords : new Array();
};

function Babel(langId, words)
{
	this.strLangID = null;
	this.mapWordsByLangAndID = new Array();

	this.arrChangeListeners = new Array();

	var me = this;

	this.Init = function (){
		me.AddLang(words, langId);
	}

	this.CallChangeLangHandlers = function() {
		var i;
		for(i=0; i < me.arrChangeListeners.length; i++)
		{
			if(me.arrChangeListeners[i] != null)
			{
				me.arrChangeListeners[i]();
			}
		}
	}

	this.AddLang = function(serverParams, strLangID)
	{
		if(serverParams != undefined && serverParams != null && serverParams.strLangID != undefined && serverParams.strLangID != null && serverParams.arrWords != undefined && serverParams.arrWords != null)
		{
			if (me.mapWordsByLangAndID[serverParams.strLangID] != undefined && me.mapWordsByLangAndID[serverParams.strLangID] != null) {
				me.CallChangeLangHandlers();
				return;
			}
			if (serverParams.arrWords != undefined && serverParams.arrWords != null) {
				me.mapWordsByLangAndID[serverParams.strLangID] = new Object();
				for (var i = 0; i < serverParams.arrWords.compact().length; i++) {
						me.mapWordsByLangAndID[serverParams.strLangID][serverParams.arrWords[i].strID] = serverParams.arrWords[i].strWord;
				}
			}
			
		}
		me.strLangID	= strLangID;
		me.CallChangeLangHandlers();
	}

	this.SetLang = function(strLangID) 
	{
		if(me.strLangID != strLangID)
		{
			g_Srv.strLangID = strLangID;
			var found = false;
			if (me.mapWordsByLangAndID[strLangID] != undefined && me.mapWordsByLangAndID[strLangID] != null) {
				g_Srv.CallFunction("ChangeLang", "download=false", 0, null, null);
				me.strLangID	= strLangID;
				me.CallChangeLangHandlers();
			}
			else {
				g_Srv.CallFunction("ChangeLang", "download=true", 0, me.AddLang, strLangID);
			}
			
		}
	}
	
	this.GetLang = function()
	{
		return me.strLangID;
	}

	this.GetWord = function(strID)
	{
//		for (var i = 0; i < me.mapWordsByLangAndID.length; i++) {
//			if (me.mapWordsByLangAndID[i].strLangID == g_strLangID) {
//			}
//		}
		if ( me.mapWordsByLangAndID 
		  && me.mapWordsByLangAndID[me.strLangID] 
		  && me.mapWordsByLangAndID[me.strLangID][strID] != undefined)
		{
			return me.mapWordsByLangAndID[me.strLangID][strID];
		}
		return strID;
	}

	// Nyelvvaltaskori esemeny

	this.AddListener = function(func)
	{
		var i=0;
		for(i=0; i<me.arrChangeListeners.length; i++)
		{
			if(me.arrChangeListeners[i] == null || me.arrChangeListeners[i] == undefined)
				break;
		}
		me.arrChangeListeners[i] = func;
		return i;
	}

	this.GetListener = function(idListener)
	{
		return me.arrChangeListeners[idListener];
	}

	this.DeleteListener = function(idListener)
	{
		me.arrChangeListeners[idListener] = null;
	}
	
	me.Init();
}