/**
 * SuW Engine tooltip - Ajax and event support
 * @author 2009 - Schwarz & Weiss - Dacian Stanciu - scriptul face parte din modulul SuW Engine
 * 
 * HTML
 * Mesajul poate fi declarat in rel sau title.
 * 	forma mesajului: mesaj[::comanda::id]
 * 	- mesaj 	- poate fi urlencoded, daca e singur nu face event on click
 *  - comanda 	- cmd	- vizualizare ajax comanda dupa ID
 *  			- fct	- deschide popup factura dupa ID
 *  - id 		- identitatea din db a elementului cerut
 *  
 *  exemplu
 * <a class='ex' href='#' title='click pentru a vedea comanda::2::cmd'>vezi comanda</a>
 * <a class='ex' rel='#' title='doarpopup'>popup simplu</a>
 * $('.ex').suwToolTip(); 
 *
 * Javascript 
 * @param object opt
 * 					left	integer - left offset
 * 					top		integer	- top offset
 * 					width	integer	- width fix
 * 					event	string	- "focus" or "click" (default) event call
 * 					fade	string	- fx fadeIn/Out speed
 * 					unfocus string  - element name to unfocus first
 * 					loadimg string 	- load image to show on click
 * @example	
 * 
 * 	$('.ex').suwToolTip({ 'left':-20, 'top':30, 'width':400, 'event':'focus', 'fade':'fast' });
 * 	
 * //force unfocus input text
 *  $('.ex').suwToolTip({'unfocus':'#searchBox'});
 *  
 */
$.fn.suwToolTip = function(opt){
	var elm = $(".suwToolTips");
	if(typeof(opt)!="undefined"){
		var fadeSpeed = ((opt.fade) ? opt.fade : null );
		var unfocus = ((opt.unfocus)? opt.unfocus : null);
		var loadImg = ((opt.loadimg)? opt.loadimg : "" );
	}
	
	//adauga div pt afisare
	if (elm.length == 0) {
		var tmpl = "<div class='suwToolTips'><table cellpadding='0' cellspacing='0'>";
		tmpl += "<tr><td class='suwToolTipsTL'></td><td class='suwToolTipsBG'></td><td class='suwToolTipsTR'></td></tr>";
		tmpl += "<tr><td class='suwToolTipsBG'></td><td class='suwToolTipsBG'><div id='suwToolTipMesaj'>&nbsp;</div></td><td class='suwToolTipsBG'></td></tr>";
		tmpl += "<tr><td class='suwToolTipsBL'></td><td class='suwToolTipsBG'></td><td class='suwToolTipsBR'></td></tr>";
		tmpl += "</table></div>";
		$("body").prepend(tmpl);
		elm = $(".suwToolTips");
	}
	
	//calculeaza pozitia -- inca mai e de lucru...
	var fixPos=function(pos,offset,toFix){
		var diff=((toFix=="top")?$(".suwToolTips").height():$(".suwToolTips").width());
		var position=pos+offset;
		
		if(pos<0)
			position-=(diff-pos);
			
		//console.log(Array(pos,offset,diff,position));			
		return position;
	};
	
	//adauga elemente globale definite in title
	$(this).each(function(contor){
		var obj = $(this);
		
	// citeste parametrii rel sau title
		if(obj.attr("rel")){
			var params = obj.attr("rel").split("::");
			obj.removeAttr("rel");
		}else if(obj.attr("title")){
			var params = obj.attr("title").split("::");
			obj.removeAttr("title");
		}else
			return;
	
	//content variables		
		var mesaj = unescape(params[0]);
		var cmd = unescape(params[1]);
		var id	= parseInt(params[2]);

		var diffLeft = ((opt && opt.left) ? parseInt(opt.left) : obj.innerWidth());
		var diffTop = ((opt && opt.top) ? parseInt(opt.top) : obj.innerHeight());
		var width = ((opt && opt.width) ? parseInt(opt.width) : 0 );
		var evnt = ((opt && opt.event) ? opt.event : "over" );
		
	//functie pentru afisarea mesajului	
		var showMessage=function(){
			var divObj=$("#suwToolTipMesaj");
				divObj.html(unescape(mesaj));
				
		 //adauga lungime fixa - daca e declarata
			if(width>0)$("#suwToolTipMesaj").css({"width": width});	
			
		//muta obiectul la punctul de referinta, pentru evitarea datelor false	
			var offset = obj.offset();
			elm.css({"top": offset.left,"left": offset.top});
		
		//calculeaza valorile corecte
			var left = diffLeft + offset.left;
			var top = fixPos(diffTop,offset.top,"top");
			elm.css({"top": top,"left": left});
			
		//force unfocus
			if(unfocus){
				elm.hide();
				$(unfocus).blur();	
			}	
			if(fadeSpeed&&parseInt(fadeSpeed)>0)
				elm.fadeIn(fadeSpeed);
			else	
				elm.show();
		}
		
	//functie pentru ascunderea mesajului
		var hideMessage=function(){
		  //hide element
			if(fadeSpeed&&parseInt(fadeSpeed)>0)
				elm.fadeOut(fadeSpeed);
			else	
				elm.hide();
		}
		
	//adauga evenimente
		switch(evnt){
			case "focus":
				$(this).focus(function(){ showMessage()}).blur(function(){hideMessage()});
				break;
			default:
				$(this).mouseenter(function(){ showMessage()}).mouseleave(function(){hideMessage()});
		}
		
		
	//nu exista cmd
	if(cmd=="undefined"||id=="undefined"){ return; }

	//adauga eveniment la click 
		$(this).click(function(event){
			$("#suwToolTipMesaj").html(loadImg);
	
			//executa on click in functie de comanda ceruta		
			switch (cmd) {
				//vezi comanda
				case "cmd":
					$.ajax({
						type: "POST",
						cache: true,
						dataType: "html",
						url: suwEngineURL + "/adminAJAX.php",
						data: "suw=factura&id=" + id + "&list=true",
						success: function(msg){
							$("#suwToolTipMesaj").html(msg);
						}
					});
					break;
					
				//vezi produse din factura
				case "fct":
					var file = suwEngineURL + "/adminAJAX.php?suw=factura&id=" + id
					window.open(file, "f_" + id, 'width=850,height=550,location=no,menubar=yes,toolbar=no,scrollbars=no,status=no').moveTo(100, 50);
					break;

				//schimba statut factura
				case "factstat":
					var factStat=$("select:[name=statCmd["+id+"]]").val();
					$.ajax({
						type: "POST",
						cache: false,
						dataType: "html",
						url: suwEngineURL + "/adminAJAX.php",
						data: "suw=factstat&id=" + id +"&stat="+factStat,
						success: function(msg){
							$("#suwToolTipMesaj").html(msg);
						}
					});
					break;
				default:
					alert("Unknown command!\ndefine title='label::id::cmd'\ncmd: cmd,fct\ncmd: "+cmd);
			}
			
			//stop click event propagation	
			event.stopPropagation();
			event.preventDefault();
			return false;
		});
		
	});
}
