/*
* LiveMediaArchive 1.0
*
* http://media.yask.org
*
* released under the terms of the GPL
* see http://www.fsf.org/licensing/licenses/gpl.txt for details
*
* $Id: strip.js.php,v 1.54 2006/04/30 19:59:14 rhayader Exp $
*
*/var cp = new cpaint();
cp.set_transfer_mode('get');
cp.set_response_type('object');
cp.set_persistent_connection(false);
cp.set_async(true);
cp.set_proxy_url('');
cp.set_debug(0);

var ct = new cpaint();
ct.set_transfer_mode('get');
ct.set_response_type('text');
ct.set_persistent_connection(false);
ct.set_async(true);
ct.set_proxy_url('');
ct.set_debug(0);

var maxID = 0;
var phs = new Array();
var settingsResult = null;
var modulesResult = null;
var st = new Array();
var tabs = new Array();
var tb = 0;
var docCache = new Array();
var docCacheFT = new Array();
var docOpened = new Array();
var cft = 0;
var cct = 0;
var cit = 0;var controlCache = new Array();
var resetAdd = 0;
var dvPage = 0;
var dvDocID = 0;
var dvModuleID = 0;
var unread = new Array();
var gadgets = new Array();

var dvDate = '';

//--------------------------------------------- Module class
function Module(id, x, y, title, state, size, feed, moduleType, slideID, tabID)
{
    this.id = id;
    this.columnID = x;
    this.x = x;
    this.y = y;
    this.title = title;
    this.state = state;
    this.size = size;
    this.feed = feed;
    this.lastUpdate = -1;
    this.nextCheck = -1;
    this.moduleType = moduleType;
    this.slideID = slideID;
    this.tabID = tabID;
    this.gadget = null;

    this.HTML = function()
    {
        var c = '<div id="ph' + this.id + '" class="placeholder"></div>' +
        '<div id="module' + this.id + '" class="module">' +
        '<span class="control">' +
        '<a href="javascript:ms(' + this.id + ')">+</a>&nbsp;' +
        '<a id="cb' + this.id + '" href="javascript:ce(' + this.id + ')">_</a>&nbsp;' +
        '<a href="javascript:cm(' + this.id + ')">x</a>&nbsp;' +
        '</span>' +
        '<span class="mtitle" id="mtitle' + this.id + '">' + this.title + '</span>' +
        '<div id="ms'+this.id+'" class="msettings"><form id="mf' + this.id +
            '" onsubmit="return saveModuleProperties(' + this.id + ')">' +
        '<table cellspacing="0" cellpadding="2" border="0">' +
        '<tr><td align="right">поток</td>' +
        '<td><input name="feed" class="sff" size="20" /></td></tr>' +
        '<tr><td align="right">название канала</td>' +
        '<td><input name="title" class="sff" size="20" /></td></tr>' +
        '<tr><td align="right">тип модуля</td>' +
        '<td><select name="moduleType" class="sff" ' +
            'onchange="moduleTypeChange(' + this.id + ', this.value);">' +
        '<option value="0"';
        if(this.moduleType == 0)
            c+= ' selected="selected"';
        c += '>список</option>' +
        '<option value="1"';
        if(this.moduleType == 1)
            c+= ' selected="selected"';
        c += '>слайд</option>' +
        '</select></td></tr>' +
        '<tr><td align="right">закладка</td><td><select name="moduleTabID" class="sff">';
        for(var tabID in tabNames)
        {
            c += '<option value="'+tabID+'"';
            if(tabID == activeTabID) c += ' selected="selected"';
            c += '>' + tabNames[tabID] + '</option>';
        }
        c += '</select>' +
        '</td></tr>' +
        '<tr><td align="right">размер канала</td>' +
        '<td><input name="size" class="sff" size="3" value="' + this.size +
            '" /></td></tr>' +
        '<tr><td align="right"><input name="savebutton" type="submit" value="записать" class="sfb" /></td>' +
        '<td><input type="button" value="отмена" class="sfb" ' +
            'onclick="ms(' + this.id + ')" /></td></tr>' +
        '</table>' +
        '</form></div>' +
        '<div id="mb' + this.id + '" class="mbody"' +
        (this.state==0?'':' style="display:none;"') +
        '>' +
        '</div></div>';
        return c;
    }

    this.Check = function()
    {
        if(this.nextCheck > st.timestamp) { return; }
        if(this.feed.match(/^gadget/))
        {
            return this.checkGadget();
        }
        var d = 120;
        if(this.state != 0) d *= 3;
        this.nextCheck = st.timestamp + d;

        document.getElementById('mtitle' + this.id).innerHTML = this.title +
            ' <small>загрузка...</small>';
        cp.call('backend.php', 'check_module', checkModule, this.id, this.lastUpdate);
    }

    this.checkGadget = function()
    {
        if(!this.gadget)
        {
            var m = this.feed.match(/^gadget:\/\/(.+)/);
            this.gadget = m[1];
        }
        eval('var check = false; try { check = Gadget_'+this.gadget+'; }catch(err){}');
        if(!check)
        {
            loadScript('/gadgets/'+this.gadget+'/'+this.gadget+'.js');
        }
        else
        {
            var mtitle = document.getElementById('mtitle' + this.id);
            var mbody = document.getElementById('mb' + this.id);
            var msettings = document.getElementById('ms' + this.id);
            mtitle.innerHTML = 'загрузка...';
            mbody.innerHTML = 'загрузка...';

            eval('gadgets[this.gadget] = new Gadget_'+this.gadget+'(mtitle, mbody, msettings);');
            gadgets[this.gadget].initialize();
            this.nextCheck = 2147483647;
            this.lastUpdate = 2147483647;
        }
    }

    this.setBody = function(body)
    {
        if(body == '') body = '(пусто)';
        var mb = document.getElementById('mb' + this.id);
        mb.innerHTML = body;
    }

    this.Expand = function()
    {
        document.getElementById('mb' + this.id).style.display = 'block';
        this.state = 0;
        cp.call('backend.php', 'save_module_state', Stub,
            this.id, this.x, this.y, this.state);
    }

    this.Collapse = function()
    {
        document.getElementById('mb' + this.id).style.display = 'none';
        this.state = 1;
        cp.call('backend.php', 'save_module_state', Stub,
            this.id, this.x, this.y, this.state);
    }

}

function moduleTypeChange(id, moduleType)
{
    var module = st.getModule(id);
    var f = document.getElementById('mf' + id);
    module.moduleType = moduleType;
}

function setSlide(moduleID, slideID)
{
    var module = st.getModule(moduleID);
    module.slideID = slideID;
    document.getElementById('slide'+moduleID).src='/img/slidewait.gif';
    cp.call('backend.php', 'set_module_slide', reloadModule,
            moduleID, slideID);
}

function saveModuleProperties(id)
{
    var module = st.getModule(id);
    var f = document.getElementById('mf' + id);
    var msettings = document.getElementById('ms' + id);
    module.title = f.title.value;
    module.size = f.size.value?f.size.value:5;
    module.feed = f.feed.value;
    module.tabID = f.moduleTabID.value;
    if(module.tabID == activeTabID)
    {
        cp.call('backend.php', 'save_module_settings', reloadModule,
            id, module.title, module.size, module.feed, module.moduleType, module.tabID);
        msettings.style.display = 'none';
    }
    else
    {
	tabCache[module.tabID] = null;
        cp.call('backend.php', 'add_feed', Stub, -1, module.feed, module.tabID);
        cm(id);
    }

    return false;
}

function reloadModule(result)
{
    var id = result.ajaxResponse[0].find_item_by_id('result', 'id').data;
    var module = st.getModule(id);
    module.nextCheck = -1;
    module.lastUpdate = -1;
}

function ce(id)
{
    var module = st.getModule(id);
    if(module.state == 0) module.Collapse();
    else module.Expand();
}

function cm(id)
{
    document.getElementById('module' + id).style.display = 'none';
    cp.call('backend.php', 'close_module', closeModule, id);
}

function ms(id)
{
    var msettings = document.getElementById('ms' + id);
    var f = document.getElementById('mf' + id);
    var module = st.getModule(id);
    if(msettings.style.display == 'block')
    {
        msettings.style.display = 'none';
    }
    else
    {
        msettings.style.display = 'block';
        if(f)
        {
            f.title.value = module.title;
            f.feed.value = module.feed;
        }
    }
}

function closeModule(result)
{
    var id = result.ajaxResponse[0].find_item_by_id('result', 'id').data;
    var ph = document.getElementById('ph' + id);
    var m = document.getElementById('module' + id);
    ph.parentNode.removeChild(ph);
    m.parentNode.removeChild(m);

    module = st.getModule(id);
    for(index in st.columns[module.x].modules)
    {
        if(st.columns[module.x].modules[index].id == id)
        {
            st.columns[module.x].modules.splice(index, 1);
        }
    }
    delete module;
}

function checkModule(result)
{
    var id = result.ajaxResponse[0].moduleID[0].data;
    var body = result.ajaxResponse[0].body[0].data;
    if(body == 0) body = '';
    var nextCheck = result.ajaxResponse[0].nextCheck[0].data;
    var timestamp = result.ajaxResponse[0].timestamp[0].data;

    var module = st.getModule(id);
    module.nextCheck = nextCheck;
    module.lastUpdate = timestamp;
    var mtitle = document.getElementById('mtitle' + module.id);
    var title = module.title;
    var unreadCount = 0;
    if(body != 'unchanged')
    {
        if(body == '')
        {
            var itemCount = result.ajaxResponse[0].itemCount[0].data;
            body += '<ul>';
            for(i=0; i<itemCount; i++)
            {
                var docID = result.ajaxResponse[0].item[i].docID[0].data;
                var docType = result.ajaxResponse[0].item[i].docType[0].data;
                var date = result.ajaxResponse[0].item[i].date[0].data;
                var docTitle = result.ajaxResponse[0].item[i].title[0].data;
                var isRead = result.ajaxResponse[0].item[i].isRead[0].data;
                var hasBrief = result.ajaxResponse[0].item[i].hasBrief[0].data;
                if(docType == 0)
                {
                    body += '<li';
                    if(isRead == 'yes' && hasBrief == 'no') body += ' class="read"';
                    body += '>';
                    if(hasBrief == 'yes')
                    {
                        body += '<a href="javascript:sd(' + docID + ')"';
                        if(isRead == 'yes') body += ' class="read"';
                        body += '>';
                    }
                    body += docTitle;
                    if(hasBrief == 'yes')
                    {
                        body += '</a>';
                        body += '<div id="db' + docID + '" class="db"></div>';
                    }
                    body += ' ' + date;
                    body += '&nbsp;<a class="out" href="javascript:sdv(' + docID + ', ' + module.id + ')"><img src=/img/o.png></a>';
                }
                else
                {
                    body += '<li class="image">' +
                    '<a href="javascript:previewImage(' + docID + ', ' + module.id + ')">' +
                    '<img src="/image.php?data=' + docID + ',' + module.id + ',thumbnails,0" ' +
                    'width="50" height="50" /></a>';
                }
                body += '</li>';
            }
            body += '</ul>';
        }
        module.setBody(body);
        if(!body.match(/<img/))
        {
            unreadCount = result.ajaxResponse[0].unreadCount[0].data;
            unread[module.id] = unreadCount;
        }
    }
    else
    {
        unreadCount = unread[module.id];
    }
    if(unreadCount) title += ' <b>(' + unreadCount + ')</b>';
    mtitle.innerHTML = title;
    st.timestamp = timestamp;
}

//--------------------------------------------- Column class
function Column(id)
{
    this.id = id;
    this.modules = new Array();

    this.addModule = function(m)
    {
        this.modules.push(m);
    }

    this.HTML = function()
    {
        var res = '';
        for(mi in this.modules)
        {
            res += this.modules[mi].HTML();
        }
        res += '<div id="ph' + (maxID + this.id + 1) + '" class="placeholder"></div>';
        return res;
    }

    this.Check = function()
    {
        for(mi in this.modules)
        {
            var module = this.modules[mi];
            if(module.nextCheck < st.timestamp) module.Check();
        }
    }

    this.getModule = function(id)
    {
        for(mi in this.modules)
        {
            if(this.modules[mi].id == id) return this.modules[mi];
        }
        return null;
    }
}

//--------------------------------------------- Strip class
function Strip()
{
    this.columnCount = 0;
    this.moduleCount = 0;

    this.timestamp = 0;
    this.settingsLoaded = false;
    this.modulesLoaded = false;

    this.columns = new Array();
    this.moduleColumns = {};

    this.id = 0;
    this.tabID = 0;

    this.loadSettings = function()
    {
        var result = settingsResult;

        this.id = result.ajaxResponse[0].find_item_by_id('result', 'stripID').data;
        this.columnCount = result.ajaxResponse[0].find_item_by_id('result', 'colCount').data;
        for(i=0; i<this.columnCount; i++)
        {
            this.columns.push(new Column(i));
        }
        this.timestamp = result.ajaxResponse[0].find_item_by_id('result', 'timestamp').data;

        this.settingsLoaded = true;
    }

    this.loadModules = function()
    {
        var result = modulesResult;
        this.moduleCount = result.ajaxResponse[0].find_item_by_id('result', 'moduleCount').data;
        for(i=0; i<this.moduleCount; i++)
        {
            var id = result.ajaxResponse[0].find_item_by_id('result', 'id' + i).data;
            var x = result.ajaxResponse[0].find_item_by_id('result', 'x' + i).data;
            var y = result.ajaxResponse[0].find_item_by_id('result', 'y' + i).data;
            var title = result.ajaxResponse[0].find_item_by_id('result', 'title' + i).data;
            var state = result.ajaxResponse[0].find_item_by_id('result', 'state' + i).data;
            var size = result.ajaxResponse[0].find_item_by_id('result', 'size' + i).data;
            var feed = result.ajaxResponse[0].find_item_by_id('result', 'feed' + i).data;
            var moduleType = result.ajaxResponse[0].find_item_by_id('result', 'moduleType' + i).data;
            var slideID = result.ajaxResponse[0].find_item_by_id('result', 'slideID' + i).data;
            var tabID = result.ajaxResponse[0].find_item_by_id('result', 'tabID' + i).data;
            if(x >= this.columnCount) x = this.columnCount - 1;
            var module = new Module(id, x, y, title, state, size, feed, moduleType, slideID, tabID);
            this.columns[x].addModule(module);
            this.moduleColumns[id] = x;
            if(id > maxID) maxID = id;
            phs.push(id);
        }

        for(i=0; i<this.columnCount; i++)
        {
            phs.push(maxID + i + 1);
        }
        this.modulesLoaded = true;
    }

    this.Draw = function()
    {
        if(!this.settingsLoaded || !this.modulesLoaded)
        {
            setTimeout('st.Draw()', 1000);
            return;
        }
        var sd = document.getElementById('strip');
        var c = '';
        var colWidth = parseInt(100/this.columnCount);
        c += '<table width="100%"><tr>';
        for(col=0; col<this.columnCount; col++)
            c += '<td valign="top" class="col" id="col' + col +
                '" width="' + colWidth +'%">' +
                this.columns[col].HTML() +
                '</td>';
        c += '</tr></table>';
        sd.innerHTML = c;
        watchOpenedDocs();
        showFinder('add', loadAdd, showAdd);
    }

    this.getModule = function(id)
    {
        var columnID = this.moduleColumns[id];
        return this.columns[columnID].getModule(id);
    }

    this.Check = function()
    {
        for(col=0; col<this.columnCount; col++)
            this.columns[col].Check();
    }

    this.loadSettings();
    this.loadModules();
}

//----------------------------------------- helpers

function saveStripSettings(result)
{
    settingsResult = result;
}

function saveStripModules(result)
{
    modulesResult = result;
}

function LoadStrip()
{
    cp.call('backend.php', 'get_strip_settings', saveStripSettings);
    setTimeout('waitForSettings()', 200);
}

function waitForSettings()
{
    if(!settingsResult)
    {
        setTimeout('waitForSettings()', 200);
        return;
    }
    drawTabs(settingsResult);
    cp.call('backend.php', 'get_strip_modules', saveStripModules);
    setTimeout('waitForModules()', 200);
}

function waitForModules()
{
    if(!modulesResult)
    {
        setTimeout('waitForModules()', 200);
        return;
    }

    st = new Strip();
    document.getElementById('splash').style.display = 'none';
    st.Draw();
    Check();
setTimeout('checkFeeds()', 10000);
        setTimeout('checkIndex()', 5000);
}

function Check()
{
    st.Check();
    st.timestamp += 1;
    setTimeout('Check()', 1000);
}

function addFeed(module_id, feed)
{
    if(document.forms.addfeed)
    {
        document.forms.addfeed.addbutton.disabled = true;
        resetAdd = setTimeout('resetAddForm()', 60000);
    }
    var progress = document.getElementById('loadingfeed');
    if(progress)progress.style.display = 'block';
    cp.call('backend.php', 'add_feed', addFeedResult, module_id, feed, 0);
    return false;
}

function resetAddForm()
{
    var f = document.forms.addfeed;
    f.addbutton.disabled = false;
    document.getElementById('loadingfeed').style.display = 'none';
    f.feed.value = 'http://';
    f.q.value = '';
}

function addFeedResult(result)
{
    var f = document.forms.addfeed;
    if(f)
    {
        f.addbutton.disabled = false;
    }
    var progress = document.getElementById('loadingfeed');
    if(progress) progress.style.display = 'none';

    var error = result.ajaxResponse[0].find_item_by_id('result', 'error').data;
    if(error != '' && error != '0')
    {
        if(resetAdd) clearTimeout(resetAdd);
        try {  f.feed.focus(); } catch(err){}
        alert(error);
        return;
    }
    else
    {
	alert('Feed added. It may take some time to fetch it.');
	addmodule_pages = new Array();
    }

    if(f)
    {
        f.feed.value = 'http://';
        f.q.value = '';
        f.style.display = 'none';
    }

    var id = result.ajaxResponse[0].find_item_by_id('result', 'moduleID').data;
    var x = result.ajaxResponse[0].find_item_by_id('result', 'x').data;
    var y = result.ajaxResponse[0].find_item_by_id('result', 'y').data;
    var title = result.ajaxResponse[0].find_item_by_id('result', 'title').data;
    var state = result.ajaxResponse[0].find_item_by_id('result', 'state').data;
    var size = result.ajaxResponse[0].find_item_by_id('result', 'size').data;
    var feed = result.ajaxResponse[0].find_item_by_id('result', 'feed').data;
    if(x >= st.columnCount) x = this.columnCount - 1;
    var module = new Module(id, x, y, title, state, size, feed, null, null, activeTabID);
    st.columns[x].addModule(module);
    st.moduleColumns[id] = x;
    document.getElementById('col' + x).innerHTML = module.HTML() +
        document.getElementById('col' + x).innerHTML;
}

function hide(id)
{
    document.getElementById(id).style.display='none';
}

function sd(id, where)
{
    if(!where) where = 'db';
    var target = document.getElementById(where + id);
    var module_id = String(target.parentNode.parentNode.parentNode.id);
    if(!module_id.match(/^mb[0-9]+/)) module_id = 0;
    else module_id = module_id.replace(/^mb/, '');
    if(module_id)
    {
        module = st.getModule(module_id);
            module.lastUpdate = -1;
            module.nextCheck = -1;
    }

    target.innerHTML = 'загрузка...';
    if(docOpened[where+id])
    {
        target.style.display = 'none';
        docOpened[where+id] = false;
        return;
    }
    target.style.display = 'block';

    if(docCache[where+id])
        showDoc(where, docCache[where+id]);
    else
        cp.call('backend.php', 'load_doc', loadDoc, id, module_id, where, 0);
}

function sdv(docID, moduleID, offsetTime)
{
    var dv = document.getElementById('docview');
    var dvt = document.getElementById('dvtitle');
    var dvl = document.getElementById('dvlist');
    module = st.getModule(moduleID);
    dvModuleID = moduleID;
    var pageSize = 20;
    if(!offsetTime) offsetTime = 0;
    dvt.innerHTML = module.title;
    dvl.innerHTML = 'загрузка...';
    if(docID) sdvd(moduleID, docID);
    dvPage = 0;
    dvDate = '';

    cp.call('backend.php', 'load_module_docs', loadDocViewList, moduleID, docID, offsetTime,
        dvPage*pageSize, pageSize);

    dv.style.display = 'block';
}

function sdvpage(page)
{
    var dvl = document.getElementById('dvlist');
    dvl.innerHTML = 'загрузка...';
    dvPage = page;

    var pageSize = 20;
    cp.call('backend.php', 'load_module_docs', loadDocViewList, dvModuleID, 0, 0,
        dvPage*pageSize, pageSize);
}

function sdvd(moduleID, docID)
{
    var dvs = document.getElementById('dvscroller');
    dvs.innerHTML = 'загрузка...';
    var li = document.getElementById('dvli' + dvDocID);
    if(li) li.className = '';
    cp.call('backend.php', 'load_doc', loadDocViewDoc, docID, moduleID, '', 1);
    dvModuleID = moduleID;
}

function loadDocViewDoc(result)
{
    id = result.ajaxResponse[0].docID[0].data;
    var title = result.ajaxResponse[0].title[0].data;
    var body = '';
    for(var i in result.ajaxResponse[0].body)
    {
        body += result.ajaxResponse[0].body[i].data + ' ';
    }
    if(!body) body = '';
    var link = result.ajaxResponse[0].link[0].data;
    var time = result.ajaxResponse[0].time[0].data;
    var mediaName = result.ajaxResponse[0].mediaName[0].data;
    var dvs = document.getElementById('dvscroller');
    dvs.innerHTML = '';
    dvs.innerHTML += mediaName + " <b>" + time + "</b>&nbsp;";
    if(link)
        dvs.innerHTML += '<a class="originlink" href="'+link+
            '" target="_blank">оригинал&raquo;</a>';

    dvs.innerHTML += '<h3>' + title + '</h3>';
    dvs.innerHTML += body;
    var li = document.getElementById('dvli' + id);
    if(li) li.className = 'active';
    var a = document.getElementById('dvla' + id);
    if(a) a.className = 'read';
    dvDocID = id;
    module = st.getModule(dvModuleID);
    module.lastUpdate = -1;
    module.nextCheck = -1;
    module.Check();
}
function loadDocViewList(result)
{
    var body = '';
    var dvl = document.getElementById('dvlist');
    var itemCount = result.ajaxResponse[0].itemCount[0].data;
    var activeDocID = result.ajaxResponse[0].docID[0].data;
    var offsetTime = result.ajaxResponse[0].offsetTime[0].data;
    var offsetCount = result.ajaxResponse[0].offsetCount[0].data;

    body += '<div class="dvlheader">';
    body += '<form name="sdvdate" onsubmit="return go_sdvdate()">дата: ' +
        '<input name="date" type="text" size="10" class="sff" value="' + dvDate + '" />' +
        '<input name="timestamp" type="hidden" value="0" />' +
        '<input type="button" value=".." class="sfb" onclick="var cc=document.getElementById(\'calendar-container\');'+
        'cc.style.display=cc.style.display==\'none\'?\'block\':\'none\'" /><input type="submit" value="ok" class="sfb" /></form>';
    body += '<div style="margin:10px;display:none;" id="calendar-container"></div>';
    body += '<a href="javascript:sdvpage(dvPage+1)">&lt;&lt;&nbsp;назад&nbsp;20</a>';
    if(dvPage > 0)
        body += '| <a href="javascript:sdvpage(dvPage-1)">вперед&nbsp;20&nbsp;&gt;&gt;</a>';
    body += '</div>';
    body += '<ul>';
    for(i=0; i<itemCount; i++)
    {
        var docID = result.ajaxResponse[0].item[i].docID[0].data;
        var docType = result.ajaxResponse[0].item[i].docType[0].data;
        var date = result.ajaxResponse[0].item[i].date[0].data;
        var docTitle = result.ajaxResponse[0].item[i].title[0].data;
        var isRead = result.ajaxResponse[0].item[i].isRead[0].data;
        body += '<li id="dvli' + docID + '"';
        if(docID == activeDocID) body += ' class="active"';
        body += '>';
        body += '<a id="dvla' +docID +
            '" href="javascript:sdvd(' + dvModuleID + ', ' + docID + ')"';
        if(isRead == 'yes') body += ' class="read"';
        body += '>';
        body += docTitle;
        body += ' ' + date;
        body += '</li>';
    }
    body += '</ul>';
    dvl.innerHTML = body;
    Calendar.setup(
    {
      flat         : "calendar-container",
      flatCallback : dvDateChanged
    }
    );
    module = st.getModule(dvModuleID);
    module.lastUpdate = -1;
    module.nextCheck = -1;
    module.Check();
}

function dvDateChanged(calendar)
{
    var date = calendar.date;
    document.forms.sdvdate.date.value = date.print("%d-%m-%Y");
    document.forms.sdvdate.timestamp.value = date.print("%s");
    dvDate = date.print("%d-%m-%Y");
}

function go_sdvdate()
{
    var timestamp = document.forms.sdvdate.timestamp.value;
    var dvl = document.getElementById('dvlist');
    dvl.innerHTML = 'загрузка...';

    var pageSize = 20;
    cp.call('backend.php', 'load_module_docs', loadDocViewList, dvModuleID, 0, timestamp,
        dvPage*pageSize, pageSize);
    return false;
}

function showDoc(where, result)
{
    var id = result.ajaxResponse[0].docID[0].data;
    docOpened[where+id] = true;

    var target = document.getElementById(where+id);

    var body = result.ajaxResponse[0].body[0].data;
    if(!body) body = '';
    var link = result.ajaxResponse[0].link[0].data;

    target.innerHTML = body +
        '<p><a href="' + link + '" target="_blank">' +
        'оригинал &raquo;</a></p>';

    var title = result.ajaxResponse[0].title[0].data;
    if(!title) title = "&nbsp;";
    var media_name = result.ajaxResponse[0].mediaName[0].data;
    var time = result.ajaxResponse[0].time[0].data;
}

function loadDoc(result)
{
    var where = result.ajaxResponse[0].where[0].data;
    var id = result.ajaxResponse[0].docID[0].data;
    showDoc(where, result);
    docCache[where+id] = result;
}

function watchOpenedDocs()
{
    for(whereid in docOpened)
    {
        var db = document.getElementById(whereid);
        if(db && docOpened[whereid] && db.style.display != 'block')
        {
            db.style.display = 'block';
            where = whereid.replace(/[0-9]+/, '');
            id = whereid.replace(/[a-z]+/, '');
            if(docCache[whereid]) showDoc(where, docCache[whereid]);
        }
    }
    setTimeout('watchOpenedDocs()', 500);
}

function checkFeedsReply(reply)
{
    if(cft) clearTimeout(cft);
    var time = parseInt(reply);
    if(isNaN(time) || time < 60000) time = 60000;
    cft = setTimeout('checkFeeds()', time);
}
function checkFeeds()
{
    ct.call('check_feeds.php', 'check_feeds', checkFeedsReply);
}
function checkIndexReply(reply)
{
    if(cit) clearTimeout(cit);
    var time = parseInt(reply);
    if(isNaN(time) || time < 60000) time = 60000;
    cit = setTimeout('checkIndex()', time);
}
function checkIndex()
{
    ct.call('check_index.php', 'check_index', checkIndexReply);
}
function previewImage(doc_id, module_id)
{
    var ip = document.getElementById('imagepreview');
    var ipb = document.getElementById('ipbody');
    ip.style.display = 'block';
    ip.style.width = 550 + 'px';
    ip.style.height = 550 + 'px';
    ipb.innerHTML = '<img src="/image.php?doc_id='+doc_id+
        '&module_id='+module_id+'&type=preview&ord=0" />';
}

function read_all()
{
    cp.call('backend.php', 'read_all', loadDocViewList, dvModuleID);
}

function unread_all(moduleID)
{
    cp.call('backend.php', 'unread_all', loadDocViewList, dvModuleID);
}

function loadScript (url) {
  if (document.layers)
    window.location.href = url;
  else if (document.getElementById) {
    var script = document.createElement('script');
    script.defer = true;
    script.src = url;
    document.getElementsByTagName('head')[0].appendChild(script);
  }
}