// ==UserScript==
// @name          Flickr/Shutterfly Integrator
// @description	  Adds the ability to order prints via Shutterfly.com of a photo hosted on Flickr
// @namespace     http://www.quasistoic.org/ts/archives/flickr-shutterfly/
// @include       http://flickr.com/photos/*
// @include       http://www.flickr.com/photos/*
// @version		1.0

// By Danny Dawson
// Modified by Jason Rhyley (jason AT rhyley DOT org)
// ==/UserScript==

(function() {

	//if a photo page
	if (document.getElementById("button_bar")) {
	
	pid = location.pathname.split('/')[3];
	
	if (document.getElementById("title_div" + pid)) 
		ptitle = document.getElementById("title_div" + pid).innerHTML;
	else ptitle = 'Flickr - photo sharing!';
	
	pOwnerName = location.pathname.split('/')[2];
	(pOwnerName.indexOf('@') != -1) ? pOwnerName = '' : pOwnerName = ', by ' + pOwnerName;
	
	/** XHConn - Simple XMLHTTP Interface - bfults@gmail.com - 2005-04-08        **
	 ** Code licensed under Creative Commons Attribution-ShareAlike License      **
	 ** http://creativecommons.org/licenses/by-sa/2.0/                           **/
	function XHConn()
	{
	  var xmlhttp, bComplete = false;
	  xmlhttp = new XMLHttpRequest();
	  this.connect = function(sURL, sMethod, sVars, fnDone)
	  {
	    if (!xmlhttp) return false;
	    bComplete = false;
	    sMethod = sMethod.toUpperCase();

	    try {
	      if (sMethod == "GET")
	      {
		xmlhttp.open(sMethod, sURL+"?"+sVars, true);
		sVars = "";
	      }
	      else
	      {
		xmlhttp.open(sMethod, sURL, true);
		xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
		xmlhttp.setRequestHeader("Content-Type",
		  "application/x-www-form-urlencoded");
	      }
	      xmlhttp.onreadystatechange = function(){
		if (xmlhttp.readyState == 4 && !bComplete)
		{
		  bComplete = true;
		  fnDone(xmlhttp);
		}};
	      xmlhttp.send(sVars);
	    }
	    catch(z) { return false; }
	    return true;
	  };
	  return this;
	}

	var myConn = new XHConn();
	var fnWhenDone = function (responseDetails) {
		var parser = new DOMParser();
		var dom = parser.parseFromString(responseDetails.responseText, "text/xml");
		var entries = dom.getElementsByTagName('size');
		sizes = new Object();
		for (i=0;i<entries.length;i++) {
			label = entries[i].getAttribute('label');
			eval ("sizes." + label +" = new Object();");
			eval ("sizes." + label +".w = entries[i].getAttribute('width'); ");
			eval ("sizes." + label +".h = entries[i].getAttribute('height'); ");
			eval ("sizes." + label +".src = entries[i].getAttribute('source'); ");
		}
		if (!sizes.Original && sizes.Large) sizes.Original = sizes.Large;
		window.newBody = '<form name="sflyc4p" action="http://www.shutterfly.com/c4p/UpdateCart.jsp" method="post">' +
			'<br><input id="order" type="submit" value="Order Print"> ' +
			'<button onclick="document.body.innerHTML = oldBody">Cancel</button><br><br>' +
			'<img src="' + sizes.Original.src + '"><br><br>' +
			ptitle + pOwnerName +
			'<input type="hidden" name="addim" value="1">' +
			'<input type="hidden" name="protocol" value="SFP,100">' +
			'<input type="hidden" name="pid" value="C4PP">' +
			'<input type="hidden" name="psid" value="GALL">' +
			'<input type="hidden" name="imnum" value="1">' +
			'<input type="hidden" name="imraw-1" value="' + sizes.Original.src + '">' +
			'<input type="hidden" name="imrawheight-1" value="' + sizes.Original.h + '">' +
			'<input type="hidden" name="imrawwidth-1" value="' + sizes.Original.w + '">' +
			'<input type="hidden" name="imthumb-1" value="' + sizes.Thumbnail.src + '">' +
			'<input type="hidden" name="imbkprnta-1" value="' + ptitle + pOwnerName + '">' +
			'<input type="hidden" name="returl" value="' + location.href + '">' +
			'</form>';
	};

	args = 'method=flickr.photos.getSizes&photo_id=' + pid + '&api_key=' + global_magisterLudi;
	myConn.connect("/services/rest/", "GET", args, fnWhenDone);

	window.doShut = function() {
		oldBody = document.body.innerHTML;
		document.body.innerHTML = newBody;
	}
	
	var containerC = document.createElement("li");
	containerC.setAttribute("class","Stats");
	containerC.innerHTML = '<a href="javascript:doShut()" style="text-decoration:none">Order Prints</a>';

	addlInfo = document.getElementsByTagName("ul")[0];	// This could break so easily, but luckily list elements aren't allowed in comments
	addlInfo.appendChild(containerC);
	
	}//close if a photo page

})();