/* QwwJs_Hub
 * 
 * Part of the QlikWeb WorkBench Javascript Library (http://www.qlikwebworkbench.com)
 *
 * Copyright (c) 2007 Industrial CodeBox Ltd. All Rights Reserved.
 * http://www.industrialcodebox.com
 * Email support@industrialcodebox.com for licensing and support information.
 */
 
function QwwJs(){}

QwwJs.EnsureIdHasHash = function(id)
{
    if(id.substring(0, 1) == "#")
    {
        return id;
    }
    else
    {
        return "#" + id;
    }
};

QwwJs.Alert = function(msg)
{
    alert("QWW: " + msg);
};

function QwwJs_Hub()
{
    var objectsToCallOnAvqUpdateCompleteOn = new Array();    
    var objectsToCallOnAvqUpdateBeginOn = new Array();    
    var objectsToOnDocumentLoadedOn = new Array();    
      
    this.doesArrayContainReference = function(arr, ref)
    {
        for(var i = 0; i < arr.length; i++)
        {
            if(arr[i] == ref)
            {
                return true;
            }
        }
        
        return false;
    };
      
    this.AddObjectToCallOnAvqUpdateComplete = function(obj)
    {
        var arr = objectsToCallOnAvqUpdateCompleteOn;
        
        if(!this.doesArrayContainReference(arr, obj))
        {                    
            arr[arr.length] = obj;
        }
    };

    this.AddObjectToCallOnAvqUpdateBegin = function(obj)
    {
        var arr = objectsToCallOnAvqUpdateBeginOn;

        if(!this.doesArrayContainReference(arr, obj))
        {                    
            arr[arr.length] = obj;
        }
    };
    
    this.AddObjectToCallOnDocumentLoadedOn = function(obj)
    {
        var arr = objectsToOnDocumentLoadedOn;

        if(!this.doesArrayContainReference(arr, obj))
        {                    
            arr[arr.length] = obj;
        }
    };
    
    this.Register = function(obj)
    {
        if(obj.OnAvqUpdateComplete)
            this.AddObjectToCallOnAvqUpdateComplete(obj);
            
        if(obj.OnAvqUpdateBegin)
            this.AddObjectToCallOnAvqUpdateBegin(obj);
            
        if(obj.OnDocumentLoaded)
            this.AddObjectToCallOnDocumentLoadedOn(obj);
    };

    this.CallAllOnDocumentLoadedHandlers = function()
    {
        var arr = objectsToOnDocumentLoadedOn;

        for(var j = 0; j < arr.length; j++)
        {
            var o = arr[j];
            
            if(o.OnDocumentLoaded)
                o.OnDocumentLoaded();
        }
    };
        
    this.CallAllOnAvqUpdateCompleteHandlers = function()
    {
        var arr = objectsToCallOnAvqUpdateCompleteOn;

        for(var j = 0; j < arr.length; j++)
        {
            var o = arr[j];
            
            if(o.OnAvqUpdateComplete)
                o.OnAvqUpdateComplete();
        }
    };

    this.CallAllOnAvqUpdateBeginHandlers = function()
    {
        var arr = objectsToCallOnAvqUpdateBeginOn;

        for(var j = 0; j < arr.length; j++)
        {
            var o = arr[j];
            
            if(o.OnAvqUpdateBegin)
                o.OnAvqUpdateBegin();
        }
                
    };
   
    this.OnError = function(msg)
    {
        alert("QWW Error: " + msg);
    };
    
    this.Start = function()
    {
        Avq.Start();
    };
    
};

var qwwHub = new QwwJs_Hub();

$(document).ready(function()
{
    qwwHub.Start();
    
    qwwHub.CallAllOnDocumentLoadedHandlers();
});


function QwwJs_UpdatingFeedbackCtlMgr(cfgObj)
{
    this.Cfg = cfgObj;
    this.Cfg.Enabled = true;

    if(!this.Cfg.ElementID)
    {
        QwwJs.Alert("QwwJs_UpdatingFeedbackCtl:No ElementID specified");
        this.Cfg.Enabled = false;
        return;
    }
    
    if(!this.Cfg.UpdatingHtml)  
        this.Cfg.UpdatingHtml = "<img src='../images/qvupdating.gif' /> Updating...";

    if(!this.Cfg.NonUpdatingHtml)
        this.Cfg.NonUpdatingHtml = "";
            
    $(document).ready(function()
    {
        document.getElementById(cfgObj.ElementID).innerHTML = cfgObj.UpdatingHtml;
    });
      
    this.setHtml = function(html)
    {
        document.getElementById(this.Cfg.ElementID).innerHTML = html;
    };
    
    this.OnAvqUpdateBegin = function()
    {
        if(this.Cfg.Enabled = true)
            this.setHtml(this.Cfg.UpdatingHtml);
    };
    
    this.OnAvqUpdateComplete = function()
    {
        if(this.Cfg.Enabled = true)
            this.setHtml(this.Cfg.NonUpdatingHtml);
    };
    
    if(qwwHub)
        qwwHub.Register(this);
};