';document.write(s);var el=document.getElementById('canvas1');var ratio=3;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.drag={onQ:false}
window.addEventListener('mousemove',function(ev){mouseMove(ev)})
window.addEventListener('touchmove',function(ev){console.log('touchmove')
var touch=ev.targetTouches[0];ev.clientX=touch.clientX;ev.clientY=touch.clientY;ev.touchQ=true;mouseMove(ev)})
my.frees=[{id:'',per:3,passN:999,descr:'Turn three cards at a time, with no limit on passes through the deck.'},{id:'',per:3,passN:3,descr:'Turn three cards at a time, with three passes through the deck.'},{id:'',per:1,passN:3,descr:'Turn one card at a time, with three passes through the deck.'},{id:'',per:1,passN:1,descr:'Turn one card at a time, with only a single pass through the deck.'},{id:'',per:1,passN:999,descr:'Turn one card at a time, with no limit on passes through the deck.'},]
my.zIndex=20;my.autoFdnQ=true
my.deck=new Deck();}
function msg(s,clr){clr=typeof clr!=='undefined'?clr:'gold'
var div=document.getElementById('msg')
div.innerHTML=s
div.style.color=clr}
function mouseMove(ev){if(!my.drag.onQ)return
var div=my.drag.div
var lt=parseFloat(div.style.left)+ev.clientX-my.drag.x
div.style.left=lt+'px'
my.drag.x=ev.clientX
var tp=parseFloat(div.style.top)+ev.clientY-my.drag.y
div.style.top=tp+'px'
my.drag.y=ev.clientY
for(var i=0;i'+h.pTo.id,h)}
var h=my.hist.pop()
console.log('hist',h.card.name,h.pFr.id+'->'+h.pTo.id,h)
var card=h.card
var pFr=h.pTo
var pTo=h.pFr
pFr.sub(card)
pTo.add(card)
for(var i=0;i0){div.style.visibility='visible'
div.innerHTML='Deal ('+passLeft+')'}else{div.style.visibility='hidden'}}
function winCheck(){for(var i=0;i=54)break}}
for(var i=0;imax){maxi=i
max=v}}}
console.log('pileDrop',max,maxi)
if(max>0){var pFr=me.pile
var pTo=my.piles[maxi]
me.show('front')
pFr.sub(me)
pTo.add(me)
my.hist.push({pFr:pFr,pTo:pTo,card:me,alsos:me.drag.alsos.slice()})
for(var i=0;i=12){autoMove(cards)
return}
n++}else{n==0
cards=[]}}}}
return ''}
function autoMove(cards){console.log('autoMove',cards)
var pTo=null
for(var i=0;ir1.rt||r2.rtr1.bt||r2.bt '
s+=' .speaker { height: 30px; width: 30px; position: relative; overflow: hidden; display: inline-block; vertical-align:top; } '
s+=' .speaker span { display: block; width: 9px; height: 9px; background-color:'+onClr+'; margin: 10px 0 0 1px; }'
s+=' .speaker span:after { content: ""; position: absolute; width: 0; height: 0; border-style: solid; border-color: transparent '+onClr+' transparent transparent; border-width: 10px 16px 10px 15px; left: -13px; top: 5px; }'
s+=' .speaker span:before { transform: rotate(45deg); border-radius: 0 60px 0 0; content: ""; position: absolute; width: 5px; height: 5px; border-style: double; border-color:'+onClr+'; border-width: 7px 7px 0 0; left: 18px; top: 9px; transition: all 0.2s ease-out; }'
s+=' .speaker:hover span:before { transform: scale(.8) translate(-3px, 0) rotate(42deg); }'
s+=' .speaker.mute span:before { transform: scale(.5) translate(-15px, 0) rotate(36deg); opacity: 0; }'
s+=' .speaker.mute span { background-color:'+offClr+'; }'
s+=' .speaker.mute span:after {border-color: transparent '+offClr+' transparent '+offClr+';}'
s+=' '
s+='
'
return s}
function soundPlay(name,simulQ){if(!my.soundQ)return
simulQ=typeof simulQ!=='undefined'?simulQ:true
if(simulQ){if(name.length>0){var div=document.getElementById(name)
if(div.currentTime>0&&div.currentTime0)soundPlayQueue();};}
function soundToggle(){var btn='sound'
if(my.soundQ){my.soundQ=false
document.getElementById(btn).classList.add("mute")}else{my.soundQ=true
document.getElementById(btn).classList.remove("mute")}}
function suitRuleChg(){var id=document.querySelector('input[name="suitRule"]:checked').id
var n=(id.match(/\d+$/)||[]).pop()
my.suitRule=my.suitRules[n]
console.log('suitRule',id,n,my.suitRule)}
function stockPerNChg(){my.stockPerN=document.querySelector('input[name="stockPerN"]:checked').value
console.log('stockPerNChg',my.stockPerN)}
function stockPassMaxChg(){my.stockPassMax=document.querySelector('input[name="stockPassMax"]:checked').value
console.log('stockPassMaxChg',my.stockPassMax)}
function radioHTML(prompt,id,lbls,checkId,func){var s='';s+='