

//----------------------------------------------------------
//KeyNavi Ver.1.01 (processed on 2003/12/03)
//詳しくは次のページをご覧下さい。 http://www.keynavi.net/ja/
//----------------------------------------------------------


KL_VERSION  ="1.01";
KL_PROCDATE ="2003/12/03";
KL_ACTIVE   = 1;
KL_AVAIL    = 0;
KL_ROOT	    = "http://www.keynavi.net/";

//-----customize [general]-----
KL_DEBUG         = 0;
KL_RESET_SBAR    = 1;
KL_FOCUS_ONSETUP = 0;
KL_ACTIVATE_IE4  = 1;
KL_ACTIVATE_NS4  = 1;
KL_ACTIVATE_NS6  = 1;
KL_ACTIVATE_OP6  ="confirm"; 
KL_ACTIVATE_OP7  ="confirm"; 
KL_ACTIVATE_MZT  ="confirm"; 
KL_MAP_DEFAULT   ="mapdef_fci_fca";
KL_MAP_SILENT    ="silent_fci_fca";
KL_BKMK_DEFAULT  ="";
KL_SKIP_TOPSEC   = 0;
KL_SEC_BASIC     = 0;
KL_ALLOW_BKMK    = 1;

KL_SETMARK_ONMOVE= 1;
KL_USE_BKMK      = 1;
KL_SET_SEC_NAMES = 1;
KL_SET_SEC_NBR   = 1;


KL_CONFIRM       =  0;


KL_CHECK_VISIBILITY=1;

KL_FOCUS_CENTERX = 0.5; 
KL_FOCUS_CENTERY = 0.5; 
KL_FOCUS_RECTIFY = 1;

KL_FOCUS_NOSHIFT = 0;

KL_MAP_WINS="auto"; //new Array();

KL_BKMK_WINS="auto"; //new Array();

KL_BKMK_TARGET=self;


//-----customize [cookies]-----
KL_MAP_CNAME ="kl_map"; KL_MAP_CPATH ="/"; KL_MAP_CEXP =1;
KL_BKMK_CNAME="kl_bkmk";KL_BKMK_CPATH="/"; KL_BKMK_CEXP=0;
KL_RLD_CNAME ="kl_rld"; KL_RLD_CPATH = ""; KL_RLD_CEXP =0;
KL_BACC_CNAME="kl_bacc";KL_BACC_CPATH="/"; KL_BACC_CEXP = 0;

KL_CRYPT_KEY="Rain Drops Falling On My Head...";

//-----customize [sections]-----
KL_SEC_NAMES=new Array();
KL_SEC_PREV ="";
KL_SEC_NEXT ="";
KL_SECN_MIN = 0;

KL_SEC_NAMES_PREFIX = "";
KL_SEC_NAMES_PREFIX2= new Array("kl_","_");

KL_SEC_PREV_NAME = "kl_prev";
KL_SEC_NEXT_NAME = "kl_next";

KL_PAGES=new Array();
KL_PAGES_PREV=new Array();
KL_PAGES_NEXT=new Array();

KL_TOP    ="";
KL_BOTTOM ="";

function kl_sec_handler(secn,name){
	if(self['kl_sec_handler_ex']) kl_sec_handler_ex(secn,name);
	return true;
}
function kl_gt_top(){
	kl_move("p",0,0,1);
}
function kl_gt_bottom(){
	kl_move("G",0,0,1);
}

//-----customize [extension]-----
KL_KEY2URL =new Array();
KL_KEY2CLK =new Array();
KL_KEY2FCS =new Array();
KL_KEY2FNC =new Array();
KL_KEY2NAME=new Array();


//-----messages for users-----
if(!self['KL_LANG']) KL_LANG="not_set";
KL_LANG_DEFAULT="not_set";
function kl_msg(s){
	var t="KL_MSG_"+s+"_"+KL_LANG.toUpperCase();
	if(kl_isstr(self[t])) return self[t];
	var u="KL_MSG_"+s+"_"+KL_LANG_DEFAULT.toUpperCase();
	if(kl_isstr(self[u])) return self[u];
	if(KL_DEBUG) alert("resource not found: "+t);
	return "";
}
function kl_mstat(s,arg){ kl_status(kl_msg(s),arg); }
function kl_mcnfm(s){ return confirm(kl_msg(s)); }
function kl_malrt(s){ return alert(kl_msg(s)); }


//-----check pre-defined shortcuts-----
KL_OP6_DISABLED_KEYS=new Array("Q","A","Z","W","S","X","E","D","G","H","P","0","1","2","3","4","5","6","7","8","9");
function kl_isdisabled(knx){
	if(!KL_OP6 || KL_OP7) return 0;
	return kl_contains(KL_OP6_DISABLED_KEYS,kl_knx_getkn(knx));
}


//-----other internal variables-----
KL_NS4=0; KL_IE4=0; KL_NS6=0; KL_OP6=0;

KL_IE5=0; KL_IE55=0; KL_IE6=0; KL_OP7=0; KL_MZT=0;

KL_IE4W=0; KL_IE4M=0; KL_IE5W=0;
KL_NS4W=0; KL_NS4M=0;
KL_NS6W=0; KL_NS6M=0; KL_NS6S=0; KL_NS6L=0;
KL_OP6W=0;

KL_NSV=0;
KL_MZV=0;
KL_UAGENT="";

KL_SL_DX=20;
KL_SL_DY=20;

KL_VNAME=0;
KL_MARK=new Array();
KL_NAMEY=new Array(0,0);

KL_SHIFT_PRESSED= 0;

KL_SKIP_ONCE=0;

//-----miscellaneous functions-----
function kl_isint(v)  { return (typeof(v)==typeof(1)); }
function kl_isnum(v)  { return (typeof(v)==typeof(1) || typeof(v)==typeof(1.1)); }
function kl_isstr(v)  { return (typeof(v)==typeof("s")); }
function kl_isfunc(v) { return (typeof(v)==typeof(kl_isfunc)); }
function kl_isdef(v)  { return (typeof(v)!=typeof(undefined)); }
function kl_isundef(v){ return (typeof(v)==typeof(undefined)); }
function kl_undef(v)  { return (typeof(v)==typeof(undefined)); }
function kl_isarray(v){
	if(typeof(v)!=typeof(new Array())) return 0;
	if(typeof(v.length)!=typeof(1) || !v.sort) return 0;
	return 1;
}
function kl_isnan(v)  { return isNaN(v); }

function kl_eq(a,b){ return (typeof(a)==typeof(b) && a==b); }
function kl_eqv(v1,v2){
	if(v1.length!=v2.length) return 0;
	for(var i=0;i<v1.length;i++) if(!kl_eq(v1[i],v2[i])) return 0;
	return 1;
}

function kl_max(a,b){ return (a>b ? a : b); }
function kl_min(a,b){ return (a<b ? a : b); }
function kl_abs(a){ if(a<0) return -a; return a; }
function kl_trim(v,a,b){ return (v<a ? a : (v>b ? b : v)); }

function kl_tostr(v,base,keta){
	if(!base) base=10;
	var t=Math.abs(v).toString(base);
	if(keta){
		t=t.split(".")[0];
		for(var i=0;i<keta-t.length;i++) t="0"+t;
	}
	if(v<0) t="-"+t; return t;
}
function kl_toint(v,defval,base){
	if(kl_isint(v)) return v;
	var t=parseInt(v,kl_isint(base) ? base : 10);
	return isNaN(t) ? defval : t;
}
function kl_tofloat(v,defval){
	if(kl_isnum(v)) return v;
	var t=parseFloat(v); return isNaN(t) ? defval : t;
}
function kl_pstr2float(v,defval){
	if(!kl_isstr(v)) return defval;
	v=parseFloat(v.split("%")[0]); if(!isNaN(v)) return v/100.0;
	return defval;
}
function kl_slice(v,ns,ne){
	var t=new Array(); ns=kl_max(ns,0); ne=kl_min(ne,v.length);
	for(var i=ns;i<ne;i++) t[i-ns]=v[i];
	return t;
}
function kl_concat(v,w){
	return kl_splice(v,v.length,v.length,w);
}
function kl_splice(v,ns,ne,w){
	ns=kl_max(ns,0); ne=kl_min(kl_max(ne,ns),v.length);
	var len=v.length;
	var t=kl_slice(v,ne,v.length); var cnt=ns;
	for(var i=0;i<w.length;i++){ v[cnt]=w[i]; cnt+=1; }
	for(var i=0;i<t.length;i++){ v[cnt]=t[i]; cnt+=1; }
	if(cnt<len) v.length=cnt;
	return v;
}

function kl_copy(a,b){
	for(var i in a) b[i]=a[i];
}
function kl_fval(t){
	if(t.length && t.sort && t.reverse) return t[0];
	return t;
}
function kl_add(elems,n,val){
	if(n>=elems.length){ elems[elems.length]=val; return; }
	var es=new Array();
	for(var i=n;i<elems.length;i++){ es[i-n]=elems[i]; }
	elems[n]=val;
	for(var i=0;i<es.length;i++){ elems[i+n+1]=es[i]; }
}
function kl_add2(elems,n,val){
	if(kl_isarray(elems[n])) kl_add(elems[n],elems[n].length,val);
	else elems[n]=new Array(elems[n],val);
}
function kl_index(es,key,defval,n){
	if(kl_isdef(n)){
		for(var i=0;i<es.length;i++) if(kl_eq(es[i][n],key)) return i;
	}else{
		for(var i=0;i<es.length;i++) if(kl_eq(es[i],key)) return i;
	}
	return kl_isdef(defval) ? defval : -1;
}
function kl_contains(es,key){
	return (kl_index(es,key)>=0);
}
function kl_reverse(es){
	var v=new Array();
	for(var i=0;i<es.length;i++) v[i]=es[es.length-1-i];
	return v;
}
function kl_status(s,arg){
	self.status=s;
}



//-----miscellaneous functions 2-----
function kl_pageurl(u,name,strip){
	var n=u.lastIndexOf("#");
	if(n>=0) u=u.substring(0,n);
	if(name) u=u+"#"+name;
	if(strip && u.indexOf("./")==0) u=u.substring(2,u.length);
	return u;
}
function kl_tagname(e){
	var t=e.nodeName ? e.nodeName : (e.tagName ? e.tagName : "" );
	return t.toLowerCase();
}
function kl_children(e){
	//if(e.children) return e.children;
	if(e.childNodes) return e.childNodes;
	return 0;
}
function kl_elem_parent(e){
	if(e.parentNode) return e.parentNode;
	if(e.parentElement) return e.parentElement;
	return 0;
}
function kl_elem_next(e){
	if(e.nextSibling) return e.nextSibling;
	var e0=kl_elem_parent(e); if(!e0) return 0;
	var ec=kl_children(e0); if(!ec) return 0;
	for(var i=0;i<ec.length-1;i++) if(ec[i]==e) return ec[i+1];
	return 0;
}
KL_ELEM_TEXT_MAX=200;
function kl_elem_text(e){
	var tn=kl_tagname(e);
	if(tn=="input" || KL_NS4)
		if(e.type=="button" || e.type=="submit" || e.type=="reset")
			return e.value ? e.value : "";
	if(KL_NS4 && e.text) return e.text;

	if(tn=="#text"){
		if(e.data) return e.data;
		if(e.nodeValue) return e.nodeValue;
		return "";
	}
	if(e.innerText){
		var s=e.innerText;
		if(KL_IE4M)
		if(e.children.length==1)
		if(kl_tagname(e.children[0])=="img")
		if(e.children[0].innerText)
		if(kl_stripws(e.children[0].innerText)==kl_stripws(s)){
			s="";
		}
		return s;
	}
	var ec=kl_children(e);
	if(!ec) return "";
	if(!ec.length) return "";
	var s="";
	for(var i=0;i<ec.length;i++){
		s+=kl_elem_text(ec[i]);
		if(s.length>KL_ELEM_TEXT_MAX) break;
	}
	return s;
}
function kl_getelem(id){
	if(!kl_isstr(id)) return id;
	if(document.getElementById){
		if(document.getElementById(id)) return document.getElementById(id);
	}else if(document.all){
		if(document.all(id)) return document.all(id);
	}else if(document.layers){
		return kl_getelem_ns4(id,document);
	}
	return 0;
}
function kl_getelem_ns4(id,doc){
	if(!doc.layers) return 0;
	if(doc.layers[id]) return doc.layers[id];
	for(var i=0;i<doc.layers.length;i++){
		if(doc.layers[i].document){
			var t=kl_getelem_ns4(id,doc.layers[i].document);
			if(t) return t;
		}
	}
	return 0;
}


function kl_css1compat(){
	if(document.compatMode){ return (document.compatMode=="CSS1Compat"); }
	return 0;
}
function kl_dbody(){
	if(KL_IE6 && kl_css1compat()) return document.documentElement;
	if(document.body) return document.body;
	return 0;
}
function kl_resize(tgtwin,w,h,topwin,outer){
	if(KL_OP7) return -1;
	if(!topwin) topwin=tgtwin.top;
	if(kl_closed(topwin) || kl_closed2(tgtwin)) return -1;
	var ite=3; var ite2=1000;
	var w0,h0,dw,dh;
	var i,j;
	for(i=0;i<ite;i++){
		w0=tgtwin.kl_windowwidth(outer);
		h0=tgtwin.kl_windowheight(outer);
		dw=(w!=0 ? w-w0 : 0);
		dh=(h!=0 ? h-h0 : 0);
		if(dw==0 && dh==0) break;
		topwin.resizeBy(dw,dh);
		var flag=0;
		for(j=0;j<ite2;j++){
			if(tgtwin.kl_windowwidth(outer)!=w0 ||
			   tgtwin.kl_windowheight(outer)!=h0){ flag=1; break; }
		}
		if(!flag) break;
	}
	return i;
}


//-----document.anchors and forms-----
function kl_anchor(name,vcheck){
	if(document.getElementsByName){
		var es=document.getElementsByName(name);
		for(var i=0;i<es.length;i++){
			if(kl_tagname(es[i])=='a'){
				if(vcheck && !kl_visible2(es[i])) return -1;
				return es[i];
			}
		}
		return -1;
	}
	return kl_anchor_sub(name,vcheck);
}
function kl_anchor_sub(name,vcheck,rety,d,ph,ysum){
	if(!kl_ely_ok()) return -1;
	if(!d) d=document;
	if(!ph) ph=0;
	if(rety) if(!ysum) ysum=0;
	for(var i=0;i<d.anchors.length;i++){
		if(d.anchors[i].name!=name) continue;
		if(vcheck && (!kl_visible2(d.anchors[i]) || ph)) continue;
		if(rety) return d.anchors[i].y+ysum;
		else return d.anchors[i];
	}
	if(!KL_NS4) return -1;
	for(var i=0;i<d.layers.length;i++){
		var w=d.layers[i];
		if(!w.document) continue;
		if(vcheck) ph=kl_hidden_ns4(w,ph);
		var t=kl_anchor_sub(name,vcheck,rety,w.document,ph,w.y+ysum);
		if(!kl_eq(t,-1)) return t;
	}
	return -1;
}
function kl_doc_attrs(name,vcheck,d,ph,v,depth){
	if(!KL_NS4){
		var es0=document[name]; var es1=new Array();
		if(vcheck){
			for(var i=0;i<es0.length;i++)
				if(kl_visible2(es0[i]) && !ph)
					es1[es1.length]=es0[i];
		}else es1=es0;
		return es1;
	}
	if(document.layers.length<=0) return document[name];
	if(!d) d=document;
	if(!ph) ph=0;
	if(!depth){ depth=1; v=new Array(); }else depth+=1;
	if(d[name]) if(!ph) kl_concat(v,d[name]);
	for(var i=0;i<d.layers.length;i++){
		var w=d.layers[i];
		if(!w.document) continue;
		if(vcheck) ph=kl_hidden_ns4(w,ph);
		kl_doc_attrs(name,vcheck,w.document,ph,v,depth);
	}
	return v;
}
function kl_forms(){ return kl_doc_attrs("forms"); }

function kl_hidden_ns4(w,ph){
	if(w.visibility){
		if(w.visibility=="hide") return 1;
		if(w.visibility=="show") return 0;
	}
	return ph;
}



//-----browser identification-----
KL_IDENTIFY_DONE=0;
function kl_identify(){
	if(KL_IDENTIFY_DONE) return;
	KL_IDENTIFY_DONE=1;

	while(1){
		if(window.opera){
			if(document.getElementById){ KL_OP6=1; break; }
		}
		else if(document.all){ KL_IE4=1; break; }
		else if(kl_isns4_raw()){ KL_NS4=1; break; }
		else if(document.addEventListener){ KL_NS6=1; break; }

		KL_ACTIVE=0; KL_AVAIL=0; return;
	}

	KL_ACTIVE=1; KL_AVAIL=1;

	var ua=navigator.userAgent;

	KL_UAGENT=ua;

	KL_IE5 =(KL_IE4 && document.getElementById);
	KL_IE55=(KL_IE5 && kl_getnum(ua,"MSIE",0)>=5.5);
	KL_IE6 =(KL_IE5 && kl_getnum(ua,"MSIE",0)>=6);

	KL_OP7 =(KL_OP6 && document.addEventListener);

	if(KL_NS4){
		KL_NSV=parseFloat(navigator.appVersion);
	}

	if(KL_NS6){
		KL_MZV=kl_getnum(ua,"rv:",0);
		KL_MZT=(!kl_match(ua,"Netscape") && KL_MZV>=1.2);
	}

	var win=kl_match(ua,"Windows");
	var mac=kl_match(ua,"Mac");
	var x11=(kl_match(ua,"x11") || kl_match(ua,"X11"));
	var sfr=kl_match(ua,"Safari");

	KL_IE4M=(KL_IE4 && !win && mac);
	KL_IE4W=(KL_IE4 && !KL_IE4M);
	KL_IE5W=(KL_IE5 && !KL_IE4M);

	KL_NS4M=(KL_NS4 && !win && mac);
	KL_NS4L=(KL_NS4 && !win && x11);
	KL_NS4W=(KL_NS4 && !KL_NS4M && !KL_NS4L);

	KL_NS6M=(KL_NS6 && !win && mac && !sfr);
	KL_NS6S=(KL_NS6 && !win && !x11 && sfr);
	KL_NS6L=(KL_NS6 && !win && x11);
	KL_NS6W=(KL_NS6 && !KL_NS6M && !KL_NS6L && !KL_NS6S);

	KL_OP6W=(KL_OP6 && win);
}
function kl_isns4_raw(){
	if(!navigator.appName || !navigator.appVersion) return 0;
	return (navigator.appName=="Netscape" &&
		navigator.appVersion.indexOf("4.")==0) 
}


function kl_isie4(){ kl_identify(); return KL_IE4; }
function kl_isns4(){ kl_identify(); return KL_NS4; }
function kl_isop6(){ kl_identify(); return KL_OP6; }
function kl_isns6(){ kl_identify(); return KL_NS6; }

function kl_isavail(){ kl_identify(); return KL_AVAIL; }

function kl_match(s,h){ return (s.indexOf(h)>=0); }
function kl_match_last(s,t){ var n=s.length-t.length; return (n>=0 && s.lastIndexOf(t,s.length-1)==n); }
function kl_match_head(s,t){ return (s.indexOf(t)==0); }

KL_GETNUM_DELIM=" :/";
function kl_getnum(s,h,defval){
	var n=0; var t,c,kc,f;
	if(!kl_isint(defval) && !kl_isstr(defval)) defval="nan";
	while(n<s.length){
		if(h.length>0) n=s.indexOf(h,n); if(n<0) return defval;
		n+=h.length;
		t=""; f=0;
		while(n<s.length){
			c=s.charAt(n); kc=c.charCodeAt(0); n=n+1;
			if(KL_GETNUM_DELIM.indexOf(c)>=0 && t.length<=0)
				continue;
			if(c=="-" && t.length<=0){ t+=c; }
			else if(kc>=48 && kc<=57){ t+=c; }
			else if(kc==46 && f==0  ){ t+=c; f=1; }
			else break;
		}
		if(t.length<=0) continue;
		t=parseFloat(t); if(!isNaN(t)) return t;
	}
	return defval;
}



//-----cookie utilities-----
function kl_cookie_set_raw(key,val,path,exp){
	if(kl_eq(exp,-1)) exp="Mon, 31-Dec-1990 23:59:59 GMT";
	if(kl_eq(exp, 0)) exp="";
	if(kl_eq(exp, 1)) exp="Tue, 31-Dec-2030 23:00:00 GMT";
	var cs=key+"="+val+";";
	if(kl_isstr(path)) if(path.length>0) cs+=" path="+path+";";
	if(kl_isstr(exp)) if(exp.length >0) cs+=" expires="+exp+";";
	document.cookie=cs;
}
function kl_cookie_set_raw2(key,val,path,exp){
	for(var i=0;i<((KL_OP6 && !KL_OP7) ? 100 : 2);i++){
		kl_cookie_set_raw(key,val,path,exp);
		if(kl_eq(kl_cookie_get(key),val)){  return 1; }
	}
	return 0;
}
function kl_cookie_set(key,val,path,exp){
	var done=kl_cookie_set_raw2(key,val,path,exp);
	if(kl_eq(exp,1) && !done) done=kl_cookie_set_raw2(key,val,path,exp);
	return done;
}
function kl_cookie_del(key,path){
	kl_cookie_set(key,"",path,-1); return kl_eq(kl_cookie_get(key,-1),-1);
}
function kl_cookie_get(key,defval){
	if(!document.cookie) return defval;
	var v=document.cookie;
	var ns=v.indexOf(key+"="); if(ns<0) return defval; ns=ns+key.length+1;
	var ne=v.indexOf(";",ns); if(ne<0) ne=v.length;
	return v.substring(ns,ne);
}
function kl_cset(name,val){
	return kl_cookie_set(self["KL_"+name+"_CNAME"],val,self["KL_"+name+"_CPATH"],self["KL_"+name+"_CEXP"]);
}
function kl_cdel(name){
	kl_cookie_del(self["KL_"+name+"_CNAME"],self["KL_"+name+"_CPATH"]);
}
function kl_cget(name){
	return kl_cookie_get(self["KL_"+name+"_CNAME"]);
}


//-----encrypt and decrypt-----
KL_COOKIE_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%./_";
function kl_crypt(s,enc){
	var chars=KL_COOKIE_CHARS;
	var key=escape(KL_CRYPT_KEY);
	var t=""; var c,n,m;
	for(var i=0;i<s.length;i++){
		c=s.charAt(i);
		n=chars.indexOf(c);
		if(n>=0){
			m=chars.indexOf(key.charAt(i%key.length));
			if(enc) n=n+m; else n=n-m;
			if(n<0) n=n+chars.length;
			if(n>=chars.length) n=n-chars.length;
			c=chars.charAt(n);
		}
		t+=c;
	}
	return t;
}
function kl_encrypt(s){ return kl_crypt(s,1); }
function kl_decrypt(s){ return kl_crypt(s,0); }
function kl_encryptj(s){ return kl_crypt(escape(s),1); }
function kl_decryptj(s){ return unescape(kl_crypt(s,0)); }

//-----for events-----
function kl_altpressed(e){
	return (KL_NS4 ? (e.modifiers&1) : e.altKey);
}
function kl_ctrlpressed(e){
	return (KL_NS4 ? (e.modifiers&2) : e.ctrlKey);
}
function kl_shiftpressed(e){
	return (KL_NS4 ? (e.modifiers&4) : e.shiftKey);
}
function kl_keycode(e){
	return ((KL_NS4 || KL_NS6) ? e.which : e.keyCode);
}
function kl_keymod(e){
	var md=new Array();
	md["alt"  ]=kl_altpressed(e);
	md["ctrl" ]=kl_ctrlpressed(e);
	md["shift"]=(kl_shiftpressed(e) || KL_SHIFT_PRESSED);
	return md;
}
function kl_isprint(kc){
	if(kc.charCodeAt) kc=kc.charCodeAt(0);
	return (kc>=33 && kc<=126);
}
function kl_isalphakey(kc){
	if(kc.charCodeAt) kc=kc.charCodeAt(0);
	return ((kc>=65 && kc<=90)||(kc>=97 && kc<=122));
}
function kl_isnumkey(kc){
	if(kc.charCodeAt) kc=kc.charCodeAt(0);
	return (kc>=48 && kc<=57);
}
function kl_isalnumkey(kc,uscore){ //exclude '_' (for OP6)
	if(kc.charCodeAt) kc=kc.charCodeAt(0);
	return (kl_isalphakey(kc)|| (kc>=48 && kc<=57) || (uscore && kc==95));
}
function kl_keyname(kc){
	return String.fromCharCode(kc);
}
function kl_keynamex(kc,md,action){
	var knx=kl_keyname(kc).toUpperCase();
	var i=-1;
	if(kl_knx_readable(kc,action)){
		i=kl_index(KL_KNX_KNS,kc); if(i>0) knx=KL_KNX_KNS[i-1];
	}
	if((KL_NS4 || (KL_NS6S && KL_PATCH_NS6S)) && md["ctrl"] && kc<=26){
		knx=kl_keyname(65+kc-1);
	}
	if(md["shift"] && (kl_isalnumkey(kc) || i>0)) knx="s"+knx;
	if(md["ctrl" ]) knx="c"+knx;
	if(md["alt"  ]) knx="a"+knx;
	return knx;
}
function kl_mousex(e,onscreen){
	if(onscreen){
		return (KL_NS4 || KL_NS6) ? e.screenX : event.screenX;
	}
	if(KL_OP6 && !KL_OP7) return event.clientX;
	return (KL_NS4 || KL_NS6) ? e.pageX : kl_slx()+event.clientX;
}
function kl_mousey(e,onscreen){
	if(onscreen){
		return (KL_NS4 || KL_NS6) ? e.screenY : event.screenY;
	}
	if(KL_OP6 && !KL_OP7) return event.clientY;
	return (KL_NS4 || KL_NS6) ? e.pageY : kl_sly()+event.clientY;
}


//-----for scroll, etc...-----
function kl_windowwidth(outer){
	if(KL_NS4M || KL_NS6S || (KL_OP6 && !KL_OP7)){
		return self.innerWidth+(outer ? 16 : 0);
	}
	if(outer){
		if(KL_IE4W) return kl_dbody().offsetWidth;
		if(self.innerWidth) return self.innerWidth;
		if(kl_dbody().clientWidth) return kl_dbody().clientWidth+16;
	}
	if(kl_dbody().clientWidth) return kl_dbody().clientWidth;
	if(self.innerWidth) return self.innerWidth-(KL_NS6 ? 14 : 16);
	return 0;
}
function kl_windowheight(outer){
	var sb=(kl_windowwidth()<kl_scrollwidth() || kl_slx()>0);
	if(KL_NS4M || KL_NS6S || (KL_OP6 && !KL_OP7)){
		return self.innerHeight+(outer&&sb ? 16 : 0);
	}
	if(outer){
		if(KL_IE4W) return kl_dbody().offsetHeight;
		if(self.innerHeight) return self.innerHeight;
		if(kl_dbody().clientHeight) return kl_dbody().clientHeight+(sb ? 16 : 0);
	}
	if(kl_dbody().clientHeight) return kl_dbody().clientHeight;
	if(self.innerHeight) return self.innerHeight-(sb ? (KL_NS6 ? 14 : 16) : 0);
	return 0;
}



function kl_sly_max(){ return (kl_scrollheight()-kl_windowheight()); }
function kl_scrollwidth(){
	if(KL_NS4) return document.width-(KL_NS4W ? 16 : 0);
	if(KL_OP7) return document.documentElement.scrollWidth;
	if(!KL_IE4M && kl_dbody().scrollWidth) return kl_dbody().scrollWidth;
	return kl_dbody().offsetWidth+2*kl_dbody().offsetLeft;
}
function kl_scrollheight(){
	if(KL_NS4) return document.height;
	if(KL_OP7) return document.documentElement.scrollHeight;
	if(!KL_IE4M && kl_dbody().scrollHeight) return kl_dbody().scrollHeight;
	return kl_dbody().offsetHeight+2*kl_dbody().offsetTop;
}
function kl_sly_name(name){
	if(KL_OP6) return -1;
	if(KL_NS4) return kl_anchor_sub(name,0,1);
	var e=kl_anchor(name); if(kl_eq(e,-1)) return -1;
	return kl_sly_elem(e);
}
function kl_sly_elem(e){
	if(KL_OP6 || KL_NS4) return -1;
	var t=0;
	while(1){
		if(e.offsetTop) t+=e.offsetTop;
		if(!e.offsetParent) break;
		e=e.offsetParent;
	}
	return t;
}
function kl_ely_ok(){
	return (KL_IE4 || KL_NS6 || KL_OP7 || (KL_NS4 && KL_NSV>=4.61));
}
function kl_slx(){
	if(KL_NS4 || KL_NS6) return self.pageXOffset;
	if(KL_IE4 || KL_OP6) return kl_dbody().scrollLeft;
}
function kl_sly(){
	if(KL_NS4 || KL_NS6) return self.pageYOffset;
	if(KL_IE4 || KL_OP6) return kl_dbody().scrollTop;
}
function kl_slto(x,y){
	if(!KL_NS4W) return self.scroll(x,y);
	var t=kl_sl_offset(x,y);
	return self.scroll(x+t[0],y+t[1]);
}
function kl_slby(dx,dy){
	if(KL_NS4M){
		if(dx<0 && dx+kl_slx()<0){
			dx=-kl_slx();
		}
		if(dx>0 && dx+kl_slx()+self.innerWidth>document.width){
			dx=document.width-(kl_slx()+self.innerWidth);
		}
		if(dy<0 && dy+kl_sly()<0){
			dy=-kl_sly();
		}
		if(dy>0 && dy+kl_sly()+self.innerHeight>document.height){
			dy=document.height-(kl_sly()+self.innerHeight);
		}
	}
	if(!KL_NS4W) return self.scrollBy(dx,dy);
	var t=kl_sl_offset(kl_slx()+dx,kl_sly()+dy);
	var dx_=dx+t[0]; if(dx_==0 && dx!=0){ dx_=(dx<0 ? -1 : 1); }
	var dy_=dy+t[1]; if(dy_==0 && dy!=0){ dy_=(dy<0 ? -1 : 1); }
	return self.scrollBy(dx_,dy_);
}
function kl_sl_offset(x,y){
	if(!KL_NS4W){ return -1; }
	var w=document.width -window.innerWidth;
	var h=document.height-window.innerHeight;
	if(parent.frames.length>0){ w=w-4; h=h-4; }
	var dx=0;
	var dy=0;
	var st=16;
	if(h>0) if(w>0) dx=-Math.floor((st*x)/(w+st));
	if(w>0) if(h>0) dy=-Math.floor((st*y)/(h+st));
	return new Array(dx,dy);
}
function kl_slto_max(){
	var ite=1000; var max=65535; var maxs=kl_sly_max();

	if(KL_NS4M) return self.scroll(0,kl_sly_max());

	if(maxs<max) maxs=max;
	var y0=kl_sly(); var y1;
	for(var i=0;i<ite;i++){
		self.scrollBy(0,maxs);
		y1=kl_sly();
		if(y1<=y0) return 1; else y0=y1;
	}
	return 0;
}


//-----url (includes scroll position)-----
KL_URLAT_PREFIX="kl_url_";
KL_URLAT_SPLITTER="?"; //or #
function kl_urlat_get(win){
	var sp=KL_URLAT_SPLITTER;
	var px=KL_URLAT_PREFIX;
	if(!win) win=self;
	var v=kl_urlsplit(win.location.href);
	var t=px+kl_tostr(kl_slx())+"x"+kl_tostr(kl_sly())+"x"+kl_tostr(kl_windowwidth());
	if(sp=="#"){
		v[2]=t;
	}
	if(sp=="?"){
		v[2]="";
		var q=kl_qstr2ary(v[1]); var flag=0;
		for(var i=0;i<q.length;i++){
			if(q[i][0].indexOf(px)==0){
				q[i]=new Array(t,"1"); flag=1;
			}
		}
		if(!flag) q[q.length]=new Array(t,"1");
		v[1]=kl_ary2qstr(q);
	}
	return kl_urlconcat(v);
}
function kl_urlat_go(){
	location=kl_urlat_get();
	return 1;
}

KL_URLAT_ITE=100;
function kl_urlat_restore(){
	var sp=KL_URLAT_SPLITTER;
	var px=KL_URLAT_PREFIX;
	var v=kl_urlsplit(location.href);
	var t="";
	if(sp=="#"){
		if(v[2].indexOf(px)==0) t=v[2];
		var es=document.anchors;
		for(var i=0;i<es.length;i++) if(es[i].name==t) t="";
	}
	if(sp=="?"){
		var q=kl_qstr2ary(v[1]);
		for(var i=0;i<q.length;i++){
			if(q[i][0].indexOf(px)==0){ t=q[i][0]; break; }
		}
	}
	if(!t.length) return 0;

	var ts=t.substring(px.length,t.length).split("__");

	for(var i=0;i<ts.length;i++){
		var xyw=0;
		t=ts[i].split("_");
		if(t.length==1) xyw=t[0];
		if(t.length==2)	xyw=self["KL_"+t[0].toUpperCase()] ? t[1] : 0;
		if(!xyw) continue;
		xyw=kl_s2xyw(xyw); if(!xyw) continue;
		kl_resize(self,xyw[2],0);
		for(var j=0;j<KL_URLAT_ITE;j++){
			if(xyw[0]==kl_slx() && xyw[1]==kl_sly()) break;
			kl_slto(xyw[0],xyw[1]);
		}
		return 1;
	}
	return 0;
}
function kl_urlsplit(u){
	var url=u; var qstr=""; var name=""; var n;
	n=u.lastIndexOf("#");
	if(n>=0){
		name=u.substring(n+1,u.length);
		url=u.substring(0,n);
		u=url;
	}
	n=u.lastIndexOf("?");
	if(n>=0){
		qstr=u.substring(n+1,u.length);
		url =u.substring(0,n);
	}
	return new Array(url,qstr,name);
}
function kl_urlconcat(v){
	var u=v[0]+(v[1].length ? "?"+v[1] : "")+(v[2].length ? "#"+v[2] : "");
	return u;
}
function kl_qstr2ary(t){
	var v=t.split("&");
	for(var i=0;i<v.length;i++){
		v[i]=v[i].split("=");
	}
	return v;
}
function kl_ary2qstr(v){
	var t="";
	for(var i=0;i<v.length;i++){
		if(v[i].length==1) if(!v[i][0].length) continue;
		for(var j=0;j<v[i].length;j++){
			t+=v[i][j]+(j<v[i].length-1 ? "=" : "");
		}
		t+=((i<v.length-1) ? "&" : "");
	}
	return t;
}
function kl_s2xyw(s){
	var t=s.split("x"); if(t.length!=3) return 0;
	var x=parseInt(t[0]); var y=parseInt(t[1]); var w=parseInt(t[2]);
	if(isNaN(x) || isNaN(y) || isNaN(w)) return 0;
	return new Array(x,y,w);
}



//-----reload and bookmark (scroll position preserved)-----
function kl_reload_go(){
	kl_cset("RLD",kl_cstat_str(0)); location.reload();
}
function kl_reload_restore(){
	if(kl_cstat_restore(kl_cget("RLD"),1)==1){
		if(parent!=self) self.focus();
		kl_cdel("RLD"); return 1;
	}
	return 0;
}
function kl_bkmk_empty(){
	return (!kl_isstr(kl_cget("BKMK")));
}
function kl_bkmk_set(){
	if(!KL_ALLOW_BKMK){ kl_mstat("BKMKDA"); return; }
	kl_cset("BKMK",kl_cstat_str(1));

	var ws=(kl_isarray(KL_BKMK_WINS) ? KL_BKMK_WINS : kl_frames());

	for(var i=0;i<ws.length;i++){
		var tg=ws[i]
		if(tg!=self && !kl_closed2(tg))
			tg.kl_cset("BKMK",kl_cstat_str(1));
	}
	kl_mstat("BKMKSET");
	return;
}
function kl_bkmk_go(){
	var tg=KL_BKMK_TARGET;
	var v=kl_cstat_array(kl_cget("BKMK"));
	var url=0; if(v==-1) url=KL_BKMK_DEFAULT; else url=v[0];

	if(!url.length){ kl_mstat("BKMKNO"); return; }

	if(kl_closed2(tg)){ tg.location=url; return; }

	if(tg!=self){ tg.kl_bkmk_go(); return; }

	if(kl_pageurl(url)==kl_pageurl(location.href)){
		var vname=kl_vname(); var x=kl_slx(); var y=kl_sly();
		if(kl_cstat_restore(kl_cget("BKMK"),0)==1){
			kl_mark_set_raw(vname,x,y);
			kl_mstat("MARKMT");
		}
	}else{
		kl_cset("BACC","1");
		location=url;
	}
	return;
}
function kl_bkmk_restore(){
	if(!kl_isstr(kl_cget("BACC"))) return 0;
	if(kl_cstat_restore(kl_cget("BKMK"),1)==1){
		kl_cdel("BACC"); kl_mstat("BKMKMT"); return 1;
	}
	return 0;
}
function kl_cstat_str(no_name){
	var url=location.href; if(no_name) url=kl_pageurl(url);
	var x=kl_tostr(kl_slx());
	var y=kl_tostr(kl_sly());
	var vname=kl_vname();
	if(kl_isint(vname)) vname=kl_tostr(vname); else vname="VN"+vname;
	return kl_encrypt(escape(url)+"%%"+x+"%%"+y+"%%"+escape(vname));
}
function kl_cstat_restore(s,check_url){
	var v=kl_cstat_array(s); if(v==-1) return -1;
	if(check_url) if(v[0]!=location.href) return -1;
	kl_slto(v[1],v[2]); KL_VNAME=v[3]; kl_sec_handler_(kl_xsecn(),0);
	return 1;
}
function kl_cstat_array(s){
	if(!kl_isstr(s)) return -1;
	var ss=kl_decrypt(s).split("%%");
	if(ss.length!=4) return -1;
	var url=unescape(ss[0]);
	var x=parseInt(ss[1]); var y=parseInt(ss[2]);
	var vname=unescape(ss[3]);
	if(isNaN(x) || isNaN(y)) return -1;
	if(vname.indexOf("VN")==0){
		vname=vname.substring(2,vname.length);
	}else{
		vname=parseInt(vname); if(isNaN(vname)) return -1;
	}
	return new Array(url,x,y,vname);
}


//-----mark-----
function kl_mark_empty(){
	return (KL_MARK.length==0);
}
function kl_mark_set(msg){
	if(msg=="MARKSTP") if(!KL_SETMARK_ONMOVE) return;
	kl_mark_set_raw(kl_vname(),kl_slx(),kl_sly());
	if(!kl_isstr(msg)) msg="MARKST"; kl_mstat(msg);
}
function kl_mark_set_raw(name,x,y){ KL_MARK=new Array(name,x,y); }

function kl_mark_go(){
	if(kl_mark_empty()){kl_mstat("MARKNO"); return; }
	var vname=KL_MARK[0]; var x=KL_MARK[1]; var y=KL_MARK[2];
	kl_mark_set("MARKMT");
	KL_VNAME=vname; kl_slto(x,y);
	kl_sec_handler_(kl_xsecn(),0);
}


//-----Focus1: Tools(kl_visible())-----
function kl_visible(e,nosize,nocache){
	if(KL_NS4) return 1;
	var tname=kl_tagname(e);
	if(tname=="input")
		if(e.type.toLowerCase()=="hidden") return 0;
	if(KL_CHECK_VISIBILITY){
		var t=kl_visibility(e,nocache);
		if(t=="hidden" || t=="none") return 0;
	}
	if(!nosize) if(!e.offsetWidth || !e.offsetHeight) return 0;
	if(tname=="area"){
		var n=kl_trace(e,"map","name"); if(kl_eq(n,0)) return 0;
		var ee=kl_elem_n2i(n); if(kl_eq(ee,0)) return 0;
		return kl_visible(ee,nosize,nocache);
	}
	return 1;
}
function kl_visible2(e){
	return kl_visible(e,1,1);
}
function kl_visible_clear(){
	KL_V_LEN=0;
}
KL_V_KEY=new Array(); KL_V_VAL=new Array(); KL_V_LEN=0;
function kl_visibility(e,nocache){
	if(KL_NS4) return 1;

	var e0,v0,v;

	v =(kl_style(e,"display")=="none") ? "none" : kl_style(e,"visibility");
	v0=-1;

	if(e.parentElement) e0=e.parentElement;
	else if(e.parentNode) e0=e.parentNode;
	else return v;
	if(e0==document.body) return v;

	if(!nocache){
		for(var i=KL_V_LEN-1;i>=0;i--){
			if(e0!=KL_V_KEY[i]) continue;
			KL_V_LEN=i+1; v0=KL_V_VAL[i];
			if(v0=="none") return v0;
			if(v0=="hidden" && v!="visible") return v0;
			return v;
		}
		KL_V_LEN=0;
	}
	v0=kl_visibility(e0,nocache);
	if(!nocache){
		KL_V_KEY[KL_V_LEN]=e0; KL_V_VAL[KL_V_LEN]=v0; KL_V_LEN+=1;
	}
	if(v =="none") return v;
	if(v0=="none") return v0;
	if(v0=="hidden" && v!="visible") return v0;
	return v;
}
function kl_style(e,attr){
	if(e.currentStyle){
		return e.currentStyle[attr];
	}else if(KL_NS6 && KL_MZV>=1.0 &&
		(attr=="visibility" || attr=="display") &&
		self.getComputedStyle){
			if(kl_tagname(e).charAt(0)=="#") return "";
			var t=self.getComputedStyle(e,"");
			if(t) if(t.getPropertyValue)
				return t.getPropertyValue(attr);
	}
	if(e.style){
		return e.style[attr];
	}
	return "";
}
function kl_tate(e){
	if(!KL_IE55) return 0;
	return (kl_style(e.offsetParent,"writingMode")=="tb-rl" ||
		kl_style(e.offsetParent,"layoutFlow")=="vertical-ideographic;")
}
function kl_scrolled(e,safeval){
	if(!safeval) safeval=0;
	var o=kl_offset(e); if(!kl_isarray(o)) return 0;
	return (o["ys"]<kl_sly()+kl_windowheight()+safeval &&
		o["ye"]>=kl_sly()-safeval)
}
function kl_scrolled2(e){
	return kl_scrolled(e,30);
}


//-----Focus2: Tools(element type)-----
function kl_area_type(e){
	if(kl_tagname(e)!="area") return "";
	var t=e.shape.toLowerCase(); if(t=="poly") t="polygon";
	return t;
}
function kl_form_type(e){
	var tname=kl_tagname(e);
	if(tname=="input"){
		var t=e.type.toLowerCase();
		if(t=="text" || t=="password" || t=="textarea" || t=="file")
			return "text";
		return t;
	}
	if(tname=="textarea" || tname=="isindex" || tname=="select" || tname=="option") return "text";
	return tname;
}


//-----Focus3: Tools(Offset)-----
KL_O_KEY=new Array(); KL_O_X=new Array(); KL_O_Y=new Array(); KL_O_LEN=0;
KL_O_N2I=0;
KL_E_N2I=0;
function kl_offset_clear(){
	KL_O_LEN=0;
	KL_O_N2I=0;
	KL_E_N2I=0;
}
function kl_offset(e,nocache,recur){
	var u,v; v=0;
	if(!recur) if(KL_IE4) if(kl_tagname(e)=='area'){
		v=kl_offset_a2i(e,nocache); if(!kl_isarray(v)) return v;
	}
	if(!e.offsetParent){
		return kl_offset_ret(e,new Array(0,0),v,recur);
	}
	var ee=e.offsetParent;
	if(!nocache){
		for(var i=KL_O_LEN-1;i>=0;i--){
			if(ee==KL_O_KEY[i]){
				KL_O_LEN=i+1;
				u=new Array(KL_O_X[i],KL_O_Y[i]);
				return kl_offset_ret(e,u,v,recur);
			}
		}
		KL_O_LEN=0;
	}
	u=kl_offset(ee,nocache,1);
	if(!nocache){
		KL_O_KEY[KL_O_LEN]=ee;
		KL_O_X[KL_O_LEN]=u[0]; KL_O_Y[KL_O_LEN]=u[1];
		KL_O_LEN+=1;
	}
	return kl_offset_ret(e,u,v,recur);
}
function kl_offset_ret(e,u,v,recur){
	if(kl_isarray(v)){ u[0]+=v[0]; u[1]+=v[1]; }
	if(recur){ u[0]+=e.offsetLeft; u[1]+=e.offsetTop; return u; }
	var o=new Array();
	o["elem"]=e;
	o["xs"]=u[0]+e.offsetLeft; o["xe"]=o["xs"]+e.offsetWidth;
	o["ys"]=u[1]+e.offsetTop;  o["ye"]=o["ys"]+e.offsetHeight;
	o["xsp"]=u[0];
	if(!e.offsetParent)
		o["xep"]=-1;
	else if(e.offsetParent==document.body && kl_dbody().scrollWidth)
		o["xep"]=u[0]+kl_dbody().scrollWidth;
	else
		o["xep"]=u[0]+e.offsetParent.offsetWidth;
	o["ftype"]="";
	o["atype"]="";
	return o;
}
function kl_offset_copy(o){
	var oo=new Array();
	var ks=new Array("elem","xs","xe","ys","ye","xsp","xep","ftype","atype");
	for(var i=0;i<ks.length;i++) oo[ks[i]]=o[ks[i]];
	return oo;
}
function kl_offset_a2i(e,nocache){
	var u;
	if(!KL_IE4 || kl_tagname(e)!='area'){
		u=new Array(0,0); return u;
	}
	var n=kl_trace(e,"map","name"); if(!n) return "map_not_found";

	if(nocache){
		var ee=kl_elem_n2i(n);
		if(ee==0) return "usemap_not_found";
		return kl_offset(ee,nocache,1);
	}
	if(!kl_isarray(KL_O_N2I)){
		KL_O_N2I=new Array();
		for(var i=0;i<document.images.length;i++){
			if(!document.images[i].useMap) continue;
			var m =document.images[i].useMap;
			var mi=m.lastIndexOf("#",m.length-1);
			if(mi>=0) m=m.substring(mi+1,m.length);
			u=kl_offset(document.images[i],nocache,1);
			if(kl_isarray(u)) KL_O_N2I[m]=u;
		}
	}
	if(KL_O_N2I[n]) return KL_O_N2I[n];
	return "usemap_not_found";
}
function kl_trace(e,tagName,attrName){
	var t=0;
	while(1){
		if(kl_tagname(e)==tagName){
			if(attrName) return e[attrName]; else return e;
		}
		if(e.parentElement) e=e.parentElement;
		else if(e.parentNode) e=e.parentNode;
		else return 0;
	}
	return 0;
}
function kl_elem_n2i(name){
	if(!kl_isarray(KL_E_N2I)){
		KL_E_N2I=new Array();
		var e;
		for(var i=0;i<document.images.length;i++){
			e=document.images[i];
			if(!e.useMap) continue;
			var m =e.useMap;
			var mi=m.lastIndexOf("#",m.length-1);
			if(mi>=0) m=m.substring(mi+1,m.length);
			KL_E_N2I[m]=e;
		}
	}
	if(KL_E_N2I[name]) return KL_E_N2I[name];
	return 0;
}


//-----Focus4: KL_FMAP[elem,ftype,atype,xs,xe,ys,ye]-----
KL_FMAP_TOL=3;
KL_FMAP_DONE=0;
KL_FMAP=new Array();
function kl_fmap_clear(){
	kl_visible_clear()
	kl_offset_clear();
	KL_FMAP_DONE=0;
}
function kl_fmap_clear_onload(){
	if(KL_FMAP_DONE) kl_fmap_clear();
}
function kl_fmap_index(e){
	for(var i=0;i<KL_FMAP.length;i++) if(KL_FMAP[i]["elem"]==e) return i;
	return -1;
}
function kl_fmap_get(e){
	for(var i=0;i<KL_FMAP.length;i++){
	    if(KL_FMAP[i]["elem"]==e) return KL_FMAP[i];
	}
	return kl_offset(e,1);
}
function kl_fmap_update(e){
	var tol=KL_FMAP_TOL; var o0=kl_offset(e,1); var o1=0;
	for(var i=0;i<KL_FMAP.length;i++){
		if(KL_FMAP[i]["elem"]==e){ o1=KL_FMAP[i]; break; }
	}
	if(!kl_isarray(o0) && !kl_isarray(o1)){
		return "reuse";
	}
	if(kl_isarray(o0) && kl_isarray(o1)){
		if(o1["rectified"])
			return "reuse";
	}
	if(kl_isarray(o0) && kl_isarray(o1)){
		if(kl_abs(o1["xs"]-o0["xs"])<=tol &&
		   kl_abs(o1["ys"]-o0["ys"])<=tol &&
		   kl_abs(o1["xe"]-o0["xe"])<=tol &&
		   kl_abs(o1["ye"]-o0["ye"])<=tol)
			return "reuse";
	}
	kl_fmap_clear();
	return kl_fmap_set();
}
function kl_fmap_set(){
	if(KL_FMAP_DONE){ KL_FMAP_DONE+=1; return "reuse"; }
	if(!(KL_IE4 || KL_NS6 || KL_OP7)) return "ignore";
	KL_FMAP=new Array();

	var es=document.links; //getElementsByTagName('a');
	var cnt=0;
	for(var i=0;i<es.length;i++) if(kl_fmap_set_each(es[i],cnt,0)) cnt+=1;

	var cnt0=cnt;
	for(var i=0;i<document.forms.length;i++)
	for(var j=0;j<document.forms[i].elements.length;j++){
	    if(kl_fmap_set_each(document.forms[i].elements[j],cnt,1)) cnt+=1;
	}
	if(document.getElementsByTagName){
		kl_fmap_add(document.getElementsByTagName("input"),   cnt0,1);
		kl_fmap_add(document.getElementsByTagName("select"),  cnt0,1);
		kl_fmap_add(document.getElementsByTagName("textarea"),cnt0,1);
		kl_fmap_add(document.getElementsByTagName("isindex"), cnt0,1);
		kl_fmap_add(document.getElementsByTagName("iframe"),  cnt0,0);
	}
	if(KL_FOCUS_RECTIFY && !KL_IE4M) kl_fmap_rectify();
	KL_FMAP_DONE=1;
	return "just_set";
}
function kl_fmap_add(es,cnt0,form){
	var e,done,cnt1,cnt;
	cnt1=KL_FMAP.length; cnt=KL_FMAP.length;
	for(var i=0;i<es.length;i++){
		e=es[i]; done=0;
		for(var j=cnt0;j<cnt1;j++){
			if(e==KL_FMAP[j]["elem"]){ done=1; break; }
		}
		if(!done) if(kl_fmap_set_each(e,cnt,form)) cnt+=1;
	}
}
KL_FMAP_SKIP="kl_fmap_skip";
function kl_fmap_set_each(e,n,form){

	if(e.id) if(e.id.indexOf(KL_FMAP_SKIP)==0) return 0;
	if(e.name) if(e.name.indexOf(KL_FMAP_SKIP)==0) return 0;

	var tname=kl_tagname(e);

	if(KL_OP7) if(tname=='area') return 0;

	if(KL_IE4M) if(tname=='area') return 0;


	if(tname=="iframe"){
		if(KL_IE4 && !KL_IE5) return 0;
		if(KL_IE4M) return 0;
	}else{
		if(!e.focus) return 0;
	}
	var o=kl_offset(e); if(!kl_isarray(o)) return 0;
	if(form)          o["ftype"]=kl_form_type(e);
	if(tname=="area") o["atype"]=kl_area_type(e);
	KL_FMAP[n]=o;
	return 1;
}
function kl_isect(o1,o2){
	return kl_isectx(o1,o2) && kl_isecty(o1,o2);
}
function kl_isectx(o1,o2){
	return (o1["xe"]>o2["xs"] && o1["xs"]<o2["xe"]);
}
function kl_isecty(o1,o2){
	return (o1["ye"]>o2["ys"] && o1["ys"]<o2["ye"]);
}
function kl_fmap_rectify_op7(){
	var o0,o1,o2;

	var KL_FMAP_LEN=KL_FMAP.length;
	for(var i=0;i<KL_FMAP_LEN;i++){
		o0=(i>0 ? KL_FMAP[i-1] : 0);
		o1=KL_FMAP[i];
		o2=(i<KL_FMAP.length-1 ? KL_FMAP[i+1] : 0);

		if(kl_tagname(o1["elem"])!='a') continue;
		if(kl_isblock_style(o1["elem"])) continue;

		var flag=0;
		if(!flag) if(o0)
			if(kl_isecty(o1,o0) && o1["ye"]>o0["ye"])
			if(o1["xs"]<=o0["xs"] && o1["xe"]>=o0["xe"])
				flag=1;
		if(!flag) if(o2)
			if(kl_isecty(o1,o2) && o1["ys"]<o2["ys"])
			if(o1["xs"]<=o2["xs"] && o1["xe"]>=o2["xe"])
				flag=1;
		if(!flag) continue;

		var xe=kl_min(o1["xe"],o1["xs"]+100);
		if(o2)
		if(kl_isecty(o1,o2) && o1["ys"]<o2["ys"])
		if(xe>o2["xs"])
			xe=o2["xs"];
		if(xe<o1["xs"]+10) xe=o1["xs"]+10;
		o1["xe"]=xe;
		o1["ys"]=(o1["ys"]+o1["ye"])/2;
		o1["rectified"]=1;
	}
}

KL_BLOCKS=new Array("blockquote","br","center","dir","div","dd","dl","dt","form","h1","h2","h3","h4","h5","h6","hr","layer","li","listing","menu","multicol","ol","p","plaintext","pre","table","td","th","tr","ul","wbr");
function kl_isblock(e){
	var tname=kl_tagname(e); var disp=kl_style(e,"display");
	if(disp=="none") return 0;
	if(kl_contains(KL_BLOCKS,tname)){
		if(tname=="hr" || tname=="br") return 1;
		if(KL_IE5 && !KL_IE55) return 1;
		if(disp!="inline") return 1;
	}
	if(kl_isblock_style_raw(disp)) return 1;
	return 0;
}
function kl_isblock_style_raw(disp){
	if(disp=="block") return 1;
	if(KL_IE6 || KL_NS4 || KL_OP6 || KL_NS6)
		if(disp=="list-item") return 1;
	return 0;
}
function kl_isblock_style(e){
	return kl_isblock_style_raw(kl_style(e,"display"));
}
function kl_sibling_sub(e0,e1){
	if(e0==e1) return 1;
	if(kl_isblock(e0)) return 0;
	var e,t;
	var ec=kl_children(e0);
	if(ec) if(ec[0]){
		t=kl_sibling_sub(ec[0],e1); if(t!=-1) return t;
	}
	e=kl_elem_next(e0);
	if(e){ return kl_sibling_sub(e,e1); }
	return -1;
}
function kl_sibling_sub2(e0,e1){
	if(kl_isblock(e0)) return 0;
	var e,t;
	e=kl_elem_next(e0);
	if(e){ t=kl_sibling_sub(e,e1); if(t!=-1) return t; }
	e=kl_elem_parent(e0);
	if(e){ t=kl_sibling_sub2(e,e1); if(t!=-1) return t; }
	return -1;
}
function kl_sibling_raw(e0,e1){
	if(kl_tagname(e0)!='a' || kl_isblock_style(e0)) return 0;
	if(kl_tagname(e1)!='a' || kl_isblock_style(e1)) return 0;
	var e,t;
	e=kl_elem_next(e0);
	if(e){ t=kl_sibling_sub(e,e1); if(t!=-1) return t; }
	e=kl_elem_parent(e0);
	if(e){ t=kl_sibling_sub2(e,e1); if(t!=-1) return t; }
	return 0;
}
function kl_sibling(o0,o1){
	return kl_sibling_raw(o0["elem"],o1["elem"]);
}


function kl_fmap_rectify_ie55(){
	var xs0,xe0,ys0,ye0,xs,xe,ys,ye; ys=-1; ye=-1; xs=-1;
	for(var i=0;i<KL_FMAP.length;i++){
		ys0=ys; ye0=ye; xs0=xs;
		ys=KL_FMAP[i]["ys"]; ye=KL_FMAP[i]["ye"]; xs=KL_FMAP[i]["xs"];
		if(i>0)
		//if(ys<=ys0)
		if(ys<=ye0-10)
		if(xs<=xs0)
		if(xs<=KL_FMAP[i-1]["xep"]-KL_FMAP[i-1]["elem"].offsetWidth)
		if(kl_sibling(KL_FMAP[i-1],KL_FMAP[i]))
		if(!kl_tate(KL_FMAP[i]["elem"])){
			var ys_=ye0; var ye_=ys_+(ye-ys); var xs_=xs;
			if(i<KL_FMAP.length-1){
				var o1=KL_FMAP[i];
				var o2=KL_FMAP[i+1];
				if(kl_sibling(o1,o2))
				if(ye_>o2["ys"] && ye_<=o2["ye"]){
				if(o2["xe"]<=o2["xep"]){
				    if(o2["ye"]-(ye-ys)>=ye0){
					ys_=o2["ye"]-(ye-ys); ye_=o2["ye"];
				    }
				}else{
					ys_=o2["ys"]; ye_=ys_+(ye-ys);
				}
				if(o1["xs"]!=o2["xs"]){
				    if(o1["xe"]>o2["xs"]){
					xs=o1["xsp"];
				    }
				}
				}
			}
			ys=ys_; ye=ye_; xe=xs+KL_FMAP[i]["elem"].offsetWidth;
			KL_FMAP[i]["xs"]=xs; KL_FMAP[i]["xe"]=xe;
			KL_FMAP[i]["ys"]=ys; KL_FMAP[i]["ye"]=ye;
			KL_FMAP[i]["rectified"]=1;
		}
	}
}


function kl_lastspace(e){
	if(kl_tagname(e)!='a') return 0;
	var cnt=0;
	while(1){
		if(kl_isblock_style(e)) return 0;
		if(!e.innerHTML) return 0;
		if(!e.innerHTML.length) return 0;
		var c=e.innerHTML.charAt(e.innerHTML.length-1);
		if(c==" " || c=="\n" || c=="\t") return 1;
		if(c!=">") return 0;
		ec=kl_children(e);
		if(!ec) return 0;
		if(!ec.length) return 0;
		e=ec[ec.length-1];
		cnt+=1;
		if(cnt>100) break;
	}
	return 0;
}
function kl_fmap_rectify_trim(){
	var e,o,oo;
	var KL_FMAP_LEN=KL_FMAP.length;
	for(var i=0;i<KL_FMAP_LEN;i++){
		if(KL_FMAP[i]["xep"]<0 ||
		   KL_FMAP[i]["xe"]<=KL_FMAP[i]["xep"]) continue;

		o=KL_FMAP[i];
		e=KL_FMAP[i]["elem"];

		if(kl_tagname(e)!='a' || kl_isblock_style(e)) continue;

		if(kl_tate(e)) continue;

		if(KL_IE4)
		if(o["xe"]-o["xep"]<=5)
		if(kl_lastspace(e)){
			o["xe"]=kl_max(o["xep"],o["xs"]);
			o["rectified"]=1;
			continue;
		}
		var done=0;
		if(KL_IE5 && !KL_IE55){
			oo=kl_offset_copy(o);
			oo["ys"]=o["ye"];
			oo["ye"]=o["ye"]+(o["ye"]-o["ys"]);

			oo["xs"]=o["xsp"];
			oo["xe"]=o["xsp"]+o["xe"]-o["xs"];
			oo["rectified"]=1;

			var isect=0;
			if(i<KL_FMAP.length-1){
				if(kl_sibling(o,KL_FMAP[i+1]) &&
				   oo["ys"]>=KL_FMAP[i+1]["ye"]) isect=1;
				if(kl_isect(oo,KL_FMAP[i+1])) isect=1;
			}
			if(!isect){ KL_FMAP[i]=oo; done=1; }
		}
		if(!done){
			if(KL_NS6) if(i>0)
			if(o["ye"]==KL_FMAP[i-1]["ye"])
			if(o["ys"]==KL_FMAP[i-1]["ys"])
			if(kl_sibling(KL_FMAP[i-1],o))
				o["ye"]+=o["ye"]-o["ys"];

			oo=kl_offset_copy(o);
			//oo["xs"]=o["xsp"];
			var xs=o["xsp"];

			var ys=(o["ys"]+o["ye"])/2;
			var xe=o["xep"];
			if(i<KL_FMAP.length-1){
				var o2=KL_FMAP[i+1];
				if(kl_isecty(o,o2) && o["ys"]<o2["ys"]){
					if(xe>o2["xs"]) xe=o2["xs"];
					if(kl_sibling(o,o2)) ys=o2["ys"];
				}
			}
			if(xe<xs+10) xe=o["xsp"]+10;

			oo["xs"]=xs;
			oo["ys"]=ys;
			oo["xe"]=xe;

			oo["rectified"]=1;
			kl_add(KL_FMAP,i+1,oo);
			KL_FMAP_LEN+=1;
			i+=1;

			if(o["xs"]>o["xep"]) o["xs"]=o["xep"];
			o["xe"]=o["xep"];
			var ye=(o["ys"]+o["ye"])/2;
			if(i>0){
				var o0=KL_FMAP[i-1];
				if(kl_isecty(o,o0) && o["ye"]>o0["ye"])
				if(kl_sibling(o0,o)){
					ye=o0["ye"];
				}
			}
			o["ye"]=ye;
			o["rectified"]=1;
		}
	}
}
function kl_fmap_rectify(){

	if(KL_OP7){ kl_fmap_rectify_op7(); return; }

	if(KL_IE55) kl_fmap_rectify_ie55();

	if(!KL_NS6 || KL_MZV>=1.0) kl_fmap_rectify_trim();
}


//-----Focus5: history (KL_FH,KL_FL)-----
KL_FH=new Array();
function kl_fh_set(mode,o){
	if(kl_isp(mode)) kl_fh_clear();
	if(KL_FH.length<=0 || KL_FH[0]!=mode || KL_FL["elem"]!=o["elem"]){
		KL_FH=new Array(mode,o["elem"]); return;
	}
	KL_FH[KL_FH.length]=o["elem"];
}
function kl_fh_clear(){
	KL_FH=new Array();
}
function kl_fh_passed(mode,o){
	if(KL_FH.length<=0 || KL_FH[0]!=mode) return 0;
	var e=o["elem"];
	for(var i=1;i<KL_FH.length;i++){ if(KL_FH[i]==e) return 1; }
	return 0;
}

KL_FL=0;
function kl_fl_set(o){ KL_FL=o; }
function kl_fl_clear(){	KL_FL=0; }



//-----Focus6: motion axis (KL_FX)-----
KL_FX=0;
function kl_fx_init(){
	if(!kl_eq(KL_FX,0)) return;
	var t=new Array(); t.axis=""; t.elem=0; t.center=0; t.start=0; t.end=0;
	KL_FX=t;
	
}
function kl_fx_clear(){
	KL_FX.axis="";
}
function kl_fx_set(mode,o,update){
	var axis,s,e; axis=0;

	if(kl_contains(KL_FMODES_POINT1,mode)){
		if(update) kl_fx_clear();
		return;
	}
	if(kl_contains(KL_FMODES_POINT2,mode)){
		return;
	}

	if(mode=="up"   || mode=="down" ){ axis="y"; s="xs"; e="xe"; }
	if(mode=="left" || mode=="right"){ axis="x"; s="ys"; e="ye"; }

	if(update){
		KL_FX.elem  =o["elem"];
	}else if(KL_FX.axis!=axis || (KL_FX.elem && KL_FX.elem!=o["elem"])){
		KL_FX.axis  =axis;
		KL_FX.elem  =o["elem"];
		KL_FX.center=kl_min(o[s]+10,(o[s]+o[e])/2.0);
		KL_FX.start =o[s];
		KL_FX.end   =o[e];

		if((mode=="up" || mode=="down") && o[e]-o[s]<150 && !kl_tate(o["elem"])){
			KL_FX.start=KL_FX.center-75;
			KL_FX.end  =KL_FX.center+75;
		}
	}
	if(mode=="up" || mode=="down"){
		if(o[s]<KL_FX.start) KL_FX.start=o[s];
		if(o[e]>KL_FX.end  ) KL_FX.end  =o[e];
	}else{
		if(o[s]<KL_FX.start) KL_FX.start=kl_max(o[s],KL_FX.center-100);
		if(o[e]>KL_FX.end  ) KL_FX.end  =kl_min(o[e],KL_FX.center+100);
	}
}
function kl_fx_update(mode,o){
	kl_fx_set(mode,o,1);
}
function kl_fx_copy(w0,w1,s0,e0,s1,e1){
	var pos0=KL_FX.axis=="x" ? w0.kl_sly() : w0.kl_slx();
	var pos1=KL_FX.axis=="x" ? w1.kl_sly() : w1.kl_slx();

	var fx=new Array();
	fx.axis  =KL_FX.axis;
	fx.elem  =0; //KL_FX.elem;

	var k=(e0-s0!=0 ? (e1-s1)/(e0-s0) : 0);

	fx.center=(KL_FX.center-pos0-s0)*k+pos1+s1;
	fx.start =(KL_FX.start -pos0-s0)*k+pos1+s1;
	fx.end   =(KL_FX.end   -pos0-s0)*k+pos1+s1;
	return fx;
}


//-----Focus7: main2 (kl_focus_set_win())-----
KL_FWIN_DOWN ="auto";
KL_FWIN_UP   ="auto";
KL_FWIN_RIGHT="auto";
KL_FWIN_LEFT ="auto";
function kl_closed(w,exist_check_only){
	if(!w) return 1;
	if(!exist_check_only){
		var s="try{ w.document.location.href }catch(kl_err){ 0 }";
		if(KL_IE5 || KL_NS6 || KL_OP6) if(!eval(s)) return 1;
	}
	return w.closed;
}
function kl_closed2(w){
	if(kl_closed(w)) return 1;
	return !w.KL_ACTIVE;
}
function kl_accessible(e){
	var s="try{ e.nodeName||e.tagName||e.document||(1)}catch(kl_err){ 0 }";
	if(KL_IE5 || KL_NS6 || KL_OP6){ if(eval(s)) return 1; }else return 1;
	return 0;
}
function kl_frames(win,v){
	if(!v) v=new Array(); if(!win) win=top;
	if(kl_closed(win)) return v;
	if(!win.frames) return v;
	for(var i=0;i<win.frames.length;i++){
		if(!kl_closed2(win.frames[i])) v[v.length]=win.frames[i];
		else v=kl_frames(win.frames[i],v);
	}
	return v;
}
function kl_end_raw(mode,pos){
	if(mode=="right" || mode=="left"){
		if(pos=="top"	) return self.screenTop;
		if(pos=="bottom") return self.screenTop+kl_windowheight(1);
	}
	if(mode=="down" || mode=="up"){
		if(pos=="top"	) return self.screenLeft;
		if(pos=="bottom") return self.screenLeft+kl_windowwidth(1);
	}
	if(mode=="right"){
		if(pos=="near") return self.screenLeft;
		if(pos=="far" ) return self.screenLeft+kl_windowwidth(1);
	}
	if(mode=="left"){
		if(pos=="near") return -self.screenLeft-kl_windowwidth(1);
		if(pos=="far" ) return -self.screenLeft;
	}
	if(mode=="down"){
		if(pos=="near") return self.screenTop;
		if(pos=="far" ) return self.screenTop+kl_windowheight(1);
	}
	if(mode=="up"){
		if(pos=="near") return -self.screenTop-kl_windowheight(1);
		if(pos=="far" ) return -self.screenTop;
	}
	return 0;
}
function kl_end_top(mode){	return kl_end_raw(mode,"top");		}
function kl_end_bottom(mode){	return kl_end_raw(mode,"bottom");	}
function kl_end_near(mode){	return kl_end_raw(mode,"near");		}
function kl_end_far(mode){	return kl_end_raw(mode,"far");		}

function kl_fwin_get(mode){
	var FWIN=self['KL_FWIN_'+mode.toUpperCase()]; if(!FWIN) return 0;

	if(kl_isstr(FWIN)) if(FWIN=="auto"){
		if(!KL_IE5W && !KL_OP7) return 0;

		FWIN=new Array();
		var wins=kl_frames();
		if(mode=="up" || mode=="left") wins.reverse();

		var far0=kl_end_far(mode); var far1="nan";
		for(var i=0;i<wins.length;i++){
			var w1=wins[i];
			if(w1==self || w1.kl_end_near(mode)<far0){
				wins[i]=0; continue;
			}
			var t=w1.kl_end_far(mode);
			if(kl_isstr(far1)) far1=t; else if(t<far1) far1=t;
		}
		var cnt=0;
		if(!kl_isstr(far1))
		for(var i=0;i<wins.length;i++){
			var w1=wins[i];
			if(!w1) continue;
			if(w1.kl_end_near(mode)>=far1) continue;
			var zs0=w1.kl_end_top(mode)   -kl_end_top(mode);
			var ze0=w1.kl_end_bottom(mode)-kl_end_top(mode);
			FWIN[cnt]=new Array(zs0,ze0,0,"100%",w1);
			cnt+=1;
		}
	}

	if(!kl_accessible(FWIN)) return 0;

	if(!kl_isarray(FWIN)){
		var t=FWIN; FWIN=new Array(); FWIN[0]=new Array(0,1,0,1,t);
	}

	var zs0,ze0,zs1,ze1,size0,size1,w1;
	var fwin=new Array();
	var down_or_up=(mode=="down" || mode=="up");
	var cnt=0; var t;
	for(var i=0;i<FWIN.length;i++){
		zs0=0; ze0="100%"; zs1=0; ze1="100%"; w1=FWIN[i];
		if(kl_isarray(w1)){
			zs0=FWIN[i][0]; ze0=FWIN[i][1];
			zs1=FWIN[i][2]; ze1=FWIN[i][3]; w1=FWIN[i][4];
		}
		if(kl_closed2(w1)) continue;

		size0=down_or_up ?    kl_windowwidth(1) :   kl_windowheight(1);
		size1=down_or_up ? w1.kl_windowwidth(1) :w1.kl_windowheight(1);

		t=kl_pstr2float(zs0); if(kl_isnum(t)) zs0=t*size0;
		t=kl_pstr2float(ze0); if(kl_isnum(t)) ze0=t*size0;
		t=kl_pstr2float(zs1); if(kl_isnum(t)) zs1=t*size1;
		t=kl_pstr2float(ze1); if(kl_isnum(t)) ze1=t*size1;

		fwin[cnt]=new Array(zs0,ze0,zs1,ze1,w1);
		cnt+=1;
	}
	return fwin;
}
function kl_focus_set_win(mode,form,fwin,e0){
	if(!fwin) fwin=kl_fwin_get(mode);
	if(!fwin) return 0;

	var zs0,ze0,zs1,ze1,w1;	
	var fx=KL_FX.center;
	var d,d0; d0=-1;
	var i0=-1;

	for(var i=0;i<fwin.length;i++){
		zs0=fwin[i][0]; ze0=fwin[i][1];
		d=(fx<zs0 ? zs0-fx : (fx>ze0 ? fx-ze0 : 0));
		if(d0<0 || d<d0){ d0=d; i0=i; }
	}
	if(i0<0) return 0;

	zs0=fwin[i0][0]; ze0=fwin[i0][1];
	zs1=fwin[i0][2]; ze1=fwin[i0][3]; w1=fwin[i0][4];

	if(e0) if(e0.blur) e0.blur();

	w1.KL_FX=kl_fx_copy(self,w1,zs0,ze0,zs1,ze1);

	w1.focus();

	w1.kl_focus_set(0,mode+"_p",form);

	return 1;
}


//-----Focus8: main (kl_focus_set())-----
KL_FMODES_POINT1=new Array("mouse","center","top","middle","bottom");
KL_FMODES_POINT2=new Array("down_p","up_p","right_p","left_p");
function kl_isp(mode){
	return kl_contains(KL_FMODES_POINT1,mode) || kl_contains(KL_FMODES_POINT2,mode);
}
function kl_focus_alt(mode){
	if(KL_IE4 && !KL_IE5) return "top";
	if(mode=="down" ) return "top";
	if(mode=="up"   ) return "bottom";
	if(mode=="right") return "top";
	if(mode=="left" ) return "top";
	return "center";
}
function kl_focus_ok1(e){
	return (e.focus || kl_tagname(e)=="iframe");
}
function kl_focus_ok2(e){
	var t=kl_tagname(e); if(t.length<=0) return 0;
	if(!e.focus && t!='area' && t!="iframe") return 0;
	if(kl_contains(document.links,e)) return 1;
	return (t=="input" || t=="select" ||t=="option" ||t=="textarea" ||t=="isindex" || t=="iframe");
}
function kl_focus_clear(){
	kl_visible_clear();
	kl_fmap_clear();
	kl_fh_clear();
	kl_fx_clear();
	kl_fl_clear();
}
function kl_focus_raw(e){
	e.focus();
	KL_FOCUS_E0=e;
	if(!kl_istext(e)) return;
	var tn=kl_tagname(e);
	if(tn=="input" && (KL_IE4 || (KL_NS6 && KL_MZV>0.9))){
		kl_select(e); return;
	}
	if(tn=="textarea" && KL_IE4W){
		if(e.kl_srange){
			if(e.kl_srange.parentElement()==e)
				e.kl_srange.select();
			e.kl_srange=0;
		}
		else kl_cpos_set(e,e.value.length);
	}
}
function kl_cpos_set(e,n){
	if(!KL_IE4W || !e.createTextRange) return 0;
	r=e.createTextRange(); r.move("character",n); r.select();
	return 1;
}
function kl_select(e){
	if(e.select){ e.select(); return 1; }
	return 0;
}
function kl_unselect(e){
	if(!KL_IE4W || !e.createTextRange) return 0;
	var r=e.createTextRange();
	if(r.execCommand){ return r.execCommand('Unselect'); }
	return 0;
}



KL_FOCUS_ONKEYPRESS=0;
function kl_focus_exec(mode,form,o0,o1){
	if(!o1) return 0;
	kl_fx_update(mode,o1);
	kl_fl_set(o1);

	var e=o1["elem"]; var e0=o0["elem"] ? o0["elem"] : 0;

	if(e0.blur){
		if(!e.focus ||
		   (KL_OP7 && kl_tagname(e )=="iframe") ||
		   (KL_NS6 && kl_istext(e0) && kl_istext(e))) e0.blur();
	}
	if(KL_IE4W && kl_istext(e0)){
		kl_unselect(e0);
	}
	if(e.focus){
		if(KL_NS6 && kl_istext(e)) KL_FOCUS_ONKEYPRESS=e;
		else kl_focus_raw(e);
	}

	if(o1["ys"]>kl_sly()+kl_windowheight())
		kl_slto(kl_slx(),o1["ys"]-kl_windowheight()+20);
	else if(o1["ye"]<kl_sly())
		kl_slto(kl_slx(),o1["ye"]-20);
	if(kl_tagname(e)=="iframe"){
		var w1=kl_iframe_e2w(e);
		if(w1){
			var zs0,ze0,zs1,ze1;
			if(mode=="down" || mode=="up"){
				zs0=o1["xs"]-kl_slx(); ze0=o1["xe"]-kl_slx();
				zs1=0; ze1=w1.kl_windowwidth();
			}else{
				zs0=o1["ys"]-kl_sly(); ze0=o1["ye"]-kl_sly();
				zs1=0; ze1=w1.kl_windowheight();
			}
			var fwin=new Array();
			fwin[0]=new Array(zs0,ze0,zs1,ze1,w1);
			kl_focus_set_win(mode,form,fwin,o0["elem"]);
		}
	}
	return 1;
}
function kl_focus_set(evt,mode,form){
	return kl_focus_set_raw(0,evt,mode,kl_isint(form) ? form : 1);
}
KL_FOCUS_E0=0;
function kl_focus_set_demo(mode,form){
	return kl_focus_set_raw(KL_FOCUS_E0,0,mode,kl_isint(form) ? form : 1);
}
function kl_focus_set_raw(e0,evt,mode,form){

	if(!(KL_IE4 || KL_NS6 || KL_OP7)) return 0;

	var mode0=mode;
	var w=kl_windowwidth();
	var h=kl_windowheight();
	var ymin=kl_sly();
	var ymax=kl_sly()+h;
	if(!e0) e0=kl_target(evt);

	var o0=new Array();

	kl_fx_init();

	var fmap=kl_fmap_set();

	if((KL_NS6 || KL_OP7) && KL_FL){
		if(kl_tagname(KL_FL["elem"])=="iframe")
		if(kl_scrolled(KL_FL["elem"])) e0=KL_FL["elem"];
	}

	if(KL_IE5 && !KL_IE6 && KL_FL){
		if(kl_tagname(e0)=='area' && kl_tagname(KL_FL["elem"])=='area')
			if(kl_scrolled(KL_FL["elem"])) e0=KL_FL["elem"];
	}
	if(kl_tagname(e0)=='img'){
		if(e0.ownerDocument) if(e0.ownerDocument.activeElement){
			e0=e0.ownerDocument.activeElement;
			if(kl_tagname(e0)!='area') e0=0;
		}else e0=0; else e0=0;
	}
	if(!kl_isp(mode)){
		if(!kl_focus_ok2(e0) || !kl_visible(e0))
			mode=kl_focus_alt(mode);
	}

	if(!kl_isp(mode)){
		if(fmap=="reuse") fmap=kl_fmap_update(e0);

		o0=(KL_FL ? (KL_FL["elem"]==e0 ? KL_FL : 0) : 0);
		if(kl_eq(o0,0)) o0=kl_fmap_get(e0);

		if(kl_isarray(o0)){
			if(o0["ys"]>(KL_NS6 ? ymax+7 : ymax) ||
			   o0["ye"]<(KL_NS6 ? ymin-7 : ymin) )
				mode=kl_focus_alt(mode);
		}else{
			mode=kl_focus_alt(mode);
		}
	}

	if(KL_NS6 || KL_OP7) if(mode=="mouse") mode="center";

	if(kl_isp(mode)){
		o0=new Array();
		var xc,yc,wt,ht;
		wt=KL_FOCUS_CENTERX<1 ? KL_FOCUS_CENTERX*w : KL_FOCUS_CENTERX;
		ht=KL_FOCUS_CENTERY<1 ? KL_FOCUS_CENTERY*h : KL_FOCUS_CENTERY;

		if(mode=="mouse"){
			xc=kl_trim(kl_mousex(evt),kl_slx(),kl_slx()+w);
			yc=kl_trim(kl_mousey(evt),kl_sly(),kl_sly()+h);
		}
		else if(mode=="top"){
			xc=kl_slx()+wt; yc=kl_sly();
		}
		else if(mode=="middle"){
			xc=kl_slx()+wt; yc=kl_sly()+h/2;
		}
		else if(mode=="bottom"){
			xc=kl_slx()+wt; yc=kl_sly()+h;
		}
		else if(mode=="center"){
			xc=kl_slx()+wt; yc=kl_sly()+ht;
		}
		else if(mode=="down_p"){
			xc=(KL_FX.axis=="y" ? KL_FX.center : w/2 );
			yc=kl_sly();
		}
		else if(mode=="up_p"){
			xc=(KL_FX.axis=="y" ? KL_FX.center : w/2 );
			yc=kl_sly()+h;
		}
		else if(mode=="right_p"){
			xc=kl_slx();
			yc=(KL_FX.axis=="x" ? KL_FX.center : h/2 );
		}
		else if(mode=="left_p"){
			xc=kl_slx()+w;
			yc=(KL_FX.axis=="x" ? KL_FX.center : h/2 );
		}
		o0["xc"]=xc; o0["yc"]=yc; o0["elem"]=0;
	}

	kl_fx_set(mode,o0);
	kl_fh_set(mode,o0);


	var o=0;
	var d0=-1;
	while(1){
		if(kl_isp(mode)){
			o=kl_nearest(o0,d0,mode,form,ymin,ymax);
			if(kl_eq(o,o0)) o=kl_nearest(o0,d0,mode,form,-1,-1);
		}else{
			o=kl_nearest(o0,d0,mode,form,-1,-1);
		}
		if(!kl_eq(o,o0))
		if(fmap=="reuse") if(kl_fmap_update(o["elem"])!="reuse"){
			fmap="update_done"; continue;
		}
		break;
	}
	if(kl_eq(o,o0)) o=0;

	var fail=0;
	if(!kl_focus_exec(mode,form,o0,o)){
		if(!kl_isp(mode0)){
			if(!kl_focus_set_win(mode0,form,0,o0["elem"]))
			if(!kl_focus_set_parent(mode0,form,o0["elem"])) fail=1;
		}else fail=1;
	}
	if(fail){ kl_mstat("NOFCS"); return 0; }
	return 1;
}
function kl_focus_set_parent(mode,form,e0){
	var e=kl_iframe_w2e(self);
	if(!e) return 0;
	//e.focus();
	var o=parent.kl_offset(e);
	var zs0,ze0,zs1,ze1;
	if(mode=="down" || mode=="up"){
		zs0=0;			     ze0=kl_windowwidth(1);
		zs1=o["xs"]-parent.kl_slx(); ze1=o["xe"]-parent.kl_slx();
	}else{
		zs0=0;			     ze0=kl_windowheight(1);
		zs1=o["ys"]-parent.kl_sly(); ze1=o["ye"]-parent.kl_sly();
	}
	if(e0) if(e0.blur) e0.blur();
	if(KL_OP7) self.blur();
	parent.focus();
	parent.KL_FX=kl_fx_copy(self,parent,zs0,ze0,zs1,ze1);

	return parent.kl_focus_set_raw(e,0,mode,form);
}
function kl_iframe_w2e(w){
	if(!w.parent) return 0;
	var w0=w.parent;
	if(kl_closed2(w0)) return 0;
	if(w0==w) return 0;

	if(w.frameElement){
		if(kl_accessible(w.frameElement)) return w.frameElement;
	}
	if(!w0.document.getElementsByTagName) return 0;
	var es=w0.document.getElementsByTagName("iframe");
	for(var i=0;i<es.length;i++){
		if(!es[i].contentDocument) continue;
		if(es[i].contentDocument==document) return es[i];
	}
	if(!kl_isint(w.screenLeft) || !kl_isint(w.screenTop)) return 0;
	var xc=w.screenLeft+w.kl_windowwidth(1)/2;
	var yc=w.screenTop +w.kl_windowheight(1)/2;
	for(var i=0;i<es.length;i++){
		if(!kl_visible(es[i],0,1)) continue;
		var o=w0.kl_offset(es[i]);
		o["xs"]+=w0.screenLeft-w0.kl_slx();
		o["xe"]+=w0.screenLeft-w0.kl_slx();
		o["ys"]+=w0.screenTop -w0.kl_sly();
		o["ye"]+=w0.screenTop -w0.kl_sly();
		if(o["xs"]<=xc && xc<=o["xe"] && o["ys"]<=yc && yc<=o["ye"])
			return es[i];
	}
	return 0;
}
function kl_iframe_e2w(e){
	if(e.contentWindow){
		if(kl_closed2(e.contentWindow)) return 0;
		 return e.contentWindow;
	}
	if(e.contentDocument){
		for(var i=0;i<self.frames.length;i++){
			var w=self.frames[i];
			if(kl_closed2(w)) continue;
			if(e.contentDocument==w.document) return w;
		}
		return 0;
	}
	if(!document.frames) return 0;
	if(!kl_isint(self.screenLeft) || !kl_isint(self.screenTop)) return 0;
	var o=kl_offset(e);
	var xc=(o["xs"]+o["xe"])/2+self.screenLeft-kl_slx();
	var yc=(o["ys"]+o["ye"])/2+self.screenTop -kl_sly();
	var xs,xe,ys,ye;
	var frms=document.frames;
	for(var i=0;i<frms.length;i++){
		if(kl_closed2(frms[i])) continue;
		xs=frms[i].screenLeft; xe=xs+frms[i].kl_windowwidth(1);
		ys=frms[i].screenTop;  ye=ys+frms[i].kl_windowheight(1);
		if(xs<=xc && xc<=xe && ys<=yc && yc<=ye)
			return frms[i];
	}
	return 0;
}


//-----Focus9: find nearest object (kl_nearest())-----
function kl_nearest_point(o0,d0,mode,form,ymin,ymax){
	var x0=o0["xc"]; var y0=o0["yc"];
	var xs_,xe_,ys_,ye_,d,o;
	var k=1;
	if(mode=="top"||mode=="middle"||mode=="bottom") k=KL_FOCUS_K3C;
	if(mode=="right_p"||mode=="left_p") k=KL_FOCUS_K3H;
	for(var i=0;i<KL_FMAP.length;i++){
		d=0; o=KL_FMAP[i];

		if(!o["elem"].focus) continue;
		if((!form   && o["ftype"].length) ||
		   (form==1 && o["ftype"]=="text")) continue;

		xs_=o["xs"]; xe_=o["xe"]; ys_=o["ys"]; ye_=o["ye"];

		if(KL_OP7){
			if((ymin>=0 && ys_<ymin)||
			   (ymax>=0 && ye_>ymax)) continue;
		}else{
			if((ymin>=0 && ye_<ymin+9)||
			   (ymax>=0 && ys_>ymax-9)) continue;
		}

		d=kl_dist_block(x0,x0,y0,y0,xs_,xe_,ys_,ye_,d0,k);
		if(d>=0) if(kl_visible(o["elem"])){ o0=o; d0=d; }
	}
	return o0;
}
function kl_nearest(o0,d0,mode,form,ymin,ymax){
	if(kl_isp(mode)){
		return kl_nearest_point(o0,d0,mode,form,ymin,ymax);
	}
	var e0=o0["elem"];

	var a=kl_max(KL_FX.end-KL_FX.center,KL_FX.center-KL_FX.start);
	if(a<1) a=1;
	var inside_found=0;

	var endline=-1;

	var down = (mode=="down");	var up   = (mode=="up");
	var right= (mode=="right");	var left = (mode=="left");
	var down_or_up   =down || up;
	var down_or_right=down || right;
	var right_or_left=right|| left;

	var def0 =(kl_area_type(o0["elem"])=="default");
	var poly0=(kl_area_type(o0["elem"])=="polygon");
	var tate0=kl_tate(o0["elem"]);

	var oo=(poly0 ? kl_halfsize(o0) : o0);
	var xs=oo["xs"]; var xe=oo["xe"]; var ys=oo["ys"]; var ye=oo["ye"];
	var xc,yc;
	if(down ){ xc=KL_FX.center; yc=ys; }
	if(up   ){ xc=KL_FX.center; yc=ye; }
	if(right){ yc=KL_FX.center; xc=kl_max(xe-3,(xs+3*xe)/4); }
	if(left ){ yc=KL_FX.center; xc=kl_min(xs+3,(xe+3*xs)/4); }

	var w0=kl_windowwidth();
	var h0=kl_windowheight();
	var i0=-1;
	for(var i=0;i<KL_FMAP.length;i++) if(KL_FMAP[i]==o0){ i0=i; break; }
	if(i0<0)
	for(var i=0;i<KL_FMAP.length;i++) if(KL_FMAP[i]["elem"]==e0){ i0=i; break; }

	var o,e,d,poly;
	var xs_,xe_,ys_,ye_,dx,dy,dx_max,dy_max;

	var alts=new Array();

	var o0_=o0;

	var forward=(!tate0 ? down_or_right : !down_or_right);

	//for(var i=0;i<KL_FMAP.length;i++)
	var i=(forward ? -1 : KL_FMAP.length);
	while(1){
		if(forward){ i+=1; if(i>=KL_FMAP.length) break; }
		else{ i-=1; if(i<0) break }

		o=KL_FMAP[i];

		e=o["elem"];

		if(e==e0     ||
		   !kl_focus_ok1(e)  ||
		   (!form   && o["ftype"].length)  ||
		   (form==1 && o["ftype"]=="text")) continue;

		poly=(o["atype"]=="polygon");
		oo=(o["atype"]=="polygon" ? kl_halfsize(o) : o);
		xs_=oo["xs"]; xe_=oo["xe"]; ys_=oo["ys"]; ye_=oo["ye"];

		if(down){
			if(!tate0){ if(ys_<ys) continue; }
			else{ if(ys_<ys && ye_<ye) continue; }
			if(!def0 && !tate0) if(ye_<ye) continue;
			//if(!poly && !poly0)
			if(ys_<ye) if(!kl_fx_cross(xs_,xe_) && (xe_<=xs || xe<=xs_)) continue;
		}
		if(up){
			if(!tate0){ if(ye_>ye) continue; }
			else{ if(ye_>ye && ys_>ys) continue; }
			if(!def0 && !tate0) if(ys_>ys) continue;
			//if(!poly && !poly0)
			if(ye_>ys) if(!kl_fx_cross(xs_,xe_) && (xe_<=xs || xe<=xs_)) continue;
		}
		if(right){
			if(xs_<=xs) continue;
			if(!def0 && !tate0) if(xe_<=xe) continue;
			if(xs_<xe) if(!kl_fx_cross(ys_,ye_) && (ye_<=ys || ye<=ys_) && ((xs_+xe_)/2<xe || (xs+xe)/2>xs_)) continue;
		}
		if(left){
			if(xe_>=xe) continue;
			if(!def0 && !tate0) if(xs_>=xs) continue;
			if(xe_>xs) if(!kl_fx_cross(ys_,ye_) && (ye_<=ys || ye<=ys_) && ((xs_+xe_)/2>xs || (xs+xe)/2<xe_)) continue;
		}

		dx=(xe_<xc ? (xc-xe_) : (xc<xs_ ? (xs_-xc) : 0 ) );
		dy=(ye_<yc ? (yc-ye_) : (yc<ys_ ? (ys_-yc) : 0 ) );

		if(down_or_up){
			if(dx>w0) continue;
			dy_max=KL_FOCUS_DY;
			if(tate0 && i0>=0 && i!=i0)
				dy_max+=h0/Math.pow(kl_abs(i-i0),2);
			inside=kl_fx_inside(xs_,xe_) && dy<dy_max;
		}else{
			if(dy>h0) continue;
			dx_max=KL_FOCUS_DX;
			if(!tate0 && i0>=0 && i!=i0)
				dx_max+=w0/Math.pow(kl_abs(i-i0),2);
			inside=kl_fx_inside(ys_,ye_) && dx<dx_max;
		}
		if(poly0 || def0) inside=0;

		if(!inside){
			if(inside_found) continue;
			if(right_or_left && !tate0)
			if(ye<=ys_ || ys>=ye_)
			if(dy/kl_max(kl_abs(xe_-xc),kl_abs(xs_-xc))>KL_FOCUS_LR)
				continue;
			if(down_or_up && tate0)
			if(xe<=xs_ || xs>=xe_)
			if(dx/kl_max(kl_abs(ye_-yc),kl_abs(ys_-yc))>KL_FOCUS_LR)
				continue;
		}
		if(right_or_left){ t=dx; dx=dy; dy=t; }


		if(inside){
			d=kl_dist_inside(dx,dy,a);
		}else{
			d=kl_dist_outside(dx,dy,(!tate0 ? right_or_left : !right_or_left) ? KL_FOCUS_K2H : KL_FOCUS_K2V);
		}

		if(d0<0 || d<d0 || (inside && !inside_found)){
			if(!kl_fh_passed(mode,o)) if(kl_visible(e)){
				d0=d; o0=o; endline=kl_eline(o,mode);
				if(inside) inside_found=1;
			}
		}
		if(inside) if(kl_fline(o,mode)<endline){
			alts[alts.length]=o;
		}
	}
	var flag=0;


	d0=kl_fx_dist(o0,mode);

	if(!flag)
	for(var i=0;i<alts.length;i++){
		o=alts[i];
		if(o!=o0)
		if(kl_fline(o,mode)<endline)
		if(kl_fx_dist(o,mode)<d0)
		if(!kl_fh_passed(mode,o)) if(kl_visible(o["elem"])){
			o0=o;
			d0=kl_fx_dist(o,mode);
			flag=1;
		}
	}
	return o0;
}



//-----Focus10: find nearest object (constans and tools)-----
KL_FOCUS_K1=0.75; //0.90; //1-(1/2)**2
KL_FOCUS_K2=1;    //9 //3**2
KL_FOCUS_K2V=1;
KL_FOCUS_K2H=9;
KL_FOCUS_K3C=4;   //100 //10**2
KL_FOCUS_K3H=25;
KL_FOCUS_DY=200;  //(px)
KL_FOCUS_DX=200;  //(px)
KL_FOCUS_LR=3;    //dy/dx
function kl_dist_inside(dx,dy,a){
	//var k=KL_FOCUS_K1;
	//return (a*a/(a*a-k*dx*dx))*dy*dy;
	return dy;
}
function kl_dist_outside(dx,dy,k){
	//var k=KL_FOCUS_K2;
	return k*dx*dx+dy*dy;
}
function kl_dist_block(xs,xe,ys,ye,xs_,xe_,ys_,ye_,d0,k){
	var d=0;
	if(ye_<ys) d+=(ye_-ys)*(ye_-ys);
	if(ys_>ye) d+=(ys_-ye)*(ys_-ye);
	d=d*k;
	if(d0>=0 && d>d0) return -1;
	if(xe_<xs) d+=(xe_-xs)*(xe_-xs);
	if(xs_>xe) d+=(xs_-xe)*(xs_-xe);
	if(d0>=0 && d>d0) return -1;
	return d;
}
function kl_halfsize(o){
	var xs=o["xs"]; var xe=o["xe"]; var ys=o["ys"]; var ye=o["ye"];
	var o_=new Array();
	o_["xs"]=(4*xs+xe)/5;
	o_["xe"]=(4*xe+xs)/5;
	o_["ys"]=(4*ys+ye)/5;
	o_["ye"]=(4*ye+ys)/5;
	return o_;
}
function kl_fx_inside(s,e){
	return (KL_FX.start<e && s<KL_FX.end);
}
function kl_fx_cross(s,e){
	return (s<KL_FX.center && KL_FX.center<e)
}
function kl_fline(o,mode){
	if(mode=="down" ) return o["ys"]; if(mode=="up"   ) return -o["ye"];
	if(mode=="right") return o["xs"]; if(mode=="left" ) return -o["xe"];
	return -1;
}
function kl_eline(o,mode){
	if(mode=="down" ) return o["ye"]; if(mode=="up"   ) return -o["ys"];
	if(mode=="right") return o["xe"]; if(mode=="left" ) return -o["xs"];
	return -1;
}
function kl_fx_dist(o,mode){
	var s,e;
	if(mode=="down" || mode=="up"){	s=o["xs"]; e=o["xe"]; }
	else{ s=o["ys"]; e=o["ye"]; }
	if(s>KL_FX.center){ return s-KL_FX.center; }
	if(e<KL_FX.center){ return KL_FX.center-e; }
	return 0;
}




//-----for section number,name,...-----
function kl_sec_handler_(secn,name){
	if(kl_eq(name,0)) name=kl_secn2name(secn);
	kl_sec_handler(secn,name);
}
function kl_secn_min(){
	return KL_SECN_MIN;
}
function kl_secn_max(){
	return KL_SECN_MIN+KL_SEC_NAMES.length-1;
}
function kl_strat(v,i){
	if(i<0 || i>=v.length) return -1;
	if(kl_isstr(v[i]))   return v[i];
	if(kl_isarray(v[i])) return v[i][0];
	return -1;
}
function kl_secn2name(secn){
	return kl_strat(KL_SEC_NAMES,secn-kl_secn_min());
}
function kl_name2secn(name){
	var i=kl_arrayindex(KL_SEC_NAMES,name,0);
	if(i=="nan") return i;
	return i+kl_secn_min();
}
function kl_url2name(url){
	var n=url.lastIndexOf("#",url.length-1);
	if(n<0) return "";
	return url.substring(n+1,url.length);
}
function kl_url2secn(url){
	return kl_name2secn(kl_url2name(url));
}

function kl_vname(){
	var name=kl_url2name(location.href);
	var ret =name;
	if(kl_eq(KL_VNAME,-1)){
		ret=-1;
		if(!KL_OP6 && !kl_eq(KL_TOP,   "") && name!=KL_TOP   )ret=name;
	}
	if(kl_eq(KL_VNAME, 1)){
		ret= 1;
		if(!KL_OP6 && !kl_eq(KL_BOTTOM,"") && name!=KL_BOTTOM)ret=name;
	}
	if(kl_isstr(KL_VNAME)){
		ret=KL_VNAME;
	}
	return ret;
}
function kl_nsecn(){
	var name=KL_VNAME;
	if(kl_eq(name,-1)) return kl_secn_min();
	if(kl_eq(name, 1)) return kl_secn_max();
	if(kl_eq(name, 0)) name=kl_url2name(location.href);
	var secn=kl_name2secn(name);
	if(secn!="nan") return secn;
	return kl_secn_min();
}
function kl_vsecn(){
	var name=kl_vname();
	var skip=(KL_SKIP_TOPSEC);
	if(kl_eq(name,-1)){
		if(skip) return kl_secn_min(); else return kl_secn_min()-1;
	}
	if(kl_eq(name, 1)){
		return kl_secn_max()+1;
	}
	if(kl_eq(name, 0)) name=kl_url2name(location.href);
	var secn=kl_name2secn(name);
	if(secn=="nan") if(skip) return kl_secn_min(); else return kl_secn_min()-1;
	return secn;
}
function kl_msecn(inc){
	var t=kl_nameindex(KL_SEC_NAMES,inc,KL_SKIP_TOPSEC);
	if(t=="nan") return kl_vsecn()+inc;
	return t+kl_secn_min()+inc;
}
function kl_ssecn(){
	if(KL_SEC_BASIC) return "nan";
	var names=KL_SEC_NAMES; var sy=kl_sly(); var smin=kl_secn_min();
	for(var i=1;i<names.length;i++){
		var ny=kl_sly_name(kl_strat(names,i)); if(ny<0) continue;
		if(sy<ny) return i-1+smin;
	}
	return names.length-1+smin;
}
function kl_xsecn(){
	var t=kl_ssecn(); if(t!="nan") return t;
	return kl_nsecn();
}
function kl_arrayindex(v,value,inc){
	for(var i=0;i<v.length;i++){
		if(!kl_isarray(v[i])){ if(v[i]==value) return i; continue; }
		for(var j=0;j<v[i].length;j++){
			if(j==0 && kl_eq(v[i][j],-1)) continue;
			if(v[i][j]==value){
				if(j==0) return i;
				if(inc<0) return i+1;
				return i;
			}
		}
	}
	return "nan";
}
function kl_nameindex(names,inc,skip){
	if(KL_SEC_BASIC) return "nan";
	var uname=kl_url2name(location.href); var vname=kl_vname();
	var sy=kl_sly(); var sym=kl_sly_max();
	var is_still=(uname==KL_NAMEY[0] && sy==KL_NAMEY[1]);
	var is_over =(sym>=0 && kl_isstr(vname) && sy>=sym  && kl_sly_name(vname)>=sym);

	if(is_still){
		if(kl_eq(vname,-1)){ if(inc<0 || skip) return 0; return -1; }
		if(kl_eq(vname, 1)){ if(inc<0) return names.length; return names.length-1; }
	}
	if(is_still || is_over){
		var i=kl_arrayindex(names,vname,inc); if(i!="nan") return i;
	}
	if(inc<0){
		for(var i=0;i<names.length;i++){
			var ny=kl_sly_name(kl_strat(names,i));if(ny<0) continue;
			if(sy<=ny) return i;
		}
		return names.length;
	}else{
		for(var i=names.length-1;i>=0;i--){
			var ny=kl_sly_name(kl_strat(names,i));if(ny<0) continue;
			if(sy>=ny) return i;
		}
		if(skip) return 0; else return -1;
	}
	return -1;
}


//-----set KL_SEC_NAMES/NEXT,PREV-----
KL_SEC_NAMES_SET_SORT= 1;
KL_SEC_NAMES_SET_DONE= 0;
function kl_sec_names_set(){
	if(!KL_SET_SEC_NAMES) return;
	var done=KL_SEC_NAMES_SET_DONE;
	if(done && done!="incomplete") return;
	if(done==0 && KL_SEC_NAMES.length>0){
		KL_SEC_NAMES_SET_DONE=1; return;
	}
	var is_sort=KL_SEC_NAMES_SET_SORT;
	if(!kl_ely_ok()) is_sort=0;
	var names=new Array(); var rs=new Array(); var ys=new Array();
	kl_sec_names_set_sub(names,is_sort,0,rs,ys);
	if(KL_SEC_NAMES_PREFIX.length || KL_SEC_NAMES_PREFIX2.length){
		if(is_sort) kl_sec_names_set_sub(names,is_sort,1,rs,ys);
		if(names.length>0)
		for(var i=0;i<rs.length;i++) kl_add2(names,0,rs[i]);
	}
	for(var i=0;i<names.length;i++) KL_SEC_NAMES[i]=names[i];
	KL_SEC_NAMES.length=names.length;

	KL_SEC_NAMES_SET_DONE=(KL_ONLOAD_REACHED ? 1 : "incomplete");
}
KL_SEC_NBR_SET_DONE=0;
function kl_sec_nbr_set(){
	if(!KL_SET_SEC_NBR) return;
	var done=KL_SEC_NBR_SET_DONE;
	if(done && !kl_isarray(done)) return;
	if(done==0){
		done=new Array(0,0);
		if(KL_SEC_PREV.length) done[0]=1;
		if(KL_SEC_NEXT.length) done[1]=1;
		if(done[0] && done[1]){ KL_SEC_NBR_SET_DONE=1; return; }
		KL_SEC_NBR_SET_DONE=done;
	}
	kl_sec_nbr_set1();
	kl_sec_nbr_set2();
	if(KL_ONLOAD_REACHED) KL_SEC_NBR_SET_DONE=1
}
function kl_sec_nbr_set1(){
	var done=KL_SEC_NBR_SET_DONE;
	var es=document.links;
	var as=new Array("id","name");
	for(var i=0;i<es.length;i++)
	for(var j=0;j<as.length;j++){
		if(!es[i][as[j]] || !es[i].href) continue;
		if(!done[0] && es[i][as[j]]==KL_SEC_PREV_NAME)
			KL_SEC_PREV=es[i].href;
		if(!done[1] && es[i][as[j]]==KL_SEC_NEXT_NAME)
			KL_SEC_NEXT=es[i].href;
	}
}
function kl_sec_nbr_set2(){
	var done=KL_SEC_NBR_SET_DONE;
	var url=location.href; var n=-1;
	for(var i=0;i<KL_PAGES.length;i++){
		if(KL_PAGES[i].length>0)
		if(url.indexOf(KL_PAGES[i])>=0){ n=i; break; }
	}
	if(!done[0] && n>=1)
		KL_SEC_PREV=KL_PAGES_PREV[n-1] ? KL_PAGES_PREV[n-1] : KL_PAGES[n-1];
	if(!done[1] && n<KL_PAGES.length-1)
		KL_SEC_NEXT=KL_PAGES_NEXT[n+1] ? KL_PAGES_NEXT[n+1] : KL_PAGES[n+1];
}
function kl_sec_names_set_sub(NAMES,is_sort,is_insert,rs,ys,d,ph,ysum){
	if(!d) d=document;
	if(!ph) ph=0;
	if(!ysum) ysum=0;
	var es=d.anchors;
	var is_match;
	var y;

	pre1=KL_SEC_NAMES_PREFIX;  if(kl_isstr(pre1)) pre1=new Array(pre1);
	pre2=KL_SEC_NAMES_PREFIX2; if(kl_isstr(pre2)) pre2=new Array(pre2);

	for(var i=0;i<es.length;i++){
		if(!es[i].name || !kl_visible2(es[i]) || ph) continue;
		var name=es[i].name;
		if(!kl_isstr(name)) continue;
		if(name.length<=0 ) continue;

		var skip=0;
		for(var j=0;j<NAMES.length;j++){
			if(NAMES[j]==name) skip=1;
			if(kl_isarray(NAMES[j]))
			if(kl_contains(NAMES[j],name)) skip=1;
		}
		if(skip) continue;

		is_match=1;
		for(var j=0;j<pre1.length;j++){
			if(pre1[j].length>0 && name.indexOf(pre1[j])!=0){
				is_match=0; break;
			}
		}
		for(var j=0;j<pre2.length;j++){
			if(pre2[j].length>0 && name.indexOf(pre2[j])==0){
				is_match=0; break;
			}
		}
		if(!is_sort){
			if(is_match){
			    kl_add(NAMES,NAMES.length,name);
			}else{
			    if(NAMES.length>0)
				kl_add2(NAMES,NAMES.length-1,name);
			    else
				kl_add(rs,rs.length,name);
			}
			continue;
		}else{
			if( is_insert &&  is_match) continue;
			if(!is_insert && !is_match) continue;
		}
		if(KL_NS4) y=es[i].y+ysum; else y=kl_sly_elem(es[i]);
		if(y<0) continue;
		var n=0;
		for(var j=ys.length-1;j>=0;j--) if(ys[j]<=y){ n=j+1; break; }
		if(is_insert){
			if(n>0) kl_add2(NAMES,n-1,name);
			else    kl_add(rs,rs.length,name);
		}else{
			kl_add(NAMES,n,name);
			kl_add(ys,   n,y   );
		}
	}
	if(!KL_NS4) return;
	for(var i=0;i<d.layers.length;i++){
		var w=d.layers[i];
		if(!w.document) continue;
		ph=kl_hidden_ns4(w,ph);
		kl_sec_names_set_sub(NAMES,is_sort,is_insert,rs,ys,w.document,ph,w.y+ysum);
	}
}


//-----move to neighboring sections, etc...-----
function kl_sec_move(inc){
	if(inc==0) return 1;

	kl_sec_names_set();
	kl_sec_nbr_set();

	if(inc=="p"){ kl_move("p"); return 1; }
	if(inc=="G"){ kl_move("G"); return 1; }

	var secn=kl_msecn(inc);
	var done=(KL_SEC_NAMES_SET_DONE && kl_isint(KL_SEC_NAMES_SET_DONE));

	if(secn<kl_secn_min()){
		if(KL_SEC_PREV.length>0 && done){
			kl_move("lnk",0,KL_SEC_PREV); return 1;
		}
		return 0;
	}
	if(secn>kl_secn_max()){
		if(KL_SEC_NEXT.length>0 && done){
			kl_move("lnk",0,KL_SEC_NEXT); return 1;
		}
		return 0;
	}
	kl_move("lnk",kl_secn2name(secn),0);
	return 1;
}
function kl_move(action,name,url,nomove){
	var secn; var y0=kl_sly();

	kl_sec_names_set();
	kl_sec_nbr_set();

	if(action=="p" || action=="G"){
		kl_mark_set("MARKSTP");
		if(action=="p"){
			secn=kl_secn_min(); KL_VNAME=-1;
			if(!nomove){
				if(!kl_eq(KL_TOP,"")){
				  location=kl_pageurl(location.href,KL_TOP);
				}else kl_slto(0,0);
			}
			if(kl_match(KL_UAGENT,"Netscape6/6.0")) kl_slto(0,0);
		}
		if(action=="G"){
			secn=kl_secn_max(); KL_VNAME= 1;
			if(!nomove){
				if(!kl_eq(KL_BOTTOM,"")){
				  location=kl_pageurl(location.href,KL_BOTTOM);
				}else kl_slto_max();
			}
		}
		name=kl_secn2name(secn);
	}
	if(action=="lnk"){
		var urlonly=(kl_eq(name,0));
		if(!url) url=kl_pageurl(location.href,name);
		self.location=url;
		if(urlonly) return;
		secn=kl_name2secn(name);
		if(KL_OP6) KL_VNAME=name; else KL_VNAME=0;
	}
	kl_sec_handler(secn,name);
	var y1=kl_sly();
	KL_NAMEY=new Array(kl_url2name(location.href),y1);
}


//-----preference window-----
KL_PWIN=0; KL_PWIN_MAP_CK=0; KL_PWIN_BKMK_CK=0;

function kl_pwin_close(){
	if(self["KL_PWIN"]) if(!kl_closed(KL_PWIN) && KL_PWIN.close){
		KL_PWIN.close(); KL_PWIN=0;
	}
}
function kl_pwin_map(map){
	KL_PWIN_MAP_CK=1;
	return kl_map_update(map);
}
function kl_pwin_delck(name){
	if(name=="map" ){ kl_cdel("MAP");  KL_PWIN_MAP_CK =-1; }
	if(name=="bkmk"){ kl_cdel("BKMK"); KL_PWIN_BKMK_CK=-1; }
}
function kl_pwin_setck_op6(){
	if(!KL_OP6) return;
	if(KL_PWIN_MAP_CK == 1){ kl_cset("MAP",KL_MAP); KL_PWIN_MAP_CK =0; }
	if(KL_PWIN_MAP_CK ==-1){ kl_cdel("MAP");        KL_PWIN_MAP_CK =0; }
	if(KL_PWIN_BKMK_CK==-1){ kl_cdel("BKMK");       KL_PWIN_BKMK_CK=0; }
}
function kl_cs(s){
	s=s.toUpperCase();
	var t="KL_PWIN_"+s+"_"+KL_LANG.toUpperCase();
	if(kl_isstr(self[t])) return self[t];
	var u="KL_PWIN_"+s+"_"+KL_LANG_DEFAULT.toUpperCase();
	if(kl_isstr(self[u])) return self[u];
	if(KL_DEBUG) alert("resource not found: "+t);
	return "(skipped)";
}
function kl_pwin_open(){
	var s="";
	s+="<html>";
	s+="<head><title>KeyNavi Prefs</title></head><body><form>";
	s+="<div style='color:#0066FF; font-size:medium; margin-bottom:7;'><u>"+kl_cs("TITLE")+"</u></div>";
	s+="<div style='color:#3377FF'>"+kl_cs("MAP1")+"</div>";

	var v=KL_MAP.split("_");

	var maps1=new Array("mapdef","mapunix","silent");
	var maps2=new Array("fci","fce","fa","fca","fsa");

	for(var i=0;i<maps1.length;i++){
		s+=" <input type=radio name=map1 onClick=\"opener.kl_pwin_map('"+maps1[i]+"')\" " +(v[0]==maps1[i] ? "checked" : "")+">"+kl_cs(maps1[i])+"<br>";
	}
	if(!((KL_OP6 && !KL_OP7) || KL_NS4)){
	s+="<div style='color:#3377FF'>"+kl_cs("MAP2")+"</div>";
	for(var i=0;i<maps2.length;i++){
		s+=" <input type=checkbox onClick=\"opener.kl_pwin_map('"+maps2[i]+"')\" "+(kl_contains(v,maps2[i]) ? "checked" : "")+">"+kl_cs(maps2[i])+"<br>";
	}
	s+="<div style='color:#3377FF'>"+kl_cs("MAP3")+"</div>";
	s+=" <input type=radio name=map3 onClick=\"opener.kl_pwin_map('prs')\" " +(!kl_contains(v,"prf") ? "checked" : "")+">"+kl_cs("prs")+"<br>";
	s+=" <input type=radio name=map3 onClick=\"opener.kl_pwin_map('prf')\" " +( kl_contains(v,"prf") ? "checked" : "")+">"+kl_cs("prf")+"<br>";
	s+="<div style='color:red; font-size:12px;'>"+kl_cs("PRM")+"</div>";
	}
	s+="<hr>";
	s+="<div style='color:#3377FF'>"+kl_cs("CK")+"</div>";
	var c="";
	if(kl_isstr(kl_cget("MAP")))  c+="<tr><td>KeyMap</td><td><input type=button value='"+kl_cs("DEL")+"' onClick='opener.kl_pwin_delck(\"map\")'></td></tr>";
	if(kl_isstr(kl_cget("BKMK"))) c+="<tr><td>BookMark</td><td><input type=button value='"+kl_cs("DEL")+"' onClick='opener.kl_pwin_delck(\"bkmk\")'></td></tr>";
	if(c.length>0) c="<table border=0 cellpadding=0>"+c+"</table>";
	else c=kl_cs("CKNO")+"<br>";
	s+=c;
	s+="<hr>";
	s+="<a href=http://www.keynavi.net target=_blank>"+kl_cs("HOME")+"</a>";
	s+="<hr>";
	s+="<input type=button value='"+kl_cs("CLOSE")+"' onClick='self.close()'>";
	s+="</form></body></html>";

	KL_PWIN=window.open("","","width=230,height=500,resizable=yes");
	KL_PWIN.document.write(s);
	KL_PWIN.document.close();
	return KL_PWIN;
}
KL_MAP_MODE="scroll";
KL_MAP_MODE_DEFAULT="scroll";
function kl_map_mode_set(mode,stat,selfonly){

	if(!stat) stat="ifchanged";

	if(stat=="always" || (stat=="ifchanged" && KL_MAP_MODE!=mode)){
		if(mode=="scroll") kl_mstat("TOSCL"); else kl_mstat("TOFCS");
	}
	KL_MAP_MODE=mode;

	var ws=(kl_isarray(KL_MAP_WINS) ? KL_MAP_WINS : kl_frames());
	if(!selfonly && ws.length)
	for(var i=0;i<ws.length;i++){
		if(ws[i]==self || kl_closed2(ws[i])) continue;
		if(ws[i].kl_map_mode_set) ws[i].kl_map_mode_set(mode,stat,1);
	}
}
KL_MAP=KL_MAP_DEFAULT;
KL_MAPS=new Array("mapdef","mapunix","silent");
KL_MAP_MAIN="";
KL_MAP_FCI =0;
KL_MAP_FCE =0;
KL_MAP_FA  =0;
KL_MAP_FCA =0;
KL_MAP_FSA =0;
function kl_map_set(map,cookie,pwin,selfonly){
	if(!kl_isstr(map)) return 0;
	var v=map.split("_");
	var flag=0;
	for(var i=0;i<KL_MAPS.length;i++){
		if(KL_MAPS[i]==v[0]){ flag=1; break; }
	}
	if(!flag) return 0;
	KL_MAP=map;
	if(cookie) kl_cset("MAP",KL_MAP);
	KL_MAP_MAIN=v[0];
	if(KL_MAP_MAIN=="mapdef" || KL_MAP_MAIN=="mapunix"){
		KL_MAP_FCI =kl_contains(v,"fci");
		KL_MAP_FCE =kl_contains(v,"fce");
		KL_MAP_FA  =kl_contains(v,"fa");
		KL_MAP_FCA =kl_contains(v,"fca");
		KL_MAP_FSA =kl_contains(v,"fsa");
		KL_MAP_MODE_DEFAULT=(kl_contains(v,"prf") ? "focus" : "scroll");
	}

	var ws=(kl_isarray(KL_MAP_WINS) ? KL_MAP_WINS : kl_frames());
	if(!selfonly)
	for(var i=0;i<ws.length;i++){
		if(ws[i]==self || kl_closed2(ws[i])) continue;
		ws[i].kl_map_set(map,0,1,1);
	}
	return 1;
}
function kl_map_update(map){
	var v=KL_MAP.split("_");

	if(kl_contains(KL_MAPS,map)){
		v[0]=map;
	}else if(map=="prs" || map=="prf"){
		var flag=0;
		for(var i=1;i<v.length;i++){
			if(v[i]=="prf"){ if(map=="prs") v[i]=0; flag=1; break;}
		}
		if(!flag && map=="prf") v[v.length]=map;
		if(map=="prs") KL_MAP_MODE="scroll";
		if(map=="prf") KL_MAP_MODE="focus";
	}else{
		var flag=0;
		for(var i=1;i<v.length;i++){
			if(v[i]==map){ v[i]=0; flag=1; break; }
		}
		if(!flag) v[v.length]=map;
	}
	s="";
	for(var i=0;i<v.length;i++) if(v[i]) s+=v[i]+"_";

	if(s.charAt(s.length-1)=="_") s=s.substring(0,s.length-1);

	kl_map_set(s,1);
}
function kl_map_init(){
	if(kl_map_set(kl_cget("MAP"))!=0) return;
	kl_map_set(KL_MAP_DEFAULT,0,0,1);
	var v=new Array("IE4","NS4","MZT","NS6","OP7","OP6");
	for(var i=0;i<v.length;i++){
		if(!self["KL_"+v[i]]) continue;
		var ac=self["KL_ACTIVATE_"+v[i]];
		if(ac=="confirm") KL_CONFIRM=1;
		if(!ac) kl_map_set(KL_MAP_SILENT,0,0,1);
		break;
	}
	return;
}


//-----restore previous key input-----
KL_PK1=-1; KL_PK2=-1;
function kl_prevkey_get(){
	return KL_PK1;
}
function kl_prevkey_fwd(kc){
	if(kl_ismod(kc)) return;
	KL_PK1=KL_PK2; KL_PK2=-1;
}
function kl_prevkey_set(key){
	KL_PK2=key;
}
function kl_prevkey_clear(){
	KL_PK1=-1; KL_PK2=-1;
}


//-----classify key event-----
function kl_ismod(kc){
	if(kc==0) return 1;
	if(kc>=16 && kc<=18) return 1;
	if(KL_OP7 && kc>=57388 && kc<=57390) return 1;
	return 0;
}
function kl_readable(kc,md,action){
	if(kl_ismod(kc)) return 0;
	if(kl_knx_readable(kc,action)) return 1;
	var a=md["alt"]; var c=md["ctrl"]; var s=md["shift"];
	if(KL_IE4 && action=="keypress" && !(a || c)) return 1;
	if(KL_IE4 && action=="keydown"  &&  (a || c)) return 1;
	if(KL_NS4 && action=="keypress" &&        !c) return 1;
	if(KL_NS4 && action=="keyup"    &&         c) return 1;
	if(KL_NS6 && action=="keypress") return 1;

	if(KL_OP7 || (KL_OP6 && !KL_OP6W)){
		if(action=="keypress") return 1;
	}else if(KL_OP6){
		if(action=="keypress" && !kl_isalnumkey(kc) && !c) return 1;
		if(action=="keydown"  &&  kl_isalnumkey(kc) && !c) return 1;
		if(action=="keyup"    &&                     c) return 1;
	}

	if(KL_IE4 || KL_NS6 || KL_OP6){
		if(action=="keydown") if(s) if(kl_isnumkey(kc))
		return 1;
	}
	return 0;
}
KL_KNX_KNS=new Array("ESC",27,"HT",9,"INS",45,"DEL",46,"HOME",36,"END",35,"PGUP",33,"PGDN",34,"UP",38,"DOWN",40,"LEFT",37,"RIGHT",39,"F1",112,"F2",113,"F3",114,"F4",115,"F5",116,"F6",117,"F7",118,"F8",119,"F9",120,"F10",121,"F11",122,"F12",123,"BS",8,"RET",13);
KL_KNX_KNS=kl_concat(new Array("RIGHT",39,"F11",122),KL_KNX_KNS);
function kl_knx_iskn(s){
	if(s.length==1) return 1;
	return (kl_knx_getkn(s)==s);
}
function kl_knx_getkn(knx){
	var v=KL_KNX_KNS;
	for(var i=0;i<v.length;i+=2){
		if(knx.length-v[i].length>=0)
		if(kl_match_last(knx.toUpperCase(),v[i]))
			return knx.substring(knx.length-v[i].length,knx.length)
	}
	return knx.charAt(knx.length-1);
}
function kl_knx_readable(kc,action){
	if((KL_IE4W || KL_NS6 || KL_IE4M) && action=="keydown")
		return kl_contains(KL_KNX_KNS,kc);
	return 0;
}


//-----main functions (kl_keyexec...,kl_keymain)-----
function kl_keyexec_pwin(kc,md,action,e){
	if(!md["ctrl"]) return true;
	var t=0;
	if(((KL_IE4 && action=="keydown")||(KL_NS4 && action=="keydown")||
	    (KL_NS6 && action=="keydown")||(KL_OP6 && action=="keyup"  )) &&
	   (kc==220 || kc==191 || kc==92 || kc==47 || (kc==28 && KL_NS4))) t=1;
	if(KL_IE4M && action=="keypress" && kc==124) t=1;
	if(t){ kl_pwin_open(); return false; }
	return true;
}
function kl_keyexec_main(kc,md,action,e,stat){

	var knx=stat["knx"];

	if(KL_DEBUG)
	if((stat["readable"] && (knx=='cT' || (KL_OP6 && knx=='sT'))) ||
	   (KL_NS4 && kc==20 && action=="keydown")){
		eval(prompt('KEYNAVI:Execute command you input','alert("ok")'))
		return false;
	}

	if(md["alt"] || md["ctrl"]) return true;

	var pos="";
	if((KL_IE4 && action=="keydown") || (KL_NS6 && action=="keydown"))
		if(kc==36) pos="top"; else if(kc==35) pos="bottom";
	if(KL_OP6 && action=="keypress")
		if(kc==57369) pos="top"; else if(kc==57370) pos="bottom";
	if(pos=="top"   ){ kl_move("p",0,0,1); return true; }
	if(pos=="bottom"){ kl_move("G",0,0,1); return true; }

	if(!stat["readable"] || !stat["not_disabled"]) return true;

	var ds=(KL_MAP_MAIN=="mapdef"  && KL_MAP_MODE=="scroll");
	var df=(KL_MAP_MAIN=="mapdef"  && KL_MAP_MODE=="focus");
	var us=(KL_MAP_MAIN=="mapunix" && KL_MAP_MODE=="scroll");
	var uf=(KL_MAP_MAIN=="mapunix" && KL_MAP_MODE=="focus");
	var ux=(us || uf);



	if((!us && !ds) && knx=='U'){
		kl_focus_set(e,"mouse"); return false;
	}
	if((uf && knx=='J') || (df && knx=='K')){
		kl_focus_set(e,"down"); return false;
	}
	if((uf && knx=='K') || (df && knx=='I')){
		kl_focus_set(e,"up"); return false;
	}
	if((uf && knx=='L') || (df && knx=='L')){
		kl_focus_set(e,"right"); return false;
	}
	if((uf && knx=='H') || (df && knx=='J')){
		kl_focus_set(e,"left"); return false;
	}
	if((uf && knx=='P') || (df && knx=='P')){
		kl_focus_set(e,"top"); return false;
	}
	if((uf && knx==';') || (df && knx==';')){
		kl_focus_set(e,"middle"); return false;
	}
	if((uf && knx=='/') || (df && knx=='/')){
		kl_focus_set(e,"bottom"); return false;
	}

	if((us && knx=='J') || (ds && knx=='K') || knx=='D'){
		kl_slby(0,KL_SL_DY); return false;
	}
	if((us && knx=='K') || (ds && knx=='I') || knx=='E'){
		kl_slby(0,-KL_SL_DY); return false;
	}
	if((us && knx=='L') || knx=='C'){
		kl_slby(KL_SL_DX,0); return false;
	}
	if((us && knx=='H') || knx=='X'){
		kl_slby(-KL_SL_DX,0); return false;
	}

	if((ds && knx=='J') || knx=='F'){
		kl_slby(0,kl_windowheight()-2*KL_SL_DY);  return false;
	}
	if((ux && knx=='B') || (ux && kl_prevkey_get()==27 && knx=='V') || (ds && knx=='U') || knx=='R'){
		kl_slby(0,-kl_windowheight()+2*KL_SL_DY); return false;
	}

	if((us && knx=='P')  || (ux && knx=='<') || (ds && knx=='O') || knx=='W'){
		kl_sec_move("p"); return false;
	}
	if((ux && knx=='sG') || (ux && knx=='>') || (ds && knx=='L') || knx=='S'){
		kl_sec_move("G"); return false;
	}

	if((ux && knx=='N')  || knx=='H'){
		if(!kl_sec_move( 1)) kl_mstat("NONEXT"); return false;
	}
	if((ux && knx=='sN') || knx=='Y'){
		if(!kl_sec_move(-1)) kl_mstat("NOPREV"); return false;
	}

	if((ds && knx==';') || knx=='A'){
		history.forward(); return false;
	}
	if((ds && knx=='P') || knx=='Q'){
		history.back(); return false;
	}
	if((ds && knx=='/') || knx=='Z'){
		kl_reload_go(); return false;
	}


	if(knx=='M'){
		kl_mark_set(); return false;
	}
	if((ux && knx=="'") || (!ux && knx=='N')){
		kl_mark_go(); return false;
	}
	if(KL_USE_BKMK){
	if((ux && knx=='sM') || (us && knx=='U') || knx=='V'){
		if(kl_bkmk_empty()) kl_bkmk_set();
		else if(kl_mcnfm("BKMKOW")) kl_bkmk_set();
		return false;
	}
	if((ux && knx=='"')  || (us && knx=='Y') || (!ux && knx=='B')){
		kl_bkmk_go(); return false;
	}
	}
	if(knx=='-'){ kl_urlat_go(); return false; }



	if(knx==','){
		if(KL_NS4 || (KL_OP6 && !KL_OP7)){
			kl_mstat("FNS");
			return false;
		}
		kl_map_mode_set("focus","always"); return false;
	}
	if(knx=='.'){
		kl_map_mode_set("scroll","always"); return false;
	}
	return true;
}



function kl_keyexec_unix(kc,md,action,e,stat){//unix specific (with Ctrl/Esc)
	if(KL_MAP_MAIN!="mapunix") return true;
	var kn=stat["kn"];

	if(((KL_IE4 && action=="keypress")||
	    (KL_NS4 && action=="keyup"   )||
	    (KL_NS6 && action=="keydown" )||
	    (KL_NS6 && action=="keypress")||
	    (KL_OP6 && action=="keydown" )) &&
	   (kc==27 || (md["ctrl"] && (kn=="[" || kc==219)))){
		kl_status("ESC-");
		kl_prevkey_set(27);
		return false;
	}
	if((KL_IE4 || KL_NS4 || KL_NS6 || KL_OP7) &&
		action=="keypress" && md["ctrl"] && kn==" "){
		kl_mark_set();
		return false;
	}

	if(!stat["readable"] || !stat["not_disabled"]) return true;

	if(!md["ctrl"]) return true;

	if(!KL_OP6 && kn=='g' || kn=='G' || ((KL_NS4 && kc==7))){
		kl_status("Quit");
		return false;
	}
	if(kn=='v' || kn=='V' || (KL_NS4 && kc==22)){
		kl_slby(0,kl_windowheight()-2*KL_SL_DY);
		return false;
	}
	if(kn=='x' || kn=='X' || (KL_NS4 && kc==24)){
		if(kl_prevkey_get()=='cx') kl_mark_go();
		else{ kl_status("C-x-"); kl_prevkey_set('cx'); }
		return false;
	}
	return true;
}



function kl_keyexec_funcs(stat,mode){
	if(kl_keyexec_funcs_raw(stat,mode,"0")==false) return false;
	if(!stat["readable"] || !stat["not_disabled"]) return true;
	if(kl_keyexec_funcs_raw(stat,mode,"" )==false) return false;
	return true;
}
function kl_keyexec_funcs_raw(stat,mode,tag){
	var fn;
	fn ="kl_keyfunc" +tag+"_ex";
	if(mode=="pre" && self[fn]) if(self[fn](stat)==false) return false;
	fn ="kl_keyfuncs"+tag+"_"+mode;
	if(!self[fn]) return true;
	var v=self[fn];
	for(var i=0;i<v.length;i++) if(v[i](stat)==false) return false;
	return true;
}


KL_KEY2CLK_raw=new Array();
KL_KEY2FCS_raw=new Array();
KL_KEY2NAME_raw=new Array();
function kl_keyexec_key2xxx(kc,md,action,e,stat){
	var t=kl_keyexec_key2xxx_raw(kc,md,action,e,stat);
	if(t==false) kl_cancel(e);
	return t;
}
function kl_cancel(e){
	if(e.preventDefault) e.preventDefault();
	if(!KL_IE4) return;
	if(e.type=="keydown" || e.type=="keypress" || e.type=="keyup"){
		if(KL_IE5) eval("try{ e.keyCode=0; }catch(kl_err){ 0 }");
		else e.keyCode=0;
	}
	e.cancelBubble=true;
	e.returnValue=false;
}
function kl_keyexec_key2xxx_raw(kc,md,action,e,stat){

	if(!stat["readable"] || !stat["not_disabled"]) return true;

	var f; var t=0; var knx=stat["knx"];

	kl_key2xxx_set()

	if(KL_KEY2FNC[knx]) { f=KL_KEY2FNC[knx]; if(f(stat)==false) return false; }
	if(KL_KEY2URL[knx]) { kl_move("lnk",0,KL_KEY2URL[knx]); return false; }
	if(kl_key2xxx_proc(knx,e)==false){ return false; }
	return true;
}
function kl_keystat(kc,md,action,e){
	var stat=new Array();
	stat["kc"]=kc; stat["md"]=md; stat["kn"]=kl_keyname(kc).toUpperCase();
	stat["action"]=action; stat["e"]=e;
	if(!kl_readable(kc,md,action)) return stat;
	stat["readable"]=1;
	var knx=kl_keynamex(kc,md,action);
	stat["knx"]=knx;
	if(kl_isdisabled(knx)) return stat;
	stat["not_disabled"]=1;
	return stat;
}
KL_KEY2XXX_OVERWRITE=0;
KL_KEY2XXX_PREFIX="kl_";
KL_KEY2XXX_SKIP  ="kl_skip";
KL_KEY2CLK_MODE =0;
KL_KEY2FCS_MODE =0;
KL_KEY2NAME_MODE=0;

KL_KEY2XXX_SET_DONE=0;
function kl_key2xxx_clear(){ KL_KEY2XXX_SET_DONE=0; }
function kl_key2xxx_set(){
	if(!KL_KEY2XXX_SET_DONE) kl_key2xxx_set_raw();
	if(KL_ONLOAD_REACHED) KL_KEY2XXX_SET_DONE=1;
}

function kl_copy2(a,b,flag){
	for(var i in a){
		if(!kl_isarray(a[i])){
			b[i]=(flag ? kl_getelem(a[i]) : a[i]); continue;
		}
		b[i]=new Array();
		for(var j=0;j<a[i].length;j++){
			b[i][j]=(flag ? kl_getelem(a[i][j]) : a[i][j]);
		}
	}
}
function kl_key2xxx_set_raw(){

	KL_KEY2CLK_raw=new Array();  kl_copy2(KL_KEY2CLK,KL_KEY2CLK_raw,1);
	KL_KEY2FCS_raw=new Array();  kl_copy2(KL_KEY2FCS,KL_KEY2FCS_raw,1);
	KL_KEY2NAME_raw=new Array(); kl_copy2(KL_KEY2NAME,KL_KEY2NAME_raw);

	var i2m=new Array(new Array(),new Array());
	i2m[0][0]=new Array("click",KL_KEY2CLK_MODE, KL_KEY2CLK_raw);
	i2m[0][1]=new Array("focus",KL_KEY2FCS_MODE, KL_KEY2FCS_raw);
	i2m[1][0]=new Array("name" ,KL_KEY2NAME_MODE,KL_KEY2NAME_raw);

	for(var i=0;i<i2m.length;i++){
		for(var j=0;j<i2m[i].length;j++)
			if(i2m[i][j][1]) i2m[i][j][1]=i2m[i][j][1].split("_");
	}

	var es=new Array(new Array(),new Array());
	kl_concat(es[0],document.links);
	if(document.getElementsByTagName){
		kl_concat(es[0],document.getElementsByTagName("input"));
		kl_concat(es[0],document.getElementsByTagName("select"));
		kl_concat(es[0],document.getElementsByTagName("textarea"));
		kl_concat(es[0],document.getElementsByTagName("isindex"));
	}else{
		for(var i=0;i<document.forms.length;i++)
			kl_concat(es[0],document.forms[i].elements);
	}
	kl_concat(es[1],document.anchors);

	var e,knx,action,tn,skip;
	var v=new Array(0,0);
	var pre=KL_KEY2XXX_PREFIX;
	var kmap=new Array();

	for(var i=0;i<es.length;i++)
	for(var j=0;j<es[i].length;j++){
		e=es[i][j];
		v[0]=e.id ? e.id : 0;
		v[1]=e.name ? e.name : 0;
		kmap=new Array();
		for(var k=0;k<v.length;k++){
			if(!v[k]) continue;
			if(v[k].indexOf(pre)!=0) continue;
			t=v[k].substring(pre.length,v[k].length).split("_");
			if(t.length<2) continue;
			action=t[0]; knx=kl_key_rectify(t[1],0);
			for(var l=0;l<i2m[i].length;l++){
				if(i2m[i][l][0]==action)
					kmap[action]=new Array(knx,e);
			}
		}

		tn=kl_tagname(e);
		skip=0;
		for(var k=0;k<v.length;k++){
			if(v[k]) if(v[k].indexOf(KL_KEY2XXX_SKIP)==0){
				skip=1; break;
			}
		}
		if(!skip)
		if(tn!="select" && tn!="textarea" && tn!="isindex")
		for(var l=0;l<i2m[i].length;l++){
			if(i2m[i][l][1] && !kmap[i2m[i][l][0]]){
				knx=kl_elem_key(e,i2m[i][l][1]);
				if(!knx.length) continue;
				knx=kl_key_rectify(knx,i2m[i][l][1]);
				kmap[i2m[i][l][0]]=new Array(knx,e);
			}
		}
		for(var l=0;l<i2m[i].length;l++){
			if(!kmap[i2m[i][l][0]]) continue;
			var m=kmap[i2m[i][l][0]];
			if(i2m[i][l][0]=="name"){
				if(!m[1].name) continue;
				m[1]=m[1].name;
			}
			kl_key2xxx_set_add(i2m[i][l][2],m[0],m[1]);
		}
	}
}
function kl_key2xxx_set_add(v,knx,e){
	if(!knx.length) return;
	if(!v[knx]) v[knx]=new Array();
	else if(!kl_isarray(v[knx])){ var t=v[knx]; v[knx]=new Array(); v[knx][0]=t; }
	v[knx][v[knx].length]=e;
}
function kl_elem_key(e,mode){
	var s=kl_elem_text(e);
	var key="";
	if(!key.length) if(kl_contains(mode,"[]")) key=kl_inbrace(s,"[","]");
	if(!key.length) if(kl_contains(mode,"()")) key=kl_inbrace(s,"(",")");
	if(!key.length) if(kl_contains(mode,"initial")) key=kl_first_letter(s);
	if(!key.length) return "";
	return key;
}
function kl_inbrace(s,p,q){
	var t=s.split(p); if(t.length<=1) return "";
	t=t[t.length-1].split(q); if(t.length<=1) return "";
	return kl_key_rectify2(t[0]);
}
function kl_key_rectify(knx,mode){
	if(!knx.length) return 0;
	var kn=kl_knx_getkn(knx); var md=knx.substring(0,knx.length-kn.length);
	if(md.length<=0 && mode){
		if(kl_contains(mode,"alt" )) md+="a";
		if(kl_contains(mode,"ctrl")) md+="c";
		if(kl_contains(mode,"shift") && kl_isalnumkey(kn)) md+="s";
	}
	return md+kn.toUpperCase();
}
KL_MDS=new Array("shift","ctrl","control","alt");
function kl_key_rectify2(knx){
	knx=kl_stripws(knx); if(knx.length<=2) return knx;
	var s=knx.toLowerCase();
	var md=""; var kn="";
	var m,v;
	for(var i=0;i<KL_MDS.length;i++){
		m=KL_MDS[i];
		v=s.split(m);
		if(v.length==2){
			md=m.charAt(0)+md;
			s=kl_stripws2(v[0])+kl_stripws2(v[1]);
		}
	}
	if(md.length){
		if(s.length>=2) s=kl_stripws2(s);

		if(kl_knx_iskn(s)) kn=s; else return "";
	}else{
		kn=kl_knx_getkn(s);
		s=kl_stripws2(s.substring(0,s.length-kn.length));

		for(var i=0;i<KL_MDS.length;i++){
			m=KL_MDS[i].charAt(0);
			v=s.split(m);
			if(v.length>2) return "";
			if(v.length==2){
				md=m+md;
				s=kl_stripws2(v[0])+kl_stripws2(v[1]);
			}
		}
		if(s.length) return "";
	}
	return md+kn;
}
KL_SPACES=new Array(32,10,13,9);
function kl_stripws(s,spaces){
	if(!spaces) spaces=KL_SPACES;
	var ns=0;
	while(ns<s.length){
		if(!kl_contains(spaces,s.charCodeAt(ns))) break;
		ns=ns+1;
	}
	var ne=s.length-1;
	while(ne>=0){
		if(!kl_contains(spaces,s.charCodeAt(ne))) break;
		ne=ne-1;
	}
	if(ns>ne) return "";
	return s.substring(ns,ne+1);
}
KL_SPACES2=new Array(32,10,13,43,45,9);
function kl_stripws2(s){
	return kl_stripws(s,KL_SPACES2);
}
function kl_first_letter(s){
	var n=0;
	while(n<s.length){
		var kc=s.charCodeAt(n);
		if(KL_NS6M){	if(kl_isalphakey(kc)) return s.charAt(n); }
		else{		if(kl_isalnumkey(kc)) return s.charAt(n); }
		if(!kl_isprint(kc) && !kl_contains(KL_SPACES,kc)) break;
		n+=1;
	}
	return "";
}
function kl_key2xxx_proc(knx,e){
	var knx0=knx;
	if(knx=="<" || knx==">"){
		knx0=kl_prevkey_get();
		if(!kl_isstr(knx0)){
			kl_status("No previous sequece."); return false;
		}
	}
	var mode=(knx=="<") ? "back" : "fwd";

	if(kl_key2fc_proc(knx0,e,mode) || kl_key2name_proc(knx0,mode)){
		kl_prevkey_set(knx0); return false;
	}
	return true;
}
function kl_key2fc_proc(knx,evt,mode){

	var e,action;
	if(KL_KEY2CLK_raw[knx]){ e=KL_KEY2CLK_raw[knx]; action="click"; }
	else if(KL_KEY2FCS_raw[knx]){ e=KL_KEY2FCS_raw[knx]; action="focus"; }
	else return 0;

	var ez=0;
	var ez0=0;
	var is_unique=1;

	while(1){
		if(!kl_isarray(e)){
			ez0=kl_getelem(e); if(!kl_visible2(ez0)) return 0;
			ez=ez0;
			break;
		}
		if(e.length<=0) return 0;

		if(mode=="back") e=kl_reverse(e);

		if(e.length>1) is_unique=0;

		var es=e;
		var ec=kl_target(evt);

		if(ec) if(!kl_scrolled2(ec) || !kl_visible2(ec)) ec=0;

		var n=-1; var flag=0;
		for(var i=0;i<es.length;i++)
			if(ec==kl_getelem(es[i])){ n=i; break; }
		if(n!=-1)
		for(var i=0;i<es.length-1;i++){
			var ez0=es[(n+1+i)%es.length];
			if(kl_visible2(ez0)){ ez=ez0; flag=1; break; }
		}
		if(flag) break;

		var y0=kl_sly();
		if(action=="click") y0+=kl_windowheight()/2;

		var cands=new Array();
		for(var i=0;i<es.length;i++){
			e=kl_getelem(es[i]);
			var dy=Math.abs(kl_sly_elem(e)-y0);
			var v=new Array(dy,e);
			for(var j=0;j<cands.length;j++)
				if(cands[j][0]>dy){ kl_add(cands,j,v); v=0; break; }
			if(v) kl_add(cands,cands.length,v);
		}
		flag=0;
		for(var i=0;i<cands.length;i++){
			var ez0=cands[i][1];
			if(kl_scrolled(ez0) && kl_visible2(ez0)){
				ez=ez0; flag=1; break;
			}
		}
		if(flag) break;
		for(var i=0;i<cands.length;i++){
			var ez0=cands[i][1];
			if(kl_visible2(ez0)){
				ez=ez0; flag=1; break;
			}
		}
		break;
	}
	//if(action=="click" && is_unique)
	if(action=="click"){
		kl_click(ez,evt);
		return 1;
	}
	if(ez.focus) ez.focus();
	return 1;
}
function kl_click(e,evt){
	if(e.click) e.click();
	else if(e.href){
		var f=1;
		if(kl_isfunc(e.onclick)) if(e.onclick(evt)==false) f=0;
		if(f) location=e.href;
	}
}


function kl_key2name_proc(knx,mode){

	if(!KL_KEY2NAME_raw[knx]) return 0;

	var name=KL_KEY2NAME_raw[knx];

	kl_sec_names_set();

	var url=0;
	if(kl_isarray(name)){
		if(!name.length) return 0;
		var names=(mode=="back" ? kl_reverse(name) : name); name=0;

		var i=kl_nameindex(names,1,KL_SKIP_TOPSEC);
		if(i=="nan"){
			var vn=kl_vname();
			if(kl_eq(vn,-1)) i=-1;
			if(kl_eq(vn, 1)) i=names.length-1;
			if(kl_isstr(vn)) i=kl_arrayindex(names,vn,1);
		}
		if(i=="nan") i=-1;
		var t=names[(i+1)%names.length];
		if(kl_isarray(t)){if(kl_eq(t[0],-1)) url=t[1]; else name=t[0];}
		else name=t;
	}
	kl_move("lnk",name,url);
	return 1;
}
KL_PATCH_NS6S=1;
function kl_keymain(kc,md,action,e){//enables full control by outer window
	if(!KL_ACTIVE) return true;

	if(kl_handlers_exec("on"+action,"pre",e)==false){
		if(action=="keyup") kl_prevkey_fwd(kc);
		return false;
	}

	if(KL_FOCUS_ONKEYPRESS.focus && action=="keypress"){
		kl_focus_raw(KL_FOCUS_ONKEYPRESS);
		KL_FOCUS_ONKEYPRESS=0;
	}

	if(KL_SKIP_ONCE){
		if(action=="keydown" || action=="keyup") KL_SKIP_ONCE=0;
		if(action!="keydown"){
			if(e.preventDefault) e.preventDefault();
			if(action=="keyup") kl_prevkey_fwd(kc);
			return false;
		}
	}

	var tf=kl_text_focused(e);

	if(tf){
		tf=1;
		if(KL_IE4 || KL_NS6) if(kl_focus_arrow(kc,md,action)) tf=2;
		if(md["alt"] || md["ctrl"]) tf=2;
	}else{
		if(KL_RESET_SBAR && action=="keydown" && !kl_ismod(kc))
			kl_status("");

		if(kc==13) kl_map_mode_set(KL_MAP_MODE_DEFAULT);

		if((KL_IE4M || (KL_NS6S && KL_PATCH_NS6S)))
		if(kc==13 && action=="keydown"){
			var ee=kl_target(e);
			if(kl_isfunc(ee.onclick))
			if(kl_contains(document.links,ee)){
				kl_click(ee,e); return false;
			}
		}
	}

	if(KL_OP7 && tf=="unclear" && KL_MAP_MAIN!="silent" && kl_isprint(kc)){
		if(e.preventDefault) e.preventDefault();
	}
	if(tf==1){
		kl_prevkey_clear();
		KL_SHIFT_PRESSED=0;
		return true;
	}

	if(KL_OP6 && action=="keydown") kl_pwin_setck_op6();

	var ret=kl_keymain_raw(kc,md,action,e);

	if(ret==true) ret=kl_handlers_exec("on"+action,"post",e);

	if(ret==false && action=="keydown") KL_SKIP_ONCE=1;

	if(ret==false ||
	   ((KL_MZT || KL_OP7) && KL_MAP_MAIN!="silent" && kl_isprint(kc) && !md["alt"] && !md["ctrl"] && tf==0))
		kl_cancel(e);

	if(action=="keyup") kl_prevkey_fwd(kc);

	KL_SHIFT_PRESSED=(KL_NS6 && action=="keydown" && md["shift"]);

	return ret;
}
KL_SKIP_SHIFT=0;
function kl_keymain_raw(kc,md,action,e){

	if(KL_CONFIRM && KL_MAP_MAIN!="silent")
	if(action=="keydown" && kl_isalnumkey(kc)){
		var mode=(KL_CONFIRM=="always" ? 2 : (!kl_isstr(kl_cget("MAP"))) ? 1 : 0);
		if(mode){
			if(!kl_mcnfm("CONFIRM1")) kl_map_set(KL_MAP_SILENT,0,0,1);
			if(mode==1)
			if( kl_mcnfm("CONFIRM2")){
				kl_cset("MAP",KL_MAP);
				kl_malrt("CONFIRM3");
			}
			KL_SKIP_ONCE=1;
			KL_CONFIRM=0;
			return false;
		}
		KL_CONFIRM=0;
	}

	if(kl_keyexec_pwin(kc,md,action,e)==false) return false;
	if(KL_MAP_MAIN=="silent") return true;

	if(KL_CONFIRM) return true;



	var stat=kl_keystat(kc,md,action,e);

	var t=kl_sla_keyexec(stat);
	if(t==false) return false; if(t=="skip") return true;

	if(kl_keyexec_funcs(stat,"pre")==false) return false;

	if(KL_KEY2XXX_OVERWRITE)
	if(kl_keyexec_key2xxx(kc,md,action,e,stat)==false) return false;

	if(kl_focus_arrow(kc,md,action)){
		kl_focus_set(e,kl_focus_mode(kc),2);
		if(action!="keyup") KL_SKIP_ONCE=1;
		return false;
	}
	if(KL_MAP_FCE && action=="keydown" && md["ctrl"] && !md["alt"] && !md["shift"]){
		if(kc==32){
			kl_click(kl_target(e),e); return false;
		}
		if(kc==87){
			kl_status("Ctrl-W disabled"); return false;
		}
	}
	if(!KL_SKIP_SHIFT || !md["shift"] || !kl_isalnumkey(kc)){
		if(kl_keyexec_main(kc,md,action,e,stat)==false) return false;
		if(kl_keyexec_unix(kc,md,action,e,stat)==false) return false;
	}

	if(!KL_KEY2XXX_OVERWRITE)
	if(kl_keyexec_key2xxx(kc,md,action,e,stat)==false) return false;

	if(kl_keyexec_funcs(stat,"post")==false) return false;

	return true;
}
function kl_focus_arrow(kc,md,action){
	return (kl_focus_arrow1(kc,md,action) || kl_focus_arrow2(kc,md,action) || kl_focus_arrow3(kc,md,action));
}
function kl_focus_arrow1(kc,md,action){
	if(!(action=="keydown" || (KL_IE5 && !KL_IE55 && action=="keyup")))
		return 0;
	if(KL_OP7){
		if(!(57373<=kc && kc<=57376) || md["ctrl"] || md["shift"])
			return 0;

	}else{
		if(!(37<=kc    && kc<=40)) return 0;
	}
	if(md["alt"]) return 0;
	if((KL_MAP_FCA && md["ctrl"]) ||
	   (KL_MAP_FSA && md["shift"])||
	   (KL_MAP_FA  && !md["ctrl"] && !md["shift"])){
		return 1;
	}
	return 0;
}
function kl_focus_arrow2(kc,md,action){
	if(action!="keydown") return 0;
	if(!KL_MAP_FCI) return 0;
	if(KL_NS6S && KL_PATCH_NS6S && md["ctrl"] && kc<=26) kc+=64;
	if(KL_NS4) if(md["ctrl"] && kc>=9 && kc<=12) kl_mstat("FNS");
	var ux=(KL_MAP_MAIN=="mapunix");
	if(ux){ if(kc==72) kc=73; else if(kc==73) kc=72; }
	if(kc>=73 && kc<=76 && md["ctrl"] && !md["alt"] && !md["shift"]){
		if(KL_OP6 && !KL_OP7){ kl_mstat("FNS"); return 0; }
		if(KL_IE4M || (KL_IE4 && !KL_IE5)) kl_mstat("USEA");
		return 1;
	}
	return 0;
}
function kl_focus_arrow3(kc,md,action){
	if(action!="keydown") return 0;
	if(!KL_MAP_FCE) return 0;
	if(KL_NS6S && KL_PATCH_NS6S && md["ctrl"] && kc<=26) kc+=64;
	if((kc==83 || (kc>=68 && kc<=70)) && (md["ctrl"] && !md["alt"] && !md["shift"])){
		if(KL_IE4M || (KL_IE4 && !KL_IE5)) kl_mstat("USEA");
		return 1;
	}
	return 0;
}
KL_FUPS=new Array(57373,38,73,69);
KL_FDNS=new Array(57374,40,75,68);
KL_FLTS=new Array(57375,37,74,83);
KL_FRTS=new Array(57376,39,76,70);
function kl_focus_mode(kc){
	if(kc<=12) kc+=64;
	if(KL_MAP_MAIN=="mapunix")
		kc=(kc==75 ? 73 : (kc==72 ? 74 : (kc==74 ? 75 : kc)));
	if(kl_contains(KL_FUPS,kc)) return "up";
	if(kl_contains(KL_FDNS,kc)) return "down";
	if(kl_contains(KL_FLTS,kc)) return "left";
	if(kl_contains(KL_FRTS,kc)) return "right";
	return "none";
}


//-----event handler (for key event)-----
//-----キーイベントの削除 2004/02/25 A.Tanaka(VANTEC)
function kl_onkeydown(e){
//	return kl_keymain(kl_keycode(e),kl_keymod(e),"keydown",e);
}
function kl_onkeypress(e){
//	return kl_keymain(kl_keycode(e),kl_keymod(e),"keypress",e);
}
function kl_onkeyup(e){
//	return kl_keymain(kl_keycode(e),kl_keymod(e),"keyup",e);
}
function kl_onhelp(e){
//	if(KL_SKIP_ONCE){ kl_cancel(e); return false; }
//	return true;
}


//-----add/delete event handler-----
function kl_ah_ns4(flag,o,etype,isrel){
	if(kl_undef(flag) || flag=="auto")
		if(o==self && etype=="onload") return 0; else flag=1;
	if(!flag) return 0;
	etype=etype.substring(2,etype.length).toUpperCase();
	if(!Event[etype]) return 0;
	if(!isrel && o.captureEvents) o.captureEvents(Event[etype]);
	if( isrel && o.releaseEvents) o.releaseEvents(Event[etype]);
	return 1;
}
KL_AH_PREFIX="kl_ah_";
function kl_ah_add(o,etype,func,args){
	var t=KL_AH_PREFIX+etype;
	if(!kl_isint(o[t+"_cnt"])){
		o[t+"_cnt"]=0;
		if(o[etype]) kl_ah_add(o,etype,o[etype],new Array());
	}
	var i=o[t+"_cnt"];
	o[t+i+"_func"]=func; o[t+i+"_args"]=args; o[t+i+"_obs"]=0;
	o[t+"_cnt"]=i+1;
}
function kl_ah_del(o,etype,func,args,cntmode){
	var t=KL_AH_PREFIX+etype;
	var cnt=0;
	if(!kl_isint(o[t+"_cnt"])) return cnt;
	for(var i=0;i<o[t+"_cnt"];i++){
		if(o[t+i+"_func"]==func && kl_eqv(o[t+i+"_args"],args)){
			if(!cntmode) o[t+i+"_obs"]=1;
			cnt+=1;
		}
	}
	return cnt;
}
function kl_ah_clear(o,etype){
	var t=KL_AH_PREFIX+etype;
	if(kl_isint(o[t+"_cnt"])) o[t+"_cnt"]="cleard";
}
function kl_ah_update(o,etype){
	var t=KL_AH_PREFIX+etype;
	var sk="kl_skip";
	var s="var n=0; "; var a;
	if(kl_isint(o[t+"_cnt"]))
	for(var i=0;i<o[t+"_cnt"];i++){
		if(o[t+i+"_obs"]) continue;
		a="";
		for(var j=0;j<o[t+i+"_args"].length;j++)
			a+=",this."+t+i+"_args["+j+"]";
		s+="if(!e['"+sk+"']) if(this."+t+i+"_func(e"+a+")==false) n+=1; ";
	}
	if(!s.length){ o[etype]=null; return 0; }
	if(KL_IE4 || KL_OP6){
		s="if(KL_IE4 || KL_OP6) e=(self['event'] ? event : new Array()); "+s;
	}
	s+="if(e['"+sk+"']) e['"+sk+"']=0; return (n ? false : true);";
	o[etype]=new Function("e",s);
	return 1;
}
function kl_addhandler(o,etype,func,args,ns4capture){
	o=(KL_OP7 && o==self) ? document : o;
	func=kl_isstr(func) ? (new Function("e",func)) : func;
	args=kl_isarray(args) ? args : new Array();
	if(KL_NS4) kl_ah_ns4(ns4capture,o,etype,0);
	kl_ah_add(o,etype,func,args);
	kl_ah_update(o,etype);
	return 1;
}
function kl_delhandler(o,etype,func,args,ns4capture){
	o=(KL_OP7 && o==self) ? document : o;
	args=kl_isarray(args) ? args : new Array();
	var cnt=kl_ah_del(o,etype,func,args);
	kl_ah_update(o,etype);
	if(KL_NS4) kl_ah_ns4(ns4capture,o,etype,1);
	return cnt;
}
function kl_clearhandler(o,etype){
	o=(KL_OP7 && o==self) ? document : o;
	kl_ah_clear(o,etype);
	kl_ah_update(o,etype);
	return 1;
}
function kl_counthandler(o,etype,func,args){
	o=(KL_OP7 && o==self) ? document : o;
	args=kl_isarray(args) ? args : new Array();
	return kl_ah_del(o,etype,func,args,"cnt_only");
}
function kl_hashandler(o,etype,func,args){
	return (kl_counthandler(o,etype,func,args)>=1);
}






//-----set handler for text input elements (for NS4,OP6)-----
KL_TEXT=0;
function kl_tf(){
	KL_TEXT=(KL_NS4 ? 1 : this);
	if(KL_TH_MODE=="just_set") kl_th_mode_active();
	return true;
}
function kl_tb(){
	KL_TEXT=0;    if(KL_TH_MODE=="just_set") kl_th_mode_active();
	return true;
}
function kl_tb_srange(){
	if(!document.selection) return;
	var r=document.selection.createRange().duplicate();
	if(r.parentElement()==this) this.kl_srange=r;
}
function kl_text_clear(){
	if(KL_TEXT.blur) KL_TEXT.blur(); KL_TEXT=0;
}
function kl_text_addhandler(o){
	if(!o) return;
	if(!kl_istext(o)) return;
	if(KL_NS4 || KL_OP6){
		kl_addhandler(o,"onfocus",kl_tf);
		kl_addhandler(o,"onblur" ,kl_tb);
	}
	if(KL_IE4W) if(kl_tagname(o)=="textarea"){
		kl_addhandler(o,"onselect",kl_tb_srange);
		kl_addhandler(o,"onchange",kl_tb_srange);
		kl_addhandler(o,"onclick" ,kl_tb_srange);
		kl_addhandler(o,"onkeyup" ,kl_tb_srange);
	}
}
function kl_text_sethandler(){
	if(!(KL_NS4 || KL_OP6 || KL_IE4W)) return;
	if(document.getElementsByTagName){
		var els;
		els=document.getElementsByTagName("input");
		for(var i=0;i<els.length;i++) kl_text_addhandler(els[i]);
		els=document.getElementsByTagName("textarea");
		for(var i=0;i<els.length;i++) kl_text_addhandler(els[i]);
		els=document.getElementsByTagName("select");
		for(var i=0;i<els.length;i++) kl_text_addhandler(els[i]);
	}else{
		var fms=kl_forms();
		for(var i=0;i<fms.length;i++)
		for(var j=0;j<fms[i].elements.length;j++)
		kl_text_addhandler(fms[i].elements[j]);

	}
	KL_TH_MODE="just_set";
}


//-----check if text input area focused-----
function kl_text_targeted(e){
	if(!e) return 0;
	var el=kl_target(e); if(!el) return 0;
	return kl_istext(el);
}
KL_CLICK_SHOWN=0;
KL_TH_MODE="not_set";
function kl_th_mode_active(){
	if(KL_TH_MODE!="just_set") return;
	KL_TH_MODE="active";
	if(KL_CLICK_SHOWN){ KL_CLICK_SHOWN=0; kl_status(""); }
}
function kl_text_focused(e){
	if(!(KL_NS4 || KL_OP6) || KL_TH_MODE=="not_set")
		return kl_text_targeted(e);
	if(KL_TH_MODE=="just_set"){
		if(kl_text_targeted(e)){
			kl_mstat("CLICK"); KL_CLICK_SHOWN=1;
			return "unclear";
		}else{
			kl_th_mode_active();
			return 0;
		}
	}
	return (KL_TEXT!=0);
}
function kl_istext(e){
	var tn=kl_tagname(e);
	if(tn.length){
		if(tn=="textarea" || tn=="isindex" || tn=="select" || tn=="option") return 1;
		if(tn!="input") return 0;
	}
	if(!kl_isstr(e.type )) return 0;
	if(!kl_isstr(e.value)) return 0;
	var t=e.type.toLowerCase();
	if(t=="text" || t=="password" || t=="textarea" || t=="file") return 1;
	if(KL_NS4 && t.indexOf("select")==0) return 1;
	return 0;
}
function kl_target(e){
	if(!e) if(KL_IE4 || KL_OP6) if(self["event"]) e=event;
	if(KL_NS4 || KL_NS6){ if(e.target) return e.target; }
	else{ if(e.srcElement) return e.srcElement; }
	return 0;
}


//-----event handler (for page itself)-----
KL_ONLOAD_REACHED=0;
KL_ONLOAD_DONE=0;
function kl_onload(e){
	if(KL_ONLOAD_DONE) return true;
	KL_ONLOAD_REACHED=1;

	kl_setup();
	kl_finalize();

	kl_text_sethandler();
	kl_fmap_clear_onload();


	kl_sec_names_set();
	kl_sec_nbr_set();

	if(!kl_restore()) kl_sec_handler(kl_xsecn(),kl_url2name(location.href));

	kl_handlers_exec("onload","pre",e);

	kl_sla_onload();

	kl_handlers_exec("onload","post",e);

	if(KL_NS6S && (KL_PATCH_NS6S & 0x02)) kl_focus_set(e,"top");

	KL_ONLOAD_DONE=1;
	return true;
}

KL_FINALIZE_DONE=0;
function kl_finalize(){

	if(KL_FINALIZE_DONE) return true;

	if(!KL_SETUP_DONE) return true;

	kl_handlers_exec("finalize","pre",0);



	kl_handlers_exec("finalize","post",0);

	KL_FINALIZE_DONE=1;

	return true;
}

function kl_restore(){
	if(!kl_reload_restore())
	if(!kl_bkmk_restore())
	if(!kl_urlat_restore()) return 0;
	return 1;
}




function kl_clear(){
	kl_visible_clear();
	kl_focus_clear();
}

KL_SETUP_DONE=0;
KL_NS4_SKIP=1;
function kl_setup(){

	if(KL_SETUP_DONE) return true;

	kl_identify();

	if(KL_NS4){
		KL_WIDTH0 =self.innerWidth;
		KL_HEIGHT0=self.innerHeight;
	}
	if(KL_NS4_SKIP && KL_NS4) if(parent!=self){
		kl_addhandler(self,'onload',kl_onload);
		KL_NS4_SKIP=0;
		return true;
	}

	if(!KL_AVAIL){
		kl_mstat("NOAVAIL");
		return true;
	}
	kl_mstat("AVAIL");

	kl_handlers_exec("setup","pre",0);


	if(KL_IE4M || (KL_IE4 && !KL_IE5) || KL_NS4 || KL_OP6) KL_SEC_BASIC=1;


	if(KL_FOCUS_ONSETUP) if(self.focus) self.focus();

	KL_MARK=new Array();

	kl_map_init();

	if(KL_IE4W) kl_addhandler(document,"onhelp",kl_onhelp);

	kl_addhandler(document,"onkeydown",  kl_onkeydown);
	kl_addhandler(document,"onkeypress", kl_onkeypress);
	kl_addhandler(document,"onkeyup",    kl_onkeyup);
	kl_addhandler(document,"onmousedown",kl_onmousedown);

	kl_addhandler(window,"onresize",kl_onresize);


	kl_addhandler(window,"onload",kl_onload);

	kl_map_mode_set(KL_MAP_MODE_DEFAULT,"skip");

	kl_handlers_exec("setup","post",0);

	KL_SETUP_DONE=1;

	return true;
}



KL_WIDTH0 =0;
KL_HEIGHT0=0;
KL_RELOAD_ONRESIZE="auto";
function kl_onresize(e){
	if(!KL_ACTIVE) return true;
	if(KL_WIDTH0!=self.innerWidth || KL_HEIGHT0!=self.innerHeight){
		var t=0;
		if(KL_RELOAD_ONRESIZE=="auto"){
			if(KL_NS4) t=(document.layers.length>0);
		}else{
			if(KL_RELOAD_ONRESIZE) t=1;
		}
		if(t) kl_reload_go();
	}
	kl_handlers_exec("onresize","pre",e);


	if(KL_TEXT) kl_text_clear();

	kl_focus_clear();

	if(KL_NS4) if(top!=self){
		document.captureEvents(Event.KEYDOWN);
		document.captureEvents(Event.KEYPRESS);
		document.captureEvents(Event.KEYUP);
		document.captureEvents(Event.MOUSEDOWN);
	}

	kl_handlers_exec("onresize","post",e);

	return true;
}
function kl_onmousedown(e){

	if(KL_NS4){
		if(document.routeEvent(e)==false) return false;
	}

	if(!KL_ACTIVE) return true;

	kl_handlers_exec("onmousedown","pre",e);

	kl_sla_onmousedown();

	if(KL_NS6S && (KL_PATCH_NS6S & 0x04)) kl_focus_set(e,"mouse");

	if(KL_OP6) kl_pwin_setck_op6();
	if(KL_TEXT) if(!kl_text_targeted(e)) kl_text_clear();

	if(KL_TH_MODE=="just_set") kl_th_mode_active();

	kl_handlers_exec("onmousedown","post",e);

	return true;
}

KL_SUFFIX_PRE =new Array("_pre","_ex","_ex1","_ex2");
KL_SUFFIX_POST=new Array("_post");
function kl_handlers_exec_raw(name,mode,e){
	var nm;
	var suffix=self["KL_SUFFIX_"+mode.toUpperCase()];
	for(var i=0;i<suffix.length;i++){
		nm="kl_"+name+suffix[i];
		if(self[nm]) if(kl_eq(self[nm](e),false)) return false;
	}
	return true;
}
function kl_handlers_exec(name,mode,e){
	if(kl_eq(kl_handlers_exec_raw(name,mode,e),false)) return false;
	var nm="kl_"+name+"s_"+mode;
	if(!self[nm]) return true;
	var fs=self[nm];
	for(var i=0;i<fs.length;i++)
		if(fs[i]) if(kl_eq(fs[i](e),false)) return false;
	return true;
}


//-----automatic scroll-----
KL_SLA_SCROLL = 1;
KL_SLA_USE_SHR= 1;
KL_SLA_NOTIFY = 1;
KL_SLA_USE_SEC= 0;

KL_SLA_MSTOP  = 1;
KL_SLA_KSTOP  = 1;

KL_SLA_SPEED  = 1;
KL_SLA_STEP   = new Array(  1, 1, 1, 1, 2, 4, 8);
KL_SLA_IVL    = new Array(100,50,25,12,12,12,12);
KL_SLA_STIME  = new Array(60000,30000,10000,7000,5000,3000,1000);

KL_SLA_ID     ="nan";
KL_SLA_MOVING = 0;
KL_SLA_BTM    = 0;
KL_SLA_PY     =-1;
KL_SLA_STEP0  = 0;

KL_SLA_SSUM   = 0;
KL_SLA_SCNT   = 0;
KL_SLA_SNEXT  = 0;

KL_SLA_SHR  = 0.5;

function kl_sla_flip_set(){
	KL_SKIP_TOPSEC=1;
	KL_SLA_SCROLL =0;
	KL_SLA_USE_SHR=0;
}
function kl_sla_flip_clear(){
	KL_SKIP_TOPSEC=0;
	KL_SLA_SCROLL =1;
	KL_SLA_USE_SHR=1;
}
function kl_sla_flip_start(sp){
	kl_sla_flip_set();
	kl_sla_start(sp,1);
}
function kl_sla_flip_stop(){
	kl_sla_stop();
	kl_sla_flip_clear();
}
function kl_sla_toggle(){
	if(KL_SLA_ID=="nan") kl_sla_start(); else kl_sla_stop();
}
function kl_sla_accelerate(inc,reset){
	if(KL_SLA_MOVING || !reset) KL_SLA_SPEED+=inc; else KL_SLA_SPEED=inc;
	if(KL_SLA_SPEED==0) KL_SLA_SPEED+=inc;
	return kl_sla_start(KL_SLA_SPEED);
}

function kl_sla_start(sp,onload){
	if(kl_isint(sp)) KL_SLA_SPEED=sp;
	if(KL_SLA_SPEED==0) KL_SLA_SPEED+=1;
	kl_sla_speed_trim();

	if(onload && !KL_SLA_ONLOAD_DONE){
		KL_SLA_START_ONLOAD=1; return;
	}
	if(KL_SLA_NOTIFY) kl_status(kl_sla_stat(),"sla_start");
	var skip=KL_SLA_MOVING;
	KL_SLA_MOVING=1;
	if(KL_SLA_ID=="nan") kl_sla_main(skip);
}
function kl_sla_stop_while(){
	if(KL_SLA_ID=="nan") return 0;
	if(KL_NS4) clearInterval(KL_SLA_ID); else clearTimeout(KL_SLA_ID);
	KL_SLA_ID="nan";
	return 1;
}
function kl_sla_stop_finalize(arg){
	if(!arg) arg="";
	if(!KL_SLA_MOVING || KL_SLA_ID!="nan") return 0;
	if(KL_SLA_NOTIFY && arg.indexOf("nomsg")<0)
		kl_mstat("STOP","sla_stop");
	KL_SLA_MOVING=0;
	KL_SLA_STEP0=0;
	kl_sla_svar_clear();
	return 1;
}
function kl_sla_svar_clear(){ KL_SLA_SSUM=0; KL_SLA_SCNT=0; KL_SLA_SNEXT=0; }
function kl_sla_stop(arg){
	kl_sla_stop_while();
	kl_sla_stop_finalize(arg);
}
function kl_sla_speed_trim(){
	if(KL_SLA_SPEED> KL_SLA_IVL.length) KL_SLA_SPEED= KL_SLA_IVL.length;
	if(KL_SLA_SPEED<-KL_SLA_IVL.length) KL_SLA_SPEED=-KL_SLA_IVL.length;
}
function kl_sla_main(skip){
	if(KL_SLA_SPEED==0) KL_SLA_SPEED=1;
	var sp=KL_SLA_SPEED;
	var step=0; var ivl=10;
	if(KL_SLA_SCROLL){
		step=KL_SLA_STEP[Math.abs(sp)-1]; if(sp<0) step=-step;
		ivl=KL_SLA_IVL[Math.abs(sp)-1];
	}else if(!KL_SLA_USE_SHR){
		ivl=KL_SLA_STIME[Math.abs(sp)-1]/10;
	}
	if(KL_SLA_BTM){
		kl_slto_max();
		KL_SLA_BTM+=1;
		if(KL_SLA_BTM>10) KL_SLA_BTM=0;
	}else{
		if(step!=0) kl_slby(0,step+KL_SLA_STEP0);
	}
	if(KL_NS4){
		if(KL_SLA_ID=="nan")
		KL_SLA_ID=setInterval("kl_sla_main()",ivl);
	}else{
		KL_SLA_ID=setTimeout("kl_sla_main()",ivl);
	}

	if(skip){ KL_SLA_SSUM=KL_SLA_SSUM/2; return; }

	if(KL_SLA_BTM) return;

	if(KL_SLA_SCROLL){
		var y0=KL_SLA_PY; var y1=kl_sly(); KL_SLA_PY=y1;
		if((sp>0 && y0<y1)||(sp<0 && y0>y1)){
			kl_sla_svar_clear();
			return;
		}
		if(KL_NS4 && KL_SLA_SCNT>5){
			if(sp<0){ KL_SLA_STEP0-=1; }
			if(sp>0){ KL_SLA_STEP0+=1; }
		}
		KL_SLA_SCNT +=1; if(KL_SLA_SCNT<10) return;
	}
	var remain;
	if(KL_SLA_USE_SHR){
		KL_SLA_SSUM+=KL_SLA_STEP[Math.abs(sp)-1];
		var h=KL_SLA_SHR*kl_windowheight();
		if(KL_SLA_SSUM<h) remain=10*(h-KL_SLA_SSUM)/h; else remain=-1;
	}else{
		KL_SLA_SSUM+=ivl;
		var t=KL_SLA_STIME[Math.abs(sp)-1];
		if(KL_SLA_SSUM<t) remain=10*(t-KL_SLA_SSUM)/t; else remain=-1;
	}
	if(kl_eq(KL_SLA_SNEXT,0)){
		if(KL_SLA_USE_SEC){
			var inc; if(sp<0) inc=-1; else inc=1;
			var secn=kl_msecn(inc);
			if(secn<kl_secn_min()) KL_SLA_SNEXT=KL_SEC_PREV;
			else if(secn>kl_secn_max()) KL_SLA_SNEXT=KL_SEC_NEXT;
			else KL_SLA_SNEXT="#"+kl_secn2name(secn);
		}else{
			if(sp<0) KL_SLA_SNEXT=KL_SEC_PREV;
			else KL_SLA_SNEXT=KL_SEC_NEXT;
		}
	}
	var next=KL_SLA_SNEXT;

	if(remain>0){
		var s;
		if(next.length){
		if(KL_SLA_NOTIFY){
			s="";
			for(var i=0;i<remain;i++) s=s+"+";
			s=kl_sla_stat()+"  Next: "+kl_pageurl(next,0,1)+"   "+s;
			kl_status(s,"sla_sandglass");
		}
		}else{
			kl_sla_stop();
			if(KL_SLA_NOTIFY) kl_mstat("STOP2","sla_nonext");
		}
		return;
	}

	if(!next){ kl_sla_stop(); return; }

	if(next.charAt(0)=="#"){
		kl_sla_svar_clear();
		kl_move("lnk",next.substring(1,next.length),0);
		if(KL_SLA_NOTIFY) kl_status("");
	}else{
		kl_sla_stop("nomsg");
		if(sp<0) next=kl_pageurl(next);
		kl_cookie_set("kl_sla_speed",kl_tostr(sp),"/",0);
		kl_move("lnk",0,next);
	}
}
function kl_sla_stat(){
	var sp=KL_SLA_SPEED;
	var s;
	if(KL_SLA_SCROLL)
	    s="Scroll Speed: "+kl_tostr(sp);
	else{
	    s="Interval: "+kl_tostr(KL_SLA_STIME[Math.abs(sp)-1]/1000);
	    if(sp<0) s+=" (Reverse)";
	}
	return s;
}


//-----event handlers-----
function kl_sla_keyexec(stat){
	if(stat["readable"]){
		var ux=(KL_MAP_MAIN=="mapunix"); var knx=stat["knx"];
		if((ux && knx=='I') || (!ux && knx=='G')){
			kl_sla_accelerate( 1,1); return false;
		}
		if((ux && knx=='O') || (!ux && knx=='T')){
			kl_sla_accelerate(-1,1); return false;
		}
		
	}
	if(stat["action"]=="keydown"){
		if(kl_sla_stop_while()) return "skip"; else return true;
	}
	if(stat["action"]=="keyup"){
		if(kl_sla_stop_finalize()) return false; else return true;
	}
	return (KL_SLA_MOVING ? false : true);
}
function kl_sla_onmousedown(){
	if(KL_SLA_MSTOP) kl_sla_stop();
	return true;
}
function kl_sla_speed_cookie(del){
	var sp=kl_cookie_get('kl_sla_speed');
	if(!kl_isstr(sp)) return 0;
	if(del) kl_cookie_del('kl_sla_speed','/');
	return kl_toint(sp,0);
}
KL_SLA_START_ONLOAD=0;
KL_SLA_ONLOAD_DONE=0;
function kl_sla_onload(){
	if(!KL_ACTIVE) return true;
	var sp=kl_sla_speed_cookie("del");
	if(sp!=0){
		KL_SLA_SPEED=sp;
		if(sp<0 && KL_SLA_SCROLL){ KL_SLA_BTM=1; }
		kl_sla_start();
	}
	if(KL_SLA_START_ONLOAD) kl_sla_start();
	KL_SLA_ONLOAD_DONE=1;
	return true;
}



//-----howto window-----
KL_HWIN=0;
KL_HPATH="files/keynavi_hwin_";
function kl_hwin_open(){
	var url=KL_ROOT+KL_HPATH+(self["KL_LANG"]=="ja" ? "ja" : "en")+".html";
	var opt="top=0,left=0,resizable=yes";

	if(KL_OP6)
		opt+=",width=190,height="+(kl_windowheight()-20)+",scrollbars=yes";
	else if((screen.availHeight ? screen.availHeight : screen.height)>670)
		opt+=",width=175,height=670";
	else
		opt+=",width=190,height=530,scrollbars=yes";
	var win=window.open(url,"kl_hwin",opt); if(win.focus) win.focus();
	KL_HWIN=win;
	return win;
}
function kl_hwin_close(){
	if(self["KL_HWIN"]) if(!kl_closed(KL_HWIN) && KL_HWIN.close){
		KL_HWIN.close(); KL_HWIN=0;
	}
}











//-----------------------------------------------
//「KeyNavi」日本語リソース (keynavi_res_ja.js)
//-----------------------------------------------

KL_LANG="ja";

KL_MSG_MARKST_JA  ="";
KL_MSG_MARKSTP_JA ="";
KL_MSG_MARKNO_JA  ="";
KL_MSG_MARKMT_JA  ="";
KL_MSG_MARKOW_JA ="";

KL_MSG_BKMKSET_JA ="";
KL_MSG_BKMKNO_JA  ="";
KL_MSG_BKMKMT_JA  ="";
KL_MSG_BKMKDA_JA  ="";
KL_MSG_BKMKOW_JA ="";

KL_MSG_NONEXT_JA  ="";
KL_MSG_NOPREV_JA  ="";

KL_MSG_CLICK_JA  ="";

KL_MSG_NOAVAIL_JA ="";
KL_MSG_AVAIL_JA   ="";

KL_MSG_CONFIRM1_JA="";
KL_MSG_CONFIRM2_JA="";
KL_MSG_CONFIRM3_JA="";

KL_MSG_NOFCS_JA   ="";

KL_MSG_FNS_JA     ="";

KL_MSG_USEA_JA    ="";

KL_MSG_STOP_JA    ="";
KL_MSG_STOP2_JA   ="";

KL_MSG_TOFCS_JA   ="";
KL_MSG_TOSCL_JA   ="";

KL_PWIN_TITLE_JA ="";
KL_PWIN_MAP1_JA   ="";
KL_PWIN_MAP2_JA   ="";
KL_PWIN_MAP3_JA   ="";

KL_PWIN_MAPDEF_JA  ="";
KL_PWIN_MAPUNIX_JA ="";
KL_PWIN_SILENT_JA  ="";

KL_PWIN_FCI_JA   ="";
KL_PWIN_FCE_JA   ="";
KL_PWIN_FA_JA    ="";
KL_PWIN_FCA_JA   ="";
KL_PWIN_FSA_JA   ="";

KL_PWIN_PRS_JA   ="";
KL_PWIN_PRF_JA   ="";
KL_PWIN_PRM_JA   ="";

KL_PWIN_CK_JA    ="";
KL_PWIN_DEL_JA   ="";

KL_PWIN_HOME_JA  ="";
KL_PWIN_CKNO_JA  ="";
KL_PWIN_CLOSE_JA ="";


//-----------------------------------------------
//KeyNavi Customize (keynavi_customize.js)
//-----------------------------------------------
function kl_addhandler_ex(etype,func,is_post,isdel){
	if(typeof(func)==typeof("s")) func=self[func];
	var t=(is_post ? "post" : "pre");
	var n="kl_"+etype+"s_"+t;
	if(!self[n]) self[n]=new Array();
	if(isdel){
		var cnt=0;
		for(var i=0;i<self[n].length;i++)
			if(self[n][i]==func){ self[n][i]=0; cnt+=1; }
		return cnt;
	}else{
		self[n][self[n].length]=func; return 1;
	}
}
function kl_delhandler_ex(etype,func,is_post){
	return kl_addhandler_ex(etype,func,is_post,1);
}



//-----------------------------------------------
//KeyNavi Setup (keynavi_setup.js)
//-----------------------------------------------


//KL_DEBUG=1;
//KL_LANG="ja";

//KL_USE_BKMK=1;


KL_KEY2CLK_MODE= (KL_LANG=="en" ? 0 : "[]_shift");
KL_KEY2FCS_MODE= (KL_LANG!="en" ? 0 : "initial_shift");


//KL_MAP_CPATH ="/";
//KL_MAP_CEXP  = 1;

//KL_BKMK_CPATH="/home/username/"; 
//KL_BKMK_CEXP = 0;

//KL_CRYPT_KEY="Only Time Will Tell...";

//-----setup-----
if(self["kl_setup"]) kl_setup();
KL_LOADED= 1;




//-----------------------------------------------
//KeyNavi Finalize (keynavi_finalize.js)
//-----------------------------------------------
if(self["kl_finalize"]) kl_finalize();



