var sSELECTEDSERVER = '';
var sACTIVESERVERTAB = 'cronlogs';
var bSETADDRESSBAR = false;
var sTABLEFILTER = '';

var iRefreshTime = 60;
var iRefreshCounter = 0;

var bDEBUG=0;

var oAjax=false;

/**
 * show log on console ... if bDEBUG is true
 * @param {string} sMessage
 * @returns {undefined}
 */
function clog(sMessage){
    if(bDEBUG){
        console.log("--- DEBUG: "+sMessage);
    }
}
/**
 * get query parameters from url as object
 * @returns {object}
 */
function getQueryParams() {
    var qs = document.location.search.split('+').join(' ');
    var params = {},
            tokens,
            re = /[?&]?([^=]+)=([^&]*)/g;
    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
    }
    return params;
}

/**
 * make an ajax-request and put response content into given div id
 * @param {string} id         id of the div to be filled
 * @param {type}   sMoreData  more data for get param
 * @returns {undefined}
 */
function getPageItem(id, sMoreData, bNoAdressbarUpdate) {
    clog("getPageItem('"+id+"', '"+sMoreData+"')");
    // $('#'+id).html('reading ...');
    if (!$('#' + id).hasClass('active')) {
        $('#errorlog').html('#' + id + ' is not active');
        return false;
    }
    var phpscript = 'get.php';
    $('#' + id).css('opacity', '0.2');

    sData = 'item=' + id + '&server=' + sSELECTEDSERVER + (sMoreData ? '&'+sMoreData : '');
    if(!bNoAdressbarUpdate){
        setAdressbar();
        iRefreshCounter=0;
    }
    jQuery.ajax({
        url: phpscript,
        data: sData,
        type: "GET",
        success: function (data) {
            $('#' + id).css('opacity', '1');
            $('#' + id).html(data);
        },
        error: function () {
            $('#' + id).css('opacity', false);
            $('#' + id).html('Failed :-/');
            $('#errorlog').html(
                    $('#errorlog').html('AJAX error: <a href="' + phpscript + '?' + sData + '">' + phpscript + '?' + sData + '</a>')
                    );
        }
    });
}

/**
 * show a timer ad a
 * @returns {undefined}
 */
function refreshTimer() {
    if(iRefreshCounter==0){
        $('#counter').html('Refresh in <span>'+(iRefreshTime)+'</span> sec'+'<div style="width:100%;">&nbsp;</div>');
    } else {
        $('#counter span').html(iRefreshTime-iRefreshCounter);
        $('#counter div').css('width', (100 - (iRefreshCounter/iRefreshTime*100))+'%');
    }
    iRefreshCounter++;
    if(iRefreshCounter>iRefreshTime){
        refreshPage();
    }
}

/**
 * refresh content with ajax requests
 * @returns {undefined}
 */
function refreshPage() {
    getPageItem('selectserver');
    getPageItem(sACTIVESERVERTAB);
    window.setTimeout("updateFilterFields();", 500);

    iRefreshCounter=0;
}

/**
 * manipulate url in the browser address bar
 * 
 * @returns {undefined}
 */
function setAdressbar() {
    // ?server=neon&tab=graph&q=backup
    if (!bSETADDRESSBAR) {
        return false;
    }
    var url = '?'
            + 'server=' + sSELECTEDSERVER
            + '&tab=' + sACTIVESERVERTAB
            + '&q=' + sTABLEFILTER// + $('#datatable1_filter label input').val()+$('#datatable2_filter label input').val()
            ;
    window.history.pushState('dummy', 'Title', url);
    // window.location.reload();
}
/**
 * set server and show show its current content item (log, graph, ...)
 * this action is used after clicking a servername in the navigation
 * 
 * @param {string} sServer
 * @returns {undefined}
 */
function setServer(sServer) {
    clog("setServer('"+sServer+"')");
    if (!sServer) {
        return false;
    }
    sSELECTEDSERVER = sServer;
    
    // write name
    $('#lblServername').html('<i class="far fa-hdd"></i> ' + sSELECTEDSERVER);

    // load current content item
    getPageItem(sACTIVESERVERTAB);
}

/**
 * onclick callback for tabs crontable, crontabs, graph
 * @param {object} oLink    clicked link
 * @param {string} sTabid   id of active div
 * @returns {undefined}
 */
function setTab(oLink,sTabid) {
    var sTabid = $(oLink).attr('href').replace(/^#/, '');

    $('nav.tabs a').each(function () {
        $(this).removeClass('active');
    });
    $(oLink).addClass('active');
    setTabId(sTabid);
    setServer(sSELECTEDSERVER);
}

/**
 * activate a div to get content via AJAX
 * 
 * @param {string} sTabid
 * @returns {undefined}
 */
function setTabId(sTabid){
    clog("setTabId('"+sTabid+"')");
    sACTIVESERVERTAB = sTabid;
    sTABLEFILTER = '';
    $('#tabcontent div').each(function () {
        $(this).removeClass('active');
        // $(this).html('Moment...');
    });
    $('#' + sTabid).addClass('active');

    // setServer(sSELECTEDSERVER);
}

/**
 * open overlay and show a file
 * @param {type} sLogfile
 * @returns {undefined}
 */
function showFile(sLogfile) {
    clog("showFile('"+sLogfile+"')");
    $('#overlay').show();
    sLOGFILE=sLogfile;
    oAjaxHelper.setVar('logfile', sLOGFILE);
    oAjaxHelper.execTask('showlog');
    // getPageItem('showlog', 'logfile=' + sLOGFILE, true);
}
/**
 * close overlay
 * @param {type} sLogfile
 * @returns {undefined}
 */
function closeOverlay() {
    $('#overlay').fadeOut(300);
}

/**
 * update filter field for datatable with value of param q=
 * @returns {undefined}
 */
function updateFilterFields() {
    if ($('#datatable1_filter label input')) {
        $('#datatable1_filter label input').val(sTABLEFILTER);
        $('#datatable1').dataTable().fnFilter(sTABLEFILTER);
        // $('#datatable1').dataTable().bind('filter', 'setAdressbar()');
    }
    if ($('#datatable2_filter label input')) {
        $('#datatable2_filter label input').val(sTABLEFILTER);
        $('#datatable2').dataTable().fnFilter(sTABLEFILTER);
        // $('#datatable1').dataTable().bind('filter', 'setAdressbar()');
    }
}


// ----------------------------------------------------------------------
// MAIN
// ----------------------------------------------------------------------

$(document).ready(function () {

    var oQuery = getQueryParams();
    var sServer = oQuery.server ? oQuery.server : 'ALL';
    var q = oQuery.q ? oQuery.q : '';
    var sTab = oQuery.tab ? oQuery.tab : '';

    setServer(sServer);
    getPageItem('selectserver');

    if (sTab) {
        var oLink = $('a[href="#' + sTab + '"]').first();
        setTab(oLink);
    }
    if (q) {
        sTABLEFILTER=q;
        window.setTimeout("updateFilterFields();", 500);
    }
    bSETADDRESSBAR = true;
    window.setInterval('refreshTimer()', 1000);

        // test section for asimax
        var aOptions={

            'apibase': 'get.php',
            'taskparam': 'item',

            'tasks':{
                'selectserverAll':{
                    domid: 'selectserver',
                    apimore: '?',
                    params: [],
                    interval: 0
                },
                'selectserver':{
                    domid: 'selectserver',
                    apimore: '?',
                    params: [
                        'server'
                    ],
                    interval: 0
                },
                'showlog':{
                    apimore: '?',
                    params: [
                        'logfile'
                    ],
                    interval: 0
                }
            }
        };
        oAjaxHelper=new asimax(aOptions);
        oAjaxHelper.setVar('server', sSELECTEDSERVER);
        oAjaxHelper.setVar('tab', sACTIVESERVERTAB);
        oAjaxHelper.execTask('selectserver');
        // oAjaxHelper.execTask('selectserverAll');
});

/*
window.onpopstate = function(event) 
{
    history.back();
    refreshPage();
};
*/