CLEANUP: counting points, prepare for keeping track of game points
[e-DoKo.git] / index.php
index 712b48b4ce745e6ba2999572b50b88f0a219089e..244ceb9ac7e7b22eb6a53d32ce3b193bffb746cb 100644 (file)
--- a/index.php
+++ b/index.php
@@ -1,9 +1,6 @@
 <?php
 error_reporting(E_ALL);
 
-global $REV;
-$REV  ="\$Rev$";
-
 include_once("config.php");      
 include_once("output.php");      /* html output only */
 include_once("db.php");          /* database only */
@@ -12,7 +9,27 @@ include_once("functions.php");   /* the rest */
 /* check if some variables are set in the config file, else set defaults */
 if(!isset($EmailName))
      $EmailName="[DoKo] ";
-
+if(isset($EMAIL_REPLY))
+  {
+    ini_set("sendmail_from",$EMAIL_REPLY);
+  }
+if(!isset($ADMIN_NAME))
+  {
+    output_header();
+    echo "<h1>Setup not completed</h1>";
+    echo "You need to set \$ADMIN_NAME in config.php.";
+    output_footer(); 
+    exit(); 
+  }    
+if(!isset($ADMIN_EMAIL))
+  {
+    output_header();
+    echo "<h1>Setup not completed</h1>";
+    echo "You need to set \$ADMIN_EMAIL in config.php. ".
+      "If something goes wrong an email will send to this address.";
+    output_footer(); 
+    exit(); 
+  }
 
 /* in case work has to be done on the database or other section we can
  * shut down the server and tell people to come back later 
@@ -28,11 +45,13 @@ if(0)
 if(DB_open()<0)
   {
     output_header();
-    echo "Database error, can't connect...";
+    echo "Database error, can't connect... Please wait a while and try again. ".
+      "If the problem doesn't go away feel free to contact $ADMIN_NAME at $ADMIN_EMAIL.";
     output_footer(); 
     exit(); 
   }
 
+/* done major error checking, output header of HTML page */
 output_header();
 
 /* check if we want to start a new game */
@@ -42,7 +61,7 @@ if(myisset("new"))
     output_form_for_new_game($names);
   }
 /*check if everything is ready to set up a new game */
- else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD","dullen","schweinchen" ))
+ else if( myisset("PlayerA", "PlayerB","PlayerC","PlayerD","dullen","schweinchen","call" ))
   {
     $PlayerA = $_REQUEST["PlayerA"];
     $PlayerB = $_REQUEST["PlayerB"];
@@ -51,7 +70,8 @@ if(myisset("new"))
 
     $dullen      = $_REQUEST["dullen"];
     $schweinchen = $_REQUEST["schweinchen"];
-    
+    $call        = $_REQUEST["call"];
+
     $EmailA  = DB_get_email_by_name($PlayerA);
     $EmailB  = DB_get_email_by_name($PlayerB);
     $EmailC  = DB_get_email_by_name($PlayerC);
@@ -61,6 +81,7 @@ if(myisset("new"))
       {
        echo "couldn't find one of the names, please start a new game";
        output_footer();
+       DB_close();
        exit();
       }
     
@@ -70,18 +91,9 @@ if(myisset("new"))
     $useridD  = DB_get_userid_by_name($PlayerD);
     
     /* create random numbers */
-    $randomNR       = create_array_of_random_numbers();
+    $randomNR       = create_array_of_random_numbers($useridA,$useridB,$useridC,$useridD);
     $randomNRstring = join(":",$randomNR);
-    
-    /* get ruleset information or create new one */
-    $ruleset = DB_get_ruleset($dullen,$schweinchen);
-    if($ruleset <0) 
-      {
-       echo "Error defining ruleset: $ruleset";
-       output_footer();
-       exit();
-      };
-    
+        
     /* create game */
     $followup = NULL;
     if(myisset("followup") )
@@ -91,21 +103,33 @@ if(myisset("new"))
        $ruleset = DB_get_ruleset_by_gameid($followup); /* just copy ruleset from old game, 
                                                         this way no manipulation is possible */
        if($session)
-         mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1','pre',".
+         mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1',NULL,'pre',".
                      "'$ruleset','$session' ,NULL)");
        else
          {
            /* get max session */
            $max = DB_get_max_session();
            $max++;
-           mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1','pre',".
-                       "'$ruleset','$max' ,NULL)");
            mysql_query("UPDATE Game SET session='".$max."' WHERE id=".DB_quote_smart($followup));
+           mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1',NULL,'pre',".
+                       "'$ruleset','$max' ,NULL)");
          }
       }
     else
-      mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1','pre', ".
+      {
+       /* get ruleset information or create new one */
+       $ruleset = DB_get_ruleset($dullen,$schweinchen,$call);
+       if($ruleset <0) 
+         {
+           myerror("Error defining ruleset: $ruleset");
+           output_footer();
+           DB_close();
+           exit();
+         };
+       
+       mysql_query("INSERT INTO Game VALUES (NULL, NULL, '$randomNRstring', 'normal', NULL,NULL,'1',NULL,'pre', ".
                  "'$ruleset',NULL ,NULL)");
+      }
     $game_id = mysql_insert_id();
     
     /* create hash */
@@ -117,16 +141,16 @@ if(myisset("new"))
     
     /* create hands */
     mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridA).
-               ", ".DB_quote_smart($hashA).", 'start','1',NULL,NULL,NULL,'false','false',NULL)");
+               ", ".DB_quote_smart($hashA).", 'start','1',NULL,NULL,NULL,NULL)");
     $hand_idA = mysql_insert_id();                                                            
     mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridB).
-               ", ".DB_quote_smart($hashB).", 'start','2',NULL,NULL,NULL,'false','false',NULL)");
+               ", ".DB_quote_smart($hashB).", 'start','2',NULL,NULL,NULL,NULL)");
     $hand_idB = mysql_insert_id();                                                            
     mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridC).
-               ", ".DB_quote_smart($hashC).", 'start','3',NULL,NULL,NULL,'false','false',NULL)");
+               ", ".DB_quote_smart($hashC).", 'start','3',NULL,NULL,NULL,NULL)");
     $hand_idC = mysql_insert_id();                                                            
     mysql_query("INSERT INTO Hand VALUES (NULL,".DB_quote_smart($game_id).",".DB_quote_smart($useridD).
-               ", ".DB_quote_smart($hashD).", 'start','4',NULL,NULL,NULL,'false','false',NULL)");
+               ", ".DB_quote_smart($hashD).", 'start','4',NULL,NULL,NULL,NULL)");
     $hand_idD = mysql_insert_id();
     
     /* save cards */
@@ -150,7 +174,7 @@ if(myisset("new"))
       "$PlayerC\n".
       "$PlayerD\n\n".
       "If you want to join this game, please follow this link:\n\n".
-      " ".$host."?me=";
+      "".$host."?me=";
     
     mymail($EmailA,"You are invited to a game of DoKo","Hello $PlayerA,\n".$message.$hashA);
     mymail($EmailB,"You are invited to a game of DoKo","Hello $PlayerB,\n".$message.$hashB);
@@ -171,6 +195,7 @@ else if(myisset("cancle","me"))
        echo "Can't find you in the database, please check the url.<br />\n";
        echo "perhaps the game has been cancled, check by login in <a href=\"$host\">here</a>.";
        output_footer();
+       DB_close();
        exit();
       }
     
@@ -192,7 +217,7 @@ else if(myisset("cancle","me"))
        foreach($userids as $user)
          {
            $To = DB_get_email_by_userid($user);
-           mymail($To,$EmailName."game cancled (timed out)",$message);
+           mymail($To,$EmailName."game $gameid cancled (timed out)",$message);
          }
        
        /* delete everything from the dB */
@@ -216,6 +241,7 @@ else if(myisset("me"))
        echo "Can't find you in the database, please check the url.<br />\n";
        echo "perhaps the game has been cancled, check by login in <a href=\"$host\">here</a>.";
        output_footer();
+       DB_close();
        exit();
       }
 
@@ -228,20 +254,11 @@ else if(myisset("me"))
     $mystatus = DB_get_status_by_hash($me);
     $mypos    = DB_get_pos_by_hash($me);
     $myhand   = DB_get_handid_by_hash($me);
+    $session  = DB_get_session_by_gameid($gameid);
 
     /* get prefs and save them */
-    $result = mysql_query("SELECT value from User_Prefs".
-                         " WHERE user_id='$myid' AND pref_key='cardset'" );
-    $r = mysql_fetch_array($result,MYSQL_NUM);
-    if($r)
-      {
-       if($r[0]=="germancards" && (time()-strtotime( "2009-12-31 23:59:59")<0) ) /* licence only valid until then */
-         $PREF["cardset"]="altenburg";
-      else
-       $PREF["cardset"]="english";
-      }
-    else
-      $PREF["cardset"]="english";
+    DB_get_PREF($myid);
+    /* end set pref */
       
       
     /* get rule set for this game */
@@ -252,7 +269,9 @@ else if(myisset("me"))
 
     $RULES["dullen"]      = $r[2];
     $RULES["schweinchen"] = $r[3];
-    
+    $RULES["call"]        = $r[4];
+
+
     /* get some infos about the game */
     $gametype   = DB_get_gametype_by_gameid($gameid);
     $gamestatus = DB_get_game_status_by_gameid($gameid);
@@ -272,7 +291,27 @@ else if(myisset("me"))
     echo "Rules: <br />\n";
     echo "10ofhearts : ".$r[2]."<br />\n";
     echo "schweinchen: ".$r[3]."<br />\n";
+    echo "call:        ".$r[4]."<br />\n";
     echo "</div>\n";
+
+    /* output extra division in case this game is part of a session */
+    if($session)
+      {
+       echo "<div class=\"session\">\n".
+         "This game is part of session $session: \n";
+       $hashes = DB_get_hashes_by_session($session,$myid);
+       $i = 1;
+       foreach($hashes as $hash)
+         {
+           if($hash == $me)
+             echo "$i ";
+           else 
+             echo "<a href=\"".$host."?me=".$hash."\">$i</a> ";
+           $i++;
+         }
+       echo "</div>\n";
+      }
+
     
     /* does anyone have both foxes */
     $GAME["schweinchen"]=0; 
@@ -325,7 +364,7 @@ else if(myisset("me"))
                foreach($userids as $user)
                  {
                    $To = DB_get_email_by_userid($user);
-                   mymail($To,$EmailName."game canceled",$message);
+                   mymail($To,$EmailName."game $gameid canceled",$message);
                  }
                
                /* delete everything from the dB */
@@ -342,7 +381,7 @@ else if(myisset("me"))
                  display_card($card,$PREF["cardset"]);
                echo "</p>\n";   
                
-               check_for_sickness($me,$mycards);
+               output_check_for_sickness($me,$mycards);
                
                /* move on to the next stage*/
                DB_set_hand_status_by_hash($me,'check');
@@ -361,7 +400,7 @@ else if(myisset("me"))
          /* all these variables have a pre-selected default,
           * so we should never get here,
           * unless a user tries to cheat ;) */
-         echo "something went wrong...please contact the admin.";
+         echo "something went wrong during the setup...please contact the $ADMIN_NAME at $ADMIN_EMAIL.";
        }
       else
        {
@@ -408,12 +447,44 @@ else if(myisset("me"))
                " is playing solo, this game will be canceled.<br />\n";
              DB_set_sickness_by_hash($me,"nines");
            }
-       }
-
-      echo " Ok, done with checking, please go to the <a href=\"$host?me=$me\">next step of the setup</a>.<br />";
+         
+         echo " Ok, done with checking, please go to the <a href=\"$host?me=$me\">next step of the setup</a>.<br />";
+         
+         /* move on to the next stage*/
+         DB_set_hand_status_by_hash($me,'poverty');
+         
+         /* check if everyone has reached this stage, send out email */
+         $userids = DB_get_all_userid_by_gameid($gameid);
+         $ok = 1;
+         foreach($userids as $user)
+           {
+             $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
+             if($userstat!='poverty' && $userstat!='play')
+               {
+                 $ok = 0;
+                 DB_set_player_by_gameid($gameid,$user);
+               }
+           };
+         if($ok)
+           {
+             /* reset player = everyone has to do something now */
+             DB_set_player_by_gameid($gameid,NULL);
+             
+             foreach($userids as $user)
+               {
+                 $To       = DB_get_email_by_userid($user);
+                 $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                 if($userhash != $me)
+                   {
+                     $message = "Everyone finish the questionary in game $gameid, ".
+                       "please visit this link now to continue: \n".
+                       " ".$host."?me=".$userhash."\n\n" ;
+                     mymail($To,$EmailName." finished setup in game $gameid",$message);
+                   }
+               };
+           };
+       };
 
-      /* move on to the next stage*/
-      DB_set_hand_status_by_hash($me,'poverty');
       break;
 
     case 'poverty':
@@ -426,18 +497,20 @@ else if(myisset("me"))
       
       /* check if everyone has reached this stage */
       $userids = DB_get_all_userid_by_gameid($gameid);
-      $ok=1;
+      $ok = 1;
       foreach($userids as $user)
        {
          $userstat = DB_get_hand_status_by_userid_and_gameid($user,$gameid);
          if($userstat!='poverty' && $userstat!='play')
-           $ok=0;
+           $ok = 0;
        };
 
       if(!$ok)
        {
          echo "This step can only be handled after everyone finished the last step. ".
-           "Seems like this is not the case, so you need to wait a bit... please check back later....<br />";
+              "Seems like this is not the case, so you need to wait a bit... ".
+              "you will get an email once that is the case, please use the link in ".
+              "that email to continue the game.<br />";
        }
       else
        {
@@ -449,15 +522,13 @@ else if(myisset("me"))
          $startplayer = DB_get_startplayer_by_gameid($gameid);
 
          /* check for different sickness and just output a general info */
-
-         
-         $nines = 0;
+         $nines   = 0;
          $poverty = 0;
          $wedding = 0;
-         $solo = 0;
+         $solo    = 0;
          foreach($userids as $user)
            {
-             $name = DB_get_name_by_userid($user);
+             $name     = DB_get_name_by_userid($user);
              $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
              if($usersick == 'nines')
                {
@@ -484,7 +555,6 @@ else if(myisset("me"))
 
          /* now check which sickness comes first and set the gametype to it */
 
-         /* gamestatus == normal, => cancel game */
          if($gametype == "solo")
            {
              /* do nothing */
@@ -503,7 +573,7 @@ else if(myisset("me"))
              foreach($userids as $user)
                {
                  $To = DB_get_email_by_userid($user);
-                 mymail($To,$EmailName."game canceled",$message);
+                 mymail($To,$EmailName."game $gameid canceled",$message);
                }
              
              /* delete everything from the dB */
@@ -512,13 +582,14 @@ else if(myisset("me"))
              echo "The game has been canceled because ".DB_get_name_by_userid($nines).
                " has five or more nines and nobody is playing solo.\n";
              output_footer();
+             DB_close();
              exit();
            }
-         else if($poverty==1)
+         else if($poverty==1) /* one person has poverty */
            {
              DB_set_gametype_by_gameid($gameid,"poverty");
              $gametype = "poverty";
-             $who=DB_get_sickness_by_gameid($gameid);
+             $who      = DB_get_sickness_by_gameid($gameid);
              if(!$who)
                {
                  $firstsick = DB_get_sickness_by_pos_and_gameid(1,$gameid);
@@ -528,11 +599,11 @@ else if(myisset("me"))
                    DB_set_sickness_by_gameid($gameid,1); /* who needs to be asked first */
                }
            }
-         else if($poverty==2)
+         else if($poverty==2) /* two people have poverty */
            {
              DB_set_gametype_by_gameid($gameid,"dpoverty");
              $gametype = "dpoverty";
-             $who=DB_get_sickness_by_gameid($gameid);
+             $who      = DB_get_sickness_by_gameid($gameid);
              if(!$who)
                {
                  $firstsick = DB_get_sickness_by_pos_and_gameid(1,$gameid);
@@ -551,6 +622,7 @@ else if(myisset("me"))
          else if($wedding> 0)
            {
              DB_set_gametype_by_gameid($gameid,"wedding");
+             DB_set_sickness_by_gameid($gameid,'-1'); /* wedding not resolved yet */
              $gametype = "wedding";
            };
 
@@ -610,9 +682,11 @@ else if(myisset("me"))
              $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
              if($usersick == "wedding")
                DB_set_party_by_hash($me,"re");
+             else
+               DB_set_party_by_hash($me,"contra");
              
-             echo "Don't know who will be Re and Contra, you need to ".
-               "figure that out at the end of the game yourself <br />\n";
+             echo "Whoever will make the first trick will be on the re team. <br />\n";
+             echo " Ok, the game can start now, please finish <a href=\"$host?me=$me\">the setup</a>.<br />";       
              DB_set_hand_status_by_hash($me,'play');
              break;
 
@@ -630,7 +704,7 @@ else if(myisset("me"))
              /* check if poverty resolved (e.g. DB.Game who set to NULL)
               *   yes? =>trump was taken, start game; break; 
               */
-             $who=DB_get_sickness_by_gameid($gameid);
+             $who = DB_get_sickness_by_gameid($gameid);
              if($who<0)
                { /* trump has been taken */
                  DB_set_hand_status_by_hash($me,'play');
@@ -638,12 +712,12 @@ else if(myisset("me"))
                };
              
              if($who>9) /*= two people still have trump on the table*/
-               $add=10;
+               $add = 10;
              else
-               $add=1;
+               $add = 1;
 
              /* check if we are being asked now
-              *    no, display wait message, e.g. player X is asked at the moment 
+              *    no? display wait message, e.g. player X is asked at the moment 
               */
              $usersick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
              if(myisset("trump") && $_REQUEST["trump"]=="no" && ($who==$mypos || $who==$mypos*10))
@@ -663,6 +737,21 @@ else if(myisset("me"))
                  else
                    DB_set_sickness_by_gameid($gameid,$who+$add);
 
+                 /* email next player */
+                 $who = DB_get_sickness_by_gameid($gameid);
+                 if($who>9) $who = $who/10;
+                 
+                 if($who<=4)
+                   {
+                     $To       = DB_get_email_by_pos_and_gameid($who,$gameid);
+                     $userhash = DB_get_hash_from_game_and_pos($gameid,$who);
+                     DB_set_player_by_gameid($gameid,$who);
+
+                     $message = "Someone has poverty, it's your turn to decide, if you want to take the trump. Please visit:".
+                       " ".$host."?me=".$userhash."\n\n" ;
+                     mymail($To,$EmailName." poverty (game $gameid)",$message);
+                   }
+
                  /* this user is done */
                  DB_set_hand_status_by_hash($me,'play');
                  break;                
@@ -673,23 +762,10 @@ else if(myisset("me"))
                  $trump = $_REQUEST["trump"];
 
                  /* get hand id for user $trump */
-                 $userhand=DB_get_handid_by_gameid_and_userid($gameid,$trump);
+                 $userhand = DB_get_handid_by_gameid_and_userid($gameid,$trump);
                  /* copy trump from player A to B */
                  $result = mysql_query("UPDATE Hand_Card SET hand_id='$myhand' WHERE hand_id='$userhand' AND card_id<'27'" );
                  
-                 /* set re/contra, if it is  not already set */
-                 $party = DB_get_party_by_hash($me);
-                 if(!$party)
-                   {
-                     foreach($userids as $user)
-                       {
-                         $hash = DB_get_hash_from_gameid_and_userid($gameid,$user);
-                         if($user == $trump || $user == $myid)
-                           DB_set_party_by_hash($hash,"re");
-                         else
-                           DB_set_party_by_hash($hash,"contra");
-                       }
-                   }
                  /* add hidden button with trump in it to get to the next point */
                  echo "<form action=\"index.php\" method=\"post\">\n";
                  echo "  <input type=\"hidden\" name=\"exchange\" value=\"-1\" />\n";
@@ -716,7 +792,8 @@ else if(myisset("me"))
                  $r      = mysql_fetch_array($result,MYSQL_NUM);
                  if(!$r)
                    {
-                     die("error in poverty");
+                     myerror("error in poverty");
+                     die();
                    };
                  if($r[0]==12)
                    {
@@ -726,11 +803,13 @@ else if(myisset("me"))
                        }
                      else /* reduce poverty count by one, that is go to single digits $who */
                        {
-                         $add=1;
-                         $who=$who/10;
+                         $add = 1;
+                         $who = $who/10;
 
+                         /* whom to ask next */
                          $firstsick  = DB_get_sickness_by_pos_and_gameid($mypos+1,$gameid);
                          $secondsick = DB_get_sickness_by_pos_and_gameid($mypos+2,$gameid);
+
                          if($firstsick!="poverty")
                            DB_set_sickness_by_gameid($gameid,$who+$add);
                          else
@@ -740,6 +819,20 @@ else if(myisset("me"))
                              else
                                DB_set_sickness_by_gameid($gameid,$who+$add*3);
                            };
+
+                         /* email next player */
+                         $who = DB_get_sickness_by_gameid($gameid);
+                         if($who<=4)
+                           {
+                             $To       = DB_get_email_by_pos_and_gameid($who,$gameid);
+                             $userhash = DB_get_hash_from_game_and_pos($gameid,$who);
+                             DB_set_player_by_gameid($gameid,$who);
+
+                             $message = "Someone has poverty, it's your turn to decide, ".
+                                        "if you want to take the trump. Please visit:".
+                                        " ".$host."?me=".$userhash."\n\n" ;
+                             mymail($To,$EmailName." poverty (game $gameid)",$message);
+                           }
                        }
                      
                      /* this user is done */
@@ -748,6 +841,33 @@ else if(myisset("me"))
                      $hash = DB_get_hash_from_gameid_and_userid($gameid,$trump);
                      DB_set_hand_status_by_hash($hash,'play');
 
+                     /* set party to re, unless we had dpoverty, in that case check if we need to set re/contra*/
+                     $re_set = 0;
+                     foreach($userids as $user)
+                       {
+                         $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                         $party    = DB_get_party_by_hash($userhash);
+                         if($party=="re")
+                           $re_set = 1;
+                       }
+                     if($re_set)
+                       {
+                         DB_set_party_by_hash($me,"contra");
+                         DB_set_party_by_hash($hash,"contra");
+                       }
+                     else
+                       {
+                         foreach($userids as $user)
+                           {
+                             $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                             if($userhash==$hash||$userhash==$me)
+                               DB_set_party_by_hash($userhash,"re");
+                             else
+                               DB_set_party_by_hash($userhash,"contra");
+                           }
+                       }
+
+
                      break;
                    }
                  else
@@ -773,87 +893,96 @@ else if(myisset("me"))
                {
                  foreach($userids as $user)
                    {
-                     $name = DB_get_name_by_userid($user);
+                     $name     = DB_get_name_by_userid($user);
                      $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
                      
                      if($usersick=="poverty")
                        {
-                         $hash =DB_get_hash_from_gameid_and_userid($gameid,$user);
-                         $cards=DB_get_hand($hash);
-                         $nrtrump=count_trump($cards);
+                         $hash    = DB_get_hash_from_gameid_and_userid($gameid,$user);
+                         $cards   = DB_get_hand($hash);
+                         $nrtrump = count_trump($cards);
                          /* count trump */
                          if($nrtrump<4)
                            echo "Player $name has $nrtrump trump. Do you want to take them?".
                              "<a href=\"index.php?me=$me&amp;trump=$user\">yes</a> <br />";
                        }
                    }
-                 echo "I don't want to take any trump: ".
-                   "<a href=\"index.php?me=$me&amp;trump=no\">yes</a> <br />";
+                 echo "<a href=\"index.php?me=$me&amp;trump=no\">No,way I take those trump...</a> <br />";
+
+                 echo "Your cards are: <br />\n";
+                 $mycards = DB_get_hand($me);
+                 sort($mycards);
+                 echo "<p class=\"mycards\" style=\"margin-top:8em;\">your cards are: <br />\n";
+                 foreach($mycards as $card) 
+                   display_card($card,$PREF["cardset"]);
+                 echo "</p>\n";   
                }
              else
                {
-                 echo "it's not your turn yet to decide if you want to take the trump or not.";
+                 $mysick = DB_get_sickness_by_userid_and_gameid($myid,$gameid);
+                 if($mysick=="poverty")
+                   echo "The others are asked if they want to take your trump, you have to wait (you'll get an email).";
+                 else
+                   echo "it's not your turn yet to decide if you want to take the trump or not.";
                }
-             /*
-              *    yes, display number of trump and user's hand, ask if he wants to take it 
-              *      no, set whom-to-ask to next player, email next player, cancle game if no next player
-              *      yes -> link to new page:display all cards, ask for N return cards
-              *          set re/contra 
-              *        
-              */
            };
-       }
-      /* check if noone wanted to take trump, in that case the gamesickness would be set to 5 or 50 */
-      $who=DB_get_sickness_by_gameid($gameid);
-      if($who==5 || $who==50)
-       {
-         $message = "Hello, \n\n".
-           "Game $gameid has been cancled since nobody wanted to take the trump.\n";
-         
-         $userids = DB_get_all_userid_by_gameid($gameid);
-         foreach($userids as $user)
+         /* check if no one wanted to take trump, in that case the gamesickness would be set to 5 or 50 */
+         $who = DB_get_sickness_by_gameid($gameid);
+         if($who==5 || $who==50)
            {
-             $To = DB_get_email_by_userid($user);
-             mymail($To,$EmailName."game cancled (poverty not resolved)",$message);
+             $message = "Hello, \n\n".
+               "Game $gameid has been cancled since nobody wanted to take the trump.\n";
+             
+             $userids = DB_get_all_userid_by_gameid($gameid);
+             foreach($userids as $user)
+               {
+                 $To = DB_get_email_by_userid($user);
+                 mymail($To,$EmailName."game $gameid cancled (poverty not resolved)",$message);
+               }
+             
+             /* delete everything from the dB */
+             DB_cancel_game($me);
+             
+             echo "<p style=\"background-color:red\";>Game $gameid has been cancled.<br /><br /></p>";
+             output_footer();
+             DB_close();
+             exit();
            }
          
-         /* delete everything from the dB */
-         DB_cancel_game($me);
-         
-         echo "<p style=\"background-color:red\";>Game $gameid has been cancled.<br /><br /></p>";
-         output_footer();
-         exit();
-       }
-
-      /* check if all players are ready to play */
-      $ok=1;
-      foreach($userids as $user)
-       if(DB_get_hand_status_by_userid_and_gameid($user,$gameid)!='play')
-         $ok=0;
-
-      if($ok)
-       {
-         /* only set this after all poverty, etc. are handled*/
-         DB_set_game_status_by_gameid($gameid,'play');
-
-         /* email startplayer */
-         $startplayer = DB_get_startplayer_by_gameid($gameid);
-         $email       = DB_get_email_by_pos_and_gameid($startplayer,$gameid);
-         $hash        = DB_get_hash_from_game_and_pos($gameid,$startplayer);
+         /* check if all players are ready to play */
+         $ok = 1;
+         foreach($userids as $user)
+           if(DB_get_hand_status_by_userid_and_gameid($user,$gameid)!='play')
+             {
+               $ok = 0;
+               DB_set_player_by_gameid($gameid,$user);
+             }
          
-         if($hash!=$me)
+         if($ok)
            {
-             /* email startplayer) */
-             $message = "It's your turn now.\n".
-               "Use this link to play a card: ".$host."?me=".$hash."\n\n" ;
-             mymail($email,$EmailName."ready, set, go... ",$message);
+             /* only set this after all poverty, etc. are handled*/
+             DB_set_game_status_by_gameid($gameid,'play');
+             
+             /* email startplayer */
+             $startplayer = DB_get_startplayer_by_gameid($gameid);
+             $email       = DB_get_email_by_pos_and_gameid($startplayer,$gameid);
+             $hash        = DB_get_hash_from_game_and_pos($gameid,$startplayer);
+             $who         = DB_get_userid_by_email($email);
+             DB_set_player_by_gameid($gameid,$who);
+             
+             if($hash!=$me)
+               {
+                 /* email startplayer) */
+                 $message = "It's your turn now in game $gameid.\n".
+                   "Use this link to play a card: ".$host."?me=".$hash."\n\n" ;
+                 mymail($email,$EmailName."ready, set, go... (game $gameid) ",$message);
+               }
+             else
+               echo " Please, <a href=\"$host?me=$me\">start</a> the game.<br />";      
            }
          else
-           echo " Please, <a href=\"$host?me=$me\">start</a> the game.<br />";  
+           echo "\n <br />";    
        }
-      else
-       echo "You finished the setup, at the moment you need to reload this page after everyone else has finished there setup so that the server can figure out vorbehalte... in future this will get an email in case you need to do anything, but this is not implemented yet :( <br />";      
-
       break;
     case 'play':
     case 'gameover': 
@@ -868,14 +997,14 @@ else if(myisset("me"))
        */
       
       $gametype = DB_get_gametype_by_gameid($gameid);
-      $GT = $gametype;
+      $GT       = $gametype;
       if($gametype=="solo")
        {
          $gametype = DB_get_solo_by_gameid($gameid);
-         $GT = $gametype." ".$GT;
+         $GT       = $gametype." ".$GT;
        }
       else
-       $gametype="normal";
+       $gametype = "normal";
       
       set_gametype($gametype); /* this sets the $CARDS variable */
       
@@ -895,7 +1024,8 @@ else if(myisset("me"))
       /* has the game started? No, then just wait here...*/
       if($gamestatus == 'pre')
        {
-         echo "You finished the setup, but not everyone else finished it...so you need to wait for the others... <br />";
+         echo "You finished the setup, but not everyone else finished it... ".
+              "so you need to wait for the others. Just wait for the an email... <br />";
          break; /* not sure this works... the idea is that you can 
                  * only  play a card after everyone is ready to play */
        }
@@ -903,7 +1033,12 @@ else if(myisset("me"))
       /* display the table and the names */
       $result = mysql_query("SELECT  User.fullname as name,".
                            "        Hand.position as position, ".
-                           "        User.id ".
+                           "        User.id, ".
+                           "        Hand.party as party, ".
+                           "        Hand.sickness as sickness, ".
+                           "        Hand.point_call, ".
+                           "        User.last_login, ".
+                           "        Hand.hash        ".
                            "FROM Hand ".
                            "LEFT JOIN User ON User.id=Hand.user_id ".
                            "WHERE Hand.game_id='".$gameid."' ".
@@ -913,17 +1048,120 @@ else if(myisset("me"))
        "  <img src=\"pics/table.png\" alt=\"table\" />\n";
       while($r = mysql_fetch_array($result,MYSQL_NUM))
        {
-         $name = $r[0];
-         $pos  = $r[1];
-         $user = $r[2];
+         $name  = $r[0];
+         $pos   = $r[1];
+         $user  = $r[2];
+         $party = $r[3];
+         $sickness  = $r[4];
+         $call      = $r[5];
+         $lastlogin = strtotime($r[6]);
+         $hash      = $r[7];
 
          $offset = DB_get_user_timezone($user);
          $zone   = return_timezone($offset);
          date_default_timezone_set($zone);
 
          echo " <span class=\"table".($pos-1)."\">\n";
-         echo " $name <br />\n";
-         echo " local time: ".date("Y-m-d H:i:s")."\n";
+         if(!$debug)
+           echo " $name \n";
+         else
+           {
+             echo "<a href=\"".$host."?me=".$hash."\">$name</a>\n";
+           }
+         /* add hints for poverty, wedding, solo, etc */
+         if($GT=="poverty" && $party=="re")
+           if($sickness=="poverty")
+             {
+               $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+               $cards    = DB_get_all_hand($userhash);
+               $trumpNR  = count_trump($cards);
+               if($trumpNR)
+                 echo "<img src=\"pics/button/poverty_trump_button.png\" class=\"button\" alt=\"poverty < trump back\" />";
+               else
+                 echo "<img src=\"pics/button/poverty_notrump_button.png\" class=\"button\" alt=\"poverty <\" />";
+             }
+           else
+             echo "<img src=\"pics/button/poverty_partner_button.png\" class=\"button\" alt=\"poverty >\" />";
+
+         if($GT=="dpoverty")
+           if($party=="re")
+             if($sickness=="poverty")
+               {
+               $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+               $cards    = DB_get_all_hand($userhash);
+               $trumpNR  = count_trump($cards);
+               if($trumpNR)
+                 echo "<img src=\"pics/button/poverty_trump_button.png\" class=\"button\" alt=\"poverty < trump back\" />";
+               else
+                 echo "<img src=\"pics/button/poverty_notrump_button.png\" class=\"button\" alt=\"poverty <\" />";
+               }
+             else
+               echo "<img src=\"pics/button/poverty_partner_button.png\" class=\"button\" alt=\"poverty >\" />";
+           else
+             if($sickness=="poverty")
+               {
+               $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+               $cards    = DB_get_all_hand($userhash);
+               $trumpNR  = count_trump($cards);
+               if($trumpNR)
+                 echo "<img src=\"pics/button/poverty2_trump_button.png\" class=\"button\" alt=\"poverty2 < trump back\" />";
+               else
+                 echo "<img src=\"pics/button/poverty2_notrump_button.png\" class=\"button\" alt=\"poverty2 <\" />";
+               }
+             else
+               echo "<img src=\"pics/button/poverty2_partner_button.png\" class=\"button\" alt=\"poverty2 >\" />";
+             
+         if($GT=="wedding" && $party=="re")
+             if($sickness=="wedding")
+               echo "<img src=\"pics/button/wedding_button.png\" class=\"button\" alt=\"wedding\" />";
+             else
+               echo "<img src=\"pics/button/wedding_partner_button.png\" class=\"button\" alt=\"wedding partner\" />";
+         
+         if(ereg("solo",$GT) && $party=="re")
+           {
+             if(ereg("queen",$GT))
+               echo "<img src=\"pics/button/queensolo_button.png\" class=\"button\" alt=\"$GT\" />";
+             else if(ereg("jack",$GT))
+               echo "<img src=\"pics/button/jacksolo_button.png\" class=\"button\" alt=\"$GT\" />";
+             else if(ereg("club",$GT))
+               echo "<img src=\"pics/button/clubsolo_button.png\" class=\"button\" alt=\"$GT\" />";
+             else if(ereg("spade",$GT))
+               echo "<img src=\"pics/button/spadesolo_button.png\" class=\"button\" alt=\"$GT\" />";
+             else if(ereg("heart",$GT))
+               echo "<img src=\"pics/button/heartsolo_button.png\" class=\"button\" alt=\"$GT\" />";
+             else if(ereg("trumpless",$GT))
+               echo "<img src=\"pics/button/notrumpsolo_button.png\" class=\"button\" alt=\"$GT\" />";
+             else if(ereg("trump",$GT))
+               echo "<img src=\"pics/button/diamandsolo_button.png\" class=\"button\" alt=\"$GT\" />";
+           }
+
+         /* add point calls */
+         if($call!=NULL)
+           {
+             if($party=="re")
+               echo "<img src=\"pics/button/re_button.png\" class=\"button\" alt=\"re\" />";
+             else
+               echo "<img src=\"pics/button/contra_button.png\" class=\"button\" alt=\"contra\" />";
+             switch($call)
+               {
+               case "0":
+                 echo "<img src=\"pics/button/0_button.png\" class=\"button\" alt=\"0\" />";
+                 break;
+               case "30":
+                 echo "<img src=\"pics/button/30_button.png\" class=\"button\" alt=\"30\" />";
+                 break;
+               case "60":
+                 echo "<img src=\"pics/button/60_button.png\" class=\"button\" alt=\"60\" />";
+                 break;
+               case "90":
+                 echo "<img src=\"pics/button/90_button.png\" class=\"button\" alt=\"90\" />";
+                 break;
+               }
+           }
+
+         echo "<br />\n";
+         echo " local time: ".date("Y-m-d H:i:s")."<br />\n";
+         echo " last login: ".date("Y-m-d H:i:s",$lastlogin)."<br />\n";
          echo " </span>\n";
 
        }
@@ -934,7 +1172,9 @@ else if(myisset("me"))
                            "       Hand.position as position,".
                            "       Play.sequence as sequence, ".
                            "       Trick.id, ".
-                           "       Comment.comment ".
+                           "       Comment.comment, ".
+                           "       Play.create_date, ".
+                           "       Hand.user_id ".
                            "FROM Trick ".
                            "LEFT JOIN Play ON Trick.id=Play.trick_id ".
                            "LEFT JOIN Hand_Card ON Play.hand_card_id=Hand_Card.id ".
@@ -942,8 +1182,7 @@ else if(myisset("me"))
                            "LEFT JOIN Comment ON Play.id=Comment.play_id ".
                            "WHERE Trick.game_id='".$gameid."' ".
                            "ORDER BY Trick.id,sequence ASC");
-      $trickNR = 1;
-      
+      $trickNR   = 1;
       $lasttrick = DB_get_max_trickid($gameid);
       
       $play = array(); /* needed to calculate winner later  */
@@ -960,7 +1199,13 @@ else if(myisset("me"))
          $seq     = $r[2];
          $trick   = $r[3];
          $comment = $r[4];
-         
+         $timeplayed = strtotime($r[5]);
+         $user    = $r[6];
+
+         $offset = DB_get_user_timezone($user);
+         $zone   = return_timezone($offset);
+         date_default_timezone_set($zone);
+
          /* check if first schweinchen has been played */
          if($r[0] == 19 || $r[0] == 20 )
            $GAME["schweinchen"]++;
@@ -1018,14 +1263,14 @@ else if(myisset("me"))
       /* whos turn is it? */
       if($seq==4)
        {
-         $winner = get_winner($play,$gametype); /* returns the position */
-         $next = $winner;
+         $winner    = get_winner($play,$gametype); /* returns the position */
+         $next      = $winner;
          $firstcard = ""; /* new trick, no first card */
        }
       else
        {
          $next = $pos+1;
-         if($next==5) $next=1;
+         if($next==5) $next = 1;
        }
       
       /* my turn?, display cards as links, ask for comments*/
@@ -1047,17 +1292,29 @@ else if(myisset("me"))
          $r = mysql_fetch_array($result,MYSQL_NUM);
          $handcardid = $r[0];
          
-         if($handcardid)
+         if($handcardid) /* everything ok, play card  */
            {
              $comment = "";
 
+             /* update Game timestamp */
+             DB_update_game_timestamp($gameid);
+
+             /* check if a call was made, must do this before we set the card status to played */
+             if(myisset("call120") && $_REQUEST["call120"] == "yes" && can_call(120,$me))
+               $result = mysql_query("UPDATE Hand SET point_call='120' WHERE hash='$me' ");
+             if(myisset("call90")  && $_REQUEST["call90"]  == "yes" && can_call(90,$me))
+               $result = mysql_query("UPDATE Hand SET point_call='90'  WHERE hash='$me' ");
+             if(myisset("call60")  && $_REQUEST["call60"]  == "yes" && can_call(60,$me))
+               $result = mysql_query("UPDATE Hand SET point_call='60'  WHERE hash='$me' ");
+             if(myisset("call30")  && $_REQUEST["call30"]  == "yes" && can_call(30,$me))
+               $result = mysql_query("UPDATE Hand SET point_call='30'  WHERE hash='$me' ");
+             if(myisset("call0")   && $_REQUEST["call0"]   == "yes" && can_call(0,$me))
+               $result = mysql_query("UPDATE Hand SET point_call='0'   WHERE hash='$me' ");
+               
              /* mark card as played */
              mysql_query("UPDATE Hand_Card SET played='true' WHERE hand_id='$handid' AND card_id=".
                          DB_quote_smart($card));
 
-             /* update Game timestamp */
-             DB_update_game_timestamp($gameid);
-
              /* check for schweinchen */
              //echo "schweinchen = ".$GAME["schweinchen"]." --$card-<br />";
              if($card == 19 || $card == 20 )
@@ -1067,16 +1324,77 @@ else if(myisset("me"))
                    $comment="Schweinchen! ";
                  if($RULES["schweinchen"]=="both" )
                    $comment="Schweinchen! ";
-                 echo "schweinchen = ".$GAME["schweinchen"]." ---<br />";
+                 if ($debug) echo "schweinchen = ".$GAME["schweinchen"]." ---<br />";
                }
 
              /* get trick id or start new trick */
              $a = DB_get_current_trickid($gameid);
              $trickid  = $a[0];
              $sequence = $a[1];
+             $tricknr  = $a[2];
              
              $playid = DB_play_card($trickid,$handcardid,$sequence);
              
+             /* if sequence == 4 check who one in case of wedding */
+             if($sequence == 4 && $GT == "wedding") 
+               {
+                 /* is wedding resolve */
+                 $resolved = DB_get_sickness_by_gameid($gameid); 
+                 if($resolved<0)
+                   {
+                     /* who has wedding */
+                     $userids = DB_get_all_userid_by_gameid($gameid);
+                     foreach($userids as $user)
+                       {
+                         $usersick = DB_get_sickness_by_userid_and_gameid($user,$gameid);
+                         if($usersick == "wedding")
+                           $whosick = $user;
+                       }
+                     /* who won the trick */
+                     $play     = DB_get_cards_by_trick($trickid);
+                     $winner   = get_winner($play,$gametype); /* returns the position */
+                     $winnerid = DB_get_userid_by_gameid_and_position($gameid,$winner);
+                     /* is tricknr <=3 */
+                     if($tricknr <=3 && $winnerid!=$whosick)
+                       {
+                         /* set resolved at tricknr*/
+                         $resolved = DB_set_sickness_by_gameid($gameid,$tricknr); 
+                         /* set partner */
+                         $whash = DB_get_hash_from_gameid_and_userid($gameid,$winnerid);
+                         DB_set_party_by_hash($whash,"re");
+                       }
+                     if($tricknr == 3 && $winnerid==$whosick)
+                       {
+                         /* set resolved at tricknr*/
+                         $resolved = DB_set_sickness_by_gameid($gameid,'3'); 
+                       }
+                   }
+               }
+
+             /* if sequence == 4, set winner of the trick, count points and set the next player */
+             if($sequence==4)
+               {
+                 $play   = DB_get_cards_by_trick($trickid);
+                 $winner = get_winner($play,$gametype); /* returns the position */
+
+                 if($winner>0)
+                   mysql_query("UPDATE Trick SET winner='$winner' WHERE id='$trickid'");
+                 else
+                   echo "ERROR during scoring";
+
+                 if($debug)
+                   echo "DEBUG: position $winner won the trick <br />";
+
+                 /* who is the next player? */
+                 $next = $winner;
+               }
+             else
+               {
+                 $next = DB_get_pos_by_hash($me)+1;
+               }
+             if($next==5) $next=1;
+
+             
              /* check for coment */
              if(myisset("comment"))
                {
@@ -1110,95 +1428,67 @@ else if(myisset("me"))
                  $done=0;
              
              if($done)
+               DB_set_game_status_by_gameid($gameid,"gameover");
+
+             /* email next player, if game is still running */
+             if(DB_get_game_status_by_gameid($gameid)=='play')
                {
-                 DB_set_game_status_by_gameid($gameid,"gameover");
-                 /* get score for last trick 
-                  * all other tricks are handled a few lines further down*/
-                 $play   = DB_get_cards_by_trick($trickid);
-                 $winner = get_winner($play,$gametype); /* returns the position */
-                 /* get points of last trick and save it */
-                 $points = 0;
-                 foreach($play as $card)
-                   $points = $points + card_value($card["card"]);
-                 $winnerid = DB_get_handid_by_gameid_and_position($gameid,$winner);
-                 if($winnerid>0)
-                   mysql_query("INSERT INTO Score VALUES (NULL, '$gameid', '$winnerid', '$points')");
-                 else
-                   echo "ERROR during scoring";
+                 $next_hash = DB_get_hash_from_game_and_pos($gameid,$next);
+                 $email     = DB_get_email_by_hash($next_hash);
+                 $who       = DB_get_userid_by_email($email);
+                 DB_set_player_by_gameid($gameid,$who);
                  
-                 /* email all players */
+                 $message = "A card has been played in game $gameid.\n\n".
+                   "It's your turn  now.\n".
+                   "Use this link to play a card: ".$host."?me=".$next_hash."\n\n" ;
+                 mymail($email,$EmailName."a card has been played in game $gameid",$message);
+               }
+             else /* send out final email */
+               {
                  /* individual score */
-                 $result = mysql_query("SELECT fullname, SUM(score), Hand.party FROM Score".
-                                       " LEFT JOIN Hand ON Hand.id=hand_id".
-                                       " LEFT JOIN User ON Hand.user_id=User.id".
-                                       " WHERE Hand.game_id=$gameid".
-                                       " GROUP BY fullname" );
-                 $message = "The game is over. Thanks for playing :)\n";
+                 $result = mysql_query("SELECT User.fullname, IFNULL(SUM(Card.points),0), Hand.party FROM Hand".
+                               " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                               " LEFT JOIN User ON User.id=Hand.user_id".
+                               " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                               " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                               " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                               " WHERE Hand.game_id='$gameid'".
+                               " GROUP BY User.fullname" );
+                 $message  = "The game is over. Thanks for playing :)\n";
+                 $message .= "Final score:\n";
                  while( $r = mysql_fetch_array($result,MYSQL_NUM))
-                   $message .= " FINAL SCORE: ".$r[0]."(".$r[2].") ".$r[1]."\n";
-                 $message .= "\nIf your not in the list above your score is zero...\n\n";
-
-                 $result = mysql_query("SELECT Hand.party, SUM(score) FROM Score".
-                                       " LEFT JOIN Hand ON Hand.id=hand_id".
-                                       " LEFT JOIN User ON Hand.user_id=User.id".
-                                       " WHERE Hand.game_id=$gameid".
-                                       " GROUP BY Hand.party" );
-                 $message .= "\n";
+                   $message .= "   ".$r[0]."(".$r[2].") ".$r[1]."\n";
+
+                 $result = mysql_query("SELECT  Hand.party, IFNULL(SUM(Card.points),0) FROM Hand".
+                               " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                               " LEFT JOIN User ON User.id=Hand.user_id".
+                               " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                               " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                               " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                               " WHERE Hand.game_id='$gameid'".
+                               " GROUP BY User.fullname" );
+                 $message .= "\nTotals:\n";
                  while( $r = mysql_fetch_array($result,MYSQL_NUM))
-                   $message .= " FINAL SCORE: ".$r[0]." ".$r[1]."\n";
+                   $message .= "    ".$r[0]." ".$r[1]."\n";
+                 
+                 /* send out final email */
+                 $all = array();
+
+                 foreach($userids as $user)
+                   $all[] = DB_get_email_by_userid($user);
+                 $To = implode(",",$all);
+
+                 $help = "\n\n (you can use reply all on this email to reach all the players.)\n";
+                 mymail($To,$EmailName."game over (game $gameid) part 1(2)",$message.$help);
 
                  foreach($userids as $user)
                    {
-                     $To = DB_get_email_by_userid($user);
-                     mymail($To,$EmailName."game over",$message);
-                   }
-               }
-             
-             
-             /* email next player */
-             if(DB_get_game_status_by_gameid($gameid)=='play')
-               {
-                 if($sequence==4)
-                   {
-                     $play   = DB_get_cards_by_trick($trickid);
-                     $winner = get_winner($play,$gametype); /* returns the position */
-                     
-                     /* get points of last trick and save it, last trick is handled 
-                      * a few lines further up  */
-                     $points = 0;
-                     foreach($play as $card)
-                       $points = $points + card_value($card["card"]);
-                     
-                     $winnerid = DB_get_handid_by_gameid_and_position($gameid,$winner);
-                     if($winnerid>0)
-                       mysql_query("INSERT INTO Score VALUES (NULL, '$gameid', '$winnerid', '$points')");
-                     else
-                       echo "ERROR during scoring";
-                     
-                     if($debug)
-                       echo "DEBUG: $winner got $points <br />";
+                     $To   = DB_get_email_by_userid($user);
+                     $hash = DB_get_hash_from_gameid_and_userid($gameid,$user);
                      
-                     /* who is the next player? */
-                     $next = $winner;
+                     $link = "Use this link to have a look at game $gameid: ".$host."?me=".$hash."\n\n" ;
+                     mymail($To,$EmailName."game over (game $gameid) part 2(2)",$link);
                    }
-                 else
-                   {
-                     $next = DB_get_pos_by_hash($me)+1;
-                   }
-                 if($next==5) $next=1;
-                 
-                 /* email next player */
-                 $next_hash = DB_get_hash_from_game_and_pos($gameid,$next);
-                 $email     = DB_get_email_by_hash($next_hash);
-                 
-                 $message = "It's your turn  now.\n".
-                   "Use this link to play a card: ".$host."?me=".$next_hash."\n\n" ;
-                 mymail($email,$EmailName."a card has been played",$message);
-                 
-                 if($debug)
-                   echo "DEBUG:<a href=\"index.php?me=".DB_get_hash_from_game_and_pos($gameid,$next).
-                     "\"> next player </a> <br />\n";
-                 
                }
            }
          else
@@ -1234,6 +1524,24 @@ else if(myisset("me"))
                display_link_card($card,$PREF["cardset"]);
            }
          
+         if( can_call(120,$me) )
+             echo " re/contra (120):".
+               " <input type=\"radio\" name=\"call120\" value=\"yes\" /> ";
+         if( can_call(90,$me) )
+             echo " 90:".
+               " <input type=\"radio\" name=\"call90\" value=\"yes\" /> ";
+         if( can_call(60,$me) )
+             echo " 60:".
+               " <input type=\"radio\" name=\"call60\" value=\"yes\" /> ";
+         if( can_call(30,$me) )
+             echo " 30:".
+               " <input type=\"radio\" name=\"call30\" value=\"yes\" /> ";
+         if( can_call(0,$me) )
+             echo " 0:".
+               " <input type=\"radio\" name=\"call0\" value=\"yes\" /> ".
+               " no call:".
+               " <input type=\"radio\" name=\"call0\" value=\"no\" /> ";
+
          echo "<br />\nA short comments:<input name=\"comment\" type=\"text\" size=\"30\" maxlength=\"50\" />\n";
          echo "<input type=\"hidden\" name=\"me\" value=\"$me\" />\n";
          echo "<input type=\"submit\" value=\"move\" />\n";
@@ -1252,10 +1560,28 @@ else if(myisset("me"))
          echo "Your cards were: <br />\n";
          foreach($oldcards as $card) 
            display_card($card,$PREF["cardset"]);
+         
+         $userids = DB_get_all_userid_by_gameid($gameid);
+          foreach($userids as $user)
+            {
+              $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user);
+             
+              if($userhash!=$me)
+                {
+                  echo "<br />";
+                 
+                  $name = DB_get_name_by_userid($user);
+                  $oldcards = DB_get_all_hand($userhash);
+                  $oldcards = mysort($oldcards,$gametype);
+                  echo "$name's cards were: <br />\n";
+                  foreach($oldcards as $card)
+                    display_card($card,$PREF["cardset"]);
+                }
+            }
        }
       echo "</div>\n";
       
-      /* check if we need to set status to 'gameover' is done during playing of the card */
+      /* if the game is over do some extra stuff, therefore exit the swtich statement if we are still playing*/
       if($mystatus=='play')
        break;
       /* the following happens only when the gamestatus is 'gameover' */
@@ -1268,29 +1594,41 @@ else if(myisset("me"))
        {
          echo "the game is over now...<br />\n";
          
-         $result = mysql_query("SELECT fullname, SUM(score), Hand.party FROM Score".
-                               " LEFT JOIN Hand ON Hand.id=hand_id".
-                               " LEFT JOIN User ON Hand.user_id=User.id".
-                               " WHERE Hand.game_id=$gameid".
-                               " GROUP BY fullname" );
+         $result = mysql_query("SELECT User.fullname, IFNULL(SUM(Card.points),0), Hand.party FROM Hand".
+                               " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                               " LEFT JOIN User ON User.id=Hand.user_id".
+                               " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                               " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                               " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                               " WHERE Hand.game_id='$gameid'".
+                               " GROUP BY User.fullname" );
+         echo "Final Score:<br />\n".
+           " <table>\n";;
          while( $r = mysql_fetch_array($result,MYSQL_NUM))
-           echo " FINAL SCORE: ".$r[0]."(".$r[2].") ".$r[1]."<br />";
-         
-         $result = mysql_query("SELECT Hand.party, SUM(score) FROM Score".
-                               " LEFT JOIN Hand ON Hand.id=hand_id".
-                               " LEFT JOIN User ON Hand.user_id=User.id".
-                               " WHERE Hand.game_id=$gameid".
+           echo "  <tr><td>  ".$r[0]."</td><td>(".$r[2].")</td><td> ".$r[1]."</td></tr>";
+         echo "</table>\n";
+
+
+         $result = mysql_query("SELECT Hand.party, IFNULL(SUM(Card.points),0) FROM Hand".
+                               " LEFT JOIN Trick ON Trick.winner=Hand.position AND Trick.game_id=Hand.game_id".
+                               " LEFT JOIN User ON User.id=Hand.user_id".
+                               " LEFT JOIN Play ON Trick.id=Play.trick_id".
+                               " LEFT JOIN Hand_Card ON Hand_Card.id=Play.hand_card_id".
+                               " LEFT JOIN Card ON Card.id=Hand_Card.card_id".
+                               " WHERE Hand.game_id='$gameid'".
                                " GROUP BY Hand.party" );
+         echo "Totals:<br />\n".
+           " <table> \n";
          while( $r = mysql_fetch_array($result,MYSQL_NUM))
-           echo " FINAL SCORE: ".$r[0]." ".$r[1]."<br />\n";
-
+           echo "  <tr><td>".$r[0]."</td><td> ".$r[1]."</td></tr>\n";
+         echo "</table>\n";
          
          $session = DB_get_session_by_gameid($gameid);
          $result  = mysql_query("SELECT id,create_date FROM Game".
                                 " WHERE session=$session".
                                 " ORDER BY create_date DESC".
                                 " LIMIT 1");
-         $r=-1;
+         $r = -1;
          if($result)
            $r = mysql_fetch_array($result,MYSQL_NUM);
          
@@ -1303,9 +1641,10 @@ else if(myisset("me"))
        }
       break;
     default:
-      echo "error in testing the status";
+      myerror("error in testing the status");
     }
     output_footer();
+    DB_close();
     exit();
  } 
 /* user status page */ 
@@ -1314,27 +1653,61 @@ else if(myisset("me"))
      /* test id and password, should really be done in one step */
      $email     = $_REQUEST["email"];
      $password  = $_REQUEST["password"];
+     
 
      if(myisset("forgot"))
        {
-        $ok=1;
+        $ok = 1;
 
         $uid = DB_get_userid_by_email($email);
         if(!$uid)
-          $ok=0;
+          $ok = 0;
         
         if($ok)
           {
-            echo "Hmm, you forgot your passwort...nothing I can do at the moment:(  ";
-            echo " you need to email Arun for now... in the future it will be all automated and an ";
-            echo "email with a new password will go to $email.";
+            /* check how many entries in recovery table */
+            $number = DB_get_number_of_passwords_recovery($uid);
+            
+            /* if less than N recent ones, add a new one and send out email */
+            if( $number < 5 )
+              {
+                echo "Ok, I send you a new password. <br />";
+                if($number >1)
+                  echo "N.B. You tried this already $number times during the last day and it will only work ".
+                    " 5 times during a day.<br />";
+                echo "The new password will be valid for one day, make sure you reset it to something else.<br />";
+                echo "Back to the  <a href=\"$host\">main page</a>.";
+                
+                $TIME  = (string) time(); /* to avoid collisions */
+                $hash  = md5("Anewpassword".$email.$TIME);
+                $newpw = substr($hash,1,8);
+                
+                $message = "Someone (hopefully you) requested a new password. \n".
+                  "You can use this email and the following password: \n".
+                  "   $newpw    \n".
+                  "to log into the server. The new password is valid for 24h, so make\n".
+                  "sure you reset your password to something new. Your old password will\n".
+                  " also still be valid until you set a new one\n";
+                mymail($email,$EmailName."recovery ",$message);
+                
+                DB_set_recovery_password($uid,md5($newpw));
+              }
+            else
+              {
+                echo "Sorry you already tried 5 times during the last 24h.<br />".
+                  "You need to use one of those passwords or wait to get a new one.<br />";
+                echo "Back to the <a href=\"$host\">main page</a>.";
+              }
           }
         else
           {
             if($email=="")
-              echo "you need to give me an email address!";
+              echo "You need to give me an email address! <br />".
+                "Please try <a href=\"$host\">again</a>.";
             else
-              echo "couldn't find a player with this email, please contact Arun, if you think this is a mistake";
+              echo "Couldn't find a player with this email! <br />".
+                "Please contact Arun, if you think this is a mistake <br />".
+                "or else try <a href=\"$host\">again</a>.";
           } 
        }
      else 
@@ -1343,13 +1716,15 @@ else if(myisset("me"))
        if(strlen($password)!=32)
         $password = md5($password);
        
-       $ok=1;
+       $ok  = 1;
        $uid = DB_get_userid_by_email_and_password($email,$password);
        if(!$uid)
-        $ok=0;
+        $ok = 0;
        
        if($ok)
         {
+          DB_get_PREF($uid);
+
           if(myisset("setpref"))
             {
               $setpref=$_REQUEST["setpref"];
@@ -1363,11 +1738,48 @@ else if(myisset("me"))
                     $result = mysql_query("UPDATE User_Prefs SET value=".DB_quote_smart($setpref).
                                           " WHERE user_id='$uid' AND pref_key='cardset'" );
                   else
-                    $result = mysql_query("INSERT INTO User_Prefs VALUES(NULL,'$uid','cardset',".DB_quote_smart($setpref).")");
+                    $result = mysql_query("INSERT INTO User_Prefs VALUES(NULL,'$uid','cardset',".
+                                          DB_quote_smart($setpref).")");
                   echo "Ok, changed you preferences for the cards.\n";
                   break;
                 }
             }
+          else if(myisset("passwd"))
+            {
+              if( $_REQUEST["passwd"]=="ask" )
+                {
+                  /* reset password form*/
+                  output_password_recovery($email,$password);         
+                }
+              else if($_REQUEST["passwd"]=="set")
+                {
+                  /* reset password */
+                  $ok = 1;
+
+                  /* check if old password matches */
+                  if($password != md5($_REQUEST["password0"]))
+                    $ok = -1;
+                  /* check if new passwords are types the same twice */
+                  if($_REQUEST["password1"] != $_REQUEST["password2"] )
+                    $ok = -2;
+                  
+                  switch($ok)
+                    {
+                    case '-2':
+                      echo "The new passwords don't match. <br />";
+                      break;
+                    case '-1':
+                      echo "The old password is not correct. <br />";
+                      break;
+                    case '1':
+                      echo "Changed the password.<br />";
+                      mysql_query("UPDATE User SET password='".md5($_REQUEST["password1"]).
+                                  "' WHERE id=".DB_quote_smart($uid));
+                      break;
+                    }
+                  /* set password */
+                }
+            }
           else /* output default user page */
             {
               $time = DB_get_user_timestamp($uid);
@@ -1384,13 +1796,46 @@ else if(myisset("me"))
               
               DB_update_user_timestamp($uid);
               
-              echo "<p>these are the games you are playing in:<br />\n";
-              $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date from Hand".
+              echo "<p>These are your games that haven't started yet:<br />\n";
+              $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date,Game.player from Hand".
                                     " LEFT JOIN Game On Hand.game_id=Game.id".
-                                    " WHERE Hand.user_id='$uid' AND Game.status<>'gameover'" );
+                                    " WHERE Hand.user_id='$uid' AND Game.status='pre'" );
               while( $r = mysql_fetch_array($result,MYSQL_NUM))
                 {
                   echo "<a href=\"".$host."?me=".$r[0]."\">game #".$r[1]." </a>";
+                  if($r[3]==$uid || $r[3]==NULL)
+                    echo "(it's <strong>your</strong> turn)\n";
+                  else
+                    {
+                      $name = DB_get_name_by_userid($r[3]);
+                      echo "(it's $name's turn)\n";
+                    };
+                    
+                  if(time()-strtotime($r[2]) > 60*60*24*30)
+                    echo " The game has been running for over a month.".
+                      " Do you want to cancel it? <a href=\"$host?cancle=1&amp;me=".$r[0]."\">yes</a>".
+                      " (clicking here is final and can't be restored)";
+                  echo "<br />";
+                }
+              echo "</p>\n";
+
+              echo "<p>These are the games you are playing in:<br />\n";
+              $result = mysql_query("SELECT Hand.hash,Hand.game_id,Game.mod_date,Game.player from Hand".
+                                    " LEFT JOIN Game On Hand.game_id=Game.id".
+                                    " WHERE Hand.user_id='$uid' AND Game.status='play'" );
+              while( $r = mysql_fetch_array($result,MYSQL_NUM))
+                {
+                  echo "<a href=\"".$host."?me=".$r[0]."\">game #".$r[1]." </a>";
+                  if($r[3])
+                    {
+                      if($r[3]==$uid)
+                        echo "(it's <strong>your</strong> turn)\n";
+                      else
+                        {
+                          $name = DB_get_name_by_userid($r[3]);
+                          echo "(it's $name's turn)\n";
+                        };
+                    }
                   if(time()-strtotime($r[2]) > 60*60*24*30)
                     echo " The game has been running for over a month.".
                       " Do you want to cancel it? <a href=\"$host?cancle=1&amp;me=".$r[0]."\">yes</a>".
@@ -1400,16 +1845,16 @@ else if(myisset("me"))
               echo "</p>\n";
               
               
-              echo "<p>and these are your games that are already done:<br />Game: \n";
+              echo "<p>And these are your games that are already done:<br />Game: \n";
+              $output = array();
               $result = mysql_query("SELECT hash,game_id from Hand WHERE user_id='$uid' AND status='gameover'" );
               while( $r = mysql_fetch_array($result,MYSQL_NUM))
-                echo "<a href=\"".$host."?me=".$r[0]."\">#".$r[1]." </a>, ";
-              echo "</p>\n";
+                $output[] = "<a href=\"".$host."?me=".$r[0]."\">#".$r[1]." </a>";
+              echo implode(", ",$output)."</p>\n";
               
               $names = DB_get_all_names();
-              echo "<p>registered players:<br />\n";
-              foreach ($names as $name)
-                echo "$name, \n";
+              echo "<p>Registered players:<br />\n";
+              echo implode(", ",$names)."\n";
               echo "</p>\n";
               
               echo "<p>Want to start a new game? Visit <a href=\"".$host."?new\">this page.</a></p>";
@@ -1417,10 +1862,11 @@ else if(myisset("me"))
         }
        else
         {
-          echo "sorry email and password don't match <br />";
+          echo "Sorry email and password don't match <br />";
         }
      };
      output_footer();
+     DB_close();
      exit();
    }
 /* page for registration */
@@ -1458,14 +1904,21 @@ else if(myisset("me"))
 /* default login page */
  else
    { 
-     $pre=0;$game=0;$done=0;
+     $pre[0]=0;$game[0]=0;$done[0]=0;
      $r=mysql_query("SELECT COUNT(id) FROM Game GROUP BY status");
      if($r) {
-       $pre = mysql_fetch_array($r,MYSQL_NUM);     
+       $pre  = mysql_fetch_array($r,MYSQL_NUM);     
        $game = mysql_fetch_array($r,MYSQL_NUM);     
        $done = mysql_fetch_array($r,MYSQL_NUM);     
      }
-     output_home_page($pre[0],$game[0],$done[0]);
+
+     $r=mysql_query("SELECT AVG(datediff(mod_date,create_date)) FROM Game where status='gameover' ");
+     if($r)
+       $avgage= mysql_fetch_array($r,MYSQL_NUM);     
+     else
+       $avgage[0]=0;
+
+     output_home_page($pre[0],$game[0],$done[0],$avgage[0]);
    }
 
 output_footer();