function initialize_calendar() {
/********************** highlights *****************************/

	var selectedColumn = {table: null, columnIdx: null};
	var selectedRow    = null;
	
	var addRowHighlight = function(tr) {
		tr.addClass('highlight');
  	}
  	var removeRowHighlight = function(tr) {
  		tr.removeClass('highlight');
  	}
	
  	var toggleColumnHighlight = function() {
		if(selectedColumn.table == null) return;
			
  		$each(selectedColumn.table.rows, function(tr) {
  			var td = $(tr.cells[selectedColumn.columnIdx]);
  			if(td.hasClass('cornish')) td.toggleClass('cornish-highlight');
  			if(td.hasClass('english')) td.toggleClass('english-highlight');
  			if(td.hasClass('import')) td.toggleClass('import-highlight');
  		});
  	}
  		
  	var toggleRowCellHighlight = function() {
		if(selectedRow == null) return;
					
  		$each(selectedRow.cells, function(td) {
  			$(td).toggleClass('highlight');
  		});
  	}
  	
/************************ hover ********************************/
  	
  	var detailsHover   = $('details_hover');
  	var noPhotoFlash   = $('thumbnail_overlay_1');
  	var photoFlash     = $('thumbnail_overlay_2'); 

	var updateDetailsHover = function(name, description, image, link) {
		var clickToView = detailsHover.getElement('p.click_to_view');
		clickToView.getElement('a').href = link;
		if(link != null) {
			clickToView.removeClass('hidden');
		} else {
			clickToView.addClass('hidden');
		}

		detailsHover.getElement('h3').setText(name).setStyle('width', '100%')
			.getNext().setText(description);
		
		if(image != '') {
			detailsHover.getElement('img').src = 'images/uploads/thumbnails/'+image+'.jpg';
			noPhotoFlash.addClass('hidden');
			photoFlash.removeClass('hidden');
			
		} else {
			detailsHover.getElement('img').src = 'images/uploads/default/default_thumbnail.jpg';
			noPhotoFlash.removeClass('hidden');
			photoFlash.addClass('hidden');
		}
		
		detailsHover.getElement('.description').adopt(clickToView);
	}

  	var showDetailsHover = function(y) {
  		detailsHover.removeClass('hidden');
  		detailsHover.setStyle('top', y - detailsHover.getCoordinates().height + 70);
  	}
  	
  	var hideDetailsHover = function() {
  		detailsHover.addClass('hidden');
  	}
  	
/*****************events & initialization **********************/
  	
  	new Element('div')
  		.addClass('close-button')
  		.setStyles({
  			'margin': '0 20px 10px 20px',
  			'text-align': 'right',
  			'font-size': '0.9em'
  		})
  		.adopt(new Element('a')
	  		.setStyles({
  				'cursor': 'pointer'
  			})
  			.setText('[Close]')
  			.addEvent('click', function() {
				if(selectedRow != null) removeRowHighlight(selectedRow);
	  			selectedRow = null;
  				hideDetailsHover();
  			})
  		)
		.injectBefore(detailsHover.getElement('.product_type_details .thumbnail'));
  	
  	$ES('table.calendar').each(function(table, tIdx) {
  		$each(table.rows[0].cells, function(th, idx) {
  			th = $(th);
  			
  			if(th.hasClass('category')) return;
  			
  			th.addEvent('mousedown', function() {
				toggleColumnHighlight();
				selectedColumn.table     = th.getParent().getParent();
				selectedColumn.columnIdx = idx;
				toggleColumnHighlight();
			});
  		});
  			
  		$each(table.rows, function(tr, idx) {
			if(idx == 0) return;
			
			tr = $(tr);
			
	  		tr.addEvent('mouseover', addRowHighlight.pass(tr));
  			tr.addEvent('mouseout', function(event) {
  				if(selectedRow == this) return;
  				removeRowHighlight(this);
  			}.bind(tr));
  			
  			tr.addEvent('mousedown', function(event) {
  				if(selectedRow != null) removeRowHighlight(selectedRow);
				addRowHighlight(this);
				selectedRow = this;
				
				var link = this.getElement('a');
				if(link != null) {
					link = link.href;
				}
				var rowData = seasonalData[tIdx][idx - 1];
				
				updateDetailsHover(rowData[0], rowData[2], rowData[1], link);
  				event = new Event(event);
  				showDetailsHover(event.page.y);
  			}.bind(tr));
		});
	});
}

initialize_calendar();

