// ==UserScript==
// @name           LDR keybind for LDR
// @namespace      http://ma.la/
// @description    simple keybind for livedoor reader
// @include        http://reader.livedoor.com/reader/
// ==/UserScript==

new function(){
	var w = unsafeWindow;
	w.register_hook('AFTER_INIT', function(){
	GM_addStyle('.fs-focus{background-color:#888;color:#fff !important}');
	GM_addStyle('#right_body,#subs_body{bodrder:2px solid #fff}');
	with(w){
		register_hook('AFTER_PRINTFEED', function(){
			State.focus_subscribe_id = State.now_reading;
		});
		function get_next_from(sid){
			var list = Ordered.list;
			if(!list) return;
			var offset = list.indexOfStr(sid);
			var next = list[offset+1];
			return next;
		}
		function get_prev_from(sid){
			var list = Ordered.list;
			if(!list) return;
			var offset = list.indexOfStr(sid);
			var prev = list[offset-1];
			return prev;
		}
		var state = 0;
		function subs_focus(id, e){
			var el = $('subs_item_' + id);
			if(!el) return;
			SubsItem.onhover.call(el,e)
			if(Config.view_mode != "flat"){
				var tvroot = QueryCSS.findParent(function(){
					return /^treeview/.test(this.id)
				}, el);
				var tv = TreeView.get_control(tvroot.id);
				tv && tv.open()
			}
			var sc = $("subs_container");
			sc.scrollTop = el.offsetTop - $("subs_container").offsetTop - 64;
			sc.scrollLeft = 0;
		}
		function subs_unfocus(id,e){
			var el = $('subs_item_' + id);
			if(!el) return;
			SubsItem.onunhover.call(el, e);
		}
		Control.scan_up = function(e){
			var current = State.focus_subscribe_id || State.now_reading;
			var prev = get_prev_from(current);
			if(prev){
				if(current){ subs_unfocus(current, e) }
				subs_focus(prev, e);
				State.focus_subscribe_id = prev;
			}
		};
		Control.scan_down = function(e){
			var current = State.focus_subscribe_id || State.now_reading;
			var next = get_next_from(current);
			if(next){
				if(current){ subs_unfocus(current, e) }
				subs_focus(next, e);
				State.focus_subscribe_id = next;
			}
		};
		Keybind.add('left', function(){
			state = 0;
			setStyle('subs_body', {
				border : '2px dotted #99f'
			});
			setStyle('right_body', {
				border : '2px solid #fff'
			})
		});
		Keybind.add('right', function(){
			if(state == 1){ Control.pin(); return }
			if(state == 0){
				state = 1;
				if(State.focus_subscribe_id){
					Control.read(State.focus_subscribe_id, Control.prefetch);
				}
				setStyle('subs_body', {
					border : '2px solid #fff'
				});
				setStyle('right_body', {
					border : '2px dotted #99f'
				})
			}
		});
		Keybind.add('down', function(){
			if(state == 1){ Control.go_next(); return }
			Control.scan_down();
		});
		Keybind.add('up', function(){
			if(state == 1){ Control.go_prev(); return }
			Control.scan_up();
		});
	}
	
	});
}
