﻿var dmtAjaxBlockMarker = "<!-- dmtAjax BLOCK MARKER -->";
var dmtAjaxSectionMarker = "<!-- dmtAjax SECTION MARKER -->";
var dmtAjaxRowMarker = "<!-- dmtAjax ROW MARKER -->";

function dmtAjaxRequest(
    url,
    params,
    response_handler
) {
    this.url = url;
    this.params = params;
    this.response_handler = response_handler;
    this.status = 'requested';
    this.statusMsg = '';
    this.dtReq = Date();
}

function dmtAjaxObject() {
    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;
                            dmtAjax.Diag();
                            dmtAjax.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 dmtAjaxRequest(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="dmtAjax.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 dmtAjax = new dmtAjaxObject();

