/*!
 * jquery.tooltip.js
 *
 * Copyright (c) 2011 Skill Partners Inc. All Rights Reserved.
 *
 * @require: jquery.js
 * @create: 2011-10-21 [oosugi@skillpartners.co.jp]
 * @modify: not yet 
 *
 *
 */
(function ($, window, undefined){
	
	// tooltipで使う jQuery Object vars
	var $window, $body, $tooltip, $tooltipBody;
	
	
	// tooltip表示用の要素を追加しておく
	var tooltipHTML = '<div class="js-tooltipContainer"><div class="js-tooltipContainer-inner"><div class="js-tooltipContainer-body"/></div></div>';
	$(function(){
		$window = $(window);
		$body = $('body');
		$body.append(tooltipHTML);
		$tooltip = $('.js-tooltipContainer').hide();
		$tooltipBody = $tooltip.find('.js-tooltipContainer-body');
	});
	
	
	/**
	 * Tooltip
	 */
	var Tooltip = function($elm, o){
		this.$element = $elm;
		this.options = o;
		this.title = $elm.attr('title');
		$elm.attr('title', '');
		this.event();
	};
	
	
	Tooltip.prototype = {
		//ツールチップオーバー時のメソッド
		event: function(){
			var self = this,
				o = self.options,
				showSpeed = o.speed,
				hideSpeed = showSpeed / 2;
			self.$element
				.mouseenter(function(e){
					$tooltipBody.html(self.title);
					self.updatePosition(e.pageX, e.pageY);
					$tooltip.stop(false, true).fadeIn(showSpeed);
				})
				.mouseleave(function(){
					$tooltip.stop(false, true).fadeOut(hideSpeed);
				})
				.mousemove(function(e){
					self.updatePosition(e.pageX, e.pageY);
				});
		},
		
		updatePosition: function(x, y){
			var self = this,
				o = self.options;
			
			if (($window.width() - x) < ($tooltip.outerWidth() + o.margin)) {
				x = x - $tooltip.outerWidth() - o.shiftX - 5;
				$tooltip.addClass('js-tooltipContainer-reverse');
			} else {
				$tooltip.removeClass('js-tooltipContainer-reverse');
			}
			
			$tooltip.css({
				'top': y - o.shiftY,
				'left': x + o.shiftX
			});
		}
	};
	
	
	// $.fnに追加
	$.fn.tooltip = function(options){
		var defaults = {
			margin: 100,
			shiftX: 0,
			shiftY: 40,
			speed: 300
		};
		var o = $.extend(defaults, options);
		
		return this.each(function(){
			var $elm = $(this);
			var tooltip = new Tooltip($elm, o);
		});
	};
	
	$(function () {
		$('.js-tooltip').tooltip();
	});
	
})(jQuery, this);
