if(!user){var user={getLang:function(){return"en"}}}Array.implement({shuffle:function(){for(var b,a,c=this.length;c;b=parseInt(Math.random()*c),a=this[--c],this[c]=this[b],this[b]=a){}return this}});String.prototype.isaKanji=function(){return !!this.match(/^[\u4E00-\u9FAF]$/)};String.prototype.isKanji=function(){return !!this.match(/^[\u4E00-\u9FAF]+$/)};String.prototype.isHiragana=function(){return !!this.match(/^[\u3040-\u3096]+$/)};String.prototype.isKatakana=function(){return !!this.match(/^[\u30A1-\u30FE]+$/)};String.prototype.isKana=function(){return !!this.match(/^[\u3040-\u3096|\u30A1-\u30FE|\uFF66-\uFF9D|\u31F0-\u31FF]+$/)};String.prototype.isKanjiKana=function(){return !!this.match(/^[\u4E00-\u9FAF|\u3040-\u3096|\u30A1-\u30FE|\uFF66-\uFF9D|\u31F0-\u31FF]+$/)};String.prototype.getKanjis=function(){var b=[];for(var a=0;a<this.length;a++){if(this[a].isaKanji()){b.push(this[a])}}return b};function getStyleClass(a){for(var b=0;b<document.styleSheets.length;b++){if(document.styleSheets[b].rules){for(var c=0;c<document.styleSheets[b].rules.length;c++){if(document.styleSheets[b].rules[c].selectorText==a){return document.styleSheets[b].rules[c]}}}else{if(document.styleSheets[b].cssRules){for(var c=0;c<document.styleSheets[b].cssRules.length;c++){if(document.styleSheets[b].cssRules[c].selectorText==a){return document.styleSheets[b].cssRules[c]}}}}}return null}NaviTabs=new Class({Implements:[Options],options:{origTab:null},origTab:null,history:[],initialize:function(a){this.setOptions(a);this.origTab=isEmpty($(this.options.origTab))?$$("div.content.active").get("id")[0].split("Content")[0]:this.options.origTab;this.history.push(this.origTab);var b=this;$$("a.tab").addEvent("click",function(c){c.stop();if(!this.hasClass("active")){b.history.push($$("div.content.active").get("id")[0].split("Content")[0]);b.showTab(this.get("id").split("Button")[0]);menuBar&&menuBar.hideAll()}else{b.showLastTab();menuBar&&menuBar.hideAll()}});$$("a.tab").addEvents({mousedown:function(c){this.addClass("down")},mouseup:function(c){this.removeClass("down")}})},showTabNow:function(a){$$("a.tab").removeClass("active");$(a+"Button")&&$(a+"Button").addClass("active");$$("div.content").removeClass("active");$(a+"Content").addClass("active")},showTab:function(a,b){if(b==null){b=false}if(b){$("content").get("tween").start("opacity",0).chain(function(){this.showTabNow(a);$("content").fade("1")})}else{this.showTabNow(a)}},showLastTab:function(){this.showTabNow(this.history.pop()||this.origTab);this.history.length||this.history.push(this.origTab)},showFirstTab:function(){this.showTabNow(this.origTab);this.history=[this.origTab]}});MenuBar=new Class({initialize:function(){$$("#menuBar .submenu").each(function(e){var b=e.getLast("a.button");if(!b||(!b.getPrevious("ol.items")&&!b.getNext("ol.items"))){return}var c=b.getPrevious("ol.items");if(!c){b.getNext("ol.items")}c.getChildren("li.item a").addEvent("click",function(){this.hideAll()}.bind(this));b.addEvent("click",function(f){f.stop();var a=c.getStyle("display")=="none"?true:false;this.hideAll();a&&c.setStyle("display","block").addClass("active")}.bind(this))}.bind(this))},hideAll:function(){$$("ol.items").setStyle("display","none").removeClass("active")}});function createLocalStorage(){try{if(typeof(localStorage)=="undefined"){if(typeof(globalStorage)=="undefined"){window.localStorage=new localSQLStorage({},{dataReady:function(){dbug.log("localSQLStorage is supported");window.fireEvent("localStorageReady")},error:function(b){window.localStorage=new localMemStorage();window.fireEvent("localStorageReady")}})}else{window.localStorage=globalStorage[location.hostname];window.fireEvent("localStorageReady")}}else{window.fireEvent("localStorageReady")}}catch(a){window.localStorage=new localSQLStorage({},{dataReady:function(){dbug.log("localSQLStorage is supported");window.fireEvent("localStorageReady")},error:function(b){window.localStorage=new localMemStorage();window.fireEvent("localStorageReady")}})}}localMemStorage=new Class({Implements:[Options,Events],options:{},db:null,length:0,initialize:function(a,b){this.setOptions(a);this.addEvents(b);this.db=new Hash({})},getItem:function(a){if(a==null){return}return this.db.get("key")},setItem:function(a,b){if(a==null||b==null){return}this.db.set(a,vallue);this.length=this.db.getLength()},clear:function(){this.db.empty();this.length=0},removeItem:function(a){if(a==null){return}this.db.erase(a);this.length=this.db.getLength()},key:function(a){var b=this.db.getKeys();return b[a]}});lsqlKVCache=new Hash({});localSQLStorage=new Class({Implements:[Options,Events],options:{name:"kvStorage",displayName:"Key-Value Pair Storage",maxSize:4096},db:null,initialize:function(a,b){this.setOptions(a);this.addEvents(b);try{if(!window.openDatabase){dbug.log("HTML5 DB not supported");this.fireEvent("error","Unsupported");return}else{if(isEmpty(openDatabase(this.options.name+"check","1.0",this.options.displayName+" verification",56))){dbug.log("HTML5 DB not supported");this.fireEvent("error","Unsupported");return}else{this.db=openDatabase(this.options.name,"1.0",this.options.displayName,this.options.maxSize)}}}catch(c){if(c==2){this.fireEvent("error","Invalid database version")}else{this.fireEvent("error","Unknown error "+c+".")}this.db=db;return}window.addEvent("KVtablesCreated",function(){dbug.log("tables created");this.cacheData()}.bind(this));window.addEvent("KVtableCreateFailed",function(f){dbug.log("table creation failed: "+f.message)});this.addEvent("dataReady",function(){dbug.log("the data appears to be ready ........")});this.createTables()},loadData:function(c,b){dbug.log("loading data");for(var a=0;a<b.rows.length;a++){var e=b.rows.item(a);lsqlKVCache[e.key]=e.value}window.fireEvent("kvDataLoaded")},cacheData:function(){dbug.log("Pulling data from the SQL storage into memory...");this.kvCache=new Hash({});window.addEvent("kvDataLoaded",function(){dbug.log("caught kvDataLoaded event");this.kvCache=lsqlKVCache;lsqlKVCache=new Hash({});this.fireEvent("dataReady")}.bind(this));this.db.transaction(function(a){a.executeSql("SELECT KEY,VALUE from key_value;",[],this.loadData,this.errorHandler)}.bind(this),this.transactionErrorHandler)},nullDataHandler:function(){dbug.log("Query Error: null data")},transactionErrorHandler:function(a){dbug.log("Transaction Error: "+a.message+" (Code "+a.code+")")},errorHandler:function(a){dbug.log("Query Error: "+a.message+" (Code "+a.code+")")},KVtableCreateFailed:function(a){window.fireEvent("KVtableCreateFailed",a)},createTables:function(){this.db.transaction(function(a){a.executeSql("CREATE TABLE IF NOT EXISTS key_value(key TEXT NOT NULL PRIMARY KEY, value TEXT NOT NULL);",[],window.fireEvent("KVtablesCreated"),function(){return false})}.bind(this),this.KVtableCreateFailed)},getItem:function(a){if(this.kvCache==null){this.kvCache=new Hash({})}return this.kvCache[a]},setItem:function(a,b){if(a==null||b==null){return}if(this.kvCache==null){this.kvCache=new Hash({})}this.kvCache[a]=b;this.db.transaction(function(c){c.executeSql("INSERT INTO key_value (key, value) VALUES (?,?);",[a,b])},function(c){this.db.transaction(function(e){e.executeSql("UPDATE key_value SET value=? WHERE key=?",[b,a])},this.errorHandler)}.bind(this))},clear:function(){if(this.kvCache==null){this.kvCache=new Hash({})}else{this.kvCache.empty()}this.db.transaction(function(a){a.executeSql("DELETE FROM key_value",[])}.bind(this))},removeItem:function(a){if(a==null){return}if(this.kvCache==null){this.kvCache=new Hash({})}else{this.kvCache.erase(a)}this.db.transaction(function(b){b.executeSql("DELETE from key_value where key=?;",[a],this.getOne,this.errorHandler)}.bind(this))}});var User=new Class({Implements:[Options,Events],options:{lang:"en"},initialize:function(a){this.setOptions(a)},getLang:function(){return this.options.lang}});var Notify=new Class({Implements:[Options,Events],options:{delay:2,position:{position:"topCenter",edge:"topCenter"},"class":"short",max:5},notificOps:{msg:null,"class":"short",delay:2},notifics:[],actives:[],msgs:[],hclass:"c",initialize:function(a){this.options.bestClass=function(c,b){if(!b){return this.options["class"]}return b}.bind(this);this.setOptions(a);this.notificOps.delay=this.options.delay;this.notificOps["class"]=this.options["class"];if(this.options.position.position.toLowerCase().indexOf("bottom")!=-1){this.nextPos="topCenter";this.nextEdge="bottomCenter"}if(this.options.position.position.toLowerCase().indexOf("left")!=-1){this.hclass="l"}if(this.options.position.position.toLowerCase().indexOf("right")!=-1){this.hclass="r"}this.uid=Math.floor(Math.random()*1000000000).toString(16);this.initNotifics();$$("body")[0].adopt(this.notifics);this.position(0)},nextPos:"bottomCenter",nextEdge:"topCenter",position:function(a){if(a==0){this.notifics[0].position(this.options.position);this.notifics[0].setStyle("position","fixed");a++}for(var b=a;b<this.options.max;b++){this.notifics[b].position({position:this.nextPos,edge:this.nextEdge,relativeTo:this.notifics[b-1]});this.notifics[b].setStyle("position","fixed")}},initNotifics:function(){var a=this;for(var b=0;b<this.options.max;b++){var c=new Element("div",{id:"notific-"+a.uid+"-"+b,"class":"notific",html:'<div class="inner"></div>'});c.store("shower",new Fx.Tween($(c),{onStart:function(){var f=this.element;var e=f.retrieve("ops");a.msgs.push(e.msg);if(a.options["class"]!=e["class"]){a.position(f.retrieve("index"))}f.getElement("div.inner").set("html",e.msg);f.addClass("active");f.setStyle("z-index","100")},onComplete:function(){var e=this.element;(function(){e.hide()}).delay(e.retrieve("ops").delay*1000)}}));c.store("hider",new Fx.Tween($(c),{onComplete:function(){var f=this.element;var e=f.retrieve("ops");f.setStyle("z-index","-1");if(e["class"]!=a.options["class"]){f.removeClass(e["class"]).addClass(a.options["class"]);a.position(f.retrieve("index")+1)}a.actives[f.retrieve("index")]=false;a.msgs.erase(e.msg)}}));c.show=function(){this.retrieve("shower").start("opacity",1)};c.hide=function(){this.retrieve("hider").start("opacity",0)};c.addClass(this.options["class"]).addClass(this.hclass);c.setStyle("z-index",-1);c.setStyle("visibility","hidden");c.store("index",b);this.notifics[b]=c;this.actives[b]=false}},show:function(e,b){b=(typeof b=="object")?$merge(this.notificOps,b,{msg:e}):$merge(this.notificOps,{msg:e});if(this.msgs.contains(b.msg)){return this}var c=null;for(var a=0;a<this.options.max;a++){if(!this.actives[a]){c=this.notifics[a];this.actives[a]=true;break}}if(!c){return(function(){this.show(b.msg,b)}).bind(this).delay(b.delay*1010)}b["class"]=this.options.bestClass(b.msg,b["class"]);if(b["class"]!=this.options["class"]){c.removeClass(this.options["class"]).addClass(b["class"])}if((b.error!=null&&b.error==true)||b.msg.contains("error")){$(c).addClass("error")}else{$(c).removeClass("error")}c.store("ops",b);c.show();return this},showError:function(b,a){a=(typeof a=="object")?$merge(this.notificOps,a,{error:true}):$merge(this.notificOps,{error:true});this.show(b,a)},notify:function(b,a){this.show(b,a)}});NetConnection=new Class({Implements:[Options,Events],options:{connected:true,wait:120,minWait:30,maxWait:720,inc:60,dec:120,url:"/crm/ping"},timer:null,lastStatus:false,consistant:false,cntChanges:0,initialize:function(a){this.setOptions(a);this.check();this.start()},isAvailable:function(){return this.options.connected},setAvailable:function(a){if(a==true){this.options.connected=true;this.fireEvent("update","connected")}else{this.options.connected=false;this.fireEvent("update","disconnected")}},start:function(){this.timer=this.check.periodical(this.options.wait*1000,this)},stop:function(){$clear(this.timer)},newWait:function(a){if(isEmpty(a)){return}dbug.log("NetConnection::newWait("+a+")");this.stop();this.options.wait=(a).limit(this.options.minWait,this.options.maxWait);this.start()},updateConsistency:function(b,a){if(b==a){this.cntChanges=(this.cntChanges-1).limit(0,9)}else{this.cntChanges=(this.cntChanges+1).limit(0,9)}this.consistant=this.cntChanges>=2?false:true;return this.consistant},adjustWait:function(b,a){if(this.updateConsistency(b,a)){this.newWait(this.options.wait+this.options.inc)}else{this.newWait(this.options.wait-this.options.dec)}},updateStatus:function(a){this.adjustWait(this.lastStatus,a);this.lastStatus=a;this.setAvailable(a)},check:function(){this.req=new Request({url:this.options.url+"?wait="+this.options.wait,method:"get",onSuccess:function(){this.updateStatus(true)}.bind(this),onException:function(){this.updateStatus(false)}.bind(this),onFailure:function(){this.updateStatus(false)}.bind(this),onCancel:function(){this.updateStatus(false)}.bind(this)});this.setAvailable(false);this.req.send()}});var netConnection=new NetConnection();ScoreCard=new Class({Implements:[Options,Events],options:{},scores:null,uploading:false,initialize:function(a){this.setOptions(a);this.loadCards()},isEmpty:function(){if(this.scores==null||this.scores.getLength()<=0){return true}return false},empty:function(){this.scores.empty();this.storeCards()},upload:function(){if(!this.isEmpty()){this.getCards().each(function(b,a){var c=a+"?";$H(b).getKeys().each(function(e){var f=$H(b[e]);if(f.has("correct")){c+="scores["+e+"][correct]="+f.correct+"&"}if(f.has("incorrect")){c+="scores["+e+"][incorrect]="+f.incorrect+"&"}});new Request({onSuccess:function(){this[0].removeCard(this[1])}.bind(new Array(this,a))}).get(c)}.bind(this))}else{}},parseScoreString:function(a){phaseThree=a.split("=");if(phaseThree[0].length<=0||phaseThree[1].length<=0){return null}var e=phaseThree[1].toInt();var b=phaseThree[0].contains("incorrect")?"incorrect":"correct";var c=phaseThree[0].substring(7,phaseThree[0].indexOf("]["));return new Array(c,b,e)},loadCards:function(){try{var b=new Hash(JSON.decode(localStorage.getItem("ScoreCards")))}catch(a){dbug.log("local storage is not supported:"+a);return}this.scores=b},removeCard:function(a){if(a==null){return}this.scores.erase(a);this.storeCards()},getCards:function(){return this.scores},getCard:function(a){if(a==null){return}if(this.scores==null){return new Hash({})}if(this.scores[a]==null){return new Hash({})}return this.scores[a]},storeCards:function(){if(this.scores==null){return}try{localStorage.setItem("ScoreCards",JSON.encode(this.scores))}catch(a){dbug.log("localStorage is not supported..."+a)}},storeCard:function(b,a){if(b==null||a==null){return}if(this.scores==null){this.scores=new Hash({})}this.scores[b]=a;this.storeCards()},add:function(c){if(c==null){return}var b=c.split("?");var a=b[0];var e=this.getCard(a);b[1].split("&").each(function(f){var g=this.parseScoreString(f);if(g!=null){if(e[g[0]]!=null){if(e[g[0]][g[1]]!=null){e[g[0]][g[1]]=e[g[0]][g[1]].toInt()+g[2]}else{e[g[0]][g[1]]=g[2]}}else{e[g[0]]=new Hash({});e[g[0]][g[1]]=g[2]}}},this);this.storeCard(a,e);if(netConnection.isAvailable()){new Request({onSuccess:function(){this.upload()}.bind(this)}).get(a)}},debug:function(a){dbug.log("storage is :"+JSON.encode(a))}});G1YA=new Class({Implements:[Options,Events],options:{lang:"ja",update:"extraCards",extraCardsClose:function(){new Fx.Scroll(window,{onComplete:function(){new Fx.Tween($("extraCards"),{onComplete:function(){$("extraCards").empty();$("extraCards").setStyle("opacity",1)}}).start("opacity",0)}}).toTop()},extraCardsResorted:$empty(),extraCardsNoCards:$empty()},initialize:function(a){this.setOptions(a)},showNoData:function(){$(this.options.update).set("html","");notifyC.showError("No appropriate data found",{"class":"short"});this.options.extraCardsClose();this.options.extraCardsNoCards()},executeView:function(a){$(this.options.update).empty().adopt(this.getControls()).adopt(this.getCardElem()).adopt(this.getPagerElem());this.domready(a)},verifyDBdata:function(a){if(this.db==null){notify.showError("Local database not available");return false}if(this.db==null||this.db.get(a)==null||this.db.get(a).compounds==null){this.showNoData();return false}return true},vocabHatsuon:function(a){if(!this.verifyDBdata(a)){return}this.module="vocab";this.action="hatsuon";var b=[];$each(this.db.get(a).compounds,function(c,e){b.push({k:e,p:c.h,m:c.i,l:c.l})}.bind(this));this.executeView(b)},getCardElem:function(){return new Element("div",{"class":"card",html:'<div class="dropshadow"><div class="inner"><div class="controls"><a href="#" class="fontDown">'+_("Font")+'&dArr;</a> | <a href="#" class="fontUp">'+_("Font")+'&uArr;</a> | <a href="#" class="flip d3">'+_("Meaning")+'</a> | <a href="#" accesskey="f" class="flip d2">'+_("Pronunciation")+'</a></div><div class="front"><h2></h2><span class="level"> </span> <a class="perma" href="">link</a></div><div class="back"><h2></h2><div class="controls"><a href="#"  accesskey="i" class="incorrect">'+_("Incorrect")+'</a> <a href="#" accesskey="c" class="correct">'+_("Correct")+"</a></div></div></div></div>"})},getControls:function(){var e=new Element("select",{"class":"resort",onChange:"extraCards.resort($(this).get('value'))",html:'<option value="sort" selected="true">sort</option><option value="shuffle">shuffle</option><option value="incorrect">incorrect</option><option value="correct">correct</option><option value="unseen">unseen</option><option value="seen">seen</option><option value="reset">reset</option>'});var c=new Element("div",{"class":"controls",html:'<a href="#" class="dismiss">&nbsp;</a>'});return[e,c]},getEJCardElem:function(a){return new Element("div",{"class":"card",answer:a.answer,kanji:a.kanji,html:'<div class="dropshadow"><div class="inner"><div class="controls"><a href="#" class="fontDown">Font&dArr;</a> | <a href="#" class="fontUp">Font&uArr;</a> | <a href="#" class="furigana">'+a.hintLink+'</a> | <a href="#" class="flip">Back</a></div><div class="front"><h3>'+a.question+'</h3></div><div class="back"><ruby><rb><h2>'+a.answer+"</h2></rb><rt>"+a.hint+'</rt></ruby><div class="level">'+a.level+'</div><div class="push"></div><div class="controls"><a href="#" class="incorrect">Incorrect</a> <a href="#" class="correct">Correct</a></div></div></div></div>'})},kanjiHatsuon:function(c){var b=c.getKanjis();if(!b.length){notify.showError("No kanjis found in query")}this.module="kanji";this.action="hatsuon";var e=[];for(var a=0;a<b.length;a++){this.db.get(b[a])&&$each(this.db.get(b[a]).card,function(g,f){if(typeof g.u=="undefined"){g.u=""}e.push({k:f,p:g.h,m:g.i,l:g.l,u:g.u})}.bind(this))}this.executeView(e)},kanjiMeaning:function(c){var b=c.getKanjis();if(!b.length){notify.showError("No kanjis found in query")}this.module="kanji";this.action="meaning";var e=[];for(var a=0;a<b.length;a++){this.db.get(b[a])&&$each(this.db.get(b[a]).card,function(g,f){if(typeof g.u=="undefined"){g.u=""}e.push({k:f,p:g.h,m:g.i,l:g.l,u:g.u})}.bind(this))}this.executeView(e)},vocabEJ:function(a){if(!this.verifyDBdata(a)){return}this.module="vocab";this.action="ej";var b=[];$each(this.db.get(a).compounds,function(c,e){b.push({k:e,p:c.h,m:c.i,l:c.l})}.bind(this));this.executeView(b)},vocabJE:function(a){dbug.log("vocabJE("+a+")");if(!this.verifyDBdata(a)){return}this.module="vocab";this.action="je";var b=[];$each(this.db.get(a).compounds,function(c,e){b.push({k:e,p:c.h,m:c.i,l:c.l})}.bind(this));this.executeView(b)},kanjiSimilarWmeaning:function(a){if(!this.verifyDBdata(a)){return}this.module="kanji";this.action="similar";var b=[];$each(this.db.get(a).similars,function(c,e){b.push({k:e,p:c.h,m:c.i,l:c.l})}.bind(this));if(!b.length){notifyC.showError("No appropriate data found",{"class":"short"});return}this.executeView(b)},kanjiSimilarWhatsuon:function(a){if(!this.verifyDBdata(a)){return}this.module="kanji";this.action="similar";var b=[];$each(this.db.get(a).similars,function(c,e){b.push({k:e,p:c.h,m:c.i,l:c.l})}.bind(this));if(!b.length){notifyC.showError("No appropriate data found",{"class":"short"});return}this.executeView(b)},getPagerElem:function(){return new Element("div",{"class":"pager",html:'<a class="prev" href="#"> &lt; prev</a>  <div class="info"></div> <a class="next" href="#">next &gt;</a>'})},populateDB:function(a){dbug.log("G1YA.populateDB(data)");this.db=new Hash(a)},exportDB:function(){return JSON.encode(this.db)},importDB:function(a){this.db=new Hash(JSON.decode(a))},domready:function(e){var b=this.action=="ej"?["m","p","k"]:["k","p","m"];var c=this.module=="vocab"?{p:"/vocab/hatsuon",m:"/vocab/JE",k:"/vocab/EJ"}:{p:"/kanji/hatsuon",m:"/kanji/meaning"};var a=this;extraCards=new FlashCards(e,{element:$("extraCards"),baseURL:this.module+"/"+this.action,extraURLs:null,baseURLs:c,dimensions:b,labels:{k:_("Kanji"),p:_("Pronunciation"),m:_("Meaning")}},{close:function(){a.options.extraCardsClose()},resorted:function(){a.options.extraCardsResorted()},noCards:function(){a.options.extraCardsNoCards()}})}});var GIYA=new G1YA();GIYA.Request=new Class({Extends:Request.HTML,Implements:[Options,Events],options:{lang:"ja",update:"extraCards",onRequest:$empty,onComplete:$empty,onSuccess:$empty},initialize:function(a){if(session.offline!=true){return this.parent(a)}this.setOptions(a)},get:function(a){if(session.offline!=true){return this.parent(a)}this.fireEvent("request");var c=this.getRouting(a);try{GIYA[c.module+c.action](c.params.kanji);this.fireEvent("complete")}catch(b){notify.showError("Failed to load cards");dbug.log("call to non-existant GIYA action: "+c.module+c.action)}this.fireEvent("success")},getRouting:function(a){var f=a.split("?");var e=ucfirst(f[0].substring(f[0].lastIndexOf("/")+1,f[0].length));var b=f[0].substring(0,f[0].lastIndexOf("/"));b=b.substring(b.lastIndexOf("/")+1,b.length);var c=f[1].substring(f[1].indexOf("filters[kanji]="),f[1].length);c=c.substring(c.indexOf("=")+1,c.length);if(c.contains("&")){c=c.substring(0,kanjiIndexOf("&"))}c=decodeURIComponent(c);return{action:e,module:b,params:{kanji:c}}}});var CardHolder=new Class({Implements:[Options,Events],options:{deck:"-en-kanji-hatsuon",reset:false},initialize:function(b){this.setOptions(b);this.options.deck=this.options.deck.replace(/[_\.\/]/g,"-").camelCase();try{var f=localStorage.getItem(this.options.deck);if(f==null||this.options.reset){dbug.log("cards storage is empty, or reset requested; saving: "+this.options.deck);f=$("cards").get("html");localStorage.setItem(this.options.deck,f)}else{dbug.log("loading cards from storage: "+this.options.deck);$("cards").set("html",f)}var a=localStorage.getItem(this.options.deck+"-GIYA");if(a==null){a=GIYA.exportDB();localStorage.setItem(this.options.deck+"-GIYA",a)}else{GIYA.importDB(a)}}catch(c){dbug.log("localStorage is not supported");dbug.log(c)}},getDeck:function(){try{return localStorage.getItem(this.options.deck)}catch(a){dbug.log("localStorage is not supported");dbug.log(a)}},clear:function(){dbug.log("CardHolder clearing "+this.options.deck+" and "+this.options.deck+"-GIYA");try{localStorage.removeItem(this.options.deck);localStorage.removeItem(this.options.deck+"-GIYA")}catch(a){dbug.log("localStorage is not supported");dbug.log(a)}}});function hideURLbar(){window.scrollTo(0,1)}function resetLocalData(){dbug.log("resetLocalData()");try{cardHolder.clear()}catch(a){dbug.log("couldn't clear the local cardHolder"+a)}try{window.applicationCache.update();window.applicationCache.swapCache()}catch(a){dbug.log("resetLocalData failed");dbug.log(a)}}FlashCards=new Class({Implements:[Options,Events],options:{element:"FlashCards",baseURL:"/kanji/hatsuon",dimensions:["k","p","m"],baseURLs:{p:"/kanji/hatsuon",m:"/kanji/meaning"},labels:{k:_("Kanji"),p:_("Pronunciation"),m:_("Meaning")},queueEnabled:true,extraURLs:{},autoScroll:true},currCardNum:0,flipLinks:{},store:[],count:0,correct:0,incorrect:0,frLaPad:[],toElement:function(){return $(this.options.element)},initialize:function(c,a,b){this.setOptions(a);this.addEvents(b);this.normalizeOptions();$(this).store("FlashCards",this);this.setElements();try{this.setupStore(c)}catch(f){return}this.createCards();this.labels=this.options.labels;this.setPagerLoc();this.addSpinner();$each(this.options.dimensions,function(g,e){if(!g){return}this.setFontDimensionProperty(g,e);this.setFrontLabelPadding(g);this.makeGetter(g)}.bind(this));this.addControlEvents();this.addAnswerEvents();this.addEOLEvents();this.setSaveFreq();this.showFirst();notify.show("<h4>Answers will be saved after every <em>"+this.getSaveFreq()+" "+_p("card","cards",this.getSaveFreq())+" </em></h4>",{"class":"short"})},active:function(){return this.store[this.currCardNum]},getCard:function(a){if(typeof a=="undefined"){a=this.currCardNum}return this.store[a]},flipOrChange:function(a){a==this.active().getD()?this.flip():this.changeD(a)},changeD:function(a){if(!a){return}this.flipLinks[this.active().getD()].set("html",this.labels[this.active().getD()]);this.active().changeDimension(this.options.dimensions[1],a,{back:this.backM});this.active().getDState().d?this.disableCard():this.enableCard();this.flip("back")},nextDOrSecond:function(){d=this.active().nextD();if(d==this.options.dimensions[1]){d=this.options.dimensions[2]}this.changeD(d)},show:function(a){this.getCard().activate(this.options.dimensions[1],this.active().getD(),{front:this.frontM,back:this.backM,level:this.levelEle,url:this.linkEle});this.active().getDState().d?this.disableCard():this.enableCard();this.resetFlipLinks();if(this.active().getSide()=="back"){this.activeFlipLink().set("html",_("Front")+this.frLaPad[this.active().getD()])}this.flip(this.active().getSide());this.active().state.seen++},setupStore:function(a){if(a){this.store=a}this.count=this.store.length;if(!this.count){$(this).set("html","");this.fireEvent("noCards");throw"No Data"}},createCards:function(){for(i=0;i<this.count;i++){this.store[i]=new FlashCards.Card(this.store[i],{dimensions:this.options.dimensions})}},makeGetter:function(a){var b=this;this.card["get"+this.labels[a]]=function(){return b.active()[a]}},setFrontLabelPadding:function(a){var b=this.labels[a].length-_("Front").length+3;this.frLaPad[a]="";for(i=0;i<=b;i++){this.frLaPad[a]+="&nbsp;"}},setFontDimensionProperty:function(b,a){if(!this.backM){return}this["backFontSize-"+b]=this.backM.getStyle("font-size").toInt();if(this.card.getElement("a.d"+a)){this.flipLinks[b]=this.card.getElement("a.d"+a)}},showFirst:function(){this.resetQueue();this.back&&this.back.addClass("hidden");this.resetAnswers();this.show();this.card.setStyle("display","block");this.showRating();this.showTags();this.fireEvent("cardsReady");if(this.options.autoScroll){new Fx.Scroll(window,{offset:{y:-50}}).toElement($(this))}},setSaveRatio:function(a){if(!a){a=(this.count>=6)?3:2}this.saveRatio=a;return this.saveRatio},setSaveFreq:function(a){if(!a){if(!this.saveRatio){this.setSaveRatio()}a=(this.count/this.saveRatio).toInt()}this.saveFreq=a;return this.saveFreq},getSaveFreq:function(){return this.saveFreq},normalizeOptions:function(){this.options.addTagURL=this.options.baseURL.substring(0,this.options.baseURL.lastIndexOf("/"))+"/addTags";this.options.dimensions.unshift(false)},setElements:function(){this.card=$(this).getFirst("div.card");if(this.card){this.pager=$(this).getFirst("div.pager");if(this.pager){this.infoEle=this.pager.getFirst("div.info")}this.front=this.card.getElement("div.front");this.back=this.card.getElement("div.back");if(this.back){this.backM=this.back.getFirst("h2");this.incorrectLink=this.back.getElement("div.controls a.incorrect");this.correctLink=this.back.getElement("div.controls a.correct")}this.answerLinks=[this.correctLink,this.incorrectLink];if(this.front){this.frontM=this.front.getFirst("h2");this.levelEle=this.front.getElement(".level");this.linkEle=this.front.getElement("a.perma")}this.resortMenu=$(this).getElement("select.resort");this.ratingList=$(this).getElement(".ratingList")}},addSpinner:function(){this.card&&this.card.set("spinner",{message:_("Please wait")+"...","class":"mask",containerPosition:{position:"centerTop",offset:{y:40,x:-40}}})},addAnswerEvents:function(){if(this.incorrectLink){this.incorrectLink.fade("show").addEvent("click",function(a){a&&a.stop();if(!this.active().getDState().d&&this.active().getSide()=="back"){this.incorrectUp();this.rotateOrNext()}}.bind(this));this.incorrectLink.set("tween",{link:"chain"})}if(this.correctLink){this.correctLink.fade("show").addEvent("click",function(a){a&&a.stop();if(!this.active().getDState().d&&this.active().getSide()=="back"){this.correctUp();this.rotateOrNext()}}.bind(this));this.incorrectLink.set("tween",{link:"chain"})}},addEOLEvents:function(){var a=this;this.addEvent("endOfList",function(b){if(b=="last"){a.disableCard();a.emptyQueue()}})},addControlEvents:function(){var a=this;this.pager.getFirst("a.prev")&&this.pager.getFirst("a.prev").addEvent("click",function(b){b.stop();a.prev()});this.pager.getFirst("a.next")&&this.pager.getFirst("a.next").addEvent("click",function(b){b.stop();a.next()});this.card.getElement("a.extraCards")&&this.card.getElement("a.extraCards").addEvent("click",function(b){b.stop();a.showExtraCards(a.active())});this.card.getElement("a.fontUp")&&this.card.getElement("a.fontUp").addEvent("click",function(b){b.stop();a.fontUp()});this.card.getElement("a.fontDown")&&this.card.getElement("a.fontDown").addEvent("click",function(b){b.stop();a.fontDown()});this.card.getElement("a.furigana")&&this.card.getElement("a.furigana").addEvent("click",function(b){b.stop();$(a.card).getElements("rt").fade("toggle")});this.resortMenu&&this.resortMenu.addEvent("change",function(b){a.resort($(this).get("value"))});$(this).getElement("a.dismiss")&&$(this).getElement("a.dismiss").addEvent("click",function(b){a.fireEvent("close",b)});if(this.ratingList){this.ratingList.getElements(".rate").addEvent("click",function(b){b.stop();for(i=0;i<=5;i++){if(this.hasClass("star-"+i)){a.saveRating(i)}}})}$each(this.flipLinks,function(c,b){c.addEvent("click",function(f){f.stop();a.flipOrChange(b)})})},setPagerLoc:function(a){if(!a){a=1}this.infoEle.set("html",a+" / "+this.count)},resetAnswers:function(a){if(a!=null){this.active().resetTimer();this.active().answered("");this.enableCard();return}for(i=0;i<this.count;i++){this.getCard(i).resetTimer()}},prev:function(){this.active().stopTimer();this.currCardNum--;if(this.currCardNum<0){this.fireEvent("endOfList","first");this.currCardNum=0;return}this.infoEle.set("html",this.currCardNum+1+" / "+this.count);this.showRating();this.showTags();this.show();this.active().startTimer();this.fireEvent("cardChange",this.active()[this.options.dimensions[1]])},next:function(){this.active().stopTimer();this.currCardNum++;if(this.currCardNum>=this.count){this.currCardNum=this.count-1;this.fireEvent("endOfList","last");return}this.infoEle.set("html",this.currCardNum+1+" / "+this.count);this.showRating();this.showTags();this.show();this.active().startTimer();this.fireEvent("cardChange",this.active()[this.options.dimensions[1]])},flip:function(a){if(typeof a=="string"){a=a=="front"?"back":"front"}else{a=this.active().getSide()}if(a=="front"){this.front.addClass("hidden");this.back.removeClass("hidden");this.active().setSide("back");this.flipLinks[this.active().getD()].set("html",_("Front")+this.frLaPad[this.active().getD()])}else{this.back.addClass("hidden");this.front.removeClass("hidden");this.active().setSide("front");this.flipLinks[this.active().getD()]&&this.flipLinks[this.active().getD()].set("html",this.labels[this.active().getD()])}},flipAll:function(){$each(this.store,function(a,b){a.setSide("front")})},activeFlipLink:function(){return this.flipLinks[this.active().getD()]},resetFlipLinks:function(){$each(this.flipLinks,function(a,b){a.set("html",this.labels[b])}.bind(this))},showTags:function(){if($("tagList")==null){return}$("tagList").set("value",this.active().t)},addTag:function(){var a=this.options.addTagURL+"?kanji="+this.encodeURIComponent(this.active().k)+"&tags="+$("tagList").get("value");new Request({onComplete:function(){notify.show("Tag saved")}}).get(a)},showRating:function(){if(this.ratingList==null){return}for(i=0;i<=5;i++){this.ratingList.removeClass("star-"+i)}this.ratingList.addClass("star-"+this.active().r)},saveRating:function(a){this.active().r=a;this.showRating();new Request({}).get(this.options.baseURL+"Rate/kanji/"+encodeURIComponent(this.card.getKanji())+"/rating/"+a)},disableCard:function(){this.active().getDState().d=true;if(this.active().answered()=="correct"){this.incorrectLink.setStyle("opacity",0.3)}else{if(this.active().answered()=="incorrect"){this.correctLink.setStyle("opacity",0.3)}else{this.incorrectLink.setStyle("opacity",0.3);this.correctLink.setStyle("opacity",0.3)}}},enableCard:function(){this.incorrectLink.setStyle("opacity",1);this.correctLink.setStyle("opacity",1)},fontUp:function(){var a=this[this.active().getSide()+"M"].getStyle("font-size").toInt();this[this.active().getSide()+"M"].setStyle("font-size",a+15)},fontDown:function(){var a=this[this.active().getSide()+"M"].getStyle("font-size").toInt();this[this.active().getSide()+"M"].setStyle("font-size",a-15)},baseURL:function(a){if(!a){a=this.active().getD()}return this.options.baseURLs[a]},queue:{_tcount:0,d:{p:{s:"",c:0},m:{s:"",c:0}}},activeQ:function(){return this.queue.d[this.active().getD()]},saveScore:function(b){if(b==null){return}var a=this.active().u;a=a.substring(a.lastIndexOf("/")?a.lastIndexOf("/")+1:0);if(this.options.queueEnabled==false){new Request({}).get(this.baseURL()+"ScoreU?score="+b+"&score[key]="+a);return}var c=this.activeQ();c.s+="scores["+a+"]"+b+"&";c.c++;this.queue._tcount++;if(this.queue._tcount>=this.getSaveFreq()){this.emptyQueue()}},resetQueue:function(a){if(a){if(this.queue.d[a]){this.queue._tcount=this.queue._tcount-this.queue.d[a].c;this.queue.d[a]={s:"",c:0}}return}$each(this.options.dimensions,function(c,b){if(!c){return}this.queue.d[c]={s:"",c:0}}.bind(this));this.queue._tcount=0},emptyQueue:function(){$each(this.queue.d,function(a,b){if(!b||a.c<=0){return}(function(){notify.show("<h4>Saving "+this.labels[b]+" answers...</h4>",{"class":"short",delay:0.5});scoreCard.add(this.baseURL(b)+"ScoresU?"+a.s)}.bind(this)).delay(Math.floor(Math.random()*2500));this.resetQueue(b)}.bind(this))},getMultiplierForRsTm:function(a){if(a==null){return 0}a=(a/1000).round();if(a<=7){return 1}if(a<=15){return 2}if(a<=30){return 3}if(a<=45){return 4}if(a<=60){return 5}return 0},correctUp:function(){this.correct++;this.active().answered("correct");var b=this.getMultiplierForRsTm(this.active().getResponseTime());b=(b==0)?5:b;var a=6-b;this.active().correct(this.active().correct()+a);this.disableCard();this.saveScore("[correct]="+a)},incorrectUp:function(){this.incorrect++;this.active().answered("incorrect");var b=this.getMultiplierForRsTm(this.active().getResponseTime());b=(b==0)?1:b;var a=0+b;this.active().incorrect(this.active().incorrect()+a);this.disableCard();this.saveScore("[incorrect]="+a)},correctDown:function(){this.correct--;this.active().answered("incorrect");this.active().correct(this.active().correct()-1);this.disableCard();this.saveScore("[correct]=-1")},incorrectDown:function(){this.active().answered("correct");this.active().incorrect(this.active().incorrect()-1);this.incorrect--;this.disableCard();this.saveScore("[incorrect]=-1")},preReset:function(){this.flip("front");this.card.spin();this.emptyQueue()},postReset:function(){this.currCardNum=0;this.show();this.fireEvent("resorted");this.setPagerLoc(1);this.resetSortButton();this.card.unspin()},reset:function(){this.preReset();$each(this.store,function(a){a.reset()});this.fireEvent("resorted");this.postReset()},shuffle:function(){this.preReset();this.store.shuffle();$each(this.store,function(a){a.reset()});this.postReset()},resetSortButton:function(){(function(){$(this).getElement("select.resort").set("value","sort")}).bind(this).delay(500)},resort:function(a){a=(a==null)?"incorrect":a;this.fireEvent("resort",a);this.preReset();if(a=="shuffle"){this.shuffle();this.resetSortButton();return}else{if(a=="reset"){return this.reset();this.resetSortButton();return}else{if(a=="sort"){return}}}if(a=="correct"){this.store.sort(function(e,c){return((e.sumTotalCorrect()-e.sumTotalIncorrect())-(c.sumTotalCorrect()-c.sumTotalIncorrect()))}).reverse()}else{if(a=="seen"){this.store.sort(function(e,c){return(e.state.seen-c.state.seen)}).reverse()}else{if(a=="unseen"){this.store.sort(function(e,c){return(e.state.seen-c.state.seen)})}else{if(a=="incorrect"){this.store.sort(function(e,c){return((e.sumTotalIncorrect()-e.sumTotalCorrect())-(c.sumTotalIncorrect()-c.sumTotalIncorrect()))}).reverse()}else{return}}}}$each(this.store,function(b){b.reset()});this.postReset()},showExtra:function(a){new Request.HTML({update:"notification"}).get(a.get("href"))},showExtraCards:function(f,g){urls=new Hash(this.options.extraURLs);if(urls.getLength()==1){new GIYA.Request({update:$("extraCards"),onRequest:function(){$("paper")&&$("paper").spin()},onSuccess:function(h,j,k,l){this.fireEvent("extraCards","open");$("paper")&&$("paper").unspin()}.bind(this)}).get(urls.getValues()[0]+"?filters[reset]=true&filters[kanji]="+encodeURIComponent(this.active().k));return}if(urls.getLength()>0&&g==null){$("extraCards").empty();var e=this;var a=new Element("div",{"class":"extraCardsConf",html:"<p>Choose the type of card.</p>"});var b=new Element("ul");urls.each(function(h,j){h=h+"?filters[reset]=true&filters[kanji]="+encodeURIComponent(this.active().k);b.grab(new Element("li").grab(new Element("a",{href:h,html:j,"class":"extraLink",events:{click:function(k){k.stop();e.showExtraCards($(this),"force");return false}}})))},this);a.grab(b);var c=new Element("div",{"class":"controls",html:'<a href="#" class="dismiss">&nbsp;</a>',events:{click:function(){this.fireEvent("extraCards","close")}.bind(this)}});$("extraCards").adopt([c,a]);(function(){a.set("tween",{duration:3500});a.highlight();this.fireEvent("extraCards","open")}.bind(this)).delay(250)}else{new Fx.Scroll(window,{onComplete:function(){new GIYA.Request({update:$("extraCards"),onRequest:function(){$("paper")&&$("paper").spin()},onSuccess:function(h,j,k,l){new Fx.Tween($("extraCards"),{duration:"short",onComplete:function(){$("paper")&&$("paper").unspin();new Fx.Tween($("extraCards")).start("opacity",1)}}).start("opacity",0)}}).get(f.get("href"))}}).toTop()}},rotateOrNext:function(){if(this.active().sumAnswered()>=this.options.dimensions.length-2){return this.next()}if(!this.active().rotatingF()){return this.rotateBack()}return this.rotate()},setupHotKeys:function(){var a=this;this.hotKeys=new Keyboard({eventType:"keyup",disableDefault:true,events:{n:a.next.bind(a),right:a.next.bind(a),left:a.prev.bind(a),p:a.prev.bind(a),f:a.flip.bind(a),up:a.rotate.bind(a),down:a.rotateBack.bind(a),u:a.rotate.bind(a),d:a.rotateBack.bind(a),"shift+d":a.nextDOrSecond.bind(a),enter:a.rotateOrNext.bind(a),e:function(){a.showExtraCards(a.active())},r:function(){a.showExtraCards(a.active())},i:function(){a.incorrectLink.fireEvent("click")},c:function(){a.correctLink.fireEvent("click")},s:a.shuffle.bind(a),"shift+s":function(){a.resort("seen")},"shift+u":function(){a.resort("unseen")},"shift+c":function(){a.resort("correct")},"shift+i":function(){a.resort("incorrect")},"shift+r":a.reset.bind(a)}},$(this));return this.hotKeys},rotateBack:function(){this.active().rotatingF(false);if(this.active().getSide()=="front"){this.active().changeDimension(this.options.d1,this.options.dimensions[this.options.dimensions.length-1],{back:this.backM});this.active().getDState().d?this.disableCard():this.enableCard();this.flip("back");return}if(this.active().prevD()==this.options.dimensions[1]){this.flip("front");return}this.flipLinks[this.active().getD()].set("html",this.labels[this.active().getD()]);this.active().prevDSide("back");this.active().changeDimension(this.options.d1,this.active().prevD(),{back:this.backM});this.flipLinks[this.active().getD()].set("html",_("Front")+this.frLaPad[this.active().getD()]);this.active().getDState().d?this.disableCard():this.enableCard()},rotate:function(){this.active().rotatingF(true);if(this.active().getSide()=="front"){this.flip("back");return}if(this.active().nextD()==this.options.dimensions[1]){this.flip("front");this.active().changeDimension(this.options.d1,this.options.dimensions[2],{back:this.backM});this.active().setSide("front");this.active().getDState().d?this.disableCard():this.enableCard();return}this.flipLinks[this.active().getD()].set("html",this.labels[this.active().getD()]);this.active().nextDSide("back");this.active().changeDimension(this.options.d1,this.active().nextD(),{back:this.backM});this.flipLinks[this.active().getD()].set("html",_("Front")+this.frLaPad[this.active().getD()]);this.active().getDState().d?this.disableCard():this.enableCard()},getPerformance:function(){var b=0;var l=0;var g=0;var f=0;var e=0;var k=0;var j=0;var h=this.count*(this.options.dimensions.length-2);$each(this.store,function(a){if(a.answered()){b=b+a.sumAnswered();l=l+a.sumCorrect();g=g+a.sumIncorrect()}});if(l){f=((l/h)*100).round(1);e=((l/b)*100).round(1)}if(g){k=((g/h)*100).round(1);j=((g/b)*100).round(1)}return{total:h,answered:b,percentAnswered:((b/h)*100).round(1)+"%",correctAnswers:l,incorrectAnswers:g,correct:l,incorrect:g,percentOfTotalCorrect:f+"%",percentOfTotalIncorrect:k+"%",percentCorrect:e+"%",percentIncorrect:j+"%"}},dbug:function(a){$each(this.store,function(b,c){dbug.log(c+": %o",a?b.state:b)})}});FlashCards.Card=new Class({Implements:[Options],options:{dimensions:[false,"k","p","m"],d1:"k",d2:"p",d3:"m"},dimension:1,state:{cd:"",rF:true,d:{},seen:0},initialize:function(b,a){this.setOptions(a);for(d=1;d<this.options.dimensions.length;d++){if(!this.options.dimensions[d]){break}this.state.d[this.options.dimensions[d]]={d:false,c:0,i:0,s:"front",t:{shownAt:0,timing:false,answeredAt:0},a:"",ttl:{c:0,i:0}}}if(this.options.dimensions[2]){this.state.cd=this.options.dimensions[2]}$each(b,function(e,c){this[c]=e}.bind(this))},activate:function(c,b,a){a.front&&a.front.set("html",this[c]).addClass(c);a.level&&a.level.set("html",this.l);a.url&&a.url.set("href",this.u);if(a.back){$each(this.state.d,function(f,e){a.back.removeClass(e)});a.back.set("html",this[b]).addClass(b)}},prevD:function(){var a=this.options.dimensions.indexOf(this.getD())-1;if(a==0){a=this.options.dimensions.length-1}return this.options.dimensions[a]},nextD:function(){var a=this.options.dimensions.indexOf(this.getD())+1;if(a==this.options.dimensions.length){a=1}return this.options.dimensions[a]},nextDSide:function(a){if(a=="front"||a=="back"){this.state.d[this.nextD()].s=a}return this.state.d[this.nextD()].s},prevDSide:function(a){if(a=="front"||a=="back"){this.state.d[this.prevD()].s=a}return this.state.d[this.prevD()].s},changeDimension:function(c,b,a){if(this.state.cd==b||!a.back){return}$each(this.state.d,function(f,e){a.back.removeClass(e)});a.back.set("html",this[b]).addClass(b);this.state.cd=b},reset:function(){for(d=1;d<this.options.dimensions.length;d++){if(!this.options.dimensions[d]){break}this.state.d[this.options.dimensions[d]].d=false;this.state.d[this.options.dimensions[d]].c=0;this.state.d[this.options.dimensions[d]].i=0;this.state.d[this.options.dimensions[d]].s="front";this.state.d[this.options.dimensions[d]].a="";this.state.d[this.options.dimensions[d]].t.shownAt=0;this.state.d[this.options.dimensions[d]].t.answeredAt=0;this.state.d[this.options.dimensions[d]].t.timing=false}},getSide:function(){return this.state.d[this.state.cd].s},setSide:function(a){if(a=="front"||a=="back"){this.state.d[this.state.cd].s=a}},getD:function(){return this.state.cd},setD:function(a){if(a){this.state.cd=a}},getDState:function(a){return this.state.d[a?a:this.getD()]},rotatingF:function(a){if(typeof a!="undefined"){this.state.rF=a}return this.state.rF},disabled:function(a){if(typeof a!="undefined"){this.state.d[this.getD()].d=a}return this.state.d[this.getD()].d},answered:function(a){if(typeof a!="undefined"){this.state.d[this.getD()].a=a}return this.state.d[this.getD()].a},sumAnswered:function(){var b=0;for(d=1;d<this.options.dimensions.length;d++){if(!this.options.dimensions[d]){break}if(this.state.d[this.options.dimensions[d]].a){b++}}return b},sumCorrect:function(){var a=0;for(d=1;d<this.options.dimensions.length;d++){if(!this.options.dimensions[d]){break}a+=this.state.d[this.options.dimensions[d]].c}return a},sumIncorrect:function(){var a=0;for(d=1;d<this.options.dimensions.length;d++){if(!this.options.dimensions[d]){break}a+=this.state.d[this.options.dimensions[d]].i}return a},sumTotalCorrect:function(){var a=0;for(d=1;d<this.options.dimensions.length;d++){if(!this.options.dimensions[d]){break}a+=this.state.d[this.options.dimensions[d]].ttl.c}return a},sumTotalIncorrect:function(){var a=0;for(d=1;d<this.options.dimensions.length;d++){if(!this.options.dimensions[d]){break}a+=this.state.d[this.options.dimensions[d]].ttl.i}return a},correct:function(a){if(typeof a!="undefined"){this.state.d[this.getD()].c=a;this.state.d[this.getD()].ttl.c+=a}return this.state.d[this.getD()].c},incorrect:function(a){if(typeof a!="undefined"){this.state.d[this.getD()].i=a;this.state.d[this.getD()].ttl.i+=a}return this.state.d[this.getD()].i},shownAt:function(a){if(typeof a!="undefined"){this.state.d[this.state.cd].t.shownAt=a}return this.state.d[this.state.cd].t.shownAt},answeredAt:function(a){if(typeof a!="undefined"){this.state.d[this.state.cd].t.answeredAt=a}return this.state.d[this.state.cd].t.answeredAt},timing:function(a){if(typeof a!="undefined"){this.state.d[this.state.cd].t.timing=a}return this.state.d[this.state.cd].t.timing},startTimer:function(){this.shownAt(new Date().getTime());this.timing(true)},stopTimer:function(){this.answeredAt(new Date().getTime());this.timing(false)},resetTimer:function(a){this.timing(false);this.answeredAt(0);this.shownAt(0)},getResponseTime:function(){this.stopTimer();return this.answeredAt()-this.shownAt()},dbug:function(){dbug&&dbug.log(this)}});mChoiceCards=new Class({Extends:FlashCards,options:{baseURL:"/udrop/multipleChoice",dimensions:["q","a"],baseURLs:{},labels:{q:"Question",a:"Answer"}},createCards:function(){for(i=0;i<this.count;i++){this.store[i]=new mChoiceCards.Card(this.store[i],{dimensions:this.options.dimensions})}},addAnswerEvents:function(){var a=this;$each(this.choicesEle.getElements("input[type=radio]"),function(b){b.addEvent("click",function(c){a.active().answered(b.get("value"));if(b.get("value")==a.card.getAnswer()){a.correctUp();b.getParent("li").addClass("correct")}else{a.incorrectUp();b.getParent("li").addClass("incorrect")}})})},setElements:function(){this.parent();this.choicesEle=this.front.getElement(".choices");if(!this.choicesEle){throw"Could not find a .choices element"}},show:function(a){this.getCard().activate(this.options.dimensions[1],this.active().getD(),{front:this.frontM,choices:this.choicesEle,level:this.levelEle,url:this.linkEle});this.addAnswerEvents()},preReset:function(){this.card.spin();this.emptyQueue()},disableCard:function(){}});mChoiceCards.Card=new Class({Extends:FlashCards.Card,options:{dimensions:[false,"k","a"]},cs:[],a:"",q:"",choicesHTML:"",initialize:function(b,a){this.setOptions(a);this.parent(b,a);this.state.cd=this.options.dimensions[1];this.cs=this.cs.shuffle();$each(this.cs,function(c){this.choicesHTML+='<li><input type="radio" id="'+this.a+"-"+c+'" name="'+c+'" value="'+c+'" /> <label for="'+this.a+"-"+c+'">'+c+"</label></li>"}.bind(this))},changeDimension:function(c,b,a){},activate:function(c,b,a){if(!a.choices){throw"A choices element is required"}a.front&&a.front.set("html",this[c]);a.choices&&a.choices.set("html",this.choicesHTML);a.level&&a.level.set("html",this.l);a.url&&a.url.set("href",this.u)}});CardsPerformance=new Class({Implements:[Options,Events],options:{element:"perfTable",pClass:null},pData:{total:0,answered:0,percentAnswered:0,correctAnswers:0,incorrectAnswers:0,correct:0,incorrect:0,percentOfTotalCorrect:0,percentOfTotalIncorrect:0,percentCorrect:0,percentIncorrect:0},toElement:function(){return $(this.options.element)},initialize:function(a){this.setOptions(a);this.dataEle=$(this).getElement("div.data");this.refLink=$(this).getElement("a")},update:function(a){this.pData=a;return this},show:function(){var a=new Element("dl",{html:"<dt>Answered</dt><dd>"+this.pData.answered+" ("+this.pData.percentAnswered+")</dd><dt>Correct</dt><dd>"+this.pData.correct+" ("+this.pData.percentCorrect+")</dd><dt>Incorrect</dt><dd>"+this.pData.incorrect+" ("+this.pData.percentIncorrect+")</dd><dt>Total</dt><dd>"+this.pData.total+"</dd><dt>Correct</dt><dd>"+this.pData.correct+" ("+this.pData.percentOfTotalCorrect+")</dd><dt>Incorrect</dt><dd>"+this.pData.incorrect+" ("+this.pData.percentOfTotalIncorrect+")</dd>"});this.refLink.set("html",_("Refresh Score"));this.dataEle.empty().adopt([a])}});var DropBox=new Class({Implements:[Options,Events],options:{},count:0,counter:null,toElement:function(){return this.element},initialize:function(b,a){this.element=$(b);this.element.store("DropBox",this);this.counter=$(this).getElement(".count");if(!this.counter){throw ("DropBox requires a .count child element to display the current count")}this.options.set=$(this).get("title");this.setOptions(a)},setCount:function(a){this.count=a;this.counter.set("html",a)},getCount:function(){return this.count},addCard:function(a){var b=decodeURIComponent(a.getKanji());if(!b){return}new Request.JSON({url:"/userSet/include",onSuccess:function(c){this.setCount(c);$(this).highlight()}.bind(this)}).get({kanji:b,set:this.options.set})}});var DropToSet=new Class({Extends:Drag.Move,options:{counter:null,precalculate:true,transition:"quint:out",duration:1000,preventDefault:true,onStart:function(a){this.element.addClass("dragging")},onDrop:function(a,b){if(b){b.addClass("dropped");b.highlight("#f4f4f4");a.store("droppedOn",b);b.retrieve("DropBox").addCard(a)}},onComplete:function(){this.element.removeClass("dragging");this.element.set("tween",{duration:this.options.duration,transition:this.options.transition,link:"chain"});this.element.setStyle("left",0).tween("top",0);if(this.element.retrieve("droppedOn")){$(this.element.retrieve("droppedOn")).removeClass("dropped").removeClass("dragover")}},onLeave:function(a,b){b.removeClass("dragover")},onEnter:function(a,b){b.addClass("dragover")}},initialize:function(b,a){if(!a){a={droppables:$$(".dropBox")}}else{if(!a.droppables){a.droppables=$$(".dropBox")}}this.parent(b,a)}});Element.implement({makeDroppableToSet:function(a){return new DropToSet(this,a)},makeDropBox:function(a){return new DropBox(this,a)}});var KanjiInSetList=new Class({Implements:[Options,Events],options:{updateBaseUrl:"/vocab/list",dropDown:"listSet"},toElement:function(){return $(this.element)},initialize:function(c,b){this.element=$(c);this.setOptions(b);this.dropDown=$(this.options.dropDown);var a=this;this.dropDown.addEvent("change",function(){$("paper").spin();(function(){a.updateList(a.options.updateBaseUrl+"/set/"+a.dropDown.get("value"))}).delay(500)});this.initPagerButtons();this.initDelButtons()},updateList:function(b){var a=this;var c=new Request.HTML({update:a,onComplete:function(){$("paper").unspin();a.initPagerButtons();a.initDelButtons()},onFailure:function(){$("paper").unspin();notifyC.showError("An error was encountered")},onException:function(){$("paper").unspin();notifyC.showError("An error was encountered")},onCancel:function(){$("paper").unspin();notifyC.showError("Request canceled")}}).get(b)},initPagerButtons:function(){var a=this;if(!$(this).getElement(".pager")){return}$(this).getElement(".pager").getElements("a").addEvent("click",function(g){g.stop();var f=this.get("href");$("paper").spin();new Fx.Scroll(window,{onComplete:function(){a.updateList(f)},onCancel:function(){$("paper").unspin();notifyC.showError("Cannot change pages while the scroll-wheel is active.")}}).toTop()});var c=$(this).getElement(".goTo");if(c){c.addEvent("change",function(g){$("paper").spin();var f=a.options.updateBaseUrl+"/set/"+a.dropDown.get("value");if(isNaN(this.get("value").toInt())){f+="/index/"+this.get("value")}else{f+="/page/"+this.get("value")}new Fx.Scroll(window,{onComplete:function(){a.updateList(f)},onCancel:function(){$("paper").unspin();notifyC.showError("Cannot change pages while the scroll-wheel is active.")}}).toTop()});goToTip=$(this).getElement(".goToTip");if(goToTip&&goToTip.get("title")){var b=goToTip.get("title").split("::");goToTip.store("tip:title",b[0]);goToTip.store("tip:text",b[1]);new Tips(goToTip,{fixed:true,hideDelay:50,showDelay:50,className:"tip-container"})}}},initDelButtons:function(){var a=this;$(this).getElements("a.del").addEvent("click",function(b){b.stop;a.removeKanjiFromList(this.getPrevious("a").get("text"),$("listSet").get("value"),this.getParent())})},removeKanjiFromList:function(b,c,a){$("spinner").setStyle("display","");(function(){new Request.JSON({url:"/userSet/removeKanji",onSuccess:function(e){if(e=="ok"){a&&a.dispose();notify.show("Removed "+b+" from the set.",{delay:1,"class":"short"})}else{notifyC.showError("Unable to remove "+b+" from this set",{delay:2,"class":"short"})}},onComplete:function(){$("spinner").setStyle("display","none")}}).get({set:c,kanji:b})}).delay(500)}});function makeInputPassword(a){if($(a).get("type")=="password"){return}var b=new Element("input",{name:$(a).get("name"),type:"password",id:$(a).get("id"),"class":$(a).get("class"),onFocus:$(a).get("onFocus"),onBlur:$(a).get("onBlur"),value:""});b.cloneEvents($(a));b.replaces($(a));b.focus()}function makePasswordInput(b,a){if($(b).get("type")=="text"){return}var c=new Element("input",{name:$(b).get("name"),type:"text",id:$(b).get("id"),"class":$(b).get("class"),onFocus:$(b).get("onFocus"),onBlur:$(b).get("onBlur"),value:a});c.cloneEvents($(b));c.replaces($(b))}function isEmpty(a){if(null==a||""==a){return true}return false}function ucfirst(a){return a.charAt(0).toUpperCase()+a.substr(1)}function lcfirst(a){return a.charAt(0).toLowerCase()+a.substr(1)}Number.prototype.addCommas=function(){nStr=this+"";x=nStr.split(".");x1=x[0];x2=x.length>1?"."+x[1]:"";var a=/(\d+)(\d{3})/;while(a.test(x1)){x1=x1.replace(a,"$1,$2")}return x1+x2};var StackedBarChart=new Class({Implements:[Options,Events],options:{element:"sBChart",maxBlocks:5,set:"all"},toElement:function(){return $(this.options.element)},initialize:function(a,b){this.setOptions(a);this.addEvents(b);$("barTip").setStyles({opacity:0,display:"block"});this.initTips();return},initTips:function(){$(this).getElements("div.bar div.title").each(function(a){if(a.getParent("div.bar").get("title")){a.getParent("div.bar").store("barTitle",a.getParent("div.bar").get("title"));a.getParent("div.bar").erase("title")}else{a.getParent("div.bar").store("barTitle",a.get("text")||"")}});$(this).getElements(".block").set("tween",{link:"chain"});$("barTip").addEvent("mouseout",function(){$("barTip").fade("out")});$("barTip").addEvent("mouseover",function(){$("barTip").fade("in")});$(this).getElements(".block").each(function(a){a.addEvent("mouseenter",function(b){this.showTip(a,{x:b.client.x+10,y:b.client.y-30})}.bind(this));a.addEvent("mouseleave",function(b){this.hideTip(a)}.bind(this))}.bind(this))},showTip:function(c,g){$("barTip").setStyles({top:g.y,left:g.x});$("barTip").getElement(".cnt").set("text",_(c.getElement("div").get("text")));$("barTip").getElement(".tpe").set("text",_(c.getParent("div.bar").retrieve("barTitle")));var e=1;var f=c.getProperty("due");if(f==null){$("barTip").getElement(".due").set("text","")}else{f==0?$("barTip").getElement(".due").set("text",_("today")):$("barTip").getElement(".due").set("text",sprintf(_("in %d "+_p("day","days",f)),f))}var a=this.getStudyURL(c);if(a==null){$("studyNow").setStyle("display","none")}else{$("studyNow").set("href",this.getStudyURL(c));$("studyNow").setStyle("display","inline")}var b=null;for(e=0;e<=this.options.maxBlocks;e++){if(c.hasClass("srs"+e)){b=e}}$("barTip").getElement(".bckt").set("text",b);for(e=0;e<=this.options.maxBlocks;e++){$("barTip").removeClass("srs"+e)}$("barTip").addClass("srs"+b);$("barTip").fade("0.73")},hideTip:function(a){$("barTip").fade("out")},getStudyURL:function(b){var a=null;var f=null;var e=null;var c=null;b=$(b);var f=b.getParent(".bar");if(f.hasClass("kanjiMeaning")){e="kanji/meaning"}else{if(f.hasClass("kanjiHatsuon")){e="kanji/hatsuon"}else{if(f.hasClass("kanjiPronunciation")){e="kanji/hatsuon"}else{if(f.hasClass("vocabJE")){e="vocab/JE"}else{if(f.hasClass("vocabEJ")){e="vocab/EJ"}else{if(f.hasClass("vocabHatsuon")){e="vocab/hatsuon"}else{if(f.hasClass("vocabPronunciation")){e="vocab/hatsuon"}else{return null}}}}}}}a=0;for(c=1;c<=this.options.maxBlocks;c++){if(b.hasClass("srs"+c)){a=c}}var g=a==0?"30":"none";return"/"+e+"?filters[reset]=true&filters[limit]="+g+"&filters[srs]="+a+"&filters[stack]="+this.options.set},initBlockHeights:function(){var a=null;var c=null;var b=0;$(this).getElements(".bar").each(function(e){if(e.get("total")<=0){e.getElement(".srs0 div").set("text",0);e.getElement(".srs0").tween("height",$(e).getStyle("height").toInt());return}c=0;b=e.get("total");a=b/$(e).getStyle("height").toInt();$(e).getElements(".block").each(function(f){if(f.getElement("div")&&f.getElement("div").get("text")&&f.getElement("div").get("text")<=0&&!f.hasClass("srs0")){f.setStyle("display","none")}else{if(f.getElement("div")&&f.getElement("div").get("text")){f.getElement("div").get("text")&&f.tween("height",f.getElement("div").get("text").toInt()/a)}if(!f.hasClass("srs0")){f.getElement("div")&&(c+=f.getElement("div").get("text").toInt())}}});c=b-c;e.getElement(".srs0 div").set("text",c.addCommas());srs0H=c/a;if(c>b*0.66){srs0H=e.getStyle("height").toInt()*0.66;a=(b-c)/(e.getStyle("height").toInt()*0.33);e.getElements(".block").each(function(f){if(!f.hasClass("srs0")){f.getElement("div")&&f.tween("height",f.getElement("div").get("text")/a)}})}e.getElement(".srs0").tween("height",srs0H)})},resetBlockHeights:function(){$(this).getElements(".block").each(function(a){a.setStyle("height",0)})},reanimate:function(){this.resetBlockHeights();this.initBlockHeights()}});function getRequestParameters(a){var h=new Hash({});if(!a){var a=window.location.search;if(a.length==0){return h}a=a.substring(1,h.length)}if(a.length==0){return h}var c,f,h,b,g,e;a.split("&").each(function(j){var k=j.split("=");c=k[0];f=decodeURIComponent(k[1]);if(!c||!f){return}g=c.indexOf("[");b=c.indexOf("]");if(g&&b&&g<b){e=c.substring(g+1,b);c=c.substring(0,g);if(e&&c){if(!h.has(c)){h.set(c,$H({}))}h.get(c).set(e,f)}}else{h.set(c,f)}index=null});return h}function getRouting(a){var e=a.split("?");var c=e[0].substring(e[0].lastIndexOf("/")+1,e[0].length);var b=e[0].substring(0,e[0].lastIndexOf("/"));b=b.substring(b.lastIndexOf("/")+1,b.length);return{action:c,module:b,params:getRequestParameters(e[1])}}function sprintf(e){var f=e.split("%");var a=f[0];var c=/^([ds])(.*)$/;for(var b=1;b<f.length;b++){p=c.exec(f[b]);if(!p||arguments[b]==null){continue}if(p[1]=="d"){a+=parseInt(arguments[b],10)}else{if(p[1]=="s"){a+=arguments[b]}}a+=p[2]}return a}function _p(a,b,c){if(c!=1){return _(b)}return _(a)}function _(b){var a=user.getLang();if(typeof(i18n)!="undefined"&&i18n[a]&&i18n[a][b]){return i18n[a][b]}return b}var i18n={ja:{thousands_sep:",",Front:"表",Back:"裏","Refresh Score":"点数を更新する",Meaning:"意味",Pronunciation:"発音","in %d days":"%d日間","in %d day":"%d日間",today:"今日","Kanji - Meaning":"漢字 - 意味","Kanji - Pronunciation":"漢字 - 発音","Vocab - EJ":"語彙 - 英和","Vocab - JE":"語彙 - 和英","Vocab - Pronunciation":"語彙 - 発音","You are ordering %s, at a total cost of <strong>%s</strong> gold pieces.":"",Familiarity:"習得度",Due:"期限",familiarity:"習得度",due:"期限"}};function strip_tags(h,j){var n="",l=false;var g=[];var a=[];var m="";var e=0;var c="";var f="";var b=function(o,k,q){return q.split(o).join(k)};if(j){a=j.match(/([a-zA-Z0-9]+)/gi)}h+="";g=h.match(/(<\/?[\S][^>]*>)/gi);for(n in g){if(isNaN(n)){continue}f=g[n].toString();l=false;for(c in a){m=a[c];e=-1;if(e!=0){e=f.toLowerCase().indexOf("<"+m+">")}if(e!=0){e=f.toLowerCase().indexOf("<"+m+" ")}if(e!=0){e=f.toLowerCase().indexOf("</"+m)}if(e==0){l=true;break}}if(!l){h=b(f,"",h)}}return h};