function SpotLight () {

	// IE's support for transparent PNGs is horrendous
	// Abort these animation effects
	if ($.browser.msie) {
		return false;
	}
	
	this.shade = $("<div>").attr("id", "shade").appendTo("body");
	this.items = ["#books","#camera","#macbook","#iphone"];
	this.domItems = $(this.items.join(", "));
	
	// Event handlers
	this.onMouseOverFlooring = function(e) {
		if (e.pageY > 100 && this.shade.css("display") == "none") {
			this.domItems.fadeTo("fast", 0.4);
			this.shade.fadeIn("fast");
		};
	};
	
	this.onMouseOutFlooring = function(e) {
		if (this.shade.css("display") == "block") {
			this.domItems.stop(true).fadeTo("fast", 1);
			this.shade.fadeOut("fast");
		}
	};
	
	this.onMouseOverItem = function(e) {
		var selected = e.currentTarget.id.replace("map_","#");
		var items = this.items.slice(0); // clone array
		
		if (this.shade.css("display") != "block") {
			this.shade.fadeIn("fast");
		}
		
		// don't dim the selected item
		items.splice(items.indexOf(selected), 1);
		
		$(selected).stop().fadeTo("fast", 1);
		$(items.join(", ")).stop(true).fadeTo("fast", 0.4);
	};
	
	this.onMouseOutItem = function(e) {
		var y = e.pageY;
		
		if (y > 100 && y < 373) {
			var selected = e.currentTarget.id.replace("map_","#");
			$(selected).stop(true).fadeTo("fast", 0.4);
		} else {
			this.domItems.stop(true).fadeTo("fast", 1);
			this.shade.fadeOut("fast");
		}
	};
	
	// bind events
	$("#container_flooring").mouseenter(
		jQuery.proxy(this.onMouseOverFlooring, this)
	);
	
	$("#books, #macbook").mousemove(
		jQuery.proxy(this.onMouseOverFlooring, this)
	);
	
	$("#container_header, #container_stage").mouseenter(
		jQuery.proxy(this.onMouseOutFlooring, this)
	);
	
	$("#map_books, #map_camera, #map_macbook, #map_iphone").hover(
		jQuery.proxy(this.onMouseOverItem, this),
		jQuery.proxy(this.onMouseOutItem, this)
	);

}
