// grid.js: Showroom, grid mode

var Grid = function() {
	// configuration
	var STARTING_ROWS = 5;
	var ROW_HEIGHT = 145;
	var ROW_ITEMS = 4;
	var PROGRESSIVE = false;

	// private variables & initialization
	var nextDrawAt = null;
	var drawnItems = null;

	// private methods
	function drawItems(n) {
		var l = drawnItems;
		var m = Math.min(l + n, Showroom.getNImages());
		drawnItems = m;
		if(m > l) {
			var block = document.createElement('div');
			document.getElementById('grid').appendChild(block);
			for(var i = l; i < m; i++) {
				var item = Showroom.getItem(i);
				if(item !== null) {
					var title = item.title !== null ? item.title : 'Prodotto';
					block.innerHTML += '<span id="item_' + i + '" style="background-image: url(photo.php?k=' + item.image + '&w=156&h=117);">' + title + '</span>';
				}
			}
		}
	}
	
	function handleScroll(event) {
		if(drawnItems < Showroom.getNImages()) {
			var object = Core.getEventTarget(event);
			if(object.id != 'grid') return;
			var scroll = object.scrollTop;
			if(scroll > nextDrawAt) {
				var rowsToDraw = Math.ceil(scroll / ROW_HEIGHT);
				drawItems(rowsToDraw * ROW_ITEMS);
				nextDrawAt += rowsToDraw * ROW_HEIGHT;
			}
		}
		if(drawnItems >= Showroom.getNImages()) {
			Core.removeEvent(document.getElementById('grid'), 'scroll', handleScroll, false);
		}
	}

	function handleClick(event) {
		var object = Core.getEventTarget(event);
		if(object.id.indexOf('item_') != 0) return;
		Slide.reset();
		Slide.open(parseInt(object.id.substr(5)));
		Showroom.setMode('slide');
	}

	function handleMouseover(event) {
		var object = Core.getEventTarget(event);
		if(object.id.indexOf('item_') != 0) return;
		Showroom.updateDescription(parseInt(object.id.substr(5)));
	}

	function handleMouseout(event) {
		var object = Core.getEventTarget(event);
	//	if(object.id != 'grid') return;
		if(Showroom.getMode() === 'grid') Showroom.clearDescription();
	}

	// public methods
	return {
		draw : function() {
			if(drawnItems === null) {
				drawnItems = 0;
				nextDrawAt = 0;
				if(PROGRESSIVE)
					drawItems(STARTING_ROWS * ROW_ITEMS);
				else
					drawItems(Showroom.getNImages());
			}
		},
		
		clear : function() {
			document.getElementById('grid').innerHTML = '';
			drawnItems = null;
			nextDrawAt = null;
		},

		init : function() {
			var grid = document.getElementById('grid');
			Core.addEvent(grid, 'scroll', handleScroll, false);
			Core.addEvent(grid, 'click', handleClick, true);
			Core.addEvent(grid, 'mouseover', handleMouseover, true);
			Core.addEvent(grid, 'mouseout', handleMouseout, false);
		}
	};
} ();

Core.initLibrary(Grid);

