Index: /lang/javascript/userchrome/tumblr-multi.uc.js
===================================================================
--- /lang/javascript/userchrome/tumblr-multi.uc.js (revision 267)
+++ /lang/javascript/userchrome/tumblr-multi.uc.js (revision 267)
@@ -0,0 +1,131 @@
+/*
+ * Multi login for Tumblr
+ * cho45 <cho45@lowreal.net>
+ * 2007-09-24
+ *
+ * License:
+ * Creative Commons by
+ * http://creativecommons.org/licenses/by/3.0/
+ *
+ * Using information in your password manager,
+ * you have to logged in tumblr previously.
+ */
+
+
+if (typeof MultiUserOnTumblrService != "function") {
+	var MultiUserOnTumblrService = function () {
+		if (arguments.callee.instance) {
+			// some complex process for reloading
+			for (prop in arguments.callee.prototype) {
+				if (arguments.callee.prototype.hasOwnProperty(prop)) {
+					arguments.callee.instance[prop] = arguments.callee.prototype[prop];
+				}
+			}
+			return arguments.callee.instance;
+		} else {
+			this.initialize.apply(this, arguments);
+			arguments.callee.instance = this;
+		}
+	};
+}
+MultiUserOnTumblrService.prototype = {
+	ID : "status-bar-multi-user-tumblr-uc",
+
+	initialize : function () {
+		var self = this;
+		this.manager    = Components.classes["@mozilla.org/passwordmanager;1"]
+		                            .getService(Components.interfaces.nsIPasswordManager);
+		this.manageri   = Components.classes["@mozilla.org/passwordmanager;1"]
+		                            .getService(Components.interfaces.nsIPasswordManagerInternal);
+		this.cookies    = Components.classes["@mozilla.org/cookieService;1"]
+		                            .getService(Components.interfaces.nsICookieService);
+		this.IOService  = Components.classes["@mozilla.org/network/io-service;1"]
+			                        .getService(Components.interfaces.nsIIOService);
+
+
+		var statusbar = document.getElementById("status-bar");
+		this.panel     = document.createElementNS(kXULNS, "statusbarpanel");
+
+//		this.mg = document.createElementNS(kXULNS, "image");
+//		this.img.setAttribute("src", iconimg);
+//		this.panel.appendChild(this.img);
+
+		this.lbl = document.createElementNS(kXULNS, "label");
+		this.lbl.setAttribute("value", "Not logged in");
+		this.panel.appendChild(this.lbl);
+
+		this.menu = document.createElementNS(kXULNS, "menupopup");
+//		proxySetting.forEach(function (f) {
+//			var mi = document.createElementNS(kXULNS, "menuitem");
+//			mi.setAttribute("label", f.name);
+//			mi.addEventListener("command", command, false);
+//			menu.appendChild(mi);
+//		});
+
+		this.panel.appendChild(this.menu);
+		this.panel.addEventListener("click", function () {
+			self.onPanelClick.apply(self, arguments);
+		}, false);
+
+		var t = document.getElementById(this.ID)
+		if (t) t.parentNode.removeChild(t);
+		this.panel.id = this.ID;
+		statusbar.appendChild(this.panel);
+	},
+
+	onPanelClick : function (e) {
+//		var foundHost = {value:""}, foundUser = {value:""}, foundPass = {value:""};
+//		this.manageri.findPasswordEntry("http://www.tumblr.com", null, null, foundHost, foundUser, foundPass);
+//		alert([foundUser.value, foundPass.value]);
+
+		var matched = [];
+		var passwords = this.manager.enumerator;
+		var pass;
+		while (passwords.hasMoreElements()) {
+			var pass = passwords.getNext().QueryInterface(Components.interfaces.nsIPassword);
+			if (pass.host == "http://www.tumblr.com") matched.push(pass);
+		}
+		while (this.menu.firstChild) this.menu.removeChild(this.menu.firstChild);
+		matched.forEach(function (e) {
+			var mi = document.createElementNS(kXULNS, "menuitem");
+			mi.setAttribute("label", e.user);
+			var self = this;
+			mi.addEventListener("command", function () { self.switchUser(e) } , false);
+			this.menu.appendChild(mi);
+		}, this);
+		this.menu.showPopup(this.panel, -1, -1, "popup", "bottomleft", "topleft");
+
+	},
+
+	switchUser : function (password) {
+		var self = this;
+
+//		var cookie = this.cookies.getCookieString(this.IOService.newURI("http://www.tumblr.com", null, null), null)
+//		alert(cookie);
+		self.setStatus("Logging in...");
+		var req = new XMLHttpRequest;
+		req.open("POST", "http://www.tumblr.com/login", true);
+		req.onload = function (e) {
+			if (req.responseText.match(/Logging in/)) {
+				self.setStatus(password.user);
+			}
+		};
+		req.onerror = function (e) {
+			alert(e);
+		};
+		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+		req.send([
+			"email=", encodeURI(password.user),
+			"&password=", encodeURI(password.password),
+		].join(""));
+			
+
+		this.currentUser = password;
+	},
+
+	setStatus : function (msg) {
+		this.lbl.setAttribute("value", msg);
+	},
+};
+
+new MultiUserOnTumblrService();
