// -------------------------------------------------------------------
// !GYROMouseTooltip
// 
// jQuery plugin that displays mouse tooltip indicating navigation
// options by clicking directly on the background gallery image area 
// -------------------------------------------------------------------
(function($) {

	$.fn.GYROMouseTooltip = function(config) {
		
		// default config overriden with settings if avaialble
		var defaults = {
			"containerId": "#mouse-tooltip",
			"content": {
				"start": {
					"label": "End",
					"offsetX": 0,
					"offsetY": 20
				},
				"end": {
					"label": "End",
					"offsetX": 0,
					"offsetY": 20
				},
				"prev": {
					"label": "Previous",
					"offsetX": 0,
					"offsetY": 20
				},
				"next": {
					"label": "Next",
					"offsetX": 0,
					"offsetY": 20
				}
			}
		};
		
		// the text label of the tooltip
		var label = "";
		var tooltip;
		
		// mouse vs. window coordinate offset due to scrolling
		var scrollOffsets = {
			"x": 0,
			"y": 0
		};

		// override config with any matching settings		
		if (config) {
			$.extend(defaults, config);
		}

		this.update = function(event, data) {

			var viewport = $(window);			

			// if within window
			if (data.mouseCoordinate.x <= viewport.width() && data.mouseCoordinate.y <= viewport.height()) {

				var toolTipProperty = defaults.content[data.tooltipType];
	
				// if the label is not already the new label (we do this to save on changing via text)
				if (label != toolTipProperty.label) { 
					label = toolTipProperty.label;
					tooltip.text(toolTipProperty.label);
				}
	
				var tooltipX = data.mouseCoordinate.x - scrollOffsets.x + toolTipProperty.offsetX;
				var tooltipY = data.mouseCoordinate.y - scrollOffsets.y + toolTipProperty.offsetY;
	
				tooltip.css({
					"left": tooltipX,
					"top": tooltipY
				});

				tooltip.show();

			// else outside of window
			} else {
			
				tooltip.hide();
			}

		};

		this.enable = function(event) {
			event.stopPropagation();
			tooltip.show();
		};
		
		this.disable = function(event) {
			event.stopPropagation();
			tooltip.hide();			
		};			
		
		// -----------------------------------------------------------------------
		// initialize for each matched item then return it
		// -----------------------------------------------------------------------
		return this.each(function() {
	
			tooltip = jQuery(defaults.containerId);
		
			// if it doesn't already exist		
			if (tooltip.length === 0) {
			
				// create mouse tooltip	element
				jQuery("body").append("<div id=\"mouse-tooltip\"></div>");
				defaults.containerId = "#mouse-tooltip";

				tooltip = jQuery(defaults.containerId);
				tooltip.hide();
		
				// initialize x coordinate offsets for labels that should appear on the left side of the mouse			
				tooltip.text(defaults.content.start.label);
				defaults.content.start.offsetX = -1 * tooltip.width();
				tooltip.text(defaults.content.prev.label);
				defaults.content.prev.offsetX = -1 * tooltip.width();			
	
				// setup window scroll event handler to update scroll offsets
				$(window).scroll(function(event) {
					var target = $(event.target);
					scrollOffsets.x = target.scrollLeft();
					scrollOffsets.y = target.scrollTop();
				});	

			} else {
				
				// !TO-DO: what happens if the container already exists?
				// - cannot simply override 

			}

			$.log("Finished initializing GYROMouseTooltip");

		});	

	};

})(jQuery);

