P.module('hovers', function () {
	var $meter,
		$tooltip,
		$bigTooltip;
	
	function setTaken (taken) {
		$meter.find('.taken .qty').text(taken);
		$meter.find('.left .qty').text(100 - taken);
		$meter.find('.percentage .qty').text(taken).css('width', taken + '%');			
		return this;
	}
	
	function setName (name) {
		$meter.find('.name').text(name);
		return this;
	}
	
	function showMeter (e) {
		$meter.show().css({
			left: e.pageX - 150 + 'px',
			top: e.pageY - 30 + 'px'
		});
		setName($(this).attr('metroname'));
		setTaken($(this).attr('ripplecount'));
	}
	
	function hideMeter () {
		$meter.css('left', '-9999px');
	}
	
	function showTooltip (e, text, big) {
		if (big) {
			showBigTooltip.call(this, e, text);
			return;
		}
		setTimeout(function(){$tooltip.html(text).show('slow').css({
			left: $(e.target).offset().left - 310 + 'px',
			top:  $(e.target).offset().top - 20 + 'px'
		});
                }, 350);
	}
	
	function hideTooltip () {
		$tooltip.css('left', '-9999px');
	}
	
	function showBigTooltip (e, text) {
		$bigTooltip.html(text).show().css({
			left: $(e.target).offset().left - 310 + 'px',
			top: $(e.target).offset().top - 20 + 'px'
		});
	}
	
	function hideBigTooltip () {
		$bigTooltip.css('left', '-9999px');
	}
	
	return {
		showMeter: showMeter,
		hideMeter: hideMeter,
		showTooltip: showTooltip,
		hideTooltip: hideTooltip,
		showBigTooltip: showBigTooltip,
		hideBigTooltip: hideBigTooltip,
		init: function () {
			$(function () {
				$meter = $('#ripple_counter')
					.clone(true)
					.attr('id', 'ui_hover_meter')
					.removeClass('sprite')
					.addClass('hover_small')
					.prepend('<h4 class="name"></h4>');
					
				$meter.css({
					position: 'absolute',
					left: '-9999px'
				});
				$meter.appendTo('body');
				
				$tooltip = $('<div class="hover_large"></div>').attr('id', 'ui_hover_tooltip');
				$tooltip.css({
					position: 'absolute',
					left: '-9999px'
				});
				$tooltip.appendTo('body');
				
				$bigTooltip = $('<div class="hover_xlarge"></div>').attr('id', 'ui_hover_tooltip_xl');
				$bigTooltip.css({
					position: 'absolute',
					left: '-9999px'
				});
				$bigTooltip.appendTo('body');
			});
		}()
	};
});

Prolific.module('tooltips', function () {
    var $tooltip = $('<div id="tooltip" style="position: absolute; left: -9999px;"></div>');

    function show (msg, offsets) {
        $tooltip.stop();
        if (!document.getElementById('tooltip')) {
            $('body').append($tooltip);
        }
        text(msg);
        $tooltip
            .css(offsets)
            .fadeTo(250, .8);
        return this;
    }

    function hide () {
        $tooltip.stop();
        $tooltip
            .fadeTo(250, 0, function () {
                $tooltip
                    .css({
                        top: '0px',
                        left: '-9999px'
                    });
            })
        return this;
    }

    function text (newText) {
        $tooltip.text(newText);
        return this;
    }

    function getPosition (el, offsets) {
        var property,
            position = {},
            handlers = {
                top: function (q) {
                    position.top = $(el).offset().top + parseInt(q) + 'px';
                },
                bottom: function (q) {
                    position.top = $(el).offset().top - parseInt(q) + 'px';;
                },
                left: function (q) {
                    position.left = $(el).offset().left + parseInt(q) + 'px';
                },
                right: function (q) {
                    position.left = $(el).offset().left - parseInt(q) + 'px';;
                }
            };
        for (property in offsets) {
            handlers[property](offsets[property]);
        }
        if (!position.top && !position.bottom) {
            position.bottom = $(el).offset().top + 'px';
        }
        if (!position.left && !position.right) {
            position.left = $(el).offset().left + 'px';
        }
        return position;
    }

    function bind (what, msg, offsets) {
        offsets = offsets || {
            bottom: '3px',
            left: '3px'
        };
        $(what).hover(function () {
            show(msg, getPosition(what, offsets));
        }, hide);
        return this;
    }

    return {
        show: show,
        hide: hide,
        text: text,
        bind: bind,
        init: function () {
			$tooltip.hover(function () {
				$(this).stop().css('opacity', .8);
			}, hide);
            jQuery.fn.extend({
                tooltip: function (msg, offsets) {
                    $(this).each(function () {
                        bind(this, msg, offsets);
                    });
                    return this;
                }
            });
        }()
    }
});


