// PokerBingo WebApp v.1.0.1
// Copyright (c) 2009 K.Seki
const StatusIdle=0;const StatusGaming=1;const StatusWaiting=2;const CardWidth=45;const CardHeight=60;const BdOffsetX=72;const BdOffsetY=36;const NewCardX=12;const NewCardY=120;const OnePair=0;const TwoPair=1;const ThreeOfAKind=2;const Straight=3;const Flush=4;const FullHouse=5;const FourOfAKind=6;const StraightFlush=7;const RoyalFlush=8;const DirH=0;const DirV=1;const YES=1;const NO=0;var nth;var usedCard=0;var cardSetImg;var lightImg;var gameCards=0;var gameStatus;var timer;var animCounter;var deltaX=5;var deltaY;var currX;var currY;var dstX;var dstY;var langJpn=0;var handNames=["One Pair","Two Pair","Three of a Kind","Straight","Flush","Full House","Four of a Kind","Straight Flush","Royal Flush"];var handNamesJ=["ワンペア","ツーペア","スリーカード","ストレート","フラッシュ","フルハウス","フォーカード","ストレートフラッシュ","ロイヤルフラッシュ"];var scoreTable=[10,30,50,80,20,100,200,300,500];var PlayingCard=function(b,a){this.mark=b;this.number=a};PlayingCard.prototype.getMark=function(){return this.mark};PlayingCard.prototype.getNumber=function(){return this.number};var newCard;var CardStats=function(){this.kinds=[0,0,0,0];this.nums=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.min=15;this.max=0;this.minNotOne=15;this.straightStage=0;this.noc=0;this.hand=-1};CardStats.prototype.update=function(b,g,f){var a=newCard.getMark()-1;var e=newCard.getNumber();this.noc++;this.kinds[a]++;this.nums[e]++;if(e>this.max){this.max=e}if(e<this.min){this.min=e}if((e!=1)&&(e<this.minNotOne)){this.minNotOne=e}var c;var d=new Array(5);if(b==DirH){for(c=0;c<5;c++){if(gameCards[c][f]){d[c]=gameCards[c][f].getNumber()}else{d[c]=0}}this.straightStage=this.isStraight(d,f)}else{for(c=0;c<5;c++){if(gameCards[g][c]){d[c]=gameCards[g][c].getNumber()}else{d[c]=0}}this.straightStage=this.isStraight(d,g)}};CardStats.prototype.getHand=function(){return this.hand};CardStats.prototype.checkHand=function(c,l,j){if(this.noc<5){return 0}var g,m;var f=0;var a=0;for(g=1;g<=13;g++){m=this.nums[g];if(m>1){f++}if(m>a){a=m}}if(f==1){if(a==4){this.hand=FourOfAKind}else{if(a==3){this.hand=ThreeOfAKind}else{this.hand=OnePair}}return 1}if(f==2){if(a==3){this.hand=FullHouse}else{this.hand=TwoPair}return 1}var b=-1;var e=this.min;var h=this.max;var d=0;var k=new Array(5);for(g=0;g<5;g++){if(c==DirH){k[g]=gameCards[g][j].getNumber()}else{k[g]=gameCards[l][g].getNumber()}if(k[g]==1){b=g}}for(g=0;g<4;g++){if(this.kinds[g]>d){d=this.kinds[g]}}if((h-e)==4){if(checkStraight(e,h,k)){if(d==5){this.hand=StraightFlush}else{this.hand=Straight}return 1}}if((e==1)&&(h==13)&&(this.minNotOne==10)){k[b]=14;if(checkStraight(this.minNotOne,14,k)){if(d==5){this.hand=RoyalFlush;return 1}}}if(d==5){this.hand=Flush;return 1}return 0};CardStats.prototype.isStraight=function(f,g){var d;var c=this.min;var a=this.max;var e=0;var b=0;if(c==a){return 0}if(this.nums[1]==1){e=1}if(this.minNotOne>=10){for(d=0;d<4;d++){if(this.kinds[d]==this.noc){b=1;break}}if(!b){return 0}for(d=this.minNotOne;d<14;d++){if(this.nums[d]>1){return 0}}}else{if((a-c)>4){return 0}for(d=c;d<=a;d++){if(this.nums[d]>1){return 0}}}if(this.noc>2){return this.noc-2}else{return 0}};var stats=0;function setupGame(){var c,b;nth=1;gameStatus=StatusGaming;var a=document.getElementById("work").getContext("2d");a.clearRect(0,0,320,350);a=document.getElementById("board").getContext("2d");a.clearRect(0,0,320,350);if(!usedCard){usedCard=new Array(4);for(b=0;b<4;b++){usedCard[b]=new Array(13)}}for(b=0;b<4;b++){for(c=0;c<13;c++){usedCard[b][c]=0}}if(!gameCards){gameCards=new Array(5);for(b=0;b<5;b++){gameCards[b]=new Array(5)}}else{for(b=0;b<5;b++){for(c=0;c<5;c++){if(gameCards[b][c]){delete gameCards[b][c]}}}}for(b=0;b<5;b++){for(c=0;c<5;c++){gameCards[b][c]=0}}if(!stats){stats=new Array(2);stats[0]=new Array(5);stats[1]=new Array(5)}else{for(b=0;b<2;b++){for(c=0;c<5;c++){delete stats[b][c]}}}for(b=0;b<2;b++){for(c=0;c<5;c++){stats[b][c]=new CardStats()}}var a=document.getElementById("board").getContext("2d");a.save();for(c=0;c<6;c++){a.beginPath();a.lineWidth=1;a.strokeStyle="rgb(200, 200, 0)";a.moveTo(BdOffsetX,BdOffsetY+c*CardHeight);a.lineTo(BdOffsetX+CardWidth*5,BdOffsetY+c*CardHeight);a.closePath();a.stroke()}for(c=0;c<6;c++){a.beginPath();a.lineWidth=1;a.strokeStyle="rgb(200, 200, 0)";a.moveTo(BdOffsetX+c*CardWidth,BdOffsetY);a.lineTo(BdOffsetX+CardWidth*c,BdOffsetY+5*CardHeight);a.closePath();a.stroke()}}function startGame(){if(gameStatus==StatusWaiting){return}document.getElementById("Score").style.display="none";document.getElementById("HandName").style.display="none";document.getElementById("Top10Button").style.display="none";document.getElementById("Top10Table").style.display="none";if(gameStatus==StatusGaming){setupGame()}gameStatus=StatusGaming;putNewCard()}function drawCard(b,g,c,a,f){var e=(c-1)*CardWidth;var d=(g-1)*CardHeight;b.drawImage(cardSetImg,e,d,CardWidth,CardHeight,a,f,CardWidth,CardHeight)}function putNewCard(){var c=1;var a,d;while(c){a=randomInteger(1,5);d=randomInteger(1,14);if(!usedCard[a-1][d-1]){break}}usedCard[a-1][d-1]=1;newCard=new PlayingCard(a,d);var b=document.getElementById("work").getContext("2d");drawCard(b,a,d,NewCardX,NewCardY)}var currScore=0;function showResult(){var h=document.getElementById("work").getContext("2d");h.clearRect(0,0,320,350);h.beginPath();h.fillStyle="rgba(0, 0, 0, 0.6)";h.fillRect(0,0,320,350);var d,c,b;var k=[0,0,0,0,0,0,0,0,0];for(c=0;c<2;c++){for(d=0;d<5;d++){b=stats[c][d].getHand();if(b>-1){k[b]+=1}}}var g=0;var e;var a=document.getElementById("Score");var f="<p>";if(langJpn){e=handNamesJ}else{e=handNames}for(d=0;d<9;d++){f+=e[d]+" : "+k[d]+" x "+scoreTable[d]+"<br>";g+=scoreTable[d]*k[d]}currScore=g;if(langJpn){f+="</p><p>合計 : "+g+"</p>";f+="<br>Top 10にエントリーできるときは、Top10ボタンが表示されます。"}else{f+="</p><p>Total : "+g+"</p>";f+="<br>When your can enter the score into Top 10 list, Top10 button will appear."}a.innerHTML=f;document.getElementById("Score").style.display="block";getMinMax();gameStatus=StatusWaiting;timer=setInterval(checkMinMaxComplete,100)}function animUpdate(){var b=document.getElementById("work").getContext("2d");b.clearRect(currX-4,currY-4,CardWidth+8,CardHeight+8);var c=0;animCounter--;if(animCounter==0){clearInterval(timer);b=document.getElementById("board").getContext("2d");var a=dstX*CardWidth+BdOffsetX;var d=dstY*CardHeight+BdOffsetY;drawCard(b,newCard.getMark(),newCard.getNumber(),a,d);nth++;if(nth<=26){c=addNewCard(dstX,dstY);if(nth<26){putNewCard()}}gameStatus=StatusGaming;if(!c&&nth>25){showResult()}return}currX+=deltaX;currY+=deltaY;drawCard(b,newCard.getMark(),newCard.getNumber(),currX,currY)}function mouseupOnBoard(e){if(gameStatus!=StatusGaming){return}var a,i;var h=(e.offsetX-BdOffsetX)/CardWidth;var g=(e.offsetY-BdOffsetY)/CardHeight;h=Math.floor(h);g=Math.floor(g);if(h<0||g<0){return}if(h>5||g>5){return}if(gameCards[h][g]!=0){return}a=h*CardWidth+BdOffsetX;i=g*CardHeight+BdOffsetY;ctx=document.getElementById("board").getContext("2d");ctx.drawImage(lightImg,a,i);var c=a-NewCardX;var b=i-NewCardY;var f;if(c>b){f=c}else{f=b}animCounter=Math.floor(f/8);deltaX=c/animCounter;deltaY=b/animCounter;timer=setInterval(animUpdate,30);gameStatus=StatusWaiting;currX=NewCardX;currY=NewCardY;dstX=h;dstY=g}function handreset(){var a=document.getElementById("HandName");a.className="dummy";a.style.display="none";gameStatus=StatusGaming;if(nth>25){showResult()}}function fadewaay(){var a=document.getElementById("HandName");a.className="fadeAway";timer=setTimeout(handreset,2000)}function showHand(b){var a=document.getElementById("HandName");a.innerHTML=b;a.style.display="block";timer=setTimeout(fadewaay,1000);gameStatus=StatusWaiting}function addNewCard(f,e){gameCards[f][e]=newCard;stats[DirH][e].update(DirH,f,e);stats[DirV][f].update(DirV,f,e);var b;var a;var d=0;var c="";if(langJpn){b=handNamesJ}else{b=handNames}if(stats[DirH][e].checkHand(DirH,f,e)){a=stats[DirH][e].getHand();c+=b[a];d=1}if(stats[DirV][f].checkHand(DirV,f,e)){a=stats[DirV][f].getHand();if(d){c+=" & "}c+=b[a];d=1}if(d){showHand(c)}return d}function checkStraight(d,a,f){var c,g;var e=0;var b=[0,0,0,0,0];for(c=0;c<5;c++){if(f[c]==d){b[c]=YES}else{if(f[c]==a){b[c]=YES}}}for(g=d+1;g<a;g++){for(c=0;c<5;c++){if((b[c]==NO)&&(f[c]==g)){b[c]=YES;e++;break}}}if(e==3){return YES}else{return NO}}function randomInteger(a,b){return a+Math.floor(Math.random()*(b-a))}function showHelp(){if(langJpn){window.open("helpj.php","Help","scrollbars=yes")}else{window.open("help.html","Help","scrollbars=yes")}}var postedScore=0;function checkPostScoreComplete(){if(!recvComplete){return}clearInterval(timer);gameStatus=StatusGaming}function checkTop10Complete(){if(!recvComplete){return}clearInterval(timer);gameStatus=StatusGaming;$("post_button").style.display="block"}function postNewScore(){if(postedScore==currScore){return}var a=$F("player_name");if((a==null)||(a.length==0)){if(langJpn){window.alert("名前を入力して下さい。")}else{window.alert("Enter your name.")}return}post_score(a,currScore);postedScore=currScore;gameStatus=StatusWaiting;timer=setInterval(checkPostScoreComplete,200)}function checkMinMaxComplete(){if(!recvComplete){return}clearInterval(timer);gameStatus=StatusGaming;if(currScore==postedScore){return}if(currScore<=top10Min){return}$("Top10Button").style.display="block";$("post_button").style.display="none"}function enterTop10(){$("Score").style.display="none";$("Top10Button").style.display="none";$("Top10Table").style.display="block";get_scores();gameStatus=StatusWaiting;timer=setInterval(checkTop10Complete,200)}function startActivIndicator(a){a.style.display="block";a.style.webkitAnimationName="activity-indicator";a.style.webkitAnimationDuration="1s";a.style.webkitAnimationIterationCount="infinite";a.style.webkitAnimationTimingFunction="linear";a.style.webkitAnimationPlayState="paused";a.style.webkitAnimationPlayState="running"}function stopActivIndicator(a){a.style.webkitAnimationPlayState="paused";a.style.display="none"}function gotoHome(){location.href="../index.html"}window.onload=function(){document.getElementById("work").addEventListener("mouseup",mouseupOnBoard,false);var a=navigator.language;if(a.toLowerCase()=="ja-jp"){langJpn=1}setupGame();gameStatus=StatusIdle};