/* -------------- tEarn Media Library --------------
	(C) copyright 2005-2011, TEARN Media Network. All rights reserved.
	Hidden statements and formats uniquely copyright this work.
	Phoani, phocials, phossified, phokit, SoMoLo, and phomercials are trademarks of TEARN Media.
	Methods protected by patent-pending. Version 5.35mmove
*/
function phwk() { return navigator.userAgent.toLowerCase().search('webkit')>-1; }
function phshiftbg(job) {
	var ele =phewjobs[job];
	ele.phskincnt ++;
	if (ph$("phj" +job +"tbl"))
	 ph$("phj" +job +"tbl").style.backgroundPosition =ele.phskincnt +'px 100%';
	}
function wkspinend(job, indx) {
 var ele =phi$(job,indx);
 if (ele) ele.style.webkitAnimation ='none'; 
 }
function wkspinload(job, indx) {
 var ele =phi$(job,indx); jele =phewjobs[job];
 if (!ph$('kcaption')) { if (ele) ele.src =ele.alt; return; }
 if (ele &&jele) { 
  var n =jele.phnext;
  ele.src =phchkimg(phewjobs[job], n);
  ele.parentNode.href =phgetanchor(jele, n);
  var t =(jele.phew[n] &&jele.phew[n].title) ?jele.phew[n].title :'';
  t =(t.match('.jpg')) ?'' :t;
  t =(t.substr(0,7)=='http://') ?'' :t;
  if (ph$('kcaption')) ph$('kcaption').innerHTML =t;
  }
 }
 phew.app.match.reset =2000;
 phew.action['spin'].hover ='off';
function wkspin(job, indx) {
 var ele =phi$(job,indx);
 if (ele) {
  ele.style.webkitAnimation ='kspin 1s ease-out 0s'; 
  setTimeout('wkspinload(' +job +',' +indx +')', 350);
  setTimeout('wkspinend(' +job +',' +indx +')', 1000);
  }
 }
function phewspin(job, indx) { // keys restores original for Palm fix
 if (phwk()) { wkspin(job, indx); return; }
 var ele =phi$(job,indx);
 if (ele) {
  ele.scnt =phewjobs[job].savwidth; 
  setTimeout('wkspinload(' +job +',' +indx +')', 350);
  setTimeout('phewspincnt(' +job +',' +indx +')',5);
  }
 }

function kaddDocListener(event, handler) {
 if (document.addEventListener) document.addEventListener(event, handler, true);
 else if (document.attachEvent) document.attachEvent("on" +event, handler);
 }
function kstopprop(evt) {
 evt =(evt) ?evt :event;
 if (evt &&evt.stopPropagation) evt.stopPropagation();
 }
function kkeydn(evt) { ph$('kguess').focus(); kclick(); kstopprop(evt); }
function kkeyall() {
 kaddDocListener('keydown', kkeydn);	// kaddDocListener('keyup', kstopprop);
// phaddWinListener('keydown', kstopprop); phaddWinListener('keyup', kstopprop);
 } 
// phaddWinListener('load', kkeyall);	// perApp

	// -- date --
function tstr2time(val) { var t =Math.floor(val/60); return (t>0) ?t +':' +Math.floor(val-t*60) :val;  }
function tdig2str(n) { var x ="0" +n.toString(); return (x.length==2) ?x :x.substr(1,2); }
function tdate2str(d) { return d.toDateString(); }
function tstr2date(s) { s =s.toString(); return new Date( s.substr(0,2), s.substr(2,2)-1, s.substr(4) ); }
function tchgdate(s, chg) { var t =tstr2date(s); t.setDate(t.getDate() +chg); return tdate2sys(t); }
function tdate2sys(d) { return d.getFullYear().toString().substr(2) +tdig2str(d.getMonth()+1) +tdig2str(d.getDate()); }
function twmm(mmm) {
 var months ="JanFebMarAprMayJunJulAugSepOctNovDec";
 return (parseInt(months.indexOf(mmm)/3) +1).toString();
 }
function tcode(fstr) { return (fstr) ?fstr.replace(new RegExp(/\'/g),'%27') :''; }	// escape
function tstrip(fstr) { return (fstr) ?fstr.replace(new RegExp(/(\r|\'|\")/g),'') :''; }
 
	// -------------- xxx2str & str2xxx --------------
function tobj2str(fobj) { 		// {output='prop1:"str1", prop2:"str2"]'
	var val, output='';
	if (fobj) {
		output='{ ';		// blank for zero length object
		for (var i in fobj) {
			val=fobj[i];
			switch (typeof val) {
			case ('object'):
				if (val[0]) output+=i +':' +tarray2str(val) +','; 
				else output+=i +':' +tobj2str(val) +','; 
				break;
			case ('string'):
				output +=i +":'" +val +"',";
				break;
			case ('number'):
				output+=i +':' +val +',';
				break;
			default:	// ignore functions attached to objects
				break;
			}	}
		output=output.substring(0, output.length-1) +'}';
		}
	return output;
	}
function tarray2str(farray) { 
	var val, output='';
	if (farray) {
		output='[ ';
		for (var i=0; i<farray.length; i++) {
			val =farray[i];
			switch (typeof val) {
			case ('object'):
				if (val[0]) output +=tarray2str(val) +','; 
				else output +=tobj2str(val) +','; 
				break;
			case ('string'):
				output +="'" +val +"',"; 
				break;
			default:
				output +=val +',';
			}	}
		output=output.substring(0, output.length-1) +']';
		}
	return output;
	}
				// fstring cannot have \r\n - unterminated string
function tstr2obj(fstring) { 
	if (typeof fstring=='string') eval("var result=" +fstring); else result=''; return result; }
function tstr2array(fstring) { 
	if (typeof fstring=='string') eval("var result=" +fstring); else result=''; return result; }

	// v5 list management
function phewrss(id, src, q) {
	var ele =ph$(id);
	ele.style.display =''; // long delay
	var job =-1;
	for (var i=0; i<phewjobs.length; i++) if (phewjobs[i].savid &&phewjobs[i].savid==id) job =i;
	if (job==-1) phewjobs[phewjobs.length] =ele;
	job =(job>-1) ?job+1 :phewjobs.length;
	phewjobs[job-1].savid =id;
	var opt =((src &&src!=undefined &&src.length>0) ?'rss=' +src +';' :'') 
	 +((q &&q!=undefined &&q.length>0) ?'rss=' +phgetq(q) +';' :'');
	opt += (ele.title &&ele.title.length>0) ?ele.title :ele.phewopts;
 	var url =phgetsrc(opt, job);
 	ele.innerHTML =phsh.l;
	if (phewjobs.length<=phew.src.max) phgetjson(url,job);
 	}
function kcode(fstr) { return (fstr) ?fstr.replace(new RegExp(/\ /g),'+') :''; }
function kuncode(fstr) { return (fstr) ?fstr.replace(new RegExp(/\+/g),' ') :''; }
function kshare(url) {
	var x =window.location.protocol +"//" +window.location.hostname 
		+window.location.pathname +"?k=" +kgmname;
	if (keys.save) return url +x
	  +'%26q=' +kcode(keys.save.q)		// twitter replaces 1st + with space
	  +((keys.save.u &&keys.save.u.length>0) ?'%26u=' +kcode(keys.save.u) :'') 
	  ;
	else return url +x; 
	}
function kfindkey(s) {
	if (s.length>0) for (var i=0; i<keys.list.length; i++) 
	 if (s==keys.list[i][0].toLowerCase()) return i;
	return 0;
 }
function kdellist() { if (keys.ulen &&keys.ulen>0) keys.list.splice(0,keys.ulen); keys.ulen =0; }
function kaddlist(ulist) {		// ulist is cleaned by kadd()
	var tq =(keys.query) ?keys.query :2; // ((keys.cheat &&keys.cheat==2) ?3 :2);
	kdellist(); 
	if (ulist &&ulist.length>0 &&ulist!="undefined") {
		keys.save.u =ulist;
		var koutA =new Array(); 
		var knew =keys.save.u.split(';');
		for (var i=0; i<knew.length; i++) {
		 var ktemp =['','','','',''];
		 if (keys.cheat) ktemp[keys.cheat] =" ";
		 if (knew[i].match(':')) {
			var x =knew[i].split(':'); 
			if (x[0].match('@')) {
			 var y =x[0].split('@'); 
			 ktemp[tq] =y[1]; x[0] =y[0];
			 }
			if (x[1].match('@')) {
			 var y =x[1].split('@'); 
			 ktemp[tq] =y[1]; x[1] =y[0];
			 }
			ktemp[0] =x[0]; ktemp[1] =x[1];
			}
		 else if (knew[i].match('@')) { 
			var x =knew[i].split('@'); 
			ktemp[0] =x[0]; ktemp[tq] =x[1]; ktemp[1] ='custom'; 
			}
		 else { ktemp[0] =knew[i]; ktemp[1] ='custom'; }
		 koutA.push(ktemp);
		 }
		keys.list =koutA.concat(keys.list);
		keys.ulen =knew.length;	
		}
	}
	// keyslib
function kdump(msg) { if (ph$('kdebug')) ph$('kdebug').innerHTML =msg; }
function kstrip(fstr) { return (fstr) ?fstr.replace(new RegExp(/(\/|\\|\'|\"|\-|\,|\.|\_|\&|\$|\*|\s)/g),'') :''; }
function kchoosekey() {
	var r =phrand(keys.list.length);
	if (keys.i &&r==keys.i) { r++; if (r>=keys.list.length) r =0; }
	keys.i =r;
	ph$('kobj').kquery =keys.list[r][0].toLowerCase();	// pass to phewguess
	return keys.i;
	}
function ksetobj() {
	var ele =ph$('kobj'), dele =ph$('kdict');
	phewguess(ele, ele.savaction);
	for (var i=0; i<ele.kquery.length; i++) 
	 if (ele.kquery.substr(i,1)==' ') {
		var iele =phi$(ele.phewjob, i);	
		iele.alt =keystate.white;
		phchange(ele.phewjob, i);
		}
	ele.kleft =kstrip(ele.kleft);				// no punctuation
	}
function knextclue() {
	ph$('kmain').style.background =keystate.sav;
	var q =keys.list[kchoosekey()][0];
	if (keys.query &&keys.list[keys.i][keys.query] &&keys.list[keys.i][keys.query].length>0)
	 q =keys.list[keys.i][keys.query];
	if (keys.mod &&!q.match('http:')) q =keys.mod +" " +q;	// v5.31
	ksetobj(); 

	if (ph$('ksearch') &&ph$('ksearch').style.display=='') 
	  if (q.match('http://')) phewrss('ksearch', '', q); else phewid('ksearch', '', q);
	if (ph$('kyahoor') &&ph$('kyahoor').style.display=='')
	  if (q.match('http://')) phewrss('kyahoor', '', q); else phewid('kyahoor', '', q);
	if (ph$('kbingr') &&ph$('kbingr').style.display=='')
	  if (q.match('http://')) phewrss('kbingr', '', q); else phewid('kbingr', '', q);
	ph$('kmean').innerHTML =unescape(keys.list[keys.i][1]);

	ph$('kguess').value ='guess'; ph$('kguess').style.color ="#e0e0e0"; ph$('kguess').blur();
	if (ph$('kdict') &&ph$('kdict').savTimer) clearInterval(ph$('kdict').savTimer);
	phinitclue();
	}
function kguess(st) {
	var x =kstrip( ph$('kguess').value.toLowerCase() );	// leading-trailing blanks
	keystate.sav =ph$('kmain').style.background;
	if (st==undefined &&x==kstrip( keys.list[keys.i][0].toLowerCase() )) { 
		if (ph$('ktimer').phtime>0) 
		 ph$('kcounter').phtime ++; 			// phright
		phshowtime(ph$('kcounter'));
		ph$('kmain').style.background =keystate.right;
		}
	else if (st==undefined &&x!='' &&x!='guess') 
		ph$('kmain').style.background =keystate.wrong;
	setTimeout('knextclue()', 200);
	}
function kenter(evt) {	//keydown
	evt =(evt) ?evt :event;
	// var target =(evt.target) ?evt.target :evt.srcElement;
	var charCode =(evt.charCode) ?evt.charCode :((evt.which) ?evt.which :evt.keyCode);
	if (charCode==13 ||charCode==3) { 
		kguess();
		if (evt.cancelBubble) evt.cancelBubble =true;
		return false;
		} 
	else return true;
	}
function kclick(evt) {	//click
	if (ph$('kguess').value=='guess') {
		ph$('kguess').style.color ='#000000';
		ph$('kguess').value ="";
		}
	return true;
	}
function krestart() {
	var ele =ph$('ktimer');
	if (ph$('ktimer')) {
	 var job =ele.phewjob, delay =1000;
	 if (ele.phtime<=0) ele.savtimer =setInterval( 'phtimer(' +job +')', delay );
	 phewid('ktimer');
	 ph$('kcounter').phright =0; ph$('kcounter').phtime =0;
	 phshowtime(ph$('kcounter'));
	 ele.phtime =keystate.timermax+1;
	 }
	ph$('kmain').style.background =keystate.run;
	}

kpack ="http://" +window.location.hostname +window.location.pathname +"?";
// kpackimg ="wt";
var keys =new Object();
keys.list =[['obama',''],['mccain','']];	// name, icon, image, set
keys.icon ="http://farm4.static.flickr.com/3109/3220607105_6c4785f4a4_o.jpg";

var keystate ={mid:0,
 win:"url(http://farm4.static.flickr.com/3366/3221456152_0285d0800c_o.jpg)",
 fail:"url(http://farm4.static.flickr.com/3128/3220607503_1ebe45ed23_o.jpg)",
 white:"http://farm3.static.flickr.com/2733/4300906690_223e2bf9dd_o.jpg",
 right:"url(http://farm4.static.flickr.com/3130/3220608381_cecb2d44b4_m.jpg)",
 wrong:"url(http://farm4.static.flickr.com/3307/3221456420_940243f24f_o.gif)",
 timermax:300, //via text
 gray:"url(http://farm5.static.flickr.com/4038/4384144710_b5a2b89d87_m.jpg)"};

function kstart() {				// phtoggle('kstart');phtoggle('kmain');krestart();kstart();
	if (window['keys'] &&keys.list &&keys.ready) {	
		if (ph$('kcounter')) ph$('kcounter').phtime =0; 
		if (ph$('ktimer')) ph$('ktimer').phtime =keystate.timermax+1;
		if (ph$('kguess')) kguess('y');
		}
	else setTimeout('kstart()', 1000);
	}
function kstartmatch() {
 if (ph$('kmatch')) {
	if (ph$('kstart')) phtoggle('kstart');
	kmatch(0);
	if (ph$('kmain')) phtoggle('kmain');
 	}
 }
function ksetspot() {
	if (keys.ready &&ph$('kname')) {	// palm, what if flickr slow? user reloads
		//if (ph$('kobj') &&!ph$('kobj').phewjob) {phewinit =false; phdispatch();}
		//if (ph$('kmatch') &&!ph$('kmatch').phewjob) {phewinit =false; phdispatch();}
		if (keys.name) ph$('kname').innerHTML =keys.name;
		 else ph$('kname').innerHTML =kgmname;
		if (keys.spot &&ph$('kspot')) ph$('kspot').src =keys.spot;
		if (keys.set &&ph$('kset')) {
			ph$('kset').title +="rss=" +keys.set +";";
			phewid('kset');
			}
		if (ph$('ksponsor') &&keys.sponsor) ph$('ksponsor').innerHTML =keys.sponsor;
		var out ="";
		if (ph$('klist') &&ph$('klist').parentNode.parentNode!=ph$('kmain'))
		 kmakelist(0);
		else if (ph$('klist')) {	// old list
		 for (var i=0; i<keys.list.length; i++) out +=unescape(keys.list[i][0]) +"&nbsp; ";
		 ph$('klist').innerHTML =out;
		 }
		if (keys.bg) {
			ph$('kmain').style.background ="url(" +keys.bg +")";
			keystate.run =ph$('kmain').style.background;
			}			// about
		if (keys.desc &&ph$('kdesc')) ph$('kdesc').innerHTML =keys.desc;
//		keystate.mid =0; 				// match game
		if (ph$('kmatch') &&!ph$('kstart')) kmatch(0);	// immediate start
		if (ph$('kguess') &&!ph$('kstart')) { krestart(); kstart(); }
		}
	else setTimeout('ksetspot()',1000);
	}
function kcheckdone() {	
	if (ph$('ktimer') &&ph$('ktimer').phtime<=0) {	
		ph$('knext').style.display ='';
		ph$('kmain').style.background =keystate.fail;
		}
	if (ph$('kcounter') &&ph$('kcounter').phtime==10) {
		ph$('kmain').style.background =keystate.win;
		}
	}
function keysinit() {
	kgmname =phgetval('k',location.search,'&'); 
	if (kgmname==undefined) kgmname ='free';
	if (keystate.game) kgmname =keystate.game.substr(3);
	if (!keys.ready) 			// preload on Palm
	 phgetjson("http://weebly.com/uploads/2/4/9/0/2490594/k" +kgmname +".js");
	keystate.run =(ph$('kmain')) ?ph$('kmain').style.background :keystate.gray
	if ((ph$('ktimer') ||keys.ready) &&!ph$('kmatch')) setInterval('kcheckdone()', 1000);
	setTimeout('ksetspot()', 1000);
	}
 phaddWinListener('load', keysinit);


function phshowclue() {
	var ele =ph$('kobj'), dele =ph$('kdict');
	 if (ele.kleft.length>0) {
		var r =phrand(ele.kleft.length), l =ele.kleft.substr(r,1);
		for (var i=0; i<ele.kquery.length; i++) 
		 if (ele.kquery.substr(i,1)==l) {
			var iele =phi$(ele.phewjob, i);	
			iele.alt =phchkimg(dele, parseInt(l.charCodeAt(0)-97));
			phchange(ele.phewjob, i);
			}
		ele.kleft =ele.kleft.replace(new RegExp(l,'g'),'');
		}
	else { kguess('y'); }
	}
function phinitclue() { ph$('kdict').savTimer =setInterval('phshowclue()',5000); }

	// match w/flick
function kpreload() {
 var out =''; var ele =ph$('kmatch');
 if (ph$('kpreload') &&ele.phew &&ele.phew.length>0) {
	for (var i=0; i<ele.phew.length; i++)
		out +='<img src="' +phchkimg(ele, i) +'">';
	ph$('kpreload').innerHTML =out;
	}
 }
function kmatch(d) {		// kinit, kthis(0), knext, kback
	ph$('kmain').style.background =keystate.run;
	if (d>0) keystate.mid +=1; else if(d<0) keystate.mid -=1; 
	if (keystate.mid<0) keystate.mid =keys.list.length-1;
	if (keystate.mid>=keys.list.length) keystate.mid =0;

	if (keys.list) {	// v5 bookmark
	 var q =unescape(keys.list[keystate.mid][0]); 
	 ksave(q); 
	 }
	 else var q ="fail to load"; 
	if (ph$('kterm')) ph$('kterm').innerHTML =q;
	if (ph$('kmean')) ph$('kmean').innerHTML =unescape(keys.list[keystate.mid][1]);

	if (keys.query &&keys.list[keystate.mid][keys.query] &&keys.list[keystate.mid][keys.query].length>0)
	 q =keys.list[keystate.mid][keys.query];
	if (keys.mod &&!q.match('http:')) q =keys.mod +" " +q;	// v5.31
	if (ph$('kmatch')) 	// v5
	 if (q.match('http://')) phewrss('kmatch', '', q); else phewid('kmatch', '', q);
	if (ph$('kpreload') &&ph$('kmatch')) setTimeout('kpreload()', 1000);
	}

function phmatchwin(job) {		// via phmatch - attr off
	var ele =phewjobs[job];
	if (!ele.phwin) ele.phwin =0;
	ele.phwin ++;
	if (ph$('kmain')) {
		if (ph$('knext')) ph$('knext').style.display ='';
		ph$('kmain').style.background =keystate.win;
		}
	}
function phpushchk(job) {		// slot push
	var ele =phewjobs[job];
	var x =ele.savc; 
	var win =true;
	for (var c=1; c<ele.savc; c++) win =(win &&phi$(job,ele.savc).src==phi$(job,x+c).src);
	if (win) { 
		ele.phwin ++; 
		ph$('kmain').style.background =keystate.win;
		// if (ph$("phscore")) phdropinit(ele);
		}
	else ele.phwrong ++;		// attr off
	// for (var i=0; i<ele.phcount; i++) phi$(job,i).parentNode.href =phi$(job,i).alt;
	}

	// next/back
function kend() {if (ph$('kmain')) ph$('kmain').style.webkitAnimation ='none';}
function kback() {
 document.body.scrollTop =0; 
 if (ph$('kmain')) {
	ph$('kmain').style.background =keystate.fail;		// ff, ie
	ph$('kmain').style.webkitAnimation ='kback 2s ease';
	setTimeout('kmatch(-1)',500);
	setTimeout('kend()',2000);
	}
 }
function knext() {
 document.body.scrollTop =0; 
 if (ph$('kmain')) {
	ph$('kmain').style.webkitAnimation ='knext 2s';
	setTimeout('kmatch(1)',500);
	setTimeout('kend()',2000);
	}
 }

	// flows - sync with keys.css
function kslidend(id) { ph$(id).style.webkitAnimation ="none"; }
function kslideclr() { 
 if (ph$('kset')) {
	kslidend('kset'); ph$("kset").style.top ="-600px"; }
 if (ph$('klist')) {
	kslidend('klist'); ph$("klist").style.left ="-600px"; }
// if (ph$('kmain')) ph$('kmain').style.opacity =1.0;	//v5.34
 }
function kholdr() {ph$("klist").style.left ="30px";}
function kslider(wh) { 			// cheats
 if (ph$('klist') &&ph$('klist').parentNode!=ph$('kmain')) 
if (phwk()) 
  if (ph$('klist').style.left.substr(0,1)=='-') {
	// kmakelist(wh);
	ph$('klist').style.webkitAnimation ="kslideright 1s ease-out 0s";
	ph$('klist').style.mozAnimation ="kslideright 1s ease-out 0s";
	setTimeout('kholdr()', 1000);
	}
  else { kslidend('klist'); ph$("klist").style.left ="-600px"; }
else kholdr();
 if (window.event) return kstopall(event); 
 }
function kholdup() {ph$("kset").style.top ="205px";}
function kslideup() { 			// sets
 if (ph$('kset') &&ph$('kset').parentNode!=ph$('knext')) 
if (phwk()) 
  if (ph$('kset').style.top.substr(0,1)=='-') {
	ph$('kset').style.webkitAnimation ="kslideup 1s ease-out 0s";
	ph$('kset').style.mozAnimation ="kslideup 1s ease-out 0s";
	setTimeout('kholdup()', 1000);
	}
  else { kslidend('kset'); ph$("kset").style.top ="-600px"; }
else kholdup();
 if (window.event) return kstopall(event); 
 }

	// show flows
function khide(kid) { if (ph$(kid)) phtoggle(kid); if (window.event) return kstopall(event); }
function kcell(row, col) { 
	if (!keys.list[row][col]) return ''; 		// excel sparse matrix
	return (col>=0 &&col<keys.list[0].length) ?unescape(keys.list[row][col]) :''; 
	}
function ksort(a,b) { 
 return (a[keys.cheat] &&b[keys.cheat] &&
	a[keys.cheat].toLowerCase()+a[0].toLowerCase()<b[keys.cheat].toLowerCase()+b[0].toLowerCase()
	) ?-1 :1; }
function kinslist(ele) { 				// .cat==array .cheat==c#
	var kcatcode=0, kcatnm=1, knm=0, ksortb=keys.cheat;
	keys.list.sort(ksort);
	var html ="", last ="", lastid =0;
	for (var i=0; i<keys.list.length; i++) {
		if (kcell(i,ksortb)!=last) {
		 if (last!='') html +='</div>';
		 var kh =(i>0 &&keys.list.length>40) ?'none' :'""';
		 last =kcell(i,ksortb); lastid++;
		 html +="<div class='klisthdr'"
			  +"onclick='khide(" +'"kdiv' +lastid +'"' +");'>"
			  +kcell(i,ksortb) +"</div>"	// use kcatnm

			  +"<div id=kdiv" +lastid +" style='display:" +kh +";'>";
			}
		var t ="klist" +i;
		html +="<div class='kcheat' onclick='kthis(" +i +");'"
	  +" onmouseover='this.style.opacity=0.5;' "
	  +" onmouseout='this.style.opacity=1.0;' "
	  +" ontouchstart='this.style.opacity=0.5;' "
	  +" ontouchend='this.style.opacity=1.0;' "
			+">" +kcell(i,knm) +"</div>";
		}
	ele.innerHTML =html +'</div>';
	}

function kmakelist(ulist) {	// init, kadd
 kmakesave(); 
 if (ph$('klist')) {
	if (ulist=='0') {
	 if (window['localStorage'] &&localStorage.getItem(kgmname)) {
	  var t =localStorage.getItem(kgmname).replace(new RegExp('undefined'), '');
	  keys.save =tstr2obj(t);
	  }
	 keys.save.acnt ++;

	 var kuser =phgetval('u',location.search,'&');
	 if (kuser &&keys.save.u.length==0) keys.save.u =unescape(kuncode(kuser));
	 if (ph$('kadd')) ph$('kadd').value =keys.save.u;
	 kaddlist(keys.save.u); 

	 var kuser =phgetval('q',location.search,'&');
	 if (kuser &&kuser.length>0) keys.save.q =unescape(kuncode(kuser));

	 var kuser =phgetval('mod',location.search,'&');
	 if (kuser &&kuser.length>0) keys.mod =unescape(kuncode(kuser)); // v5.31
	 }
	else {
	 keys.save.u =ulist;	// keystate.mid =0; via kthis(0);
	 kaddlist(keys.save.u); 
	 }

	if (keys.cat &&keys.cheat) kinslist(ph$("klist")); 
	else { 
	 var out ="";		// unsorted list
	 for (var i=0; i<keys.list.length; i++) 
	  out +="<div class=kcheat onclick='kthis(" +i +")'" 
	  +" onmouseover='this.style.opacity=0.5;' "
	  +" onmouseout='this.style.opacity=1.0;' "
	  +" ontouchstart='this.style.opacity=0.5;' "
	  +" ontouchend='this.style.opacity=1.0;' "
	  +">" +unescape(keys.list[i][0]) +"</div>";
	 ph$('klist').innerHTML =out; }
	keystate.mid =kfindkey(keys.save.q.toLowerCase());
	}
 }

function kmakesave() {
	if (!keys.save) 
	 keys.save ={ kname:kgmname, u:"", q:"", 
	 url:(window["kpack"]) ?kpack :"http://r.tearn.com/2010/10/pack.html?", 
	 iurl:(window["kpackimg"]) ?kpackimg :"wt",
	 acnt:0, scnt:0, fdate:tdate2sys(new Date()) };
 }
function ksave(q) {		// via kmatch, pack/kthis, not kguess
	kmakesave(); 
	keys.save.q =(q) ?q :"";
	keys.save.title =tstrip(keys.name);
	keys.save.scnt ++;
	keys.save.ldate =tdate2sys(new Date());
	if (window["kpack"]) keys.save.url =kpack;
	if (window["kpackimg"]) keys.save.iurl =kpackimg;
	keys.save.u =(keys.save.u) ?keys.save.u :"";
	if (window['localStorage']) 
	 try {localStorage.setItem(kgmname, tobj2str(keys.save));} catch(err) {kdump('bookmark blocked');}
if (window['localStorage'] &&window.location.href.match("ipad")) kdump(" saved:" +localStorage.getItem(kgmname));
 }

function kadd() {
	if (ph$('kadd')) {
	 var q =( ph$('kadd').value.toLowerCase() );
	 q =q.replace(new RegExp( /(, |; |,)/g),';');
	 q =q.replace(new RegExp( /(: | :)/g),':');
	 q =q.replace(new RegExp( /(@ | @)/g),'@');
	 if (q.toLowerCase()=="undefined") q ="";
	 ph$('kadd').value =q; ph$('kadd').blur();
	 kmakelist(q);		// add to top of list
	 kthis(0);		// select top most
	 } 
	}
function kaddenter(evt) { 
	evt =(evt) ?evt :event;
	var charCode =(evt.charCode) ?evt.charCode :((evt.which) ?evt.which :evt.keyCode);
	if (charCode==13 ||charCode==3) { 
		kadd();
		if (evt.cancelBubble) evt.cancelBubble =true;
		return false;
		} 
	else return true;
	}

function kthis(indx) {
 kslideclr(); document.body.scrollTop =0;
 if (ph$('kguess')) {
	ph$('kguess').value =keys.list[indx][0];
	kguess();
	}
 else if (ph$('kmatch')) {
 	ph$('kmain').style.webkitAnimation ='knext 2s';
 	keystate.mid =indx; 
	setTimeout('kmatch(0)',500);
 	setTimeout('kslidend("kmain")',2000);
	}
 else if (!window.location.href.match('about.html')) {
	keystate.mid =indx; 	// v5 - local copy for Palm
	ksave(keys.list[indx][0]); 
	var x ="http://r.tearn.com/2010/06/show.html?k=" +kgmname;
	if (window.location.href.match("the.")) x =x.replace(new RegExp('r.'), 'the.'); 
	if (window.location.href.match("/04/")) x =x.replace(new RegExp('/06/'), '/04/'); 
	if (window.location.href.match("/03/")) x =x.replace(new RegExp('/06/'), '/04/'); 
	if (window.location.href.match("/02/")) x =x.replace(new RegExp('/06/'), '/02/'); 
	window.location.href =x; 
	}
 if (window.event) return kstopall(event); 
 }

 var tdb ={x:0,y:0,n:0};
 var startx=0, starty=0, touchn=0, xx='';
function ktouch1(evt) {		// pull selector
 if (evt &&evt.changedTouches) {
	startx =evt.changedTouches[0].pageX, starty =evt.changedTouches[0].pageY;
	return false;
	}
 }
function kdragold(evt) {
 if (evt &&evt.changedTouches) {
	if (evt.changedTouches.length>touchn) touchn =evt.changedTouches.length;
	return false;
	}
 }
function kdrag(evt) {
 if (evt &&evt.changedTouches) {
	var last =evt.changedTouches.length-1;
	var endx =evt.changedTouches[last].pageX, endy =evt.changedTouches[last].pageY;
	var delx =endx-startx, dely =endy-starty;
	if (Math.abs(dely)<20) { 
		if (delx>50) kslider(1); else if (-delx>50) kslideup(); 
		evt.preventDefault(); 
		}
	touchn =0; xx ="";
	return false;
	}
 }

function ktouch(evt) {
 // if (ph$('kmain')) ph$('kmain').style.opacity =0.5;
 if (evt &&evt.changedTouches) {
	startx =evt.changedTouches[0].pageX, starty =evt.changedTouches[0].pageY;
	return false;
	}
 }
function kflick(evt) {
 if (evt &&evt.changedTouches &&startx>0) {
	var last =evt.changedTouches.length-1;
	touchn =(touchn>last) ?touchn :last;
	var endx =evt.changedTouches[last].pageX, endy =evt.changedTouches[last].pageY;
	var delx =endx-startx, dely =endy-starty;
	if (Math.abs(dely)<20 &&Math.abs(delx)>50) if (touchn==0) {
	 if (delx>50) kback(); else knext(); 
	 evt.preventDefault(); 
//	 kflickop =1.0; if (ph$('kmain')) ph$('kmain').style.opacity =kflickop;
	 startx =0;
	 }
	else { 
	 if (delx>50) kslider(1); else kslideup(); 
	 evt.preventDefault(); 
	 touchn =0; return true;
	 }
	return false;
	}
 }
function kflickend(evt) {
// if (ph$('kmain')) ph$('kmain').style.opacity =1.0;
 startx =0, starty =0;
 }

function kstop(evt) {
 evt =(evt) ?evt :event;
 if (evt &&evt.stopPropagation) evt.stopPropagation();
 return true;
 }
function kstopdef(evt) {
 evt =(evt) ?evt :event;
 if (evt &&evt.preventDefault) evt.preventDefault();
 return true;
 }
function kstopall(evt) { kstopdef(evt); return kstop(evt); }

 var kflickop =1.0;	// mouse swipe
function kmdown(evt) {
	if (evt &&evt.pageX &&ph$('kmain')) {
		startx =evt.pageX, starty =evt.pageY;
		kflickop -=0.05;
		ph$('kmain').style.opacity =kflickop;
		}
	return false;
	}
function kmmove(evt) {
 if (evt &&evt.pageX &&ph$('kmain') &&startx>0) {
	if (kflickop>0) kflickop -=0.01;
	ph$('kmain').style.opacity =kflickop;

	var endx =evt.pageX, endy =evt.pageY;
	var delx =endx-startx, dely =endy-starty;
	if (Math.abs(dely)<20 &&Math.abs(delx)>50) {
		if (delx>50) kback(); else if (-delx>50) knext(); 
		evt.preventDefault();
		kflickop =1.0; if (ph$('kmain')) ph$('kmain').style.opacity =kflickop;
		startx =0;
		}
	}
 return false;
 }
function kmup(evt) {
 kflickop =1.0; ph$('kmain').style.opacity =kflickop;
 startx =0, starty =0;
 return false;
 }


