// index block init.
$(function() {
    $('#dashboard').dashboard( {
        height           : 245,
        draggable        : false,
        resizable        : false,
        shadowType       : false,
        afterOrdered     : sortBlocks,
        sensitive        : true,
        onResize         : resizeBlock,
        panelRemovingTip : config.confirmRemoveBlock
    });

    /**
     * refresh index block
     * @access public
     * @return void
     */
    var refreshTimer = 1000 * 60 * 5;
    setInterval(function ()
    {
        $('.refresh-panel').trigger('click');
    }, refreshTimer);
});

var versionApiUrl         = v.versionApiUrl;
var xxcCurrentVersion     = v.currentVersion;
var upgradeNoticeInfo     = $.zui.store.get('upgradeNoticeInfo');
var upgradeNoticeStatus   = upgradeNoticeInfo ? upgradeNoticeInfo.status : ''; // notice status `hide`|`show`
var upgradeNoticeInfoInit = {
    date : new Date().getTime(),
    version : xxcCurrentVersion,
    status: 'show',
}

$(function ()
{
    showNotice(xxcCurrentVersion, upgradeNoticeInfo);
    $('#noticeGoUpgrade .close').on('click', function ()
    {
        upgradeNoticeInfoInit.status = 'hide';
        $.zui.store.set('upgradeNoticeInfo', upgradeNoticeInfoInit);
    });
});

function showNotice(xxcCurrentVersion, upgradeNoticeInfo)
{
    if(upgradeNoticeStatus === 'hide' && (new Date().getTime() - upgradeNoticeInfo.date) < 604800000) return;
    // upgradeNoticeInfo && store notice info version > xxc current version
    if(upgradeNoticeInfo && window.compareVersions(upgradeNoticeInfo.version, xxcCurrentVersion) === '1')
    {
        $('#noticeGoUpgrade .version').text(upgradeNoticeInfo.version);
        $('#noticeGoUpgrade').show();
    }
    else
    {
        $.get(versionApiUrl, function (data, status)
        {
            if(status === 'success')
            {
                var versionInfo = typeof data === 'string' ? JSON.parse(data) : data;
                var xxcVersion  = versionInfo[0]['xxcVersion'];
                if(!xxcCurrentVersion || window.compareVersions(xxcVersion, xxcCurrentVersion) === '1')
                {
                    $('#noticeGoUpgrade .version').text(xxcVersion);
                    upgradeNoticeInfoInit.version = xxcVersion;
                    $.zui.store.set('upgradeNoticeInfo', upgradeNoticeInfoInit);
                    $('#noticeGoUpgrade').show();
                }
            }
        });
    }
}

/**
 * Sort blocks.
 *
 * @param  object $orders  format is {'block2' : 1, 'block1' : 2, oldOrder : newOrder}
 * @access public
 * @return void
 */
function sortBlocks(orders)
{
    var oldOrder = new Array();
    var newOrder = new Array();
    for(i in orders)
    {
       oldOrder.push(i.replace('block', ''));
       newOrder.push(orders[i]);
    }

    $.getJSON(createLink('block', 'sort', 'oldOrder=' + oldOrder.join(',') + '&newOrder=' + newOrder.join(',')), function(data)
    {
        if(data.result != 'success') return false;

        $('#home .panels-container .panel:not(.panel-dragging-holder)').each(function()
        {
            var $this = $(this);
            var index = $this.data('order');
            var url = createLink('entry', 'printBlock', 'index=' + index);
            /* Update new index for block id edit and delete. */
            $this.attr('id', 'block' + index).data('id', index).attr('data-url', url).data('url', url);
            $this.find('.panel-actions .edit-block').attr('href', createLink('block', 'admin', 'index=' + index));
        });
    });
}

/**
 * Resize block
 * @param  object $event
 * @access public
 * @return void
 */
function resizeBlock(event)
{
  var blockID = event.element.find('.panel').data('blockid');
  var data = event.type == 'vertical' ? event.height : event.grid;
  $.getJSON(createLink('block', 'resize', 'id=' + blockID + '&type=' + event.type + '&data=' + data), function(data)
  {
      if(data.result !== 'success') event.revert();
  });
}
