/*****************************************************
 Callbacks Common  
 Requires:
    ASPxCallbackControl
        this script looks for callback controls in this order:
            ControlServerCallback
            PopupServerCallback
            PageServerCallback
            MasterServerCallback
    UpdateUI() function in parent page
    
*****************************************************/
function SendServerCallback(argString, ctl)
{
    return SendServerCallbackArgString(argString, ctl);
}

function SendServerCallbackCommand(command, ctl)
{
    var args = new ArgumentCollection();
    args.items.command = command;
    return SendServerCallbackArgs(args, ctl);
}

function SendServerCallbackArgs(args, ctl)
{
    var argString = args.toString();
    return SendServerCallbackArgString(argString, ctl);
}

function SendServerCallbackArgString(argString, ctl)
{
    if (ctl == undefined)
    {
        ctl = getServerCallbackControl();
    }
    return SendServerCallbackArgStringControl(argString, ctl);
}


function SendServerCallbackArgStringControl(argString, ctl)
{

    if (ctl == undefined)
    {
        alert('callbacks_common.js: no ServerCallback control');
    }
    else
    {
        try
        {
            ctl.PerformCallback(argString);
            return true;
        }
        catch(err)
        {
            if (err.description == undefined)
            {
                alert('callbacks_common.js: ' + err.message);
            }
            else
            {
                alert('callbacks_common.js: ' + err.description);
            }
        }
    }
    
    return false;
}

function getServerCallbackControl()
{
    var ctl = undefined;
    
    try
    {
        ctl = ControlServerCallback;
        //alert('getServerCallbackControl == ControlServerCallback');
    }
    catch(err)
    {
        if (ctl == undefined)
        {
            try
            {
                ctl = PopupServerCallback;
            }
            catch(err)
            {
                if (ctl == undefined)
                {
                    try
                    {
                        ctl = PageServerCallback;
                    }
                    catch(err)
                    {
                        //report this in consumer
                    }
                }
            }
        }
    }
    
    return ctl;
}

function ClientSideCallback(argString) {

    var args = new ArgumentCollection(argString);
    var command = args.items.command;
    var response = args.items.response;
    
    switch (command)
    {
        //do this in UpdateUI()
        //case '':
        //    return;
        case 'selectFolder':
            reloadGoalTree();
            return;
                      
        case 'refresh':
        case 'showAllGoals':
        case 'showPendingGoals':
        case 'showCompletedGoals':
            window.location.href = window.location.href;
            return;
                        
        default:

            var type = args.items.type;
            var msg = args.items.msg;
            switch (type) {
                case 'goal':
                    switch(command)
                    {
                        case 'canDelete':
                            if (response == '1')
                            {
                                //the item can be deleted
                                //ask "Are you sure?"
                                if(ConfirmAreYouSure(msg))
                                {
                                    var key = args.items.itemKey;
                                    args = new ArgumentCollection();
                                    args.items.type = 'goal';
                                    args.items.command = 'delete'; //<---- send delete command
                                    args.items.itemKey = key;
                                    
                                    return SendServerCallbackArgs(args);
                                }
                            }
                            else
                            {
                                //the item was NOT be deleted
                                //TODO: return message from server
                                alert(msg);
                            }
                            
                            return;
                        case 'delete':
                            break;
                            
                        default:
                            break;
                    }
                    break;
                    
                default:
                    break;
            }
        //end default
    }
    
    UpdateUI(args);
}


