(function($) {

	$.fn.ktip = function($$options) {

		var $settings = $.extend({}, $.fn.ktip.defaults, $$options);

		return this.each(function() {
			
			var o = $.meta ? $.extend({}, $settings, $this.data()) : $settings;			

			$(this).mouseover(function(e){

				var title = $(this).attr('title');

				if (title !== '') {

					$(this).attr('title','');
					$(this).data('title', title)

					if (o.ajax == '') {
						$('body').append('<div id="ktip">'+ title +'</div>') 
					}
					else {

						$.get(o.ajax +'&id='+ $(this).metadata().id, function(data) {
							$('body').append('<div id="ktip">'+ data +'</div>') 							
						})
						
					}				
					
					var offsetXTotal = o.offsetLeft;
					var offsetYTotal = o.offsetTop;								
					if (e.pageX + $("#ktip").width() > $('body').width()) {
						offsetXTotal = (-1 * $("#ktip").width()) - o.offsetRight;
					}			
					if ( (($(window).height() + $(document).scrollTop()) - e.pageY) < ($("#ktip").height() + $(this).height()) ) {	
						offsetYTotal = -1 * $("#ktip").height() - o.offsetBottom;
					}

			        $('#ktip').fadeIn('500');  
			        $('#ktip').fadeTo('10',0.9);				
				
					$("#ktip").css({
						background: '#fff',
						border: '1px solid #ccc',
						'font-family': 'Arial, sans-serif',
						'font-size': '10px',		
						left: parseInt(e.pageX + offsetXTotal),
						padding: '6px',
						position: 'absolute',
						'text-align': 'left',						
						top: parseInt(e.pageY + offsetYTotal),
						width: '180px',
						'z-index': 9999						
					});				

				}					

			});
			
			$(this).mousemove(function(e){	

				if($('#ktip').length > 0) {

					var offsetXTotal = o.offsetLeft;
					var offsetYTotal = o.offsetTop;							
					if (e.pageX + $("#ktip").width() > $('body').width()) {
						offsetXTotal = -1 * $("#ktip").width() - o.offsetRight
					}			
					if ( (($(window).height() + $(document).scrollTop()) - e.pageY) < ($("#ktip").height() + $(this).height()) ) {	
						offsetYTotal = -1 * ($('#ktip').height() + o.offsetBottom);
					}
				
					$("#ktip").css({
						left: parseInt(e.pageX + offsetXTotal),
						top: parseInt(e.pageY + offsetYTotal)
					});				

					$('#debug').html( '0: '+ (e.pageY + $('#ktip').height()) +' A: '+ $(window).height() +' B: '+ ($(window).height() + $(document).scrollTop()))
					
				}
		        
			});
			
			$(this).mouseout(function(){	

				if($('#ktip').length > 0) {
			
					$('#ktip').remove();
					if ($(this).data('title') !== '') {
						$(this).attr('title',$(this).data('title'));				
					}
				}
				
			});			
			
			
		});
	};

	$.fn.ktip.defaults = {
		ajax: '',
		offsetTop: 10,
		offsetRight: 20,
		offsetBottom: 10,
		offsetLeft: 10
	};

})(jQuery);	
