/*

    FDE Grabber 4
    File: ROOT/tpl/js/jquery.simpletip-1.3.1.min.js;
    Copyright: FDSTAR Company
    Release date: Thu, 16 Feb 2012 20:49:55 +0200;
    More info: http://fdstar.net/
    
    Licensed to: Vladimir_Fleks
    Licensed domain: test_com
    License key: 1_a854c96746a7f29a035f8644682ade3df3e8ebda

*/
   /**
 * jquery.simpletip 1.3.1. A simple tooltip plugin
 * 
 * Copyright (c) 2009 Craig Thompson http://craigsworks.com
 * 
 * Licensed under GPLv3 http://www.opensource.org/licenses/gpl-3.0.html
 * 
 * Launch : February 2009 Version : 1.3.1 Released: February 5, 2009 - 11:04am
 */
(function($) {
	function Simpletip(elem, conf) {
		var self = this;
		elem = jQuery(elem);
		var tooltip = jQuery(document.createElement('div')).addClass(
				conf.baseClass).addClass((conf.fixed) ? conf.fixedClass : '')
				.addClass((conf.persistent) ? conf.persistentClass : '').html(
						conf.content).appendTo(elem);
		if (!conf.hidden)
			tooltip.show();
		else
			tooltip.hide();
		if (!conf.persistent) {
			elem.hover(function(event) {
				self.show(event)
			}, function() {
				self.hide()
			});
			if (!conf.fixed) {
				elem.mousemove(function(event) {
					if (tooltip.css('display') !== 'none')
						self.updatePos(event);
				});
			}
			;
		} else {
			elem.click(function(event) {
				if (event.target === elem.get(0)) {
					if (tooltip.css('display') !== 'none')
						self.hide();
					else
						self.show();
				}
				;
			});
			jQuery(window).mousedown(
					function(event) {
						if (tooltip.css('display') !== 'none') {
							var check = (conf.focus) ? jQuery(event.target)
									.parents('.tooltip').andSelf().filter(
											function() {
												return this === tooltip.get(0)
											}).length : 0;
							if (check === 0)
								self.hide();
						}
						;
					});
		}
		;
		jQuery.extend(self, {
			getVersion : function() {
				return [ 1, 2, 0 ];
			},
			getParent : function() {
				return elem;
			},
			getTooltip : function() {
				return tooltip;
			},
			getPos : function() {
				return tooltip.offset();
			},
			setPos : function(posX, posY) {
				var elemPos = elem.offset();
				if (typeof posX == 'string')
					posX = parseInt(posX) + elemPos.left;
				if (typeof posY == 'string')
					posY = parseInt(posY) + elemPos.top;
				tooltip.css( {
					left : posX,
					top : posY
				});
				return self;
			},
			show : function(event) {
				self.current_href = jQuery(event.target).attr('href');
				
				conf.onBeforeShow.call(self);
				self.updatePos((conf.fixed) ? null : event);
				
				switch (conf.showEffect) {
				case 'fade':
					tooltip.fadeIn(conf.showTime);
					break;
				case 'slide':
					tooltip.slideDown(conf.showTime, self.updatePos);
					break;
				case 'custom':
					conf.showCustom.call(tooltip, conf.showTime);
					break;
				default:
				case 'none':
					tooltip.show();
					break;
				}
				;
				tooltip.addClass(conf.activeClass);
				conf.onShow.call(self);
				return self;
			},
			hide : function() {
				conf.onBeforeHide.call(self);
				switch (conf.hideEffect) {
				case 'fade':
					tooltip.fadeOut(conf.hideTime);
					break;
				case 'slide':
					tooltip.slideUp(conf.hideTime);
					break;
				case 'custom':
					conf.hideCustom.call(tooltip, conf.hideTime);
					break;
				default:
				case 'none':
					tooltip.hide();
					break;
				}
				;
				tooltip.removeClass(conf.activeClass);
				conf.onHide.call(self);
				return self;
			},
			update : function(content) {
				tooltip.html(content);
				conf.content = content;
				return self;
			},
			load : function(uri, data) {
				conf.beforeContentLoad.call(self);
				tooltip.load(uri, data, function() {
					conf.onContentLoad.call(self);
				});
				return self;
			},
			boundryCheck : function(posX, posY) {
				var newX = posX + tooltip.outerWidth();
				var newY = posY + tooltip.outerHeight();
				var windowWidth = jQuery(window).width()
						+ jQuery(window).scrollLeft();
				var windowHeight = jQuery(window).height()
						+ jQuery(window).scrollTop();
				return [ (newX >= windowWidth), (newY >= windowHeight) ];
			},
			updatePos : function(event) {
				var tooltipWidth = tooltip.outerWidth();
				var tooltipHeight = tooltip.outerHeight();
				if (!event && conf.fixed) {
					if (conf.position.constructor == Array) {
						posX = parseInt(conf.position[0]);
						posY = parseInt(conf.position[1]);
					} else if (jQuery(conf.position).attr('nodeType') === 1) {
						var offset = jQuery(conf.position).offset();
						posX = offset.left;
						posY = offset.top;
					} else {
						var elemPos = elem.offset();
						var elemWidth = elem.outerWidth();
						var elemHeight = elem.outerHeight();
						switch (conf.position) {
						case 'top':
							var posX = elemPos.left - (tooltipWidth / 2)
									+ (elemWidth / 2);
							var posY = elemPos.top - tooltipHeight;
							break;
						case 'bottom':
							var posX = elemPos.left - (tooltipWidth / 2)
									+ (elemWidth / 2);
							var posY = elemPos.top + elemHeight;
							break;
						case 'left':
							var posX = elemPos.left - tooltipWidth;
							var posY = elemPos.top - (tooltipHeight / 2)
									+ (elemHeight / 2);
							break;
						case 'right':
							var posX = elemPos.left + elemWidth;
							var posY = elemPos.top - (tooltipHeight / 2)
									+ (elemHeight / 2);
							break;
						default:
						case 'default':
							var posX = (elemWidth / 2) + elemPos.left + 20;
							var posY = elemPos.top;
							break;
						}
						;
					}
					;
				} else {
					var posX = event.pageX;
					var posY = event.pageY;
				}
				;
				if (typeof conf.position != 'object') {
					posX = posX + conf.offset[0];
					posY = posY + conf.offset[1];
					if (conf.boundryCheck) {
						var overflow = self.boundryCheck(posX, posY);
						if (overflow[0])
							posX = posX - (tooltipWidth / 2)
									- (2 * conf.offset[0]);
						if (overflow[1])
							posY = posY - (tooltipHeight / 2)
									- (2 * conf.offset[1]);
					}
				} else {
					if (typeof conf.position[0] == "string")
						posX = String(posX);
					if (typeof conf.position[1] == "string")
						posY = String(posY);
				}
				;
				self.setPos(posX, posY);
				return self;
			}
		});
	}
	;
	jQuery.fn.simpletip = function(conf) {
		var api = jQuery(this).eq(typeof conf == 'number' ? conf : 0).data(
				"simpletip");
		if (api)
			return api;
		var defaultConf = {
			content : 'A simple tooltip',
			persistent : false,
			focus : false,
			hidden : true,
//			position : 'default',
			position : ['0','20'],
			offset : [ 0, 0 ],
			boundryCheck : true,
			fixed : true,
			showEffect : 'fade',
			showTime : 150,
			showCustom : null,
			hideEffect : 'fade',
			hideTime : 150,
			hideCustom : null,
			baseClass : 'tooltip',
			activeClass : 'active',
			fixedClass : 'fixed',
			persistentClass : 'persistent',
			focusClass : 'focus',
			onBeforeShow : function() {
			},
			onShow : function() {
			},
			onBeforeHide : function() {
			},
			onHide : function() {
			},
			beforeContentLoad : function() {
			},
			onContentLoad : function() {
			}
		};
		jQuery.extend(defaultConf, conf);
		this.each(function() {
			var el = new Simpletip(jQuery(this), defaultConf);
			jQuery(this).data("simpletip", el);
		});
		return this;
	};
})();
