References = {
    container: 'references', // default 'id' for references block
    add: function(where) {
        var container = $('#' + this.container);
        var holder = container.find('.holder ul');
        var data = this.data;
		var first = Number(holder.find('.first').attr('data'));
		var last = Number(holder.find('.last').attr('data'));
        
		// creating blocks from top
		if (where == 0)
			for (var key = first - 1; key >= first - 10 && key > last; key--)
				$('<li class="first" data="' + key + '"><div class="t"><h3>' + data[key].title + '</h3><p>' + data[key].text + '</p></div><div class="b"></div></li>').insertBefore(holder.find('.first').removeClass('first'));
		// creating blocks from bottom
		else
			// creating blocks
			for (var key = last + 1; key <= last + 10 && key < first; key++)
				$('<li class="last" data="' + key + '"><div class="t"><h3>' + data[key].title + '</h3><p>' + data[key].text + '</p></div><div class="b"></div></li>').insertAfter(holder.find('.last').removeClass('last'));
		
		holder.css({top: -holder.find('.active').position().top});
    },
    // slide up or down
    slide: function(dir){
		var self = this;
        var container = $('#' + this.container);
        var holder = container.find('.holder ul');
        var active = holder.find('.active');
        var buttons = container.find('.up, .down');
        
        if (active.prev().prev().prev().hasClass('first')) this.add(0);
		if (active.next().next().next().hasClass('last')) this.add(1);
        
        var last = holder.find('li:last');
        var first = holder.find('li:first');
        
        // for .up click
        if (dir == 1) {
            last.insertBefore(first);
            holder.css({top: -active.position().top});
            
            var pos = Math.ceil(active.removeClass('active').prev().addClass('active').position().top);
        }
        // for .down click and interval sliding
        else {
			first.insertAfter(last);
			holder.css({top: -active.position().top});
                
            var pos = Math.ceil(active.removeClass('active').next().addClass('active').position().top);
        }
        container.unselectable();
        holder.animate({top: -pos}, function() {
			buttons.removeClass('off');
			container.selectable();
		});
    },
    
    // setup blocks and clicks
    init: function(data){
        var self = this;
        var data = this.data = data;
        var container = $('#' + this.container);
        var holder = container.find('.holder ul');
        var buttons = container.find('.up, .down');
		var insert = '';
        
		self.interval = window.setInterval(function(){
			self.slide()
		}, 5000);
        
        container.removeClass('loading');
        
        // creating blocks
		for (var key = data.length - 7; key < data.length; key++) {
			insert += '<li' + (key == data.length - 7 ? ' class="first"' : '') + ' data="'+key+'"><div class="t"><h3>' + data[key].title + '</h3><p>' + data[key].text + '</p></div><div class="b"></div></li>';
		}
        
		for (var key = 0; key <= 7; key++){
			insert += '<li' + (key == 0 ? ' class="active"' : (key == 7 ? ' class="last"' : '')) + ' data="'+key+'"><div class="t"><h3>' + data[key].title + '</h3><p>' + data[key].text + '</p></div><div class="b"></div></li>';
		}
			
		holder.html(insert);
		holder.css({top: -holder.find('.active').position().top});
        
        // moving blocks up
        container.find('.down').click(function(){
            if (!buttons.hasClass('off')) {
                buttons.addClass('off');
                self.interval = window.clearInterval(self.interval);
                self.slide();
				if (typeof slide != 'undefined') slide = window.clearInterval(slide);
				slide = window.setTimeout(function(){
					slide = window.clearInterval(slide);
					self.interval = window.setInterval(function(){
						self.slide()
					}, 5000);
				}, 15000);
            }
            return false;
        }).hover(function(){
        	$(this).addClass('downhover');
        }, function(){
        	$(this).removeClass('downhover');
        });
        
        // moving blocks down
        container.find('.up').click(function(){
            if (!buttons.hasClass('off')) {
                buttons.addClass('off');
                self.interval = window.clearInterval(self.interval);
                self.slide(1);
				if (typeof slide != 'undefined') slide = window.clearInterval(slide);
				slide = window.setTimeout(function(){
					slide = window.clearInterval(slide);
					self.interval = window.setInterval(function(){
						self.slide()
					}, 5000);
				}, 15000);
            }
            return false;
        }).hover(function(){
        	$(this).addClass('uphover');
        }, function(){
        	$(this).removeClass('uphover');
        });
    }
};
$.fn.unselectable = function() {
    return this.each(function() {
        $(this)
            .css('-moz-user-select', 'none')
            .css('-khtml-user-select', 'none')
            .css('user-select', 'none');
        if ($.browser.msie) {
              $(this).each(function() {
                    this.ondrag = function() {
                            return false;
                    };
            });
            $(this).each(function() {
                    this.onselectstart = function() {
                            return (false);
                    };
            });
        } else if($.browser.opera) {
            $(this).attr('unselectable', 'on');
        }
    });
};
$.fn.selectable = function() {
    return this.each(function() {
        $(this)
            .css('-moz-user-select', '')
            .css('-khtml-user-select', '')
            .css('user-select', '');
        if ($.browser.msie) {
              $(this).each(function() {
                    this.ondrag = function() {
                            return true;
                    };
            });
            $(this).each(function() {
                    this.onselectstart = function() {
                            return (true);
                    };
            });
        } else if($.browser.opera) {
            $(this).attr('unselectable', 'off');
        }
    });
};
