
(function(){
var CATS={
 "Animals":["elephant","giraffe","dolphin","penguin","kangaroo","squirrel","hedgehog","leopard","tortoise","butterfly"],
 "Food":["breakfast","sandwich","chocolate","pineapple","broccoli","spaghetti","cucumber","strawberry","porridge","aubergine"],
 "School":["homework","teacher","library","classroom","pencil","science","history","geography","timetable","playground"],
 "Jobs":["plumber","engineer","architect","lawyer","nurse","farmer","electrician","journalist","carpenter","scientist"],
 "Weather":["sunshine","thunder","rainbow","umbrella","forecast","blizzard","drizzle","lightning","frost","breeze"],
 "Verbs":["believe","understand","remember","celebrate","imagine","organise","whisper","stumble","borrow","achieve"]
};
var STAGES=["\uD83D\uDE42","\uD83D\uDE0A","\uD83D\uDE10","\uD83D\uDE1F","\uD83D\uDE28","\uD83D\uDE13","\uD83D\uDC80"];
var cat="Animals",word="",guessed={},wrong=0,over=false;
function $(s){return document.querySelector(s);}
function pick(){var a=CATS[cat];word=a[Math.floor(Math.random()*a.length)];guessed={};wrong=0;over=false;render();}
function render(){
 var w=word.split("").map(function(c){return guessed[c]?c:"_";}).join(" ");
 $("#hmWord").textContent=w;
 $("#hmStage").textContent=STAGES[Math.min(wrong,6)];
 var msg=$("#hmMsg");msg.className="hm-msg";msg.textContent="";
 var won=word.split("").every(function(c){return guessed[c];});
 if(won){msg.textContent="\uD83C\uDF89 Well done \u2014 you got it!";msg.className="hm-msg win";over=true;}
 else if(wrong>=6){msg.textContent="Out of guesses! The word was \u201C"+word.toUpperCase()+"\u201D.";msg.className="hm-msg lose";over=true;
  $("#hmWord").textContent=word.split("").join(" ");}
 var keys=$("#hmKeys").children;
 for(var i=0;i<keys.length;i++){var b=keys[i],l=b.getAttribute("data-l");
  b.className="";b.disabled=false;
  if(guessed[l]){b.disabled=true;b.className=word.indexOf(l)>=0?"good":"bad";}
  if(over)b.disabled=true;}
}
function guess(l){if(over||guessed[l])return;guessed[l]=true;if(word.indexOf(l)<0)wrong++;render();}
document.addEventListener("DOMContentLoaded",function(){
 var kw=$("#hmKeys");"abcdefghijklmnopqrstuvwxyz".split("").forEach(function(l){
  var b=document.createElement("button");b.textContent=l;b.setAttribute("data-l",l);
  b.onclick=function(){guess(l);};kw.appendChild(b);});
 var cw=$("#hmCats");Object.keys(CATS).forEach(function(c){
  var b=document.createElement("button");b.textContent=c;if(c===cat)b.className="on";
  b.onclick=function(){cat=c;[].forEach.call(cw.children,function(x){x.className="";});b.className="on";pick();};
  cw.appendChild(b);});
 $("#hmNew").onclick=pick;
 document.addEventListener("keydown",function(e){var k=(e.key||"").toLowerCase();if(k.length===1&&k>="a"&&k<="z")guess(k);});
 pick();
});
})();
