var TagStatus = {
	Like : function(event,obj)
	{
		if(event)
		{
			Event.stop(event);
			holder = Event.element(event);
		}
		else
			holder = obj;

		new Ajax.Request(slink+'ajax/tags', {
			method : "post",
			parameters : {
				action : "update status",
				status : "like",
				tag : $("tag").innerHTML
			},
			onSuccess : function(transport)
			{
				if(ajaxResponse(transport,false))
				{
					if(o = $("btnIDontLikeTag"))
					{
						o.removeClassName("tagDisabled");
						$("btnTagReset").removeClassName("tagDisabled");
						holder.addClassName("tagDisabled");
					}
					else
					{
						HeaderTabs.Switch(holder);
					}
				}
			}
		});
		return false;
	},
	DontLike : function(event,obj)
	{
		if(event)
		{
			Event.stop(event);
			holder = Event.element(event);
		}
		else
			holder = obj;

		new Ajax.Request(slink+'ajax/tags', {
			method : "post",
			parameters : {
				action : "update status",
				status : "dontlike",
				tag : $("tag").innerHTML
			},
			onSuccess : function(transport)
			{
				if(ajaxResponse(transport,false))
				{
					if(o = $("btnILikeTag"))
					{
						o.removeClassName("tagDisabled");
						$("btnTagReset").removeClassName("tagDisabled");
						holder.addClassName("tagDisabled");
					}
					else
					{
						HeaderTabs.Switch(holder);
					}
				}
			}
		});
		return false;
	},
	ResetStatus : function(event,obj)
	{
		if(event)
		{
			Event.stop(event);
			holder = Event.element(event);
		}
		else
			holder = obj;

		new Ajax.Request(slink+'ajax/tags', {
			method : "post",
			parameters : {
				action : "update status",
				status : "reset",
				tag : $("tag").innerHTML
			},
			onSuccess : function(transport)
			{
				if(ajaxResponse(transport,false))
				{
					if(o = $("btnILikeTag"))
					{
						o.removeClassName("tagDisabled");
						$("btnIDontLikeTag").removeClassName("tagDisabled");
						holder.addClassName("tagDisabled");
					}
					else
					{
						HeaderTabs.Switch(holder);
					}
				}
			}
		});
		return false;
	}
}

var TagInfo = {
	linkObj : null,
	data : [],
	Load : function(obj,tagtype)
	{
		if(o = $("taginfo")) o.remove();
		TagInfo.linkObj = $(obj);
		var d = new Element("div",{id:"taginfo"}).update('<img src="images/loading.gif">');
		var o = $(obj).cumulativeOffset();
		d.style.left = o.left+"px";
		d.style.top = (o.top-30)+"px";
		d.style.visibility = "hidden";
		document.body.appendChild(d);
		d.style.top = (o.top-d.getHeight())+"px";
		d.style.visibility = "visible";

		/*if(TagInfo.data[obj.innerHTML])
		{
			TagInfo.SetData(TagInfo.data[obj.innerHTML]);
		}
		else
		{*/
			new Ajax.Request(slink+'ajax/tags', {
				method : "post",
				parameters : {
					action : "get tag data",
					tagtype : tagtype,
					tag : obj.innerHTML
				},
				onSuccess : function(transport)
				{
					if(ajaxResponse(transport,false))
					{
						TagInfo.data[TagInfo.linkObj.innerHTML] = transport.responseText;
						TagInfo.SetData(transport.responseText);
					}
				}
			});
		//}

		Event.observe(document,"mousedown",function(event){
			var e = Event.element(event);
			if(e.id == "taginfo" || e.up("#taginfo")) return;
			if(o = $("taginfo")) o.remove();
		});
	},
	SetData : function(html)
	{
		var d = $("taginfo");
		var dim = TagInfo.linkObj.cumulativeOffset();
		d.innerHTML = html;
		d.style.top = (dim.top-d.getHeight())+"px";
		var a = d.select(".hoverableObject");
		for(var i=0;i<a.length;i++) Hover.Register(a[i]);
	}
}

var TagPlaces = {
	linkObj : null,
	data : [],
	offset : 0,
	lastTag : "",
	lastRows : 0,
	lastTagType : "",
	lastObj : null,
	limit : 11,
	Load : function(obj,tagtype)
	{
		if(obj.innerHTML == TagPlaces.lastTag && tagtype == TagPlaces.lastTagType)
		{
			return;
		}
		var a = $$("#tagWall .selected");
		for(var i=0;i<a.length;i++) a[i].removeClassName("selected");
		obj.addClassName("selected");

		var o = $("tagPlaceListing");
		o.style.left = "0px";
		$("tagPlaceInfo").innerHTML = '<div align="center"><img src="images/v2/loadingBlueBar.gif" style="border:0px" align="center"></div>';
		if(tagtype == "user")
			$("tagPlaceHeader").innerHTML = 'Showing places '+$("username").innerHTML+' has tagged as '+obj.innerHTML;
		else if(tagtype == "favorite")
			$("tagPlaceHeader").innerHTML = 'Showing all places tagged with '+obj.innerHTML;
		else if(tagtype == "friends")
			$("tagPlaceHeader").innerHTML = 'Showing places '+$("username").innerHTML+'\'s friends tagged as '+obj.innerHTML;
		o.innerHTML = "";

		TagPlaces.offset = 0;
		TagPlaces.lastObj = obj;
		TagPlaces.lastTag = obj.innerHTML;
		TagPlaces.lastTagType = tagtype;

		holder = new Ajax.Request(slink+'ajax/tags', {
			method : "post",
			parameters : {
				action : "get tag user places",
				tag : obj.innerHTML,
				iduser : typeof(iduser)!="undefined"?iduser:commentId,
				limit : TagPlaces.limit,
				offset : TagPlaces.offset,
				tagtype : tagtype
			},
			onSuccess : function(transport)
			{
				if(ajaxResponse(transport,false))
				{
					var data = eval("("+transport.responseText+")");
					data.count = parseInt(data.count);
					data.rows = parseInt(data.rows);
					TagPlaces.lastRows = data.rows;

					if(data.rows == 0)
					{
						$("next").src = "images/v2/rightArrowDisabled.gif";
						$("prev").src = "images/v2/leftArrowDisabled.gif";
						$("tagPlaceInfo").innerHTML = '<div align="center">No places were found locally that were tagged with '+holder.parameters.tag+'</div>';
					}
					else
					{
						if(data.count == TagPlaces.limit && TagPlaces.offset+data.count < data.rows)
							$("next").src = "images/v2/rightArrow.gif";
						else
							$("next").src = "images/v2/rightArrowDisabled.gif";
						if(TagPlaces.offset != 0)
							$("prev").src = "images/v2/leftArrow.gif";
						else
							$("prev").src = "images/v2/leftArrowDisabled.gif";

						var o = $("tagPlaceListing");
						var d = new Element("div",{'class':"placeHolder", id:"page0"});
						o.appendChild(d);
						d.innerHTML = data.html;
						var a = d.select(".inactive");
						TagPlaces.Select(a[0]);

						if(self)
						{
							var i = new Element("img",{id:"tagDelete",src:"images/icon_delete.gif"}).setStyle({marginLeft:"-5px",cursor:"pointer"});
							if(o = $("tagDelete"))
							{
								o.remove();
							}
							TagPlaces.lastObj.up("li").appendChild(i);
							Event.observe(i,"click",TagPlaces.Remove);
						}
					}
				}
			}
		});
	},
	animating : false,
	nextDiv : null,
	DisplayLink : function() {
		var a = $$("#tagWall .selected");
		if(a.length == 0)
			alert("Please select a tag, then you can see the link.");
		else
			win(600,'<div>' + slink + 'tags.html?tagtype='+a[0].readAttribute("tagtype")+'&user='+iduser+'&tag='+a[0].innerHTML+'</div><div style="padding-top:30px"><input type="button" class="blue" onclick="noticeDestroy();" value="Done"></div>');
	},
	Next : function()
	{
		if(TagPlaces.animating || $("next").src.indexOf("Disabled") != -1) return;
		var o = $("tagPlaceListing");

		TagPlaces.offset += TagPlaces.limit;
		var l = parseInt(o.style.left.replace("px",""));

		if(n = $("page"+TagPlaces.offset))
		{
			var c = n.select(".place");
			if(TagPlaces.offset+c.length < TagPlaces.lastRows)
				$("next").src = "images/v2/rightArrow.gif";
			else
				$("next").src = "images/v2/rightArrowDisabled.gif";
			if(TagPlaces.offset > 0)
				$("prev").src = "images/v2/leftArrow.gif";
			else
				$("prev").src = "images/v2/leftArrowDisabled.gif";

			TagPlaces.animating = true;
			var t = new Tween(o.style,'left',Tween.strongEaseOut,l,l-740,0.5,'px');
			t.onMotionFinished = function(){TagPlaces.animating = false;}
			t.start();

			var a = $("page"+TagPlaces.offset).select(".place");
			TagPlaces.Select(a[0]);
			return;
		}

		var w = parseInt(o.style.width.replace("px",""));
		o.style.width = (w+740)+"px";

		$("tagPlaceInfo").innerHTML = "";
		var o = $("tagPlaceListing");
		TagPlaces.nextDiv = new Element("div",{'class':"placeHolder", id:"page"+TagPlaces.offset});
		o.appendChild(TagPlaces.nextDiv);
		TagPlaces.nextDiv.innerHTML = '<div align="center"><img src="images/v2/loadingBlueBar.gif" style="margin-top:20px"></div>';

		TagPlaces.animating = true;
		var t = new Tween(o.style,'left',Tween.strongEaseOut,l,l-740,0.5,'px');
		t.onMotionFinished = function(){TagPlaces.animating = false;}
		t.start()

		new Ajax.Request(slink+'ajax/tags', {
			method : "post",
			parameters : {
				action : "get tag user places",
				tag : TagPlaces.lastTag,
				iduser : typeof(iduser)!="undefined"?iduser:commentId,
				limit : TagPlaces.limit,
				offset : TagPlaces.offset,
				tagtype : TagPlaces.lastTagType
			},
			onSuccess : function(transport)
			{
				if(ajaxResponse(transport,false))
				{
					var data = eval("("+transport.responseText+")");
					data.count = parseInt(data.count);
					data.rows = parseInt(data.rows);

					if(data.count == TagPlaces.limit && TagPlaces.offset+data.count < data.rows)
						$("next").src = "images/v2/rightArrow.gif";
					else
						$("next").src = "images/v2/rightArrowDisabled.gif";
					if(TagPlaces.offset != 0)
						$("prev").src = "images/v2/leftArrow.gif";
					else
						$("prev").src = "images/v2/leftArrowDisabled.gif";

					TagPlaces.nextDiv.innerHTML = data.html;
					var a = TagPlaces.nextDiv.select(".place");
					TagPlaces.Select(a[0]);
				}
			}
		});
	},
	Prev : function()
	{
		var o = $("tagPlaceListing");
		var l = parseInt(o.style.left.replace("px",""));

		if(l+740 > 0 || TagPlaces.animating || $("prev").src.indexOf("Disabled") != -1) return;

		if(l+740 == 0)
			$("prev").src = "images/v2/leftArrowDisabled.gif";
		$("next").src = "images/v2/rightArrow.gif";

		$("tagPlaceInfo").innerHTML = "";
		var o = $("tagPlaceListing");
		TagPlaces.animating = true;
		var t = new Tween(o.style,'left',Tween.strongEaseOut,l,l+740,0.5,'px');
		t.onMotionFinished = function(){TagPlaces.animating = false;}
		t.start()

		TagPlaces.offset -= TagPlaces.limit;

		var a = $("page"+TagPlaces.offset).select(".place");
		TagPlaces.Select(a[a.length-1]);
	},
	Select : function(obj)
	{
		obj = $(obj);
		if(!obj.hasClassName("place")) obj = obj.up(".place");
		var a = $("tagPlaceListing").select(".active");
		for(var i=0;i<a.length;i++) a[i].removeClassName("active");
		obj.addClassName("active");
		var i = obj.down(".info");
		$("tagPlaceInfo").innerHTML = i.innerHTML;
	},
	Remove : function(event)
	{
		var e = Event.element(event);
		var tag = e.up("li").select("a")[0].innerHTML;
		tag = tag.replace('"','\"');
		if(confirm("Are you sure you want to remove all places tagged with "+tag+"?"))
		{
			new Ajax.Request(slink+'ajax/tags', {
				method : "post",
				parameters : {
					action : "delete tag",
					tag : tag
				},
				onSuccess : function(transport)
				{
					if(ajaxResponse(transport,false))
					{
						var p = TagPlaces.lastObj.up("li");
						p.remove();
						selectFirstTag();
					}
				}
			});
		}
	}
}

var MyTags = {
	Save : function(tagtype)
	{
		var o = $("txtPrivateTags");
		if(!o) return;
		o.disabled = true;
		noticeInPlace($("myTagsButtonArea"),"Saving tags");

		holder = $F("txtPrivateTags");
		new Ajax.Request(slink+'ajax/tags', {
			method : "post",
			parameters : {
				action : "add user",
				idobject : typeof(iduser)!="undefined"?iduser:commentId,
				objecttype : o.readAttribute("objecttype"),
				"tags" : holder,
				tagtype : tagtype
			},
			onSuccess : function(transport)
			{
				if(ajaxResponse(transport,false))
				{
					$("myTagsSaved").innerHTML = holder;
					$("txtPrivateTags").disabled = false;
					noticeDestroy();
					document.location.reload();
				}
			}
		});
	},
	Undo : function()
	{
		$("txtPrivateTags").value = $("myTagsSaved").innerHTML;
	}
}

function selectFirstTag()
{
	if(typeof linktag != "undefined")
		return;
	var a = $("tagWall").select("a");
	if(a.length > 0)
	{
		TagPlaces.Load(a[0],a[0].readAttribute("tagtype"));

		var tabs = $$(".headertabs")[0].select("li");
		for(var i=0;i<tabs.length;i++)
		{
			if($(tabs[i].id+"_content").select("a").length > 0)
			{
				HeaderTabs.Switch(tabs[i].id);
				break;
			}
		}
	}

}

Event.observe(window,"load",function(){
	if(o = $("btnILikeTag"))
	{
		o.setAttribute("href","#");
		Event.observe(o,"click",TagStatus.Like);
	}
	if(o = $("btnIDontLikeTag"))
	{
		o.setAttribute("href","#");
		Event.observe(o,"click",TagStatus.DontLike);
	}
	if(o = $("btnTagReset"))
	{
		o.setAttribute("href","#");
		Event.observe(o,"click",TagStatus.ResetStatus);
	}
	if(o = $("usertags_content"))
	{
		if($("tagWall"))
		{
			selectFirstTag();
		}
		else
		{
			$("tagPlaceInfo").innerHTML = '<div align="center">'+$("username").innerHTML+' has not tagged any places yet.</div>';
		}
	}
});
