/**
products tooltips
	params: 
		itemDescriptionsArray - item description (required)
		htmlIdToProductsIndexArray - relation between html image and item id (required)
		ajaxDescriptionCallbackUrl - ajax callback url for onclick descriptions (required)
		imagesPathUrl - path to image folder which contains (required)
		classname - name of CSS class of tooltip
*/
jQuery.fn.nwprodtooltip = function(itemDescriptionsArray, htmlIdToProductsIndexArray, imagesPathUrl, options) {

	var settings = jQuery.extend({
		classname: 'tooltip',
		descriptionSuffix: "desc",
		ajaxDescriptionCallbackUrl: undefined
	}, options);

	var tooltip_div;

	function _get_clicked() {
		return jQuery("div").filter(function () {
			return jQuery(this).hasClass('clicked');
		});
	}

	function _is_clicked() {
		return (_get_clicked().size() > 0)
	}
	
	function _hide_tooltip() {
		if (tooltip_div != undefined) {
			tooltip_div.remove();
			tooltip_div = undefined;
		}
	}

	function _position_tooltip(event) {
		if (tooltip_div != undefined) {
			var tWidth = tooltip_div.width();
			var moveRight = 0;
			if ((event.pageX-tWidth/2) < 0)
				moveRight -= event.pageX-tWidth/2;
			var tPosX = event.pageX-tWidth/2 + moveRight;
			var tPosY = event.pageY+20;
			tooltip_div.css({top: tPosY, left: tPosX});
		}
	};

	function _add_color(parent) {
		var img = parent.children("img");
		var src = img.attr('src');
		var split = src.split(/_/);
		img.hide();

		var imgUrl = split[0]+'-color_'+split[1];
		parent.css('background','url('+imgUrl+') no-repeat top left');
	}

	function _remove_color(parent) {
		var img = parent.children("img");
		var src = img.attr('src');
		var split = src.split(/_/);
		img.show();

		parent.css('background','');
	}	

	function _create_tooltip() {
		tooltip_div = jQuery("<div>").addClass(settings.classname);
		tooltip_div.appendTo('body');
	}

	function _clear_tooltip() {
		if (_is_clicked()) {
			var clicked = _get_clicked();
			clicked.removeClass('clicked');
			_remove_color(clicked);
		}
		_hide_tooltip();
	}

	function _mouseover(event) {
  	if (!_is_clicked()) {
    		_hide_tooltip();
  
    		_create_tooltip();
    		var txt = itemDescriptionsArray[htmlIdToProductsIndexArray[jQuery(this).attr('id')]];
    		tooltip_div.html(txt);
  			_add_color(jQuery(this));
    		_position_tooltip(event);
  		}
	};

	function _mouseout(event) {
		if (!_is_clicked()) {
			_remove_color(jQuery(this));
			_hide_tooltip();
		}
	};

	function _mousemove(event) {
		if (!_is_clicked()) {
			_position_tooltip(event);
		}
	};	
		
	jQuery(this).mouseover(_mouseover);
	jQuery(this).mouseout(_mouseout);
	jQuery(this).mousemove(_mousemove);

	jQuery(this).click(function(event) {
		_clear_tooltip();

		jQuery(this).addClass('clicked');

		_create_tooltip();
		tooltip_div.animate({width: 'show', height: 'show'}, 'slow');
		tooltip_div.html('<div class="loading">');
		_position_tooltip(event)
		
		jQuery.get(settings.ajaxDescriptionCallbackUrl+htmlIdToProductsIndexArray[jQuery(this).attr('id')], function (data) {
			tooltip_div.text('');			
			
			jQuery('<div class="close">x</div>').click(function() {
				_clear_tooltip();
			}).appendTo(tooltip_div);
			
			tooltip_div.append(data);
			
			jQuery(document).keydown(function(e) {
				if (e.keyCode == 27) {
					_clear_tooltip();
					jQuery(document).unbind("keydown");
				}
			});

			_position_tooltip(event);
		});
		
		_add_color(jQuery(this));
	});
	
}
