﻿// JavaScript for Populating Language Resource
// Anand J.
// Geoscape
// March 2009

var Geoscape = Geoscape ? Geoscape : {
    GIS : {}
};

Geoscape.GIS.Lang = Geoscape.GIS.Lang ? Geoscape.GIS.Lang : function()
{
    var errStringList = new Array();
    
    errStringList["0en-GB"] = "Language Service is currently unavailable";
    errStringList["0es-ES"] = "Servicio de Idiomas no está ahora disponible";
    errStringList["0fr-FR"] = "Langue de service est actuellement indisponible";
    errStringList["0de-DE"] = "Language Service ist derzeit nicht verfügbar";
    
    var nextLangCode = null;
    
    var LangChgdCBList = new Array();

    function processErr(err)
    {
	Geoscape.GIS.Util.ShowModalDialog("Geoscape", Geoscape.GIS.Lang.GetErrorString("0" + nextLangCode), true);

        var obj = document.getElementById('lBar');
        
        if (obj) Geoscape.GIS.Lang.LangBar.Load(obj.parentNode.id);
    }
    
    function processElements(resList)
    {
	    if (resList)
	    {
	        Geoscape.GIS.Lang.ResourceList = resList;
	        
	        if (Geoscape.GIS.Lang.LangCodes)
	        {
		        var tmp = Geoscape.GIS.Lang.LangCodes[0];

		        Geoscape.GIS.Lang.LangCodes[0] = Geoscape.GIS.Lang.LangCodes[Geoscape.GIS.Lang.LangBar.GetCurrLangIndex()];

		        Geoscape.GIS.Lang.LangCodes[Geoscape.GIS.Lang.LangBar.GetCurrLangIndex()] = tmp;
            }

        	var obj = document.getElementById('lBar');
        
        	if (obj) Geoscape.GIS.Lang.LangBar.Load(obj.parentNode.id);
        	
        	Geoscape.GIS.Lang.PopulateElements();
        }
        
        else processErr(1);

    };
    
	var public =
	{
	    ServiceURL:"http://gis.geoscape.eu",

	    GetErrorString:function(errCode)
	    {
	        errString = errStringList[errCode];
	        
	        if (errString) return errString;

		return "An Error has occurred.<br/><br/>Please report the following error code to Geoscape: <b>Err " + errCode + "</b>";
	        
	        if (errStringList["1"]) return errStringList["1"];
	        
	        browserLang = "en-GB";
	        
	        if (navigator.userLanguage) browserLang = navigator.userLanguage;
	        
	        else if (navigator.language) browserLang = navigator.language;
	        
	        errCode = "0" + browserLang;
	        
	        if (errStringList[errCode]) return errStringList[errCode];
	        
	        return errStringList["0en-GB"];
	    },
	    
	    GetResourceStrings:function(langCode)
	    {
	        req = "lang=" + langCode + "&script=n&RandKey=" + Math.random() * Date.parse(new Date());
	        
	        nextLangCode = langCode;

		Geoscape.GIS.Core.getJson(Geoscape.GIS.Lang.ServiceURL + "/langservices/langservice.gis4", req, processElements, processErr, true);

	    },

	    GetChatCode:function(langCode)
	    {
		switch (langCode)
		{
			case "en-GB": return 469;
			case "de-DE": return 502;
			case "fr-FR": return 503;
			case "es-ES": return 504;
		}
	    },
	    
	    PopulateElements:function()
	    {
            if (null == this.ResourceList) return;
            
            for (var i = 0; i < this.ResourceList.length; i++)
            {
                if (this.ResourceList[i].id == "TITLE") document.title = this.ResourceList[i].content;
                
                else if ("ERR" == this.ResourceList[i].id.substr(0, 3))
                {
                    errStringList[this.ResourceList[i].id.substring(3)] = this.ResourceList[i].content;
                }

		else if ("TTP" == this.ResourceList[i].id.substr(0,3))
		{
                    var obj = document.getElementById(this.ResourceList[i].id.substr(3));
        
                    if (null != obj)
                    {
                        obj.title = this.ResourceList[i].content;
                    }
		}

                else
                {
                    var obj = document.getElementById(this.ResourceList[i].id);
        
                    if (null != obj)
                    {
                        if (obj.innerHTML) obj.innerHTML = this.ResourceList[i].content;
                        
                        else if (obj.value) obj.value = this.ResourceList[i].content;			
                    }
                }
            }
            
            for (var k in LangChgdCBList)
        	{
        	    try
        	    {
        	        LangChgdCBList[k]();
                    }
                
                catch(err)
                {
                    //alert(err.description);
                }
            }
        },
        
        OnLangChanged:function(calleeID, callbackFunc)
        {
            LangChgdCBList[calleeID] = callbackFunc;
        }
    }
	
	return public;
}();

Geoscape.GIS.Lang.LangBar = Geoscape.GIS.Lang.LangBar ? Geoscape.GIS.Lang.LangBar : function()
{
    var LangChgCBList = new Array();
    
    var LangIdx = 0;
    
    var barOpen = false;
    
    var public =
    {
        GetCurrLangIndex:function()
        {
            return LangIdx;
        },
        
        IsOpen:function()
        {
            return barOpen;        
        },
        
        Close:function()
        {
            if (barOpen)
            {
                var obj = document.getElementById('lBar');
        
                if (obj) Geoscape.GIS.Lang.LangBar.Load(obj.parentNode.id);
            }
        },
        
        Load:function(containerID)
        {
            var container = document.getElementById(containerID);
            
            if ((null != container) && (null != Geoscape.GIS.Lang.LangCodes))
            {
                var htmlString = "<div id=\"lBar\" class=\"LangBar\" style=\"position: absolute\">";
                
                var dispLang = Geoscape.GIS.Lang.LangCodes[0].split("-")[0].toUpperCase();
                
                htmlString += "<div class=\"LangItem0\" onclick=\"Geoscape.GIS.Lang.LangBar.Popup('lBar', event);\">" + dispLang + "</div>";
                
                htmlString += "</div>";
                
                container.innerHTML = htmlString;
                
                barOpen = false;
            }
        },
        
        Popup:function(langBarID, ePop)
        {
            var langBar = document.getElementById(langBarID);            
            
            if (null != langBar)
            {
                if (!ePop) var ePop = window.event;

                ePop.cancelBubble = true;
                
                if (ePop.stopPropagation) ePop.stopPropagation();
                
                langBar.className = "LangBarH";
                
                var baseURL = document.URL;
                
                var idx = baseURL.indexOf("?", 0);
                
                if (0 > idx) idx = baseURL.length;
                
                baseURL = baseURL.substring(0, idx);
                
                for (var i = 0; i < Geoscape.GIS.Lang.LangCodes.length; i++)
                {
                    var obj = document.createElement("div");
                    
                    obj.className = "LangItem";
                    
                    obj.onmouseover = function() { this.className = "LangItemH"; }
                    
                    obj.onmouseout = function() { this.className = "LangItem"; }
                    
                    obj.onclick = function(eClk) {
                                                    if (!eClk) var eClk = window.event;
    	                                                
	                                                eClk.cancelBubble = true;
    	                                            
	                                                if (eClk.stopPropagation) eClk.stopPropagation();

                                                    barOpen = false;

                                                    var ckDate = new Date();
                                                    
                                                    ckDate.setDate(ckDate.getDate() + 50);
                        
                                                    var node = this;
                                                    
                                                    var count = 0;
                                                    
                                                    while (node.previousSibling)
                                                    {
                                                        node = node.previousSibling;
                                                        count++;
                                                    }
                                                    
                                                    LangIdx = count;
                                                    
                                                    document.cookie = "lang=" + Geoscape.GIS.Lang.LangCodes[LangIdx] + "; expires=" + ckDate.toUTCString() + "; path=/; domain=geoscape.eu";
                                                    
                                                    Geoscape.GIS.Lang.GetResourceStrings(Geoscape.GIS.Lang.LangCodes[LangIdx]);
                                                    
                                                    for (var k in LangChgCBList)
                                                    {
                                                        try
                                                        {
							    LangChgCBList[k](Geoscape.GIS.Lang.LangCodes[LangIdx]);
                                                        }
                                                        
                                                        catch(err)
                                                        {
                                                            //alert(err.description);
                                                        }
                                                    }
                                                 }
                    
                    obj.innerHTML = Geoscape.GIS.Lang.LangCodes[i].split("-")[0].toUpperCase();
                    
                    if (0 == i) langBar.replaceChild(obj, langBar.firstChild);
                    
                    else langBar.appendChild(obj);
                    
                    barOpen = true;
                }
            }
        },
        
        OnLangChange:function(calleeID, callbackFunc)
        {
            LangChgCBList[calleeID] = callbackFunc;
        },
        
        CurrentLang:function()
        {
            return Geoscape.GIS.Lang.LangCodes[0];
        }
    }
        
    return public;
}();

document.write("<script language=\"javascript\" type=\"text/javascript\" src=\"" + Geoscape.GIS.Lang.ServiceURL + "/langservices/" + (Math.random() * Date.parse(new Date())) + ".gis4\"></script>");