// ==UserScript==
// @name        ldr_gbsaver
// @description Save pins into Google Bookmarks
// @namespace	http://ma.la/
// @include     http://reader.livedoor.com/reader/*
// @version     1.0.1
// ==/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());
		};
	}

	function GBSaver(logger){
		this.action = 'http://www.google.com/bookmarks/mark';
		logger = logger || function(){};
		function form_encode(param){
			var buf = [];
			for(var key in param){
				var value = param[key];
				buf.push(
					encodeURIComponent(key)+"="+
					encodeURIComponent(value)
				)
			}
			return buf.join("&");
		}
		this.save = function(url,title,label){
			logger("sending private data to Google ... ");
			var postdata = form_encode({
				bkmk:   url,
				title:  title,
				labels: label
			});
			GM_xmlhttpRequest({
				method: "post",
				url: this.action,
				data: postdata,
				onload: function(){
					logger("sending private data to Google ... done");
				}
			})
		}
	}
	var gb = new GBSaver(w.message);

})();