/*
 * Copyright (c) 2010, Craig D. Muth, memorize.com
 * All rights reserved.
 */
Mem=new Object();Mem.mGray="#d4d4d4";Mem.mc="#b4b4b4";
Mem.brc=function(){return gl.mobile?1:6};Mem.mci=function(c){if(c.jquery){c=c[0]}var b=c.parentNode.cells;var d=0;
for(var a=0;a<b.length;a++){if(b.item(a)==c){d=a}}return d};Mem.start=function(r,g){Mem.sp();r=$(r).get(0);var b=Mem.mci(r.parentNode);
var s=Mem.t();var h=$(Mem.t());var c=s.s&&s.s.tbb;if(c){$("#directions").get(0).cycles=1;Mem.restore()}s.s={};s.s.mode=g||"flashcard";
s.s.column=b;h.find("tr:gt(0) td").each(function(t,u){u.ondblclick=row_dialog});s.s.tbb=s.tBodies[0].cloneNode(true);s.s.correctCount=0;
s.s.missed=new Array();s.s.pending=new Array();var o=s.tBodies[0].rows.length;for(var n=1;n<o-1;n++){s.s.pending[s.s.pending.length]=s.tBodies[0].rows[1];
s.tBodies[0].removeChild(s.tBodies[0].rows[1])}s.s.totalQuestions=s.s.pending.length;var e=s.s.pending[0].getElementsByTagName("TD");
var q=e.length;for(var n=1;n<s.s.pending.length;n++){if(n<=Mem.brc()){var i=document.createElement("TR");for(var k=0;k<q;
k++){var d=document.createElement("TD");d.innerHTML="&nbsp;";i.appendChild(d)}h.find("tr:last").before(i)}}if(s.s.pending.length>Mem.brc()+1){var i=document.createElement("TR");
var d=document.createElement("TD");d.innerHTML="<div class='dots'>. &nbsp; &nbsp; . &nbsp; &nbsp; .</div>";var a=document.createAttribute("COLSPAN");
a.nodeValue=q;d.setAttributeNode(a);i.appendChild(d);$(i).find("td").attr("colspan",""+q);h.find("tr:last").before(i)}Mem.shuffle(s.s.pending);
s.s.pending.reverse();this.shuffle(s.s.pending);var l="<div id='mem_controls'> <div id='directions' style='display:none'></div> <div id='mem_buttons'></div> <div id='mode'>"+Mem.gmd()+"</div> <div id='options'><a href='#' onclick='return Mem.showOptions(this);' id=optionsLink>Options</a></div> </div>";
if($(s).next().attr("id")=="mem_controls"){$(s).next().remove()}$(s).after(l);Mem.pq();Mem.add_restart_buttons(h);show_prompt_message();
Mem.scroll_up_if_necessary(h);var f=typeof(r)=="object"&&$(r).attr("class").match(/memorize_paragraph/);if(!f){if(Mem.t_orig==null||r=="combine"||f){return false
}var j=$("#content .mem_table").eq(Mem.t_orig);ccw(j)}return false};Mem.add_restart_buttons=function(d,a){var b=a?"restart":"switch column";
d.find(".start_button div").html(b).css("padding","0").removeClass("gray_button").removeClass("green").removeClass("switch_button").addClass("button");
if(a){d.find(".start_button:last div").addClass("switch_button");d.find(".start_button:last").siblings().find("div").css("cursor","default")
}else{var c=d.find(".start_button:eq("+Mem.t().s.column+")");c.siblings().find("div").addClass("switch_button");c.find("div").css("cursor","default")
}};Mem.gqc=function(){var a=Mem.t();res=a.s.pending[0].cells[a.s.column];return res};Mem.gdc=function(){var a=Mem.t();
res=a.s.pending[0].cells[a.s.column==0?1:0];return res};Mem.mcc=function(){var d=Mem.t();var c=d.s.question_cell_old;
var b=$.map($(d.s.tbb).find("tr"),function(f){return $($(f).find("td").get(d.s.column)).html()});b=$.grep(b,function(g,f){return(g!=c)
});b=b.slice(0,-1);b=_.uniq(b);Mem.shuffle(b);b.reverse();Mem.shuffle(b);b=b.slice(0,2);var e=Math.floor(Math.random()*(b.length+1));
b.splice(e,0,c);b=_.sortBy(b,function(f){return f.toLowerCase()});var a="<div id='choice_buttons'>\n";$.each(b,function(f,h){var g="Mem.sa("+(h==c?"true":"")+")";
a+="<div class='choice_wrapper' onclick='"+g+"'><div id='b"+(f+1)+"' class='button'>"+(f+1)+"</div>"+h+"</div>"});a+="</div>";$("#mem_buttons").html(a).fadeTo(0,0.1).fadeTo(600,1);
$("#b1").focus();$(".choice_label a").each(function(f,g){g.onclick=Mem.noop})};Mem.noop=function(){return false};Mem.is_first_question=function(){var a=Mem.t();
if(!a){return false}return a.s.correctCount==0&&a.s.missed.length==0};Mem.pq=function(){var a=Mem.t();$(a.tBodies[0].rows[a.s.correctCount]).after(a.s.pending[0]);
var c=Mem.gqc();a.s.question_cell_old=c.innerHTML||"";c.innerHTML="<div id='what_goes_here'></div>";if(a.s.mode=="flashcard"){$("#mem_buttons").html("<div id='flashcard_buttons'><div id='show_answer' class='button' onclick='Mem.sa()'>sho<u>w</u> answer</div></div>");
$("#show_answer").focus()}else{Mem.mcc()}$("#mem_buttons").show();var b=$("#mem_buttons");if(b.get(0).mem_glow){b.glow_stop("border-color","#ffffff")
}Mem.blink_diagram_maybe(a);if(a.s.mode=="flashcard"){speak(Mem.gdc().innerHTML+"?")}};Mem.blink_diagram_maybe=function(c,e){e=e||3;
if(c.s.mode=="matching"){var a=c.s.match0?c.s.match0.innerHTML:""}else{if(!c.s.pending[0]){return}var a=c.s.pending[0].cells[0].innerHTML
}a=a.replace(/ *<small.+small> */gi,"");if(!a.match(/^[a-zA-Z0-9]+$/)){return}var b=$(c).attr("mem_table_index");var d=".spot"+b+a;
$(".spot"+b+a).blink_solid(e)};Mem.help=function(){var a=Mem.t().s.mode;return dialog(a+".html",{no_close:true})};Mem.sa=function(a){var j=Mem.t();
if(j.s.mode=="matching"){return}var c=$("#what_goes_here").parent();if(j.s.question_cell_old==null){return}var d=Mem.gqc();
d.innerHTML=j.s.question_cell_old;j.s.question_cell_old=null;var g=$(d);g.css("background-color","#fff");var e=0;for(var h=0;h<j.s.pending.length;
h++){if(j.s.pending[h].innerHTML==j.s.pending[0].innerHTML){e++}}if(j.s.mode=="multiple_choice"){var i=$("#choice_buttons").height();
var f=g.parent().children().blink();if(a){f.glow_stop(null,"#ffffff");f.glow(7,null,"#ffffff",-16,0,-32);f.glow(7,null,"#8fff1f",16,0,32);
if(e>1){$("#mem_buttons").html("<div id='choice_buttons'><div class='button' onclick='Mem.answer(true)' id='i_was_correct'>correct</div><div class='prompt_message'>(<u>w</u>ill be repeated later)</div></div>")
}}else{$("#mem_buttons").html("<div id='choice_buttons'><div class='button' onclick='Mem.answer(false)' id='i_was_wrong'><u>w</u>rong</div></div>");
f.glow_stop(null,"#ffffff");f.glow(7,null,"#ffffff",0,-32,-32);f.glow(7,null,"#ff1f1f",0,32,32)}$("#choice_buttons").height(i)}else{var b="'>I was <u>r</u>ight";
if(e>1){b=" i_was_right_repeat'>I was <u>r</u>ight, repeat later"}$("#mem_buttons").html("<div id='flashcard_buttons'><div class='button' id='i_was_wrong' onclick='Mem.answer(false)'>I was <u>w</u>rong</div><div id=i_was_right onclick='Mem.answer(true)' class='button"+b+"</div></div>")
}$("#mem_buttons").show();$("#i_was_wrong").focus();Mem.scroll_down_if_necessary($("#mem_controls"));if(j.s.mode=="multiple_choice"&&a&&e==1){Mem.answer(true)
}Mem.blink_diagram_maybe(j,j.s.column==0?3:1);if(j.s.mode=="flashcard"){speak(d.innerHTML)}};Mem.answer=function(a,f){var b=Mem.t();
if(b.s.mode=="flashcard"&&b.s.question_cell_old!=null){return}if(b.s.mode=="matching"){return}if(!a){Mem.show_help_first_time_missed()
}var e=Mem.currentIsDuplicate();var d=b.s.pending[0];b.s.pending.splice(0,1);var c=b.tBodies[0].rows;if(a){if(e){b.tBodies[0].removeChild(d)
}if(b.s.pending.length==0){return Mem.finished()}if(!e){b.s.correctCount++;if(b.s.correctCount+Mem.brc()>=b.s.totalQuestions-1){b.tBodies[0].removeChild(c[c.length-2])
}}}else{var g=$(d).attr("mem_i");if(b.s.missed[g]){b.s.missed[g]++}else{b.s.missed[g]=1}b.tBodies[0].removeChild(d);b.s.pending.splice(2,0,d);
b.s.pending.push(d)}Mem.shorten_if_all_duplicates(b.s.pending);Mem.pq();if($("#directions").get(0).cycles>=3){$("#directions").get(0).cycles=2
}if(!f){Mem.scroll_down_if_necessary($("#mem_controls"))}};Mem.shorten_if_all_duplicates=function(a){if(a.length<2){return}var d=a[0];
var e=true;var c=a.length;for(var b=1;b<c;b++){if(a[b]!=d){e=false}}if(!e){return}for(var b=2;b<c;b++){a.pop()}};Mem.currentIsDuplicate=function(){var b=Mem.t();
for(var a=1;a<b.s.pending.length;a++){if(b.s.pending[a]==b.s.pending[0]){return true}}return false};Mem.message=function(b){var c=document.createElement("div");
var a=document.createTextNode(b);c.appendChild(a);document.body.appendChild(c)};Mem.shuffle=function(d){var c,e,b,a;for(e=0;e<(d.length*2);
e++){b=Math.floor(Math.random()*d.length);a=Math.floor(Math.random()*d.length);c=d[b];d[b]=d[a];d[a]=c}return d};Mem.show_help_first_time_missed=function(){if(settings_flag("w")){return
}dialog("first_miss_tip.html",{no_close:true,close_function:function(){return close_wrong_tip()}})};Mem.dump=function(b){var a="";for(m in b){a+=m+", "
}return a};Mem.get_window_bottom_y=function(){var b=document.body.scrollTop;if(window.pageYOffset){b=window.pageYOffset}var a=document.body.clientHeight;
if(window.innerHeight){a=window.innerHeight}return b+a};Mem.getWindowTopY=function(){if(typeof pageYOffset!="undefined"){return pageYOffset
}else{var b=document.body;var a=document.documentElement;a=(a.clientHeight)?a:b;return a.scrollTop}};Mem.scroll_down_if_necessary=function(a){if(gl.mobile){return
}if(Mem.top_wrapper(a)+a.height()>Mem.get_window_bottom_y()){var b=window.setInterval(function(){window.scrollBy(0,2)},10);window.setTimeout(function(){clearInterval(b)
},650)}};Mem.offset_wrapper=function(b){var c=b.offset();var a=$("#outer").offset();if(a.top>5){c.top-=window.scrollY}if(a.left>5){c.left-=window.scrollX
}return c};Mem.top_wrapper=function(a){return Mem.offset_wrapper(a).top};Mem.left_wrapper=function(a){return Mem.offset_wrapper(a).left
};Mem.scroll_up_if_necessary=function(c){if(gl.mobile){return}var a=Mem.getWindowTopY();var b=Mem.top_wrapper(c);if(b<a){window.scrollBy(0,(b-a)-13)
}};Mem.parents=function(a,b){for(x=1;x<=b;x++){a=a.parentNode}return a};Mem.showOptions=function(a){$("#optionsLink").css("display","none");
$("#optionsBox").css("display","block");Mem.t().s.optionsOn=true;return false};Mem.hideOptions=function(a){$("#optionsLink").css("display","block");
$("#optionsBox").css("display","none");Mem.t().s.optionsOn=false;return false};Mem.finished=function(){var a=Mem.t();var c=$("#directions");
var b=$("#mem_buttons");b.html("");b.hide();Mem.restore();if(a.s.mode=="flashcard"){Mem.finished_flashcard()}else{c.html("<div class='center'>Congratulations, you've finished. Try <a href='#' onclick='return Mem.sm()' class='bold'>matching</a> mode.</div>")
}Mem.turn_green_maybe();Mem.edit_dialog_if_row_edit();c.show();c.glow_stop("border-color","#ffffff");c.glow(15,"border-color","#ffffff",-8,0,-16);
c.glow(30,"border-color","#87ff1f",4,0,8);Mem.add_restart_buttons($(a));return false};Mem.edit_dialog_if_row_edit=function(){if(!Mem.edited){return
}if(Mem.t_orig==null){edit()}else{var b=$("#content .mem_table:eq("+Mem.t_orig+")");var a=b.parent().find("a:first");a.click().click()
}};Mem.finished_flashcard=function(){var a="<div class='center'>Congratulations, you've finished.";if(!$(".paragraph_table").length&&gl.controller!="wizards"){a+="<a style='margin-left:10px; color:#35b;' href='#' onclick='return mmd()'>View the results</a>."
}a+="</div>";$("#directions").html(a);$("#mem_buttons").html("");speak("You're finished!")};Mem.strongest_mode=function(e,d,c){if(!e){return d
}if(!d){return e}var f={matching:3,multiple_choice:2,flashcard:1};if(c){if(f[e]<f[d]){return e}return d}if(f[e]>f[d]){return e}return d
};Mem.turn_green_maybe=function(){if(check_editing_disabled()){return false}if(gl.path_name=="home"||gl.controller=="wizards"){return false
}if(gl.showed_reviewed_dialog){return}$("#memorize_td .mem_table").addClass("mem_table_reviewed");var c=Number($(Mem.t()).attr("mem_table_index"))-1;
$(".mem_table").eq(c).addClass("mem_table_reviewed");var a=$("#content .mem_table").eq(Mem.t_orig);var d=a.attr("strongest_mode_used");
d=Mem.strongest_mode(d,Mem.t().s.mode);a.attr("strongest_mode_used",d);var b=true;gl.awarded=null;$(".content_page .mem_table").each(function(e,f){var f=$(f);
if(!f.hasClass("mem_table_reviewed")){b=false}gl.awarded=Mem.strongest_mode(f.attr("strongest_mode_used"),gl.awarded,"return_weakest")
});if(b){gl.showed_reviewed_dialog=true;badge_earned_dialog(gl.awarded)}};Mem.startOver=function(b){var a=Mem.t();if(a.s.mode=="matching"){Mem.sm()
}else{Mem.start(a.getElementsByTagName("a")[a.s.column],a.s.mode)}return false};Mem.sp=function(){Mem.edited=false};Mem.column_count=function(a){a=a||Mem.t();
return $(a).find("th").length};Mem.sm=function(){if(Mem.column_count()>2){return dialog("Matching mode doesn't work in tables having 3 or more columns.  Please provide <a href='/feedback' target='_blank'>Feedback</a> if you think it would be useful.",{elephant:true})
}Mem.sp();var h=Mem.t();var b=$(h);h.s.mode="matching";var d=$("#mem_buttons");var c=$("#directions");if(d.get(0).cycles>0){d.get(0).cycles=1
}h.s.match0=h.s.match1=null;$("#mode").html(Mem.gmd());c.html("");c.hide();d.html("");d.hide();Mem.restore(true);var i=h.rows;
Mem.add_restart_buttons(b,"matching_mode");for(var f=1;f<(i.length-1);f++){var a=i[f].cells;a[0].style.cursor=a[1].style.cursor="pointer";
a[0].style.background=a[1].style.background=a[0].style.endColor=a[1].style.endColor=Mem.mGray;var g=function(){Mem.matchingClicked(this,0);
return false};var e=function(){Mem.matchingClicked(this,1);return false};a[0].onclick=g;a[1].onclick=e}for(swaps=0;swaps<(i.length*4);
swaps++){Mem.swapOnce(i,0);Mem.swapOnce(i,1)}b.find("a").each(function(j,k){k.onclick=Mem.noop});return false};Mem.matchingClicked=function(h,e){if(h.mState=="correct"){return
}var i=Mem.t();var d=$(i);var l=i.rows;var b=0;for(var g=1;g<(l.length-1);g++){var a=l[g].cells[e];if((h!=a)&&(a.mState=="guess")){a.mState=null;
$(a).queue(function(){var n=$(this);n.css("background-color",Mem.mGray);n.dequeue()});a.style.background=a.endColor=Mem.mGray}if(a.mState!="correct"){b++
}}if(e==0){i.s.match0=h}else{i.s.match1=h}if(h.mState=="guess"){h.mState=null;h.style.background=h.endColor=Mem.mGray;if(e==0){i.s.match0=null
}else{i.s.match1=null}}else{h.mState="guess";h.style.background=h.endColor=Mem.mc}if(e==0){Mem.blink_diagram_maybe(i)}if(!(i.s.match0&&i.s.match1)){return
}var k=false;var j=i.s.tbb.getElementsByTagName("tr");for(var g=1;g<j.length;g++){var c=j[g].getElementsByTagName("td");if((trim(i.s.match0.innerHTML)==trim(c[0].innerHTML))&&(trim(i.s.match1.innerHTML)==trim(c[1].innerHTML))){k=true
}}if(k){var f=$("#directions");if(f.get(0).cycles>2){f.get(0).cycles=2}i.s.match0.mState=i.s.match1.mState="correct";i.s.match0.endColor=i.s.match1.endColor="#fff";
i.s.match0.style.cursor=i.s.match1.style.cursor="";i.s.match0.style.background="#fff";i.s.match1.style.background="#fff";if(b==1){f.html("<div class='center'>Congratulations, you've finished.         Try <a href='#' onclick='return Mem.fm()' class='bold'>flashcard</a> mode.</div>");
f.show();f.glow(15,"border-color","#ffffff",-8,0,-16);f.glow(30,"border-color","#87ff1f",4,0,8);Mem.restore();Mem.add_restart_buttons(d,"matching_mode");
Mem.turn_green_maybe()}else{$(i.s.match0).glow_stop(null,Mem.mGray);$(i.s.match1).glow_stop(null,Mem.mGray);$(i.s.match0).glow(16,null,"#7e0",9,1,16);
$(i.s.match1).glow(16,null,"#7e0",9,1,16)}i.s.match0=i.s.match1=null;return}$(h).glow_stop(null,"#ffffff");$(h).glow(16,null,"#b41414",0,10,10)
};Mem.swapOnce=function(e,c){var b=e[Math.floor(Math.random()*(e.length-2))+1];var a=e[Math.floor(Math.random()*(e.length-3))+1];var d=b.cells[c];
b.replaceChild(a.cells[c],d);if(c==0){a.insertBefore(d,a.cells[0])}else{a.appendChild(d)}};Mem.gmd=function(){var b=Mem.t();
var c="<span style='width:260px; text-align:right; padding: 0px;'>";var d=[["flashcard","return Mem.fm()"],["matching","return Mem.sm()"],["multiple_choice","return Mem.fm('multiple_choice')"]];
for(var a=0;a<d.length;a++){if(a>0){c+=" | "}var e=d[a][0];if(e==b.s.mode){c+="<b>"+e.replace(/_/g," ")+"</b>"}else{c+="<a href='#' onclick=\""+d[a][1]+'">'+e.replace(/_/g," ")+"</a>"
}}c+="</span>";return c};Mem.restore=function(a){var b=Mem.t();var c=b.s.tbb;if(a){c=c.cloneNode(true)}b.replaceChild(c,b.tBodies[0])
};Mem.chile=function(b,c){var d=b.getElementsByTagName("*");for(var a=0;a<d.length;a++){if(d[a].id==c){return d[a]}}};Mem.fm=function(b){var a=Mem.t();
return Mem.start($(a).find(".start_button:eq("+a.s.column+") div"),b)};Mem.t=function(){return $("#editing .mem_table").get(0)};function trim(a){return a.replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1")
}Mem.pressed_number_key=function(a){$("#mem_buttons").find(".button").eq(a).click();return false};Mem.key_pressed=function(d){if($(document.activeElement)[0].nodeName.match(/^(input|textarea)$/i)){return true
}if($(".editing_wrapper, #row_dialog_table, #show_wrong_tip").length){return true}var b;if(typeof(d)=="string"){b=d.charCodeAt(0)}else{if(d.shiftKey||d.altKey||d.ctrlKey||d.metaKey){return true
}if(navigator.appName=="Netscape"){b=d.which}if(navigator.appVersion.indexOf("MSIE")!=-1){b=event.keyCode}}var a=b=="w".charCodeAt(0)||b==87||b=="1".charCodeAt(0)||b==97;
if($("#mem_buttons:visible").length==0){if(a){cm();$(".mem_table").not(".mem_table_reviewed").first().find(".start_button .button").click()
}return true}try{if(a){return Mem.pressed_number_key(0)}else{if(b=="r".charCodeAt(0)||b==82||b=="2".charCodeAt(0)||b==98){return Mem.pressed_number_key(1)
}else{if(b=="3".charCodeAt(0)||b==99){return Mem.pressed_number_key(2)}}}}catch(c){p("exception")}return true};$(document).bind("keydown",Mem.key_pressed);
