﻿/*
Central manager class handling all page related operations
*/

var LingoManager = Class.create();

LingoManager.prototype =
{
    // Constructor
    initialize : function()
    {
        // Declare variable holding the lingo xml data
        this._xmlData;
        
        // Call RequestData function to get the xml lingo data from the webservice
        this.RequestData();
    },
    
    RequestData : function()
    {
        // Create new Ajax request
        try
        {
            // Write Log Entry
            Logs.WriteNotification('NOTIFY_REQUESTING_DATA', 'RequestData', arguments, 'LINGODATA', null)
            // Request the data
            new Ajax.Request("ISDataService.asmx/GetLingoData", { method : "post", requestHeaders : ['Pragma', 'no-cache', 'Cache-Control', 'no-store, no-cache, max-age=0, must-revalidate'], onSuccess : this.OnDataRequestResponse.bind(this), onFailure: this.OnRequestFail.bind(this) });
        }
        catch(e)
        {
            Logs.WriteException('ERROR_STARTING_REQUEST', 'RequestData', arguments, 'LINGODATA', null, e, false)
        }
    },
    
    OnRequestFail : function()
    {
        Logs.WriteError('ERROR_REQUESTING_DATA', 'RequestData', null, 'WEBTEXT', this.Id);
    },
    
    // Receives entity's xml data from the webservice
    OnDataRequestResponse : function(transport)
    {
        try
        {
            // Write Log Entry
            Logs.WriteNotification('NOTIFY_RECEIVING_DATA', 'OnDataRequestResponse', arguments, 'LINGODATA', null)
            // Set local variable holding the xml data
            this._xmlData = new XmlDocument(transport.responseXML);
        }
        catch(e)
        {
            Logs.WriteException('ERROR_RECEIVING_DATA', 'OnDataRequestResponse', arguments, 'LINGODATA', null, e, false)
        }
    },
    
    GetLingoItem : function(piLingoKey)
    {
        try
        {
            // Check if the xml lingo data is present
            if(this._xmlData == null)
            {
                // Write Alert
                Logs.WriteAlert('ERROR_NULL_ENTITY_DATA', 'GetLingoItem', arguments, 'LINGODATA', null)
                // Return the lingo key
                return piLingoKey.capitalize();
            }
            
            // Get the lingo item xml node
            var lingoItemNode = this._xmlData.SelectSingleNode('IS_XML_DATA[@TYPE=\'LINGODATA\']/GROUP/LINGO_ITEM[@NAME=\'' + piLingoKey.toUpperCase() + '\']/VALUE[@CULTURE=\'' + Site.User.Language + '\']');
            
            // Check if the lingo item xml node is filled
            if(lingoItemNode == null)
            {
                // Write Alert
                Logs.WriteAlert('ALERT_MISSING_FIELD', 'GetLingoItem', arguments, 'LINGODATA', null);
                // Return the lingo  key
                return piLingoKey.capitalize();
            }
            
            // Return the lingo item value
            return lingoItemNode.text;
        }
        catch(e)
        {
            Logs.WriteException('ERROR_RECEIVING_DATA', 'GetLingoItem', arguments, 'LINGODATA', null, e, false)
        }
    }
}