// ==UserScript==
// @name           LP_PasteAndMark
// @namespace      http://err.no/src
// @identifier     http://err.no/src/lp_pasteandmark.user.js
// @description    (Launchpad) Paste from clipboard and mark a bug as fix released.  Requires patched greasemonkey.
// @include        https://*.launchpad.net/*
// @include        https://launchpad.net/*
// @version        0.2
// @date	   2007-11-29
// @creator	   Tollef Fog Heen <tfheen@err.no>
// ==/UserScript==

(function () {
  var SCRIPT = {
    name: "LP_PasteAndMark",
    namespace: "http://err.no/src",
    description: '(Launchpad) Paste from clipboard and mark a bug as fix released.  Requires patched greasemonkey.',
    source: "http://err.no/src",
    identifier: "http://err.no/src/lp_pasteandmark.user.js",
    version: "0.2",
    date: (new Date(2007, 11 - 1, 29))// update date
    .valueOf()
  };

// update automatically
  try {
    window.addEventListener("load", function () { try {
      (unsafeWindow || window.wrappedJSObject || window)
      .UserScriptUpdates.requestAutomaticUpdates(SCRIPT);
    } catch (ex) {} }, false);
  } catch (ex) {}

function xpath(query, context) {
  context = context ? context : document;
  return document.evaluate(query, context, null,
			   XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
}

function fromClipboard() {

    var clip = Components.classes["@mozilla.org/widget/clipboard;1"].getService(Components.interfaces.nsIClipboard);

	alert("blah");
    if (!clip) return false;

    var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
    if (!trans) return false; 

    try {
      trans.addDataFlavor("text/unicode");

      clip.getData(trans, clip.kSelectionClipboard); 
      var str = new Object(); 
      var strLength = new Object(); 

      trans.getTransferData("text/unicode",str,strLength);
      
      if (str) str = str.value.QueryInterface(Components.interfaces.nsISupportsString);
      if (str) pastetext = str.data.substring(0, strLength.value / 2);
      return pastetext;
    } catch (e) {
      return false;
    }
};


function magicHandler(element, formname) {
	element.addEventListener('click', function(e) { 
		e.preventDefault(); 
			xpath("//input[@id='"+  formname + ".assignee.assign_to_me']").snapshotItem(0).click();
			
			var statusSelect = xpath("//select[@id='"+  formname + ".status']").snapshotItem(0);
			statusSelect.selectedIndex = statusSelect.length - 1;
			
			xpath("//textarea[@id='"+  formname + ".comment_on_change']").snapshotItem(0).value = GM_fromClipboard();
			return false;
		}, false);

}

window.addEventListener("load", function(e) {
	var allForms, thisForm, thisSubmit, thisInput;
	var keys = new Array('q', 'w', 'e', 'r', 't', 'y', 'u', 'o');

	allForms = xpath("//a[contains(@href, '+editstatus')]");
	for (var i = 0; i < allForms.snapshotLength; i++) {
		thisForm = allForms.snapshotItem(i);
		thisForm.accessKey = keys[i];
	}
	allForms = xpath("//form");

	for (var i = 0; i < allForms.snapshotLength; i++) {
		thisForm = allForms.snapshotItem(i);
		thisInput = xpath(".//input[contains(@name, '.sourcepackagename') or contains(@name, '.product')]", thisForm);
		if (thisInput.snapshotLength == 0) {
			continue;
		}
		var formname = thisInput.snapshotItem(0).name;
		formname = formname.substr(0, formname.lastIndexOf("."));
		
		thisSubmit = xpath(".//input[@type='submit']", thisForm);
		thisSubmit = thisSubmit.snapshotItem(0);
    		thisSubmit.accessKey = "s";

		var newElement = document.createElement('input');
		newElement.type  = "submit";
		newElement.accessKey = "p";
		magicHandler(newElement, formname);
		thisSubmit.parentNode.insertBefore(newElement, newElement.nextSibling);
	}
}, false);

})();

