var $HIDING = false;
var $RECEIVED_DATA = null;
var $DELAY = 50;

var $BEFORE_LOAD_LISTENER = function() {
    $HIDING = true;
    $RECEIVED_DATA = null;
    setTimeout(function() {
        hideThumb($ELEMENTS_PER_PAGE - 1);
    }, 10);
};

var $RENDERER = function (records) {
    $RECEIVED_DATA = records;

    if ($HIDING) return;

    setTimeout(function() { showThumb(0); }, 10);
}

function hideThumb(thumbIndex) {
    getElement('cd',thumbIndex).style.visibility = "hidden";
    if ((--thumbIndex) >= 0) {
        setTimeout(function() {
            hideThumb(thumbIndex);
        }, $DELAY);
        return;
    }
    $HIDING = false;
    if ($RECEIVED_DATA)
        setTimeout(function() { showThumb(0); }, $DELAY);
}

function showThumb(thumbIndex) {
    var i = thumbIndex;
    if (!$RECEIVED_DATA || i >= $RECEIVED_DATA.length) return;

    var dt = $RECEIVED_DATA[i].data;
    getElement('cd', i).style.visibility = "visible";

    var li = getElement("li",i);
    var img = getElement("img",i);

    li.style.display = "";
    img.setAttribute("alt", dt.keywords);
    img.setAttribute("title", dt.keywords);
    img.preloader = li;
    img.onload = function() {
        this.preloader.style.display = "none";
    };
    img.onerror = function() {
        this.src = "/static/images/gallery/no-photo.jpg";
        this.preloader.style.display = "none";
    };

    img.src = dt.thumbSrc;
    img.parentNode.href = dt.name + "/";

    getElement("author",i).innerHTML = dt.author;
    getElement("descr",i).innerHTML = dt.descr;
    getElement("size",i).innerHTML = dt.imgSize + ' kb';

    var editP = getElement("edit",i);
    if (editP && dt.editable)
        editP.innerHTML = "<a href='" + $EDIT_URL + "#" + dt.name + "'>редактировать</a>";

    if ((++thumbIndex) < $ELEMENTS_PER_PAGE) {
        setTimeout(function() {
            showThumb(thumbIndex);
        }, $DELAY);
    }
}

var $DOM_CACHE={};
function getElement(prefix, index){
    index = "_"+index;
    if(!$DOM_CACHE[prefix])
        $DOM_CACHE[prefix] = {};

    var res = $DOM_CACHE[prefix][index];
    if(!res)
        res = $DOM_CACHE[prefix][index] = document.getElementById(prefix+index);
    return $DOM_CACHE[prefix][index];
}