function add_widget(widget_class)
{
    caller        = new AjaxCaller();
    caller.script = '/briefcase/ajax/widgets.php';
    
    caller.callback = function(result)
    {
        if (result)
        {
            var li       = document.createElement('li');
            li.className = 'component';
            li.id        = result;
            
            var container = document.getElementById('center_column');
            container.insertBefore(li, container.firstChild);
            
            create_widget(li.id);
        }
        else
        {
            Ext.Msg.alert('Error', 'Error adding section! Please check that you entered all information correctly.');
        }
    }
    
    // grab all but the first arguments into an array
    var args = new Array();
    for (var i = 1; i < arguments.length; i++)
    {
        args[args.length] = arguments[i];
    }
    
    caller.call('add_widget', widget_class, args);
}


function copy_widget(widget_id)
{
    var caller    = new AjaxCaller();
    caller.script = '/briefcase/ajax/widgets.php';
    
    caller.callback = function(result)
    {
        if (1 == result)
        {
            Ext.Msg.alert('Add to My Folder', 'Successfully added.');
        }
        else
        {
            Ext.Msg.alert('Add to My Folder', 'Adding failed!');
        }
    }
    
    caller.call('copy_widget', widget_id);
}


var in_progress    = 0;         // number of Ajax calls in progress
var max_ajax_calls = 3;         // max number of calls to allow

// increase max_ajax_calls every 10 sec, so sluggish widgets don't block
var code = window.setInterval('max_ajax_calls++', 10000);

// disable the increment once all widgets are loaded
window.setTimeout('window.clearInterval(code)', 150000);

function create_widget(widget_id, delay)
{
    if (in_progress >= max_ajax_calls)
    {
        window.setTimeout('create_widget("' + widget_id + '")', 1000);
    }
    else if (delay > 0)
    {
        window.setTimeout('create_widget("' + widget_id + '")', delay * 500);
    }
    else
    {
        create_widget_real(widget_id);
    }
}

function create_widget_real(widget_id)
{
    var mgr         = new Ext.UpdateManager(widget_id);
    mgr.timeout     = 150;
    mgr.loadScripts = true;
    
    mgr.on('beforeupdate', function() { in_progress++; });
    mgr.on('failure',      function() { in_progress--; });
    mgr.on('update',       function() { in_progress--; });
    mgr.on('update',       components_init);
    
    mgr.indicatorText = '<img style="border-width: 0; margin: 0 81px;" src="'
        + THEMEDIR07
        + '/images/throbber.gif" alt="Loading..."/>';
    mgr.update('/briefcase/ajax/widgets.php', AjaxCaller.freezeCall('create_widget', widget_id));
}


function display_tech_primer(tp_id)
{
    var mgr         = new Ext.UpdateManager(tp_id);
    mgr.loadScripts = true;
    mgr.on('update', components_init);
    mgr.indicatorText = '<img style="border-width: 0; margin: 0 81px;" src="'
        + THEMEDIR07
        + '/images/throbber.gif" alt="Loading..."/>';
    mgr.update('/briefcase/ajax/widgets.php', AjaxCaller.freezeCall('display_tech_primer', tp_id));
}


function save_minimized_status(widget_id, minimized)
{
    var caller    = new AjaxCaller();
    caller.script = '/briefcase/ajax/widgets.php';
    
    // don't check for errors
    
    caller.call('save_minimized_status', widget_id, minimized);
}


function save_widget_positions()
{
    var caller      = new AjaxCaller();
    caller.script   = '/briefcase/ajax/widgets.php';
    
    // don't check for errors
    
    var widgets    = YAHOO.util.Dom.getElementsByClassName('component');
    var positions = new Object();
    for (var i in widgets)
    {
        if (null != widgets[i].id && 'yui-gen' != widgets[i].id.substr(0, 7))    // skip Yahoo elements
        {
            positions[widgets[i].id] = widgets[i].parentNode.id;
        }
    }
    
    caller.call('save_widget_positions', Ext.util.JSON.encode(positions));
}


function update_widget(widget_id, form)
{
    if (null == form)
    {
        var widget = document.getElementById(widget_id);
        if (null == widget)
        {
            add_widget(widget_id);
            return;
        }
        
        form = widget.getElementsByTagName('form')[0];
    }
    
    var input   = document.createElement('input');
    input.name  = 'func';
    input.value = 'update_widget';
    form.appendChild(input);
    
    var input   = document.createElement('input');
    input.name  = 'widget_id';
    input.value = widget_id;
    form.appendChild(input);
    
    var input   = document.createElement('input');
    input.name  = 'minimized';
    input.value = '';
    form.appendChild(input);
    
    var mgr         = new Ext.UpdateManager(widget_id);
    mgr.loadScripts = true;
    mgr.on('update', components_init);
    mgr.indicatorText = '<img style="border-width: 0; margin: 0 81px;" src="'
        + THEMEDIR07
        + '/images/throbber.gif" alt="Loading..."/>';
    mgr.formUpdate(form, '/briefcase/ajax/widgets.php');
}


function widget_is_minimized(widget_id)
{
    var parent = document.getElementById(widget_id);
    while ('component' != parent.className)
    {
        parent = parent.parentNode;
    }
    
    /*
    if (YAHOO.util.Dom.getStyle(item, "opacity") == 0)
    {
        return false;
    }
    */
    
    // find main panel
    var mainPanel = YAHOO.util.Dom.getElementsByClassName("component-panel", "li", parent)[0];
    
    if ('none' == YAHOO.util.Dom.getStyle(mainPanel, 'display'))
    {
        return false;
    }
    else
    {
        return true;
    }
}
