/*
* JTip
* By Cody Lindley (http://www.codylindley.com)
* Under an Attribution, Share Alike License
* JTip is built on top of the very light weight jquery library.
*/

function JT_init(what){
	$(what).unbind("hover");
	$(what).hover(function(){JT_show(this, what)},function(){$('#JT').remove();});
}

function JT_show(o, what) {
	if (o == undefined)
		return false;

	$('#JT').remove();

	var eX = 0;
	var eY = 0;

	var num_book = "";
	var show_num_book = false;
	var tag_local = '';

	var url_lang_part = "&lang="+lang;
	var google_desc = "";

	if (what == ".tag_name") {
		var tag = $(o).attr("alt");
		tag_local = $(o).text();
		var parentEl = "#save";
	}
	//autocomplete
	else if (what.search(".ac_results li") != -1) {
		var temp = $("em:last", o).text().split("|||");
		var tag = encodeURIComponent(temp[0]);
		var parentEl = (what.search("tags") != -1) ? "#save" : "body";
		eX = 100;
	}
	//google
	else if (what.search("a.gs-title") != -1) {

		if ($("#searchcontrol").css("display") == "block") {

			if (o.href == undefined) {
				var tag = $(o).text();
			}
			else {
				var match = o.href.match(/wiki\/([^\/]*)$/);

				//wikipedia?
				if (match != null) {
					//if (lang == "en")
						//var tag = $(o).text();
					//else
						//var tag= match[1];
					var tag = $(o).text().replace(' en.wikipedia.org', ''); // TODO en = lang?
					tag_local = $("#save").size() ? $.trim($("#tags").val()) : $.trim($("#object").val());
				}
				else {
					tag = o.href;
					google_desc = '<h4>'+o.href+'</h4>';
					google_desc += '<div class="img_h"><img src="http://open.thumbshots.org/image.aspx?url='+o.href+'" onerror="this.parentNode.style.display=\'none\';" /><br /><span class="sm">image via Thumbshots</span></div>';
					google_desc += '<p>'+$(o).parent().parent().children(".gs-snippet").html()+' <span class="sm">source: Google</span></p>';
				}

				var parentEl = (what.search("tags") != -1) ? "#save" : "body";
				eX = 200;
				url_lang_part += "&goog=1";
			}
		}
		else
			return false;
	}
	else {
		//tag cloud
		var match = o.href.match(/tag\/([^\/;]*)/);
		if (match != null) {
			var tag = match[1];
		}
		else {
			var tag = $(o).text();
		}

		tag_local = $(o).text();
		var parentEl = "body";

		var tree_cont = $(o).parent().parent().parent().parent();
		var this_par = $(".tree", tree_cont);

		eY = (this_par.size()) ? -1*parseInt(this_par[0].scrollTop) : 0;
	}

	url_lang_part += "&tag_local="+tag_local;
	
	tag = decodeURIComponent(tag).replace(/_/g, " ");

	if (tag == null || tag == "0") 
		return false;


	if (o.className.search("nn") != -1) {
		num_book = o.title;
		o.title = "";
		show_num_book = true;
	}

	var url = "/ajax/get_tag_desc.php?tag="+tag+url_lang_part;
	var de = document.documentElement;
	var w = (parentEl == "body") ? (self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth) : $(parentEl)[0].offsetWidth;

	var hasArea = Math.abs(w - getAbsolutePos(o, "Left"));
	eY += getAbsolutePos(o, "Top") + o.offsetHeight + 2; //set y position

	var width = 250;

	eX += getAbsolutePos(o, "Left"); //levo
	if (hasArea<((width*1)+75))
		eX -= width - 70; //desno

	$('#JT').remove();
	$(parentEl).append("<div id='JT' style='width:"+width*1+"px'><div id='JT_copy'><div class='JT_loader'><img src=\"/img/indicator.gif\" /> <img src=\"/img/dbpedia_small.gif\" /></div></div></div>");
	$('#JT').css({left: eX+"px", top: eY+"px"});
	$('#JT').show();

	var f = false;

	if (google_desc != "")
		descArr.push({name: tag, body: google_desc, num: num_book});

	for (desc in descArr) {
		if (descArr[desc].name == tag) {
			if (descArr[desc].num == "")
				descArr[desc].num = num_book;

			JT_HTML(descArr[desc].body, descArr[desc], show_num_book);
			f = true;
			break;
		}
	}

	if (!f) {

		descArr.push({name: tag, body: google_desc, num: num_book});

		if (google_desc == "") {

			$.ajax({
				type: "GET",
				url: url,
				success: function(msg) {

					for (desc in descArr) {
						if (descArr[desc].name == tag) {
							descArr[desc].body = msg;
							break;
						}
					}

					JT_HTML(tag == descArr[descArr.length-1].name ? msg : descArr[descArr.length-1].body, descArr[descArr.length-1], show_num_book);
				}
			});
		}
	}
	$("body").bind("click", function() {$('#JT').remove();});
}


function JT_HTML(m, el, st) {

	if (st && el.num != '')
		m += '<p class="n">'+el.num+' bookmark'+(el.num>1 ? 's' : '')+'</p>';

	$('#JT_copy').html(m);
}


function getAbsolutePos(o, position) {
	oPos = o['offset'+position];
	while(o.offsetParent != null) {
		if (o.id == "save")
			break;
		oParent = o.offsetParent;
		oPos += oParent['offset'+position];
		o = oParent;
	}
	return oPos
}