let w,h,g,el,ratio,dragging,dragIndex,dragHoldX,dragHoldY,my={};function moneymasterMain(){let version='1.441';w=540;h=540;my.rect={x:220,y:65,wd:300,ht:300};my.moneys=[{code:"CA",name:"Canada",symbol:"$",denoms:[5,10,25,100,200,500,1000,2000,5000],ext:'gif',paid:[200,500,1000,2000,5000,10000],make:100,dec:2,coords:[40,140]},{code:"US",name:"USA",symbol:"$",denoms:[1,5,10,25,50,100,500,1000,2000],ext:'gif',paid:[100,500,1000,2000],make:100,dec:2,coords:[40,180]},{code:"MX",name:"Mexico",symbol:"$",denoms:[20,50,100,200,500,1000,2000],ext:'gif',paid:[2000,5000,10000,20000,50000,100000],make:1000,dec:2,coords:[40,220]},{code:"UK",name:"UK",symbol:"£",denoms:[1,2,5,10,20,50,100,200],ext:'gif',paid:[200,500,1000,2000],make:100,dec:2,coords:[230,130]},{code:"EU",name:"Europe",symbol:"€",denoms:[1,2,5,10,20,50,100,500],ext:'gif',paid:[100,200,500,1000,2000,5000],make:100,dec:2,coords:[220,160]},{code:"ILS",name:"Israel",symbol:"₪",denoms:[10,50,100,200,500,1000],ext:'gif',paid:[1000,2000,5000,10000,20000,50000],make:1000,dec:2,coords:[250,190]},{code:"LBP",name:"Lebanon",symbol:"L",denoms:[250,500,1000,5000,10000,20000,50000],ext:'gif',paid:[1000,2000,5000,10000,20000,50000],make:100,dec:0,coords:[300,160]},{code:"EGP",name:"Egypt",symbol:"LE",denoms:[50,100,500,1000,2000,5000,10000],ext:'gif',paid:[1000,2000,5000,10000,20000,50000],make:1000,dec:2,coords:[320,190]},{code:"PKR",name:"Pakistan",symbol:"Rs",denoms:[1,2,5,10,20,50,100],ext:'gif',paid:[100,500,1000,2000,5000,10000,20000,50000],make:100,dec:0,coords:[290,215]},{code:"RUB",name:"Russia",symbol:"₽",denoms:[1,2,5,10,50,100,500,1000,5000],ext:'gif',paid:[500,1000,2000,5000,10000,20000],make:100,dec:0,coords:[340,130]},{code:"CNY",name:"China",symbol:"¥",denoms:[50,100,500,1000,2000,5000,10000],ext:'gif',paid:[500,1000,2000,5000,10000,20000],make:1000,dec:2,coords:[400,160]},{code:"BDT",name:"Bangladesh",symbol:"Tk",denoms:[1,2,5,10,20,50,100],ext:'gif',paid:[100,500,1000,2000,5000,10000,20000,50000],make:100,dec:0,coords:[430,215]},{code:"IN",name:"India",symbol:"Rs",denoms:[1,2,5,10,20,50,100,200],ext:'gif',paid:[100,500,1000,2000,5000,10000,20000,50000],make:100,dec:0,coords:[375,215]},{code:"HK",name:"Hong Kong",symbol:"$",denoms:[10,20,50,100,200,500,1000],ext:'gif',paid:[2000,5000,10000,20000,50000,100000],make:100,dec:2,coords:[470,240]},{code:"THB",name:"Thai",symbol:"฿",denoms:[1,2,5,10,20,50,100,500,1000],ext:'png',paid:[50,100,500,1000,2000,5000,10000],make:100,dec:0,coords:[380,265]},{code:"PHP",name:"Philippines",symbol:"P",denoms:[1,5,10,20,50,100,200],ext:'gif',paid:[200,500,1000,2000,5000,10000,20000,50000],make:100,dec:0,coords:[470,265]},{code:"MYR",name:"Malaysia",symbol:"RM",denoms:[5,10,20,50,100,200,500],ext:'gif',paid:[500,1000,2000,5000,10000,20000,50000],make:100,dec:2,coords:[350,290]},{code:"SG",name:"Singapore",symbol:"$",denoms:[5,10,20,50,100,200,500],ext:'gif',paid:[1000,2000,5000,10000,20000,50000,100000],make:100,dec:2,coords:[430,290]},{code:"JPY",name:"Japan",symbol:"¥",denoms:[1,5,10,50,100,500,1000,5000,10000],ext:'png',paid:[500,1000,2000,5000,10000,20000],make:100,dec:0,coords:[500,160]},{code:"NGN",name:"Nigeria",symbol:"₦",denoms:[5,10,20,50,100,200,500,1000],ext:'gif',paid:[20,50,100,200,500,1000,2000,5000],make:100,dec:0,coords:[220,240]},{code:"ZA",name:"South Africa",symbol:"R",denoms:[5,10,20,50,100,200,500],ext:'gif',paid:[500,1000,2000,5000,10000],make:100,dec:2,coords:[260,320]},{code:"AU",name:"Australia",symbol:"$",denoms:[5,10,20,50,100,200,500,1000,2000],ext:'gif',paid:[200,500,1000,2000,5000],make:100,dec:2,coords:[460,315]},{code:"NZD",name:"NZ",symbol:"$",denoms:[10,20,50,100,200,500,1000],ext:'gif',paid:[1000,2000,5000,10000,20000,50000,100000],make:100,dec:2,coords:[530,340]},{code:"GEN",name:"Generic",symbol:"$",denoms:[1,2,5,10,20,50,100],ext:'gif',paid:[100,200,500,1000,2000,5000],make:100,dec:2,coords:[400,360]}];my.games=[{mode:"simptot",names:["Target","simple"],showTot:true,fewCoins:false,giveChg:false,doAdd:false,score:1},{mode:"simp",names:["Target (no totals)","simple (sin totales)"],showTot:false,fewCoins:false,giveChg:false,doAdd:false,score:2},{mode:"fewtot",names:["Handful","algunas monedas"],showTot:true,fewCoins:true,giveChg:false,doAdd:false,score:2},{mode:"few",names:["Handful (no totals)","algunas monedas (sin totales)"],showTot:false,fewCoins:true,giveChg:false,doAdd:false,score:3},{mode:"givetot",names:["Give Change","da el cambio"],showTot:true,fewCoins:false,giveChg:true,doAdd:false,score:3},{mode:"give",names:["Give Change (no totals)","da el cambio (sin totales)"],showTot:false,fewCoins:false,giveChg:true,doAdd:false,score:4},{mode:"addtot",names:["Add/Remove",""],showTot:true,fewCoins:false,giveChg:false,doAdd:true,score:1}];my.game=my.games[0];this.tgt=0;my.lvls=[{name:'easy',coinMax:2,denEach:1,scoreFact:1},{name:'medium',coinMax:3,denEach:2,scoreFact:1.5},{name:'hard',coinMax:4,denEach:2,scoreFact:2},{name:'advanced',coinMax:6,denEach:2,scoreFact:2.5},];my.lvl=my.lvls[0];this.denHTML='';my.imgHome=(document.domain=='localhost')?'/mathsisfun/money/images/':'/money/images/'
let s='';my.sndHome=(document.domain=='localhost')?'/mathsisfun/images/sounds/':'/images/sounds/'
s+='';s+='';s+=''
my.snds=[];s+=`
';s+='';document.write(s);el=document.getElementById('canvasId');ratio=2;el.width=w*ratio;el.height=h*ratio;el.style.width=w+"px";el.style.height=h+"px";g=el.getContext("2d");g.setTransform(ratio,0,0,ratio,0,0);my.money=my.moneys[1];shapesNew();dragging=false;dragHoldX=0;dragHoldY=0;my.score=0;document.getElementById('score').innerHTML=my.score.toString();gameChg(0)
lvlChg(1)
gameNew();moneyPop()
el.addEventListener("mousedown",mouseDownListener,false);el.addEventListener('touchstart',ontouchstart,false);el.addEventListener("mousemove",dopointer,false);}
function setVis(id,onQ){if(onQ){document.getElementById(id).style.visibility='visible';}else{document.getElementById(id).style.visibility='hidden';}}
function moneyNew(){moneyPop()}
function gameNew(){document.getElementById('success').style.opacity=0;setVis('userLbl',my.game.showTot);setVis('userVal',my.game.showTot);setVis('checkBtn',false);setVis('custLbl',my.game.giveChg);setVis('custVal',my.game.giveChg);let userLbl=my.game.giveChg?"Change:":"Total:";document.getElementById('userLbl').innerHTML=userLbl;if(my.game.doAdd){this.tgt=newTargetAdd()}else{shapesNew();if(my.game.giveChg){console.log('tgt',this.tgt)
let tryN=0;let gives=0;do{this.tgt=newTarget();gives=my.money.paid[getRandomInt(0,my.money.paid.length-1)];console.log('gives',tryN,gives)
tryN++;}while(gives<=this.tgt&&tryN<100);document.getElementById('custVal').innerHTML=moneyFmt(gives);document.getElementById('needLbl').innerHTML="Items cost:";document.getElementById('needVal').innerHTML=moneyFmt(gives-this.tgt);}else{document.getElementById('needLbl').innerHTML="Your Target:";this.tgt=newTarget();document.getElementById('needVal').innerHTML=moneyFmt(this.tgt);}}
denHTMLSet();drawShapes();}
function newTarget(){let denoms=my.money.denoms
let sels=[];let tryCount=0;let x=0
let loopCount=0
let each=my.lvl.denEach
do{let den=Math.floor(Math.random()*denoms.length);for(let i=0;i=0;i--){let moneyVal=my.money.denoms[i];if(moneyVal!=0){let moneyN=Math.round(x/moneyVal-0.5);x-=moneyN*moneyVal;if(moneyN>0)moneys.unshift({denom:i,n:moneyN})
count+=moneyN;if(x==0)break;}}
let s=''
for(let i=0;i8)addQ=false;if(newCount<3)addQ=true;let denom=0;let coinAdd
if(addQ){let choice=Math.randomInt(my.money.denoms.length);denom=my.money.denoms[choice];coinAdd=1;}else{let choice=Math.randomInt(currCoinArr.length);denom=currCoinArr[choice].denom;coinAdd=-1;}
newCount+=coinAdd;newTotal+=coinAdd*denom;chgCount++;}while(chgCount<2||newTotal==currTotal||newTotal<=0);return(newTotal);}
function shapesNew(){my.shapes=[];my.shapesZ=10
for(let i=0;i';}}
return s;}
function moneyPop(){let pop=document.getElementById('moneyPop');pop.style.transitionDuration="0.3s";pop.style.opacity=1;pop.style.zIndex=12;pop.style.left='20px';}
function moneyYes(){let pop=document.getElementById('moneyPop');pop.style.opacity=0;pop.style.zIndex=-1;pop.style.left='-900px';}
function ontouchstart(evt){let touch=evt.targetTouches[0];evt.clientX=touch.clientX;evt.clientY=touch.clientY;evt.touchQ=true;mouseDownListener(evt)}
function ontouchmove(evt){let touch=evt.targetTouches[0];evt.clientX=touch.clientX;evt.clientY=touch.clientY;evt.touchQ=true;mouseMoveListener(evt);}
function ontouchend(){el.addEventListener('touchstart',ontouchstart,false);window.removeEventListener("touchend",ontouchend,false);if(dragging){dragging=false;moneyDrop();window.removeEventListener("touchmove",ontouchmove,false);}}
function dopointer(e){let bRect=el.getBoundingClientRect();let mouseX=(e.clientX-bRect.left)*(el.width/ratio/bRect.width);let mouseY=(e.clientY-bRect.top)*(el.height/ratio/bRect.height);let overQ=false;for(let i=0;ihighestIndex){dragHoldX=mouseX-my.shapes[i].x;dragHoldY=mouseY-my.shapes[i].y;highestIndex=i;dragIndex=i;}}}
if(dragging){my.shapes[dragIndex].shadowQ=true;if(evt.touchQ){window.addEventListener('touchmove',ontouchmove,false);}else{window.addEventListener("mousemove",mouseMoveListener,false);}}
if(evt.touchQ){el.removeEventListener("touchstart",ontouchstart,false);window.addEventListener("touchend",ontouchend,false);}else{el.removeEventListener("mousedown",mouseDownListener,false);window.addEventListener("mouseup",mouseUpListener,false);}
if(evt.preventDefault){evt.preventDefault();}
else if(evt.returnValue){evt.returnValue=false;}
return false;}
function mouseUpListener(){el.addEventListener("mousedown",mouseDownListener,false);window.removeEventListener("mouseup",mouseUpListener,false);if(dragging){dragging=false;moneyDrop();window.removeEventListener("mousemove",mouseMoveListener,false);}}
function mouseMoveListener(evt){if(dragIndex<0)return;let bRect=el.getBoundingClientRect();let mouseX=(evt.clientX-bRect.left)*(el.width/ratio/bRect.width);let mouseY=(evt.clientY-bRect.top)*(el.height/ratio/bRect.height);let minX=-my.shapes[dragIndex].wd/2;let maxX=w-my.shapes[dragIndex].wd/2;let posX=mouseX-dragHoldX;posX=(posXmaxX)?maxX:posX);let minY=-my.shapes[dragIndex].ht*0.7;let maxY=h-my.shapes[dragIndex].ht*0.3;let posY=mouseY-dragHoldY;posY=(posYmaxY)?maxY:posY);my.shapes[dragIndex].x=posX;my.shapes[dragIndex].y=posY;let div=document.getElementById('denom'+dragIndex);div.style.left=posX+'px';div.style.top=posY+'px';if(my.shapes[dragIndex].shadowQ){div.style.filter='drop-shadow(5px 5px 5px #222)';div.style.zIndex=my.shapesZ}else{div.style.filter='none';}}
function moneyDrop(){let me=my.shapes[dragIndex];me.shadowQ=false;if(me.typ=='base'){if(hitTest(my.rect,me.x+me.wd/2,me.y+me.ht/2)){soundPlay('sndDrop')
let temp=new Money(me.denom);temp.setxy(me.x,me.y);temp.typ='copy';my.shapes.push(temp);denHTMLSet();}
me.moveStt();}
if(me.typ=='copy'){if(hitTest(my.rect,me.x+me.wd/2,me.y+me.ht/2)){}else{soundPlay('sndUndo')
my.shapes.splice(dragIndex,1);denHTMLSet();}}
drawShapes();}
function moneyPopHTML(id,yp,ht){let s='';s+='
';s+=moneyHTML();s+='';s+='
';return s;}
function moneyHTML(){let s='';s+='
';s+='';for(let i=0;i'+m.name+'';}
s+='
';return s;}
function moneyDo(n){my.money=my.moneys[n];shapesNew();gameNew();let pop=document.getElementById('moneyPop');pop.style.opacity=0;pop.style.zIndex=-1;pop.style.left='-900px';}
function gameHTML(){let s='';s+='