/*
 * EmbeddedHelp v1.0 - jQuery help plugin
 * file: jquery.ehelp.js
 * Copyright (c) 2010 Josip Kalebic
 * josip.kalebic@gmail.com, www.embedded-help.net
 *
 * Dual licensed under the MIT and GPL licenses:
 * 	http://www.opensource.org/licenses/mit-license.php
 * 	http://www.gnu.org/licenses/gpl.html
 *
 * Paths definition:
	[{
	'rel':'rel_name',
	'method':'static or animated',
	'path': [{
		'element': 'jquery selector',
		'desc': 'Help content (text)',
		'duration': number in ms,
		'marker': 'class to mark element on page'
	}]
	}];
*/

(function($){  
    $.fn.extend({   
        //plugin name - animatemenu  
        embeddedHelp: function(options) {  
 

	    var defaults;  
              
            var options = $.extend(defaults, options);

	   function doClearAll() {

		if(!$.isEmptyObject(options)) {		
  		 $.each(options, function(reli, pathvalue) {
			$.each(pathvalue.path, function(key, value) {
				$(value.element).removeClass(value.marker);
			});
		 });
		}

		$("#EHtooltip").remove();
		$("#EHpointer").remove();
		$(".EHtooltipc").remove();

		return false;
	   }	


           function doPathAnimation(that, pathvalue){

			var aoff = that.offset();

			var elmax = pathvalue.length;

			if(!$.isEmptyObject(pathvalue)) {	

				$("body").append("<div id='EHtooltip'></div>");
				$("body").append("<div id='EHpointer'></div>");
	
				$("#EHpointer").css("top",(aoff.top + 10) + "px").css("left",(aoff.left + 10) + "px").fadeIn("fast");
						
				$.each(pathvalue, function(key, value) { 
	
				var offset = $(value.element).offset();
			
				var elHeight = $(value.element).height();
				var elWidth = $(value.element).width();
			
				var pointerx = offset.left + (elWidth/2);
				var pointery = offset.top + (elHeight/2);
	
				//alert(elHeight + " " + elWidth);
		
				$("#EHpointer").animate({"left": pointerx + "px", "top": pointery + "px"}, 2000, function(event) {
				
						$(value.element).addClass(value.marker);	
	
						$("#EHtooltip")
						.css("top",(pointery + 30) + "px")
						.css("left",(pointerx + 10) + "px")
						.html(value.desc)
						.fadeIn("fast")
						.delay(value.duration).queue(function () {
			
		
							$(this).dequeue();
						});
	
				}).delay(value.duration).queue(function () {
			
					$(value.element).removeClass(value.marker);
			
					if(key >= (elmax-1)) {
						$("#EHtooltip").remove();
						$("#EHpointer").remove();
			
					}
					$(this).dequeue();
				});
			
			
				});
			
			}

		return false;
           }


           function doPathStatic(that, pathvalue){

			var aoff = that.offset();

			var elmax = pathvalue.length;

			if(!$.isEmptyObject(pathvalue)) {	
				$.each(pathvalue, function(key, value) { 
	
					var offset = $(value.element).offset();
				
					var elHeight = $(value.element).height();
					var elWidth = $(value.element).width();
				
					var pointerx = offset.left + (elWidth/2);
					var pointery = offset.top + (elHeight/2);
					var divhtml = "<span>" + (key + 1) +"</span><p>" + value.desc +"</p><a href='' class='EHclose'>X</a>";
					var tipbox = $("<div>").addClass("EHtooltipc").css("top",(pointery + 5) + "px").css("left",(pointerx + 5) + "px").html(divhtml).appendTo("body").fadeIn("slow");
		
			
				});
			}
	
			//$('.tooltipc').remove();
		
		return false;
           }
 
            return this.each(function() {  
		var p = options;
                  
                //Assign current element to variable, in this case is UL element  
                var obj = $(this);

                //Get all a in the box  
                //var items = $("a", obj);
		var items = $("a[rel]", obj);

                //Attach mouseover and mouseout event to the LI    
                items.click(function() {  

		    var	aobj = $(this);
                    var rel = $(this).attr("rel");
		    var rez;
	
		    doClearAll();
	
		   if(!$.isEmptyObject(p)) {	
			$.each(p, function(reli, pathvalue) {
				if(pathvalue.rel == rel) {
					if(pathvalue.method == "animated") {
						rez = doPathAnimation(aobj, pathvalue.path);
					} else {
						rez = doPathStatic(aobj, pathvalue.path);
					}
				}
			});
		   }	

                   return false;
  
                });  
                  
		//-----------------------------------
		$('.EHclose').live('click', function() {
			$('.EHtooltipc').fadeOut('slow').remove();
			doClearAll();
			return false;	
		});
		//-----------------------------------


		//-----------------------------------
		$('.EHstopAll').live('click', function() {
			doClearAll();
			return false;	
		});
		//-----------------------------------

            });  



        }

    });  
})(jQuery);
