$(function()
{
    if(table)
    {
        $('.dataview-' + table).addClass('active');

        var $tree = $('#modules').tree({name:'tree-group'});
        var tree  = $tree.data('zui.tree');
        tree.expand($('.dataview-' + table).parents('li'));
    }

    $(document).on('click','.query-view', function()
    {
        var url    = createLink('dataview', 'query', 'id=' + table);
        var result = true;

        if(dataview.used) result = confirm(warningDesign);
        if(result) $.apps.open(url, 'bi');
    });

    initPager(pageID, recPerPage, recTotal, fieldCount);

    $('.first-page,.left-page,.last-page,.right-page').click(function()
    {
        pageID = $(this).data('page');
        queryTableData();
    });

    $('.dropup li a').click(function()
    {
        pageID     = 1;
        recPerPage = $(this).data('size');
        queryTableData();
    })

});

/**
 * Locate page.
 *
 * @param string module
 * @param string method
 * @param string params
 * @access public
 * @return void
 */
function locate(module, method, params)
{
    var link = createLink(module, method, params);
    window.location.href = link;
}

/**
 * Query table data.
 *
 * @return void
 */
function queryTableData()
{
    var params = {};
    params.pageID     = pageID;
    params.recPerPage = recPerPage;
    params.recTotal   = recTotal;
    params.table      = table;
    params.type       = type;
    $.post(createLink('dataview', 'ajaxGetTableData'), params,function(resp)
    {
        resp = JSON.parse(resp);
        buildTable(resp);

        recTotal   = resp.recTotal;
        fieldCount = resp.fieldCount;
        initPager(pageID, recPerPage, recTotal, fieldCount);
    });
}

/**
 * Build dataview data table.
 *
 * @param  object resp
 * @return void
 */
function buildTable(resp)
{
    var dataview   = resp.dataview;
    var clientLang = resp.clientLang;
    var minWidth   = resp.fieldCount * 100 + 'px';

    var html = "<table class='table table-bordered' style='min-width:" +  minWidth + "'>";
    html    += "<thead><tr>";
    for(var field in resp.fields)
    {
        var fieldName = field;
        if(typeof(dataview) != 'undefined' && typeof(dataview.fieldSettings) != 'undefined' && typeof(dataview.fieldSettings[field]) != 'undefined' && typeof(dataview.fieldSettings[field].name) != 'undefined') fieldName = dataview.fieldSettings[field].name ? dataview.fieldSettings[field].name : field;
        if(typeof(dataview.langs) != 'undefined')
        {
            var langs = JSON.parse(dataview.langs);
            if(langs && typeof(langs[field]) != 'undefined' && typeof(langs[field][clientLang]) != 'undefined') fieldName = langs[field][clientLang] ? langs[field][clientLang] : fieldName;
        }

        html += "<th>" + fieldName + "</th>";
    }
    html += "</tr></thead>";
    html += "<tbody>";

    for(var index in resp.datas)
    {
        var data = resp.datas[index];

        html += '<tr>';
        for(var field in resp.fields)
        {
            var tdValue = (typeof(data[field]) != 'undefined' && data[field]) ? data[field] : 'null';
            html += "<td title='" + tdValue + "'>" + tdValue + "</td>";
        }
        html += '</tr>';
    }
    html += '</tbody>';
    html += '</table>';

    $('#datas').empty();
    $('#datas').append(html);
}

/**
 * Init pager.
 *
 * @param  int pageID
 * @param  int recPerPage
 * @param  int recTotal
 * @access public
 * @return void
 */
function initPager(pageID, recPerPage, recTotal, fieldCount)
{
    var pageID     = parseInt(pageID);
    var recPerPage = parseInt(recPerPage);
    var recTotal   = parseInt(recTotal);
    var pageTotal  = parseInt(Math.ceil(recTotal / recPerPage));

    $('.recTotal').html(recTotalTip.replace('%s', recTotal));
    $('.recPerPage').html(recPerPageTip.replace('%s', recPerPage));

    $('.dropup li').removeClass('active');
    $('.dropup li a').each(function()
    {
        if($(this).data('size') == recPerPage)
        {
            $(this).parent().addClass('active');
            return;
        }
    });

    $('.page-number').html('<strong>' + pageID + '</strong>/<strong>' + pageTotal + '</strong>');

    $('.first-page').data('page', 1);
    $('.left-page').data('page', pageID - 1);
    $('.right-page').data('page', pageID + 1);
    $('.last-page').data('page', pageTotal);

    $('.first-page,.left-page,.last-page,.right-page').removeClass('disabled');
    if(pageID == 1) $('.first-page,.left-page').addClass('disabled');
    if(pageID == pageTotal) $('.last-page,.right-page').addClass('disabled');

    $('#queryResult').html(viewResult.replace('%s', recTotal).replace('%s', fieldCount));
}

/**
 * Set export show or hidden.
 *
 * @param  string stat show|hide
 * @access public
 * @return void
 */
function setExport(stat)
{
    if(stat == 'show') $('.dataview-export').removeClass('hidden');
    else $('.dataview-export').addClass('hidden');
}
