/*
If you improve this software or find a bug, please let me know: orciu@users.sourceforge.net
Project home page: http://sourceforge.net/projects/jsholdem/

decks!...ana,asi,wg,1-5.jpg
LOSER! -150, SPLIT POT!, WINNER!...not "bet:0"

button @ end of round: "show all cards"
(sometimes) don't show winner's cards if no one else went in against him
autoplay: all cards face up

tournaments
network human players
busted players disappear? ask to buy in again (.rebuy?)
more options/stats:#games started/completed/won/lost;longest/shortest time to win/lose;most/least rounds to win/lose;avg pot size;biggest nemesis
get rid of frames & use tables
live blind,check/bet in the dark/out of turn,exact rules on raising after an all in?
offline version

old bg:00A300
*/
var BACK_HOME="Home",BACK_HOME_LINK="http://www.xzone.com.au/tlt/products.htm",SUIT_LINK="http://www.xzone.com.au/tlt/products.htm";
var START_DATE,NUM_ROUNDS,STOP_AUTOPLAY=0,RUN_EM=0,STARTING_BANKROLL=500,SMALL_BLIND,BIG_BLIND,BG_COLOR="006600",BG_HILITE="EFEF30",speed=1,HUMAN_WINS_AGAIN;
var cards=new Array(52),players,board,deck_index,button_index,current_bettor_index,current_bet,current_min_raise;
var addcount=1,madcount=1;

function player(name,bankroll,carda,cardb,status,total_bet,subtotal_bet){this.name=name;this.bankroll=bankroll;this.carda=carda;this.cardb=cardb;this.status=status;this.total_bet=total_bet;this.subtotal_bet=subtotal_bet}
function init(){
 make_deck();
 new_game();
// change_name();
// Not Needed
//write_frame("board2","<html><body bgcolor="+BG_COLOR+" text=FFFFFF><table height=100%><tr><td valign=center><tt><b>Hello!</b> This software is still being improved. The opponent bots need to be smarter. If it isn't challenging now, hopefully it will be soon. And please visit some of our sponsors' links. <small><i>August 2005</i></small></tt></td></tr></table></body></html>");

}
//function make_deck(){var i,j=0;for(i=2;i<15;i++){cards[j++]="h"+i;cards[j++]="d"+i;cards[j++]="c"+i;cards[j++]="s"+i;}}
function make_deck(){var i,j=0;for(i=2;i<15;i++){cards[j++]="c"+i;cards[j++]="d"+i;cards[j++]="h"+i;cards[j++]="s"+i;}}
function new_game(){
 START_DATE=new Date();
 NUM_ROUNDS=0;
 HUMAN_WINS_AGAIN=0;
 document.getElementById("general").innerHTML = "&nbsp;";
 var names1 = ["Lisa","Fazza","John","Terry","Craig"];
 var names2 = ["Tekin","Lisa","Mary","Christine","Melinda"];
 var names3 = ["Ashlee","Ergs","George","Shazza","Elizabeth"];
 var names4 = ["Gemma","Orks","Norman","Ben","Ergs"];

 namei=Math.floor(Math.random()*5);
 var my_players=[
  new player(names1[namei],0,"","","",0,0),
  new player(names2[namei],0,"","","",0,0),
  new player(names3[namei],0,"","","",0,0),
  new player(names4[namei],0,"","","",0,0)
 ];
 players=new Array(my_players.length+1);
 var player_name=getCookie("playername");
 if(!player_name)player_name="You";
 players[0]=new player(player_name,0,"","","",0,0);
 my_players.sort(compRan);
 for(var i=1;i<players.length;i++)players[i]=my_players[i-1];
 reset_player_statuses(0);
 clear_bets();
 for(var i=0;i<players.length;i++)players[i].bankroll=STARTING_BANKROLL;
 button_index=Math.floor(Math.random()*players.length);
 new_round();
}
function new_round(){
 RUN_EM=0;
 NUM_ROUNDS++;
 var num_playing=0;
 for(var i=0;i<players.length;i++){if(has_money(i))num_playing+=1;}
 if(num_playing<2){
  document.getElementById("general").innerHTML = "<font size=+2>Play again?</font><form name=f><input name=y type=button value='  Yes  ' onclick='new_game()'><input type=button value='  No  ' onclick='confirm_quit()'></form>";
  return;
 }
 preload_pix();
 reset_player_statuses(1);
 clear_bets();
 clear_pot();
 current_min_raise=0;
 collect_cards();
 write_ad();
 button_index=get_next_player_position(button_index,1);
 for(var i=0;i<players.length;i++)write_player(i,0,0,1);
// for(var i=0;i<board.length;i++)write_frame("board"+i,"<html><body bgcolor="+BG_COLOR+"></body></html>");
 for(var i=0;i<board.length;i++){
   //write_frame("board"+i,"<html><body bgcolor="+BG_COLOR+"></body></html>");
   document.getElementById("board"+i).src="cards/blank.gif";
 }

 madcount++; if (madcount>6) madcount = 1;

 for (i=0;i<5;i++) {
   document.getElementById("board"+i).style.filter = "alpha(opacity=0";
   document.getElementById("board"+i).style.MozOpacity=0;
 }


/*
  Places Adds when more than one round played.
if(NUM_ROUNDS>1){
write_frame("board3","<html><body bgcolor="+BG_COLOR+"><center><table height=100%><tr><td valign=center><font color=FFFFFF><tt>Play poker for real money (no porn though) at Gus Hansen's PokerChamps! <b>Play against Gus!</b><div align=right>>>></div></tt></font></td></tr></table></center></body></html>");
write_frame("board4","<html><body bgcolor="+BG_COLOR+"><center><table height=100%><tr><td valign=center><a href='https://secure.pokerchamps.com/pokerpublic/arequest?acode=UXBIHDUC' target=_blank><img src=pcbanner.gif border=0></a></td></tr></table></center></body></html>");
} */

 shuffle();
 blinds_and_deal();
}
function collect_cards(){board=new Array(5);for(var i=0;i<players.length;i++){players[i].carda="";players[i].cardb="";}}
function shuffle(){deck_index=0;cards.sort(compRan);}
function blinds_and_deal(){
 SMALL_BLIND=5;
 BIG_BLIND=10;
 var num_playing=0;
 for(var i=0;i<players.length;i++){if(has_money(i))num_playing+=1;}
 if(num_playing==3){SMALL_BLIND=10;BIG_BLIND=20;}
 else if(num_playing<3){SMALL_BLIND=25;BIG_BLIND=50;}
 var small_blind=get_next_player_position(button_index,1);
 bet(small_blind,SMALL_BLIND);
 write_player(small_blind,0,0,0);
 var big_blind=get_next_player_position(small_blind,1);
 bet(big_blind,BIG_BLIND);
 write_player(big_blind,0,0,0);
 players[big_blind].status="OPTION";
 current_bettor_index=get_next_player_position(big_blind,1);
 deal_and_write_a();
}
function deal_and_write_a(){
 var pause_time=0;
 for(var i=0;i<players.length;i++){
  var j=get_next_player_position(button_index,1+i);
  if(players[j].carda)break;
  players[j].carda=cards[deck_index++];

/*
players[0].carda="c9";
players[1].carda="h7";
players[2].carda="s8";
players[3].carda="h12";
players[4].carda="c7";
//*/

  setTimeout("write_player("+j+",0,0,1)",pause_time*speed);
  pause_time+=550;
 }
 setTimeout("deal_and_write_b()",pause_time*speed);
}
function deal_and_write_b(){
 var pause_time=0;
 for(var i=0;i<players.length;i++){
  var j=get_next_player_position(button_index,1+i);
  if(players[j].cardb)break;
  players[j].cardb=cards[deck_index++];

/*
players[0].cardb="d9";
players[1].cardb="s10";
players[2].cardb="s11";
players[3].cardb="d13";
players[4].cardb="h14";
//*/

  setTimeout("write_player("+j+",0,0,1)",pause_time*speed);
  pause_time+=550;
 }
 setTimeout("main()",pause_time*speed);
}
function deal_flop(){
 var pause_time=777;
 for(var i=0;i<3;i++)board[i]=cards[deck_index++];

/*
board[0]="s9";
board[1]="s13";
board[2]="c8";
//*/



 for (i=0;i<5;i++) {
   document.getElementById("board"+i).style.filter = "alpha(opacity=100";
   document.getElementById("board"+i).style.MozOpacity=1;
 }

 setTimeout("write_board('0')",(pause_time+100)*speed);
 setTimeout("write_board('1')",(pause_time+250)*speed);
 setTimeout("write_board('2')",(pause_time+400)*speed);
 if(get_num_betting()>1)setTimeout("main()",(pause_time+1000)*speed);
 else setTimeout("ready_for_next_card()",999*speed);
}
function deal_fourth(){
 var pause_time=777;
 board[3]=cards[deck_index++];

//board[3]="s4";

 setTimeout("write_board('3')",(pause_time+100)*speed);
 if(get_num_betting()>1)setTimeout("main()",2000*speed);
 else setTimeout("ready_for_next_card()",999*speed);
}
function deal_fifth(){
 var pause_time=777;
 board[4]=cards[deck_index++];

//board[4]="d7";

 setTimeout("write_board('4')",(pause_time+100)*speed);
 if(get_num_betting()>1)setTimeout("main()",2000*speed);
 else setTimeout("ready_for_next_card()",999*speed);
}
function write_board(n){
 var pic=get_next_pic();
 var pic_click="";
//if(pix.length<50){pic=board[n].substring(0,1)+".gif";pic_click=SUIT_LINK;}
if(pix.length<50){pic=board[n]+".gif";pic_click=SUIT_LINK;}
  //write_frame("board"+n,"<html><body bgcolor="+BG_COLOR+" leftmargin=3><table width=100% bgcolor=FFFFFF><tr><td valign=top>"+
  //get_card_html(board[n])+"</td></tr></table><a href=\""+pic_click+"\" target=_blank><img border=0 width=100% src='cards/"+
  //pic+"'></a><br><table width=100% height=100% bgcolor=FFFFFF><tr><td></td></tr></table></body></html>");
   document.getElementById("board"+n).src="cards/"+pic;
// ** TEKIN
//  alert(board[n]);
}
function main(){
 var increment_bettor_index=0;
 if(players[current_bettor_index].status=="BUST"||players[current_bettor_index].status=="FOLD"){
  increment_bettor_index=1;
 }else if(!has_money(current_bettor_index)){
  players[current_bettor_index].status="CALL";
  increment_bettor_index=1;
 }else if(players[current_bettor_index].status=="CALL"&&players[current_bettor_index].subtotal_bet==current_bet){
  increment_bettor_index=1;
 }else{
  players[current_bettor_index].status="";
  if(current_bettor_index==0){
   var call_button_text="     Call     ";
   var fold_button="<input type=button value=Fold onclick='human_fold()'>";
   var bet_button_text="   Raise   ";
   var to_call=current_bet-players[0].subtotal_bet;
   if(to_call>players[0].bankroll)to_call=players[0].bankroll;
   if(to_call==0){call_button_text="   Check   ";fold_button="";bet_button_text="     Bet     ";}
   var quick_values=new Array(6);
   if(to_call<players[0].bankroll)quick_values[0]=current_min_raise;
   var quick_start=quick_values[0];
   if(quick_start<20)quick_start=20;
   else quick_start=current_min_raise+20;
   for(var i=0;i<5;i++){if(quick_start+20*i<players[0].bankroll)quick_values[i+1]=quick_start+20*i;}
   var bet_or_raise="Bet";
   var quick_color="";
   if(to_call>0){bet_or_raise="Raise";quick_color=" bgcolor="+BG_COLOR;}
   var quick_bets="<b>Quick "+bet_or_raise+"s</b><br> <table><tr>";
   for(var i=0;i<3;i++){
    if(quick_values[i])quick_bets+="<td><input style='width:60px;height:28px;' type=button onclick='handle_human_bet("+quick_values[i]+")' value='"+quick_values[i]+"'>"+"</td>";
   }
   quick_bets+="<td rowspan=2><input style='color:red;width:60px;height:60px;' type=button onclick='handle_human_bet("+players[0].bankroll+")' value='All In!'></td>";
   quick_bets+="</tr><tr>";
   for(var i=3;i<6;i++){
    if(quick_values[i])quick_bets+="<td><input style='width:60px;height:28px;' type=button onclick='handle_human_bet("+quick_values[i]+")' value='"+quick_values[i]+"'>"+"</td>";
   }
   quick_bets+="</tr></table>";

   quick_bets+="<form onsubmit='handle_human_bet(b.value);return false;'><font size=+2>&nbsp;</font><input type=text size=4 name=b><input type=submit value="+bet_or_raise+"></form>";
   var html="<table width=100%>"+
    "<tr><td><font size=+2><b>Current total bet: "+current_bet+"</b><br> You need <font color=FF0000 size=+3>"+to_call+"</font> more to call.</font>"+
    "<form name=f><input name=c type=button value='"+call_button_text+"' onclick='human_call()'>"+fold_button+
    "</form></td><td valign=bottom><table><tr><td align=center>"+quick_bets+"</td></tr></table></td></tr></table>";

   document.getElementById("pot").innerHTML = get_pot_size();
   write_player(0,1,0,1);
   document.getElementById("general").innerHTML = html;

   return;
  }else{
   write_player(current_bettor_index,1,0,1);
   setTimeout("bot_bet("+current_bettor_index+")",777*speed);
   return;
  }
 }
 var can_break=true;
 for(var j=0;j<players.length;j++){
  var s=players[j].status;
  if(s=="OPTION"){can_break=false;break;}
  if(s!="BUST"&&s!="FOLD"){if(has_money(j)&&players[j].subtotal_bet<current_bet){can_break=false;break;}}
 }
 if(increment_bettor_index)current_bettor_index=get_next_player_position(current_bettor_index,1);
 if(can_break)setTimeout("ready_for_next_card()",999*speed);
 else main();
}
function handle_end_of_round(){
 var candidates=new Array(players.length);
 var allocations=new Array(players.length);
 var my_total_bets_per_player=new Array(players.length);
 for(var i=0;i<candidates.length;i++){
  allocations[i]=0;
  my_total_bets_per_player[i]=players[i].total_bet;
  if(players[i].status!="FOLD"&&players[i].status!="BUST")candidates[i]=players[i];
 }

 var my_total_pot_size=get_pot_size();
 var my_best_hand_name="";
 var best_hand_players;
 while(1){
  var winners=get_winners(candidates);
  if(!my_best_hand_name){
   my_best_hand_name=get_last_winning_hand_name();
   best_hand_players=winners;

if(winners[0])HUMAN_WINS_AGAIN++;
else HUMAN_WINS_AGAIN=0;

  }
  if(!winners)break;

  var lowest_in_for=my_total_pot_size*2;
  var num_winners=0;
  for(var i=0;i<winners.length;i++){
   if(!winners[i])continue;
   num_winners++;
   if(my_total_bets_per_player[i]<lowest_in_for)lowest_in_for=my_total_bets_per_player[i];
  }

  var my_pot=0;
  for(var i=0;i<players.length;i++){
   if(lowest_in_for>=my_total_bets_per_player[i]){
    my_pot+=my_total_bets_per_player[i];
    my_total_bets_per_player[i]=0;
   }else{
    my_pot+=lowest_in_for;
    my_total_bets_per_player[i]-=lowest_in_for;
   }
  }

  var share=my_pot/num_winners;
  for(var i=0;i<winners.length;i++){
   if(my_total_bets_per_player[i]<.01)candidates[i]=null;
   if(!winners[i])continue;
   allocations[i]+=share;
   my_total_pot_size-=share;
  }
 }

 var winner_text="";
 var human_loses=0;
 for(var i=0;i<allocations.length;i++){
  if(allocations[i]>0){
   var a_string=""+allocations[i];
   var dot_index=a_string.indexOf(".");
   if(dot_index>0){
    a_string=""+a_string+"00";
    allocations[i]=a_string.substring(0,dot_index+3)-0;
   }
   winner_text+=allocations[i]+" to "+players[i].name+". ";
   players[i].bankroll+=allocations[i];
   if(best_hand_players[i])write_player(i,2,1,0);
   else write_player(i,1,1,0);
  }else{
   if(!has_money(i)&&players[i].status!="BUST"){
    players[i].status="BUST";
    if(i==0)human_loses=1;
   }
   if(players[i].status!="FOLD")write_player(i,0,1,0);
  }
 }


 var detail="";
 for(var i=0;i<players.length;i++){
  detail+=players[i].name+" bet "+players[i].total_bet+" & got "+allocations[i]+".\\n";
 }
 detail=" &nbsp;<input type=button onclick='alert(\""+detail+"\")' value='details'>";

 
 var hilite_a=" name=c",hilite_b="";
 if(human_loses){hilite_a="",hilite_b=" name=c";}
 var the_buttons="<input"+hilite_a+" type=button value='Continue Game' onclick='new_round()'><input"+hilite_b+" type=button value='Restart Game' onclick='confirm_new()'>";
 if(players[0].status=="BUST"&&!human_loses){
  the_buttons="<input name=c type=button value='Restart Game' onclick='STOP_AUTOPLAY=1'>";
  setTimeout("autoplay_new_round()",1500+1100*speed);
 }

 var html="<font size=+2 color=FF0000><b>WINNER! "+my_best_hand_name+". "+winner_text+"</b></font>"+detail+"<br>"+
  "<form name=f>"+the_buttons+"<input type=button value=Quit onclick='confirm_quit()'></form>";

 document.getElementById("pot").innerHTML = get_pot_size();
 document.getElementById("general").innerHTML = html;

 var elapsed_seconds=((new Date())-START_DATE)/1000;
 var elapsed_minutes=""+(elapsed_seconds/60);
 var dot_i=elapsed_minutes.indexOf(".");
 if(dot_i>0)elapsed_minutes=elapsed_minutes.substring(0,dot_i);
 var and_seconds=""+(elapsed_seconds-elapsed_minutes*60);
 dot_i=and_seconds.indexOf(".");
 if(dot_i>0)and_seconds=and_seconds.substring(0,dot_i);

 if(human_loses==1)alert("Sorry, you busted, "+players[0].name+".\n\n"+elapsed_minutes+" minutes "+and_seconds+" seconds, "+NUM_ROUNDS+" deals.");
 else{
  var num_playing=0;
  for(var i=0;i<players.length;i++){if(has_money(i))num_playing+=1;}
  if(num_playing<2){
   var end_msg="GAME OVER!";
   if(has_money(0))end_msg+="\n\nYOU WIN "+players[0].name.toUpperCase()+"!!!";
   else end_msg+="\n\nSorry you lost.";
   alert(end_msg+"\n\nThis game lasted "+elapsed_minutes+" minutes "+and_seconds+" seconds, "+NUM_ROUNDS+" deals.");
  }
 }
}
function autoplay_new_round(){if(STOP_AUTOPLAY>0){STOP_AUTOPLAY=0;new_game();}else new_round();}
function ready_for_next_card(){
 var num_betting=get_num_betting();
 for(var i=0;i<players.length;i++){players[i].total_bet+=players[i].subtotal_bet;}
 clear_bets();
 if(board[4]){
  handle_end_of_round();
  return;
 }
 current_min_raise=BIG_BLIND;
 reset_player_statuses(2);
 if(players[button_index].status=="FOLD")players[get_next_player_position(button_index,-1)].status="OPTION";
 else players[button_index].status="OPTION";
 current_bettor_index=get_next_player_position(button_index,1);
 var show_cards=0;
 if(num_betting<2)show_cards=1;

 if(!RUN_EM)for(var i=0;i<players.length;i++)if(players[i].status!="BUST"&&players[i].status!="FOLD")write_player(i,0,show_cards,1);

 if(num_betting<2)RUN_EM=1;
 if(!board[0])deal_flop();
 else if(!board[3])deal_fourth();
 else if(!board[4])deal_fifth();
}
function bet(player_index,bet_amount){
 if(players[player_index].status=="FOLD"){}						//FOLD
 else if(bet_amount>=players[player_index].bankroll){					//ALL IN
  bet_amount=players[player_index].bankroll;

  var old_current_bet=current_bet;

  if(players[player_index].subtotal_bet+bet_amount>current_bet)
   current_bet=players[player_index].subtotal_bet+bet_amount;

   var new_current_min_raise=current_bet-old_current_bet;
   if(new_current_min_raise>current_min_raise)current_min_raise=new_current_min_raise;

  players[player_index].status="CALL";
 }else if(bet_amount+players[player_index].subtotal_bet==current_bet){			//CALL
  players[player_index].status="CALL";
 }else if(current_bet>players[player_index].subtotal_bet+bet_amount){			//2 SMALL

//COMMENT OUT TO FIND BUGS
  if(player_index==0)

   alert("The current bet to match is "+current_bet+"."+
         "\nYou must bet a total of at least "+(current_bet-players[player_index].subtotal_bet)+" or fold.");
  return 0;
 }else if(bet_amount+players[player_index].subtotal_bet>current_bet			//RAISE 2 SMALL
          &&get_pot_size()>0
          &&bet_amount+players[player_index].subtotal_bet-current_bet<current_min_raise){

//COMMENT OUT TO FIND BUGS
  if(player_index==0)

   alert("Minimum raise is currently "+current_min_raise+".");
  return 0;
 }else{											//RAISE
  players[player_index].status="CALL";

  var old_current_bet=current_bet;
  current_bet=players[player_index].subtotal_bet+bet_amount;

  if(get_pot_size()>0){
   current_min_raise=current_bet-old_current_bet;
   if(current_min_raise<BIG_BLIND)current_min_raise=BIG_BLIND;
  }
 }
 players[player_index].subtotal_bet+=bet_amount;
 players[player_index].bankroll-=bet_amount;
 write_basic_general();
 return 1;
}
function human_call(){
 players[0].status="CALL";
 current_bettor_index=get_next_player_position(0,1);
 bet(0,current_bet-players[0].subtotal_bet);
 write_player(0,0,0,0);
 write_ad();
 main();
}
function human_raise(){
 var to_call=current_bet-players[0].subtotal_bet;
 var prompt_text="Minimum raise is "+current_min_raise+". How much do you raise? DON'T include the "+to_call+" needed to call.";
 if(to_call==0)prompt_text="The minimum bet is "+current_min_raise+". How much you wanna bet?";
 var bet_amount=prompt(prompt_text,"");
 if(bet_amount==null)return;
 handle_human_bet(bet_amount);
}
function handle_human_bet(bet_amount){
 bet_amount=""+bet_amount;
 var m="";
 for(var i=0;i<bet_amount.length;i++){
  var c=bet_amount.substring(i,i+1);
  if(c=="0"||c>0)m+=""+c;
 }
 if(m=="")return;
 bet_amount=m-0;
 if(bet_amount<0||isNaN(bet_amount))bet_amount=0;
 var to_call=current_bet-players[0].subtotal_bet;
 bet_amount+=to_call;
 var is_ok_bet=bet(0,bet_amount);
 if(is_ok_bet){
  players[0].status="CALL";
  current_bettor_index=get_next_player_position(0,1);
  write_player(0,0,0,0);
  write_ad();
  main();
 }
}
function human_fold(){
 players[0].status="FOLD";
 current_bettor_index=get_next_player_position(0,1);
 write_player(0,0,0,0);
 write_basic_general();
 write_ad();
 main();
}
function bot_bet(x){
 var b=0;
 var n=current_bet-players[x].subtotal_bet;
 if(!board[0])b=get_preflop_bet();
 else b=get_postflop_bet();
 if(b>=players[x].bankroll)	//ALL IN
   players[x].status="";
 else if(b<n){			//BET 2 SMALL
  b=0;
  players[x].status="FOLD";
 }else if(b==n){		//CALL
  players[x].status="CALL";
 }else if(b>n){
  if(b-n<current_min_raise){	//RAISE 2 SMALL
   b=n;
   players[x].status="CALL";
  }else players[x].status="";	//RAISE
 }
 if(bet(x,b)==0){
  players[x].status="FOLD";
  bet(x,0);
 }
 write_player(current_bettor_index,0,0,0);
 current_bettor_index=get_next_player_position(current_bettor_index,1);
 main();
}

// Tekin Converted so far - allot can be removed
function write_player(n,hilite,show_cards,mode){
 var ie=document.all;
 var carda="",cardb="";
 var base_background=BG_COLOR;
 if(hilite==1)base_background=BG_HILITE;
 else if(hilite==2)base_background="FF0000";
 if(mode == 1) {
   if (ie) {
      document.getElementById("carda"+n).style.filter = "alpha(opacity=100";
      document.getElementById("cardb"+n).style.filter = "alpha(opacity=100";
   } else {
      document.getElementById("carda"+n).style.MozOpacity=1;
      document.getElementById("cardb"+n).style.MozOpacity=1;
   }

 }

 if(players[n].status=="FOLD") {
   //base_background="999999";
   if (ie) {
      document.getElementById("carda"+n).style.filter = "alpha(opacity=50";
      document.getElementById("cardb"+n).style.filter = "alpha(opacity=50";
   } else {
      document.getElementById("carda"+n).style.MozOpacity=.5;
      document.getElementById("cardb"+n).style.MozOpacity=.5;
   }
 }
 if(players[n].status=="BUST") {
   if (ie) {
      document.getElementById("carda"+n).style.filter = "alpha(opacity=50";
      document.getElementById("cardb"+n).style.filter = "alpha(opacity=50";
   } else {
      document.getElementById("carda"+n).style.MozOpacity=.5;
      document.getElementById("cardb"+n).style.MozOpacity=.5;
   }
 }
 var background=" background=cardback.gif";
 var background_a="";
 var background_b="";
 var background_color_a=base_background;
 var background_color_b=base_background;
 if(players[n].carda){
  background_a=background;
  if(n==0||(show_cards&&players[n].status!="FOLD")){
   background_a="";
   background_color_a="FFFFFF";
   //carda=get_card_html(players[n].carda);
   document.getElementById("carda"+n).src = "cards/"+players[n].carda+".gif";
  } else {
   document.getElementById("carda"+n).src = "cards/back.gif";
  }
 } else {
   document.getElementById("carda"+n).src = "cards/blank.gif";
 }
 if(players[n].cardb){
  background_b=background;
  if(n==0||(show_cards&&players[n].status!="FOLD")){
   background_b="";
   background_color_b="FFFFFF";
   //cardb=get_card_html(players[n].cardb);
   document.getElementById("cardb"+n).src = "cards/"+players[n].cardb+".gif";
  } else {
   document.getElementById("cardb"+n).src = "cards/back.gif";
  }
 } else {
   document.getElementById("cardb"+n).src = "cards/blank.gif";
 }
 //alert(n+':'+carda +':'+ cardb);
 var button="";
 if(n==button_index)button="<img src=hat.gif>";
 var bet_text="";
 var allin="bet:";
 if(!has_money(n))allin="<font color=FF0000>ALL IN:</font>";
 if(mode!=1||players[n].subtotal_bet>0||players[n].status=="CALL") bet_text="<b><font size=+2>"+allin+" <font color=00EE00>"+players[n].subtotal_bet+"</font></font></b>";
 else if(!has_money(n)&&players[n].status!="FOLD"&&players[n].status!="BUST") bet_text="<b><font size=+2 color=FF0000>ALL IN</font></b>";
 if(players[n].status=="FOLD") bet_text="<b><font size=+2>FOLDED</font></b>";
 else if(players[n].status=="BUST") bet_text="<b><font size=+2 color=FF0000>BUSTED</font></b>";
 //alert("bet_text"+n);


 var html="<html><body bgcolor="+base_background+" topmargin=4 bottommargin=0><pre><b><font size=+2>"+button+players[n].name+"</font></b>"
 +" ["+players[n].bankroll+"]"
 +"<font size=-1 face=times color="+base_background+">\nCHEAT! "+players[n].carda.substring(0,1)+make_readable_rank(players[n].carda.substring(1))+" "+players[n].cardb.substring(0,1)+make_readable_rank(players[n].cardb.substring(1))+"\n</font>"
 +"<center><table bgcolor="+base_background+" height=87 width=130><tr align=center><td bgcolor="+background_color_a+" width=50%"+background_a+">"+carda+"</td><td></td><td  bgcolor="+background_color_b+" width=50%"+background_b+">"+cardb+"</td></tr></table><small>"
 if(navigator.userAgent.indexOf("MSIE")>-1)html+="\n";//FF
 html+="\n</small>"+bet_text+"</center></pre></body></html>";

 if (bet_text+"!" == "!") bet_text = "<b><font size=+2>&nbsp;</font></b>";
/* if (show_cards) {
    if (players[n].carda+"!" != "!") document.getElementById("carda"+n).src = "cards/"+players[n].carda+".gif";
    if (players[n].cardb+"!" != "!") document.getElementById("cardb"+n).src = "cards/"+players[n].cardb+".gif";
 } else {
    if (players[n].carda+"!" != "!") document.getElementById("carda"+n).src = "cards/back.gif";
    if (players[n].cardb+"!" != "!") document.getElementById("cardb"+n).src = "cards/back.gif";
 } */
 document.getElementById("bga"+n).style.backgroundColor = base_background;
 document.getElementById("bgb"+n).style.backgroundColor = base_background;
 document.getElementById("player_bankroll"+n).innerHTML = players[n].bankroll;
 document.getElementById("player_name"+n).innerHTML = "&nbsp;" + players[n].name + "&nbsp;" + button;
 document.getElementById("bet_text"+n).innerHTML = bet_text;
 //write_frame("player"+n,html);
}
/*
function get_card_html(card){
 var suit=card.substring(0,1);
 var color="FF0000";
 if(suit=="c"||suit=="s")color="000000";
 var r=card.substring(1);
 var rank=make_readable_rank(r);
 return "<font size=+2 color="+color+"><b>"+rank+"</b></font> <a href='"+SUIT_LINK+"' target=_blank><img src="+suit+".gif border=0 title="+suit+" alt="+suit+"></a>";
} */

function make_readable_rank(r){
 if(r<11)return r;
 else if(r==11)return "J";
 else if(r==12)return "Q";
 else if(r==13)return "K";
 else if(r==14)return "A";
}
//function get_pot_size_html(){return "<font color=00EE00 size=+4><b>TOTAL POT: "+get_pot_size()+"</b></font>";}
function get_pot_size(){var p=0;for(var i=0;i<players.length;i++)p+=players[i].total_bet+players[i].subtotal_bet;return p;}
function clear_bets(){
 for(var i=0;i<players.length;i++)players[i].subtotal_bet=0;
 current_bet=0;
}
function clear_pot(){for(var i=0;i<players.length;i++)players[i].total_bet=0;}
function reset_player_statuses(type){
 for(var i=0;i<players.length;i++){
  if(type==0)players[i].status="";
  else if(type==1&&players[i].status!="BUST")players[i].status="";
  else if(type==2&&players[i].status!="FOLD"&&players[i].status!="BUST")players[i].status="";
 }
}
function get_num_betting(){
 var n=0;
 for(var i=0;i<players.length;i++)if(players[i].status!="FOLD"&&players[i].status!="BUST"&&has_money(i))n++;
 return n;
}
function change_name(){
 var name=prompt("What is your name?",getCookie("playername"));
 write_ad();
 if(!name)return;
 players[0].name=name;
 write_player(0,0,0,0);
 setCookie("playername",name);
}
function write_frame(f,html,n){
 try{
  frames[f].document.open("text/html","replace");
  frames[f].document.write(html);
  frames[f].document.close();
  if(navigator.userAgent.indexOf("MSIE")>-1||f=="ad")frames[f].location.reload();//FF
 }catch(e){//FF
  if(!n)n=0;
  if(n<9)write_frame(f,html,++n);
 }
}
function write_basic_general(){
  document.getElementById("pot").innerHTML = get_pot_size();
  document.getElementById("general").innerHTML = "&nbsp;";
}

function set_deck(v){
 if(v<1)pix=original_pix;
 else pix=get_base_deck();
 preload_pix();
 setCookie("deck",v);
 if(board)for(var i=0;i<board.length;i++)if(board[i])write_board(i);
}
function get_base_deck(){
 var n=Math.floor(Math.random()*4);
 if(n<1)return ['d.gif'];
 if(n<2)return ['c.gif'];
 if(n<3)return ['s.gif'];
 return ['h.gif'];
}
function set_speed(s,i){speed=s;setCookie("gamespeed",i);}
var adt;
function write_ad(n){
 if(adt)clearTimeout(adt);
 if(!n)n=9000;n+=1000;if(n>25000)n=25000;

 addcount++;
 if (addcount > 4) addcount = 1;
 adt=setTimeout("write_ad("+n+")",n);
}

function get_next_player_position(i,delta){
 var j=0,step=1;if(delta<0)step=-1;
 while(1){
  i+=step;
  if(i>=players.length)i=0;
  else if(i<0)i=players.length-1;
  if(players[i].status=="BUST"||players[i].status=="FOLD"||++j<delta){}
  else break;
 }
 return i;
}
var original_pix,pix=get_base_deck();var pix_index=0;
function get_next_pic(){if(!pix)return "#";if(++pix_index>=pix.length)pix_index=0;return pix[pix_index];}
function init_pix(d){d.sort(compRan);pix=d;original_pix=d;preload_pix();}
var preload_a=new Image();var preload_b=new Image();var preload_c=new Image();var preload_d=new Image();var preload_e=new Image();
function preload_pix(){
 var i=pix_index;
 if(++i>=pix.length)i=0;preload_a.src=pix[i];
 if(++i>=pix.length)i=0;preload_b.src=pix[i];
 if(++i>=pix.length)i=0;preload_c.src=pix[i];
 if(++i>=pix.length)i=0;preload_d.src=pix[i];
 if(++i>=pix.length)i=0;preload_e.src=pix[i];
}

var i,j=0;
var preload = new Array();
for (i=2;i<15;i++) {
    preload[j] = new Image();
    preload[j].src = "cards/c"+i+".gif";
    j++;
    preload[j] = new Image();
    preload[j].src = "cards/d"+i+".gif";
    j++;
    preload[j] = new Image();
    preload[j].src = "cards/h"+i+".gif";
    j++;
    preload[j] = new Image();
    preload[j].src = "cards/s"+i+".gif";
    j++
}

function getCookie(key){
var c=document.cookie;
var a=c.indexOf(key+"="); //buggish
if(a<0)return "";
a+=key.length+1;
var b=c.indexOf(";",a);
if(b<=a)return c.substring(a);
return c.substring(a,b);
}
function setCookie(key,val){
if(getCookie(key)==val)return;
var d=new Date();var p=Date.parse(d);
d.setTime(p+365*24*60*60*1000);
var u=d.toUTCString();
document.cookie=key+"="+val+";expires="+u;
}
function has_money(i){if(players[i].bankroll>=.01)return true;return false;}
function confirm_new(){if(confirm("Are you sure that you want to restart the entire game?"))new_game();}
function confirm_quit(){if(confirm("Are you sure that you want to quit?"))parent.location.href=BACK_HOME_LINK;}
function compRan(){return .5-Math.random();}


