//globals
var request_id = false;
var callstatus_pe = false;

function ajax_webcall_submit()
{
    //use of global var: request_id
    var opt = {
        parameters: $('webcall').serialize(true),
        onSuccess: function (t) {
            return_data = t.responseJSON;
            if (return_data.result == 'ok')
            {
                request_id = return_data.requestId;
                $('call_status_wait_image').show();
                $('call_status_close_btn').hide();
                $('call_status_warning_image').hide();
                $('call_status_title').update(call_processing_title);
                $('call_status_msg').update(call_processing);
                open_popup('call_status_box');
                callstatus_pe = new PeriodicalExecuter(pollWebcallStatus, 4);
            }
            else
            {
                return_data = t.responseJSON;
                if (return_data.statusCode == 1)
                {
                    return_data.errors.each(function(s) {
                        if ($(s))
                        {
                            $(s).show();
                        }
                    })
                }
                else
                {
                    $('call_status_title').update(call_error_title);
                    $('call_status_msg').update(call_could_not_connect);
                    $('call_status_wait_image').hide();
                    $('call_status_warning_image').show();
                    $('call_status_close_btn').show();
                    open_popup('call_status_box');
                }
            }
        },
        onFailure: function (t) {
            $('call_status_title').update(call_error_title);
            $('call_status_msg').update(call_could_not_connect);
            $('call_status_wait_image').hide();
            $('call_status_warning_image').show();
            $('call_status_close_btn').show();
            open_popup('call_status_box');
        }
    };
    
    var tmp = new Ajax.Request('/webcall/callgo/', opt);
}

function pollWebcallStatus()
{
    //use of global var: request_id
    var opt = {
        parameters: {'request_id': request_id},
        onSuccess: function (t) {
            return_data = t.responseJSON;
            if (return_data.result == 'ok')
            {
                switch (return_data.statusMsg)
                {
                    case 'Start': //fallthru
                    case 'Received': //fallthru
                    case 'SentToVUI':
                        $('call_status_title').update(call_processing_title);
                        $('call_status_msg').update(call_processing);
                        return; //dont stop the periodicalexecuter
                        break;
                    case 'Ring': //fallthru
                    case 'Processing':
                        $('call_status_title').update(call_processing_title);
                        $('call_status_msg').update(call_calling);
                        return; //dont stop the periodicalexecuter
                        break;
                    case 'Processed': //fallthru
                    case "Answered":
                        $('call_status_title').update(call_done_title);
                        $('call_status_msg').update(call_accepted);
                        //slow down the timer
                        if (callstatus_pe)
                        {
                            callstatus_pe.stop();
                            callstatus_pe = new PeriodicalExecuter(pollWebcallStatus, 16);
                        }
                        break;
                    case 'Busy':
                        $('call_status_warning_image').show();
                        $('call_status_msg').update(call_busy);
                        break;
                    case "NoAnswer":
                        $('call_status_warning_image').show();
                        $('call_status_msg').update(call_no_answer);
                        break;
                    case 'Hangup':
                        $('call_status_title').update(call_done_title);
                        $('call_status_msg').update(call_finished);
                        break;
                    case 'Timeout': //fallthru
                    case 'NoConnect': //fallthru
                    case 'WrongPIN': //fallthru
                    case 'InvalidPhoneNumber': //fallthru
                    case 'NoCredit': //fallthru
                    case 'AskPIN': //fallthru
                    case 'ConfirmedPIN': //fallthru
                    case 'HangupPIN': //fallthru
                    case 'BadUserStatus': //fallthru
                    default:
                        $('call_status_warning_image').show();
                        $('call_status_title').update(call_error_title);
                        $('call_status_msg').update(call_could_not_connect);
                        break;
                }
            }
            else
            {
                $('call_status_warning_image').show();
                $('call_status_title').update(call_error_title);
                $('call_status_msg').update(call_could_not_connect);
            }
            
            $('call_status_wait_image').hide();
            $('call_status_close_btn').show();
            if (callstatus_pe)
            {
                callstatus_pe.stop();
            }
        },
        onFailure: function (t) {
            $('call_status_title').update(call_error_title);
            $('call_status_msg').update(call_could_not_connect);
            $('call_status_wait_image').hide();
            if (callstatus_pe)
            {
                callstatus_pe.stop();
            }
        }
    };
    
    var tmp = new Ajax.Request('/webcall/pollstatus/', opt);
}

function close_status_box()
{
    if (callstatus_pe)
    {
        callstatus_pe.stop();
    }
    close_popup('call_status_box');
}