// ==UserScript==
// @name        ldr_gbsaver
// @description Save pins into Google Bookmarks
// @namespace	http://ma.la/
// @include     http://reader.livedoor.com/reader/*
// @version     1.0
// ==/UserScript==

(function(){

	var enable_p = true;
	var enable_v = true;

	// customize your label
	function make_label(){

		// yyyy-mm
		var dt = new Date;
		var year  = dt.getFullYear();
		var month = dt.getMonth() + 1;
		var day   = dt.getDate();
		function zerofill(num){
			return num < 10 ? "0"+num : num;
		}
		month = zerofill(month);
		day   = zerofill(day);
		var ym = [year, month].join("-");

		// folder
		var folder = w.subs_item(w.State.now_reading).folder;

		return ["LDR",folder,ym].join(",");
	}

	var w = unsafeWindow;

	// init
	function add_link(){with(w){
		var buttons = $("control_buttons").getElementsByTagName("ul")[0];
		var li = document.createElement("li");
		li.className = "button icon";
		li.innerHTML = [
			'<a href="http://www.google.com/bookmarks/" target="_blank">',
			'<img src="http://www.google.com/favicon.ico" border="none">',
			'</a>'
		].join("");
		buttons.appendChild(li)
	}}
	add_link();
	if(enable_p){
		var _onload = w.onload;
		w.onload = function(){
			_onload();
			var pin_add = w.pin.add;
			w.pin.add = function(url,title){
				if(this.has(url)) return;
				// url = url.replace(/#.*$/, '');
				gb.save(url, title, make_label());
				pin_add.apply(this, arguments);
			};
		}
	}

	if(enable_v){
		var vo = w.Control.view_original;
		w.Control.view_original = function(){
			vo.apply(this, arguments);
			var item = w.get_active_item(true);
			if(!item) return;
			var url = item.link;
			var title = item.title;
			// url = url.replace(/#.*$/, '');
			gb.save(url, title, make_label());
		};
	}
	/*
	 new GBSaver({once: true||false})
	*/
	function GBSaver(o){
		this.target = 'GBSaver' + (new Date - 0);
		this.make_form();
		this.make_iframe();
		if(o){
			o.once && this.sweep();
		}
	}

	GBSaver.prototype.make_form = function(){
		function createHidden(n){
			var input  = document.createElement('input');
			input.type = 'hidden';
			input.name = n;
			return input;
		}
		var form = document.createElement('form');
		var self = this;
		"bkmk,title,labels".split(",").forEach(function(v){
			self["_"+v] = createHidden(v);
			form.appendChild(self["_"+v]);
		});
		form.setAttribute('Accept-charset', "UTF-8");
		form.action = 'http://www.google.com/bookmarks/mark';
		form.method = 'post';
		form.target = this.target;
		document.body.appendChild(form);
		this.form = form;
	}
	GBSaver.prototype.make_iframe = function(){
		var ifm  = document.createElement('iframe');
		ifm.name = this.target;
		ifm.style.display = 'none';
		document.body.appendChild(ifm);
		this.ifm = ifm;
	}
	GBSaver.prototype.save = function(url,title,label){
		this._bkmk.value  = url;
		this._title.value = title;
		this._labels.value = label;
		this.form.submit();
	}
	GBSaver.prototype.sweep = function(){
		var form = this.form;
		var ifm  = this.ifm;
		ifm.addEventListener('load', function(){
			setTimeout(function(){
				document.body.removeChild(form);
				document.body.removeChild(ifm);
			}, 1);
		}, false);
	}

	var gb = new GBSaver;

})();
