(function($)
{	
	
	// tooltip
	$.fn.tooltip = function(method) {

		var methods = {
			init: function(options) {
				this.tooltip.settings = $.extend({}, this.tooltip.defaults, options);
				
				return this.each(function() {
					var $element = $(this); // reference to the jQuery version of the current DOM element
					var element = this; // reference to the actual DOM element
					
					if( $element.attr('title') != 'undefined' ) {
						
						var timer;
						var tip = helpers.make( $element );
						$element.removeAttr('title');
						
						$element.bind('mouseover', function(event) {							
							timer = setTimeout(function(){
								tip.appendTo('body');
								helpers.place( $element, tip );
								tip.fadeIn(250);
							}, 250);					
						});
						
						$element.bind('mouseout', function(event) {
							clearTimeout(timer);
							tip.fadeOut(150,  function(){
								tip.remove();
							});
						});
						
					} else {
						return;
					}
				});

			},

			// a public method. for demonstration purposes only - remove it!
			hide: function() {
				// code goes here
			}
		}

		var helpers = {
			make: function( obj, id ) {				
				var value = obj.attr('title');
				var tip = $('<div/>', {'class': 'mt-tooltip'}).css({'min-width': '100px', 'max-width': obj.tooltip.settings.width + 'px', 'z-index': 9999}).hide();
				var tip_wrapper = $('<div/>', {'class': 'mt-tooltip-wrapper'}).appendTo(tip);
				var tip_content = $('<div/>', {'class': 'mt-tooltip-content'}).text(value).appendTo(tip_wrapper);
				var tip_arrow = $('<div/>', {'class': 'mt-tooltip-arrow'}).appendTo(tip_wrapper);
				return tip;
			},
			
			place: function(obj, tooltip ) {
				var _x = obj.offset().left - Math.round((tooltip.outerWidth() - obj.outerWidth())/2);
				var _y = obj.offset().top - tooltip.height();
				tooltip.css({'position': 'absolute', 'left': _x+'px', 'top': Math.round(_y)+'px'});
			}
		}

		if (methods[method]) {
			return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
		} else if (typeof method === 'object' || !method) {
			return methods.init.apply(this, arguments);
		} else {
			$.error( 'Method "' +  method + '" does not exist in pluginName plugin!');
		}

	};

	$.fn.tooltip.defaults = {
		direction: 'top',
		width: 180
	};

	$.fn.tooltip.settings = {};
	
	
})(jQuery);
