﻿function GalleryManager(type, countPerPage)
{
    if (null == xmlHttpRequest) {
        return false;
    }

    var _type = type;
    var _page = 1;
    var _link = '';
    var _imgPath = '';
    var _itemsPerPage = 1;
    var _itemsCount = 0;
    var _pagesCount = 1;
    
    /* links to external elements and binding */
    var _loader = null;
    var _pager = null;
    var _pagerCurrentPage = null;
    var _pagerPagesTotal  = null;
    var _pagerForward = null;
    var _pagerBack = null;
    var _container = null;
    this.bindLoader = function (loader) { _loader = loader; }
    this.bindPager = function (pager) { _pager = pager; }
    this.bindCurrentPage = function (currentElem) { _pagerCurrentPage = currentElem; }
    this.bindPagesTotal = function (totalElem) { _pagerPagesTotal = totalElem; }
    this.bindForwardLink = function (forwardLinkElem) {
        if (!!forwardLinkElem) {
            //alert('bindForwardLink called');
            if ('a' == forwardLinkElem.parentNode.tagName.toLowerCase()) {
                forwardLinkElem.parentNode.parentNode.replaceChild(forwardLinkElem, forwardLinkElem.parentNode);
            }

            _pagerForward = forwardLinkElem;
            _pagerForward.onclick = _doForward;
        }
    }
    this.bindBackLink = function (backLinkElem) {
        if (!!backLinkElem) {
            _pagerBack = backLinkElem;
            _pagerBack.onclick = _doBack;
        }
    }
    this.bindContainer = function (c) {
        _container = c;
        
        if (!!_container) {
            _container.clearChildren = function () {
                while (null != this.firstChild) {
                    this.removeChild(this.firstChild);
                }
            }
        }
    }

    var _doForward = function () {
        if (_page * _itemsPerPage >= _itemsCount) {
            return true;
        }

        if (null == _container) {
            return false;
        }

        _container && _container.clearChildren();
        ++_page;
        _insertItems();
        _pagerCurrentPage && (_pagerCurrentPage.innerHTML = '' + _page);
        
        if (_page < _pagesCount) {
            _pagerForward.style.cursor = 'pointer';
        } else {
            _pagerForward.style.cursor = 'default';
        }

        _pagerBack.style.cursor = 'pointer';
    }

    var _doBack = function () {
        if (_page < 2) {
            return true;
        }

        if (null == _container) {
            return false;
        }

        _container && _container.clearChildren();
        --_page;
        _insertItems();
        _pagerCurrentPage && (_pagerCurrentPage.innerHTML = '' + _page);

        if (_page > 1) {
            _pagerBack.style.cursor = 'pointer';
        } else {
            _pagerBack.style.cursor = 'default';
        }
        
        _pagerForward.style.cursor = 'pointer';
    }

    var _getItems = function () {
        var items = null;

        xmlHttpRequest.open('GET', '/AjaxGallery.aspx?type=' + type + '&page=' + _page, false);
        xmlHttpRequest.onreadystatechange = function () {
            if (4 == xmlHttpRequest.readyState) {
                if (200 == xmlHttpRequest.status && !!xmlHttpRequest.responseXML) {
                    items = xmlHttpRequest.responseXML.documentElement;
                } else {
                    /* error */
                }

                _loader && (_loader.style.display = 'none');
            } else {
                _loader && (_loader.style.display = 'block');
            }
        }
        xmlHttpRequest.send(null);
        return items;
    }
    
    var _insertItems = function () {
        var items = _getItems();
        
        if (null == items) {
            return false;
        }
        
        for (var i = 0; i < items.childNodes.length; ++i) {
            var elem = document.createElement('div');
            elem.className = 'fl FotoAlbumArt';
            var alink = document.createElement('a');
            alink.setAttribute('title', items.childNodes.item(i).getAttribute('title'));
            alink.setAttribute('href', _link + '/' + items.childNodes.item(i).getAttribute('id') + '/');
            alink.className = 'fl';
            alink.style.background = 'url(\'' + _imgPath + '/' + items.childNodes.item(i).getAttribute('image') + '\') no-repeat scroll center';
            /* and more: insert background */
            elem.appendChild(alink);
            _container && _container.appendChild(elem);
        }
    }

    var _getItemsCount = function () {
        var count = 0;
        xmlHttpRequest.open('GET', '/AjaxGallery.aspx?type=' + type + '&getcount=1', false);
        xmlHttpRequest.onreadystatechange = function () {
            if (4 == xmlHttpRequest.readyState) {
                if (200 == xmlHttpRequest.status) {
                    try {
                        _itemsCount = xmlHttpRequest.responseXML.documentElement.childNodes.item(0).getAttribute('value');
                        count = _itemsCount;
                    } catch (e) {
                        _container.innerHTML = 'Exception: ' + e.message;
                    }
                } else {
                    /* error */
                }
                _loader && (_loader.style.display = 'none');
            } else {
                _loader && (_loader.style.display = 'block');
            }
        }
        xmlHttpRequest.send(null);
        /*_pagerPagesTotal || alert('Achtung! _pagerPagesTotal is null!');*/
        _pagerPagesTotal && (_pagerPagesTotal.innerHTML = '' + (parseInt(count / _itemsPerPage) + (0 == (count % _itemsPerPage) ? 0 : 1)));
        _pagesCount = count;
        return count;
    }
    
    this.init = function () {
        switch(type) {
        case 'artists':
            _link = '/artists/all';
            _imgPath = '/upload/contents/383';
            _itemsPerPage = 20;
            break;
        case 'actions':
            _link = '/rusradio/history';
            _imgPath = '/upload/contents/315';
            _itemsPerPage = 6;
            break;
        case 'djs':
            _link = '/air/djs';
            _itemsPerPage = countPerPage;
            _imgPath = '/upload/contents/387/field_2962';
            break;
        default:
            _type = null;
            return;
        }

        _page = 1;
        _getItemsCount();
        //_insertItems();
        _pagerBack.style.cursor = 'default';
        
        if (_pagesCount > 1) {
            _pagerForward.style.cursor = 'pointer';
        } else {
            _pagerForward.style.cursor = 'default';
        }

        if (_itemsPerPage >= _itemsCount) {
            _pager && (_pager.style.display = 'none');
        } else {
            _pager && (_pager.style.display = 'block');
        }
    }
}
