// ==UserScript==
// @author      Andrew Turner
// @name        FlickrZoneTagr
// @description Shows optional tags from Zonetag at a location to add to your Flickr photos
// @include       http://*flickr.com/photos/*
// ==/UserScript==

/*
	Written by Jonathan Snook, http://www.snook.ca/jonathan
	Add-ons by Robert Nyman, http://www.robertnyman.com
*/

function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/-/g, "\-");
	var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}

function askZoneTag(latitude, longitude, photo_id) {
	document.getElementById('tagsuggestionresponse').innerHTML = "&nbsp;loading...";
	var zturl = "http://zonetag.research.yahooapis.com/services/rest/V1/suggestedTags.php?apptoken=f54c6182372d6727017d1a5587b4b525&output=xml&latitude=" + latitude + "&longitude=" + longitude;
		GM_xmlhttpRequest({method:"GET",
			url:zturl,
			data:"",
			headers: {
        'User-agent': 'FlickrTaggr Greasemonkey',
        'Accept': 'application/xml,text/xml',
    	},
			onload:function(responseDetails) {
				try {
					var tags = document.getElementById('tagsuggestionresponse');
					// convert string to XML object
					if (typeof DOMParser == "undefined") {
						var responseXML = new ActiveXObject("Microsoft.XMLDOM");
						responseXML.async = false;
						responseXML.loadXML(responseDetails.responseText);
					} else {
						var parser = new DOMParser();
						var responseXML = parser.parseFromString(responseDetails.responseText, "application/xml");
					}
					var ztags = responseXML.getElementsByTagName('tag');
					var title = "<br/>click a zonetag: ";
					var tagname = "";
					for (var i = 0; i < ztags.length; i++) {
									tagname = ztags[i].getElementsByTagName('text')[0].textContent;
						title = title + '<a id="zoneTags' + tagname + '" class="tagrsUnUsed" onclick="tagrs_toggleTagInInput(\'' + tagname + '\', \''+ photo_id + '\'); return false;" href="#">' + tagname + '</a>';
									if(i != ztags.length -1 )
										title += ",&nbsp;";
					}						
					tags.innerHTML = title;

				
				} catch (e) {
					document.getElementById('tagsuggestionresponse').innerHTML = 
					'<a href="javascript: alert(\''+e+'\');">no tags found</a>';
				}
			}
		});
}

var geos;
function getTags() {

	var latitudes = getElementsByClassName(geos[0],"*", "latitude");
	var longitudes = getElementsByClassName(geos[0],"*", "longitude");
	if(latitudes.length > 0) {
		var latitude = latitudes[0].innerHTML;
		var longitude = longitudes[0].innerHTML;
		askZoneTag(latitude, longitude, '');
	}
	return false;
}
function loadTagSelector() {

	geos = getElementsByClassName(document, "*", "geo");
	if(geos.length <= 0)
		return;
		
	var link = document.createElement('div');
	//link.setAttribute('href', '#');
	link.setAttribute('id', 'tagsuggestions');
	link.innerHTML = '<a href="#" onclick="return false;" class="Plain">Choose from Zonetags at this location</a>';
	link.addEventListener('click', getTags, true);
	var response = document.createElement('span');
	response.setAttribute('id','tagsuggestionresponse');
	
	var node = document.getElementById('tagpopular');
	node.parentNode.appendChild(link);
	node.parentNode.appendChild(response);

}


window.addEventListener('load', loadTagSelector, false);
