var sSbcAjaxContentMarker = '<!--CONTENT_MARKER-->';
var sSbcAjaxRowDelimiter = '~*';
var sSbcAjaxColDelimiter = '|';

function sbtvAjaxRequest(
    url,
    params,
    response_handler
)
{
    this.url = url;
    this.params = params;
    this.response_handler = response_handler;
    this.status = 'requested';
    this.statusMsg = '';
    this.dtReq = Date();
}

function sbtvAjaxObject()
{
    var aRequest = new Array();
    var bRequestInProgress = false;
    var ixCurrentRequest = 0;

    var oSbtvXmlHttp = null;
    try { oSbtvXmlHttp = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) {}
    try { oSbtvXmlHttp = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) {}
    try { oSbtvXmlHttp = new XMLHttpRequest(); } catch(e) {}
    if( oSbtvXmlHttp == null )
    {
        alert( 'Ajax is not available.  This site requires Ajax.' );
    }
    
    this.SubmitNextRequest = function()
    {
        if( bRequestInProgress == false )
        {
            var ixReq;
            var reqNext;
            var reqCurrent;
            for( ixReq = 0; ixReq < aRequest.length; ixReq++ )
            {
                reqNext = aRequest[ixReq];
                if( (reqNext.status == 'requested') && (bRequestInProgress == false) )
                {
                    oSbtvXmlHttp.open('POST', reqNext.url , true);
                    oSbtvXmlHttp.onreadystatechange = function()
                    {
                        if ((oSbtvXmlHttp.readyState==4) || (oSbtvXmlHttp.readyState=='complete'))
                        {
                            reqCurrent = aRequest[ixCurrentRequest]
                            if (oSbtvXmlHttp.status == 200)
                            {
                                reqCurrent.status = 'completed';
                                reqCurrent.response_handler( oSbtvXmlHttp.responseText );
                                aRequest.splice(ixCurrentRequest,1);
                                
                            } else {
                                reqCurrent.status = 'error';
                                reqCurrent.statusMsg = 'oSbtvXmlHttp.status:' + oSbtvXmlHttp.status;
                                admLog( 'error', reqCurrent.statusMsg );
                            }
                            bRequestInProgress = false;
                            sbtvAjax.Diag();
                            sbtvAjax.SubmitNextRequest();
                        }
                    }
                    oSbtvXmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
                    oSbtvXmlHttp.setRequestHeader('Content-length', reqNext.params.length);
                    oSbtvXmlHttp.setRequestHeader('Connection', 'close');
                    oSbtvXmlHttp.send(reqNext.params);                
                    bRequestInProgress = true;
                    ixCurrentRequest = ixReq;
                    this.Diag();
                }
            }
        }
    }
    
    this.Post = function( url, params, response_handler )
    {
        aRequest.push( new sbtvAjaxRequest( url, params, response_handler ) );
        this.SubmitNextRequest();
    }
    
    this.Diag = function()
    {
    /*
        try
        {
        document.getElementById('top-stories-box').innerHTML = this.Info();
        }
        catch(e)
        {
        }
    */
    }
    
    this.Info = function()
    {
        var ix = 0;
        var req;
        var sHtml = '<table class="sbtv_ajax_req">' +
/*
        '<tr>' +
        '<td style="color: red;font: bold 14px arial;">appName</td>' +
        '<td colspan="5">' + navigator.appName +  '</td>' +
        '</tr>' +
        '<tr>' +
        '<td style="color: red;font: bold 14px arial;">appVersion</td>' +
        '<td colspan="5">' + navigator.appVersion + '</td>' +
        '</tr>' +
*/
        '<tr><td colspan="6" style="background-color:white;">' +
        '<table class="sbtv_ajax_req_info">' +
        '<tr>' +
        '<td style="color: red;font: bold 14px arial;">' +
        '<div' +
        ' style="color:red;cursor:pointer;"' +
        ' onclick="sbtvAjax.Diag()"' +
        '>' +
        'userAgent' +
        '</div>' +
        '</td>' +
        '<td colspan="6">' + navigator.userAgent + '</td>' +
        '</tr>' +
        '</table>' +
        '</td></tr>' +
        '<tr><td>ix</td><td>url</td><td>params</td><td>status</td><td>Msg</td><td>dt</td></tr>';
        for( ix = 0; ix < aRequest.length; ix++ )
        {
            req = aRequest[ix];
            sHtml += '<tr>' +
                '<td><div class="sbtv_ix' + ((ix==ixCurrentRequest)?'_current':'')+ '">' + ix + '</div></td>' +
                '<td>' + req.url + '</td>' +
                '<td>' + req.params + '</td>' +
                '<td>' + req.status + '</td>' +
                '<td>' + req.statusMsg + '</td>' +
//                '<td>' + req.dtReq.getHours() + ':' + req.dtReq.getMinutes() + ':' + req.dtReq.getSeconds() + '.' + req.dtReq.getMilliseconds() + '</td>' +
                '</tr>';
        }
        sHtml += '</table>';
        return sHtml;
    }
}

var sbtvAjax = new sbtvAjaxObject();

