/**
 * Класс подгрузки данных при скроллинге
 * Вызывается обработчик при превышении скроллингом некоторой величины пикселей. Сейчас 100px
 */

var LScrollClass = Class.create();
LScrollClass.prototype = 
{
    // список отслеживаемых блоков
    observe_blocks: {},

    initialize: function() {
    },
    // регистрация блока и обработчика скроллинга
    observeBlock: function (block_id, handler) {
        var self = this;
        $(block_id).up( ).observe('scroll', self.onScroll.bind(self, block_id));

        if (this.observe_blocks[block_id] != undefined && this.observe_blocks[block_id].dont)
            return;
        this.observe_blocks[block_id] = {
            'block': $(block_id).up( ),
            'handler': handler
        }
        // создадим див для подгрузки контактов для браузеров, не поддерживающих onscroll
        var div = document.createElement('div');
        div = $(div);
        div.addClassName('LScrollMore');

        div.update(str_contacts_more);
        $(block_id).up( ).appendChild(div);
        div.observe('click', self.onHandler.bind(self, block_id));
        this.observe_blocks[block_id].more_div = div;
    },
    // окончание отслеживания
    observeStop: function(block_id) {
        this.observe_blocks[block_id].more_div.hide();
        $(block_id).up().stopObserving('scroll');
    },    
    // не надо отслеживать
    dontObserve: function(block_id) {
        if (this.observe_blocks[block_id] == undefined) this.observe_blocks[block_id] = {};
        else this.observeStop(block_id);
        this.observe_blocks[block_id].dont = true;
    },
    // скроллинг. Проверка на превышение значения. Вызов обработчика
    onScroll: function (block_id) {
        // если onscroll работает, то скроем див
        this.observe_blocks[block_id].more_div.hide();
        var scroll_el = this.observe_blocks[block_id].block;
        var scroll_top = scroll_el.scrollTop;
        var need_load = scroll_el.scrollHeight - scroll_el.scrollTop - scroll_el.getHeight() < 100;
        if (need_load)
            this.onHandler(block_id);
    },
    // Вызов обработчика
    onHandler: function (block_id) {
        this.observe_blocks[block_id].handler();
    }
}
