// ==UserScript==
// @name           readmore_ext_LDRize.user.js
// @namespace      http://furyu.tea-nifty.com/
// @description    ReadMore Extension for LDRize ver.0.01 (SeaHorse/Greasemonkey)
// @include        *
// @type           SleipnirScript
// ==/UserScript==
//
// author: furyu (http://furyu.tea-nifty.com/annex/)
// script: http://furyu.tea-nifty.com/script/readmore_ext_LDRize.user.js
//
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html

(function(){

readmoreExt=function(){

// === Preparation
var	w=window,d=w.document;
var	sleipnir=w.sleipnir;

if (w._readmore_ext_LDRize_user_js) return;
w._readmore_ext_LDRize_user_js=true;


// === Parameters
var	COMMAND=['toggle','toTop','toBottom'];

var	KEYBIND={
	toggle		:	'm'	//	initialize & toggle
,	toTop		:	't'	//	move to top
,	toBottom	:	'b'	//	move to bottom
};

var	DESCRIPTION={
	toggle		:	'ReadMore::toggle'
,	toTop		:	'ReadMore::toTop'
,	toBottom	:	'ReadMore::toBottom'
};

var	PREFIX='ReadMore::'


// === Common Functions
var	cmdTemplate=function(stdin,fnc){
	var	cmdCall=function(node){
		if (!node.getElementsByTagName) return;
		var	links=node.getElementsByTagName('a');
		if (!links||links.length<=0) return;
		var	snapshot=[];
		for (var ci=0,len=links.length; ci<len; ci++) snapshot[snapshot.length]=links[ci];
		for (var ci=0,len=snapshot.length; ci<len; ci++) fnc(snapshot[ci]);
	};
	if (stdin) {
		if (stdin.length) {
			for (var ci=0,len=stdin.length; ci<len; ci++) cmdCall(stdin[ci]);
		}
		else {
			cmdCall(stdin);
		}
	}
	return stdin;
};

// === Main (keybind registration)
var	LDRize=w.LDRize;
var	ReadMoreAPI=w.ReadMoreAPI;
if (!LDRize||!ReadMoreAPI) return;

if (sleipnir) {
	if (!LDRize.SeaHorse) return;
	var	addKeyBind=function(cmd){
		LDRize.addKeyBind(KEYBIND[cmd],function(){
			cmdTemplate(LDRize.getCurrentParagraph(),ReadMoreAPI[cmd]);
		});
	};
}
else {
	var	Minibuffer=w.Minibuffer;
	if (!Minibuffer) return;
	
	var	callCommand=function(fncname,e){
		try {
			Minibuffer.execute(PREFIX+fncname,Minibuffer.execute('current-node'));	//	Error (LDRize "2008.06.02")
		}
		catch (e) {
			var	orgnodes=Minibuffer.execute('pinned-or-current-node | toggle-pin');
			Minibuffer.execute(PREFIX+fncname,Minibuffer.execute('pinned-or-current-node'));
			Minibuffer.execute('toggle-pin',orgnodes);
		}
	};
	var	addKeyBind=function(cmd){
		Minibuffer.addCommand({
			name	:	PREFIX+cmd
		,	command	:	function(stdin){return cmdTemplate(stdin,ReadMoreAPI[cmd]);}
		});
		Minibuffer.addShortcutkey({
			key			:	KEYBIND[cmd]
		,	command		:	function(e){callCommand(cmd);}
		,	description	:	DESCRIPTION[cmd]
		});
	};
}
for (var ci=0,len=COMMAND.length; ci<len; ci++) addKeyBind(COMMAND[ci]);

};	//	end of readmoreExt()

// === Entry Point
if (typeof sleipnir!='undefined') {	//	SeaHorse
	_window.sleipnir=sleipnir;
	try{_window.execScript('('+readmoreExt.toString()+')();','JavaScript');}catch(e){};
	_window.sleipnir=null;
}
else {			//	Greasemonkey
	readmoreExt();
}

})();

