protected void btn_play_for_real_Click(object sender, EventArgs e)
    {
        // Create a 'log event' object to audit execution
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        log.Info("[" + Session["p_session_username"].ToString() + "] cliked on Play for Real button.");
        try
        {
            // This will get the current value of count that how many times user have clicked on the button, from the database.       
            int play_for_real_count = Convert.ToInt32(f_get_object_from_json_call_to_server("f_get_play_for_real_count/" + Convert.ToInt32(Session["p_session_player_id"]), null));

            // This will increment the value of count.
            play_for_real _play_for_real = new play_for_real
            {
                p_playerid = Convert.ToInt32(Session["p_session_player_id"]),
                p_play_for_real_count = play_for_real_count
            };

            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(play_for_real));
            MemoryStream mem = new MemoryStream();
            ser.WriteObject(mem, _play_for_real);
            string data =
                Encoding.UTF8.GetString(mem.ToArray(), 0, (int)mem.Length);
            WebClient webClient = new WebClient();
            webClient.Headers["Content-type"] = "application/json";
            webClient.Encoding = Encoding.UTF8;

            string my_service_url = WebConfigurationManager.AppSettings["hedgeem_server_default_webservice_url"];
            webClient.UploadString(my_service_url + "f_set_play_for_real_count", data);


            _global_game_state_object = (DC_hedgeem_game_state)f_get_object_from_json_call_to_server("get_game_state_object/" + p_session_personal_table_id, typeof(DC_hedgeem_game_state));
            game_id = _global_game_state_object.p_game_id;
            number_of_hands = _global_game_state_object.p_number_of_hands_int;
            enum_betting_stage my_betting_stage = f_get_current_betting_stage();
            _game_state = _global_game_state_object.p_current_state_enum;
            _hedgeem_hand_panels = new hedgeem_hand_panel[number_of_hands];
            _int_number_of_betting_stages = _global_game_state_object.p_number_of_betting_stages_int;
            _hedgeem_betting_panels = new BETTING_PANEL[_int_number_of_betting_stages, number_of_hands];
            lbl_game_id.Text = String.Format("Table/Game: {0}/{1} ", _global_game_state_object.p_table_id, game_id);
            // Method which calls the functions to render the screen.
            f_call_functions_to_render_screen();
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in btn_play_for_real_Click - " + ex.Message.ToString();
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
            my_log_event.p_message = "Exception caught in btn_play_for_real_Click function " + ex.Message;
            my_log_event.p_method_name = "btn_play_for_real_Click";
            my_log_event.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
            my_log_event.p_game_id = game_id;
            my_log_event.p_table_id = p_session_personal_table_id;
            log.Error(my_log_event.ToString());
        }
    }
    // Method to get details of Table from JSON Web Service
    public HedgeEmTableSummary get_table_details(string username)
    {
        HedgeEmTableSummary my_table = null;
        log.Debug("get_table_details called for getting details of table for user - " + username);
        string my_endpoint = "Not Set";
        try
        {
            string my_table_name = username;
            my_endpoint = String.Format("{0}/get_server_info/10/", p_current_json_webservice_url_base);

            List<HedgeEmTableSummary> my_table_list = (List<HedgeEmTableSummary>)f_get_object_from_json_call_to_server("ws_get_hedgeem_table_list/sessionabc123,10,10000/", typeof(List<HedgeEmTableSummary>));
            foreach (HedgeEmTableSummary table in my_table_list)
            {
                if (table.p_table_name == my_table_name)
                {
                    my_table = table;
                    return my_table;
                }
                else
                {
                    my_table = null;
                }
            }

        }
        catch (Exception ex)
        {
            //string my_error_popup = "alert('Error in method [get_table_details] - " + ex.Message.ToString() + "');";
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;
            string my_error_popup = "Error in method [get_table_details]- " + ex.Message.ToString();
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup.ToString();
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);

            log.Error("Exception in get_table_details() function, - " + ex.Message);
        }
        return my_table;
    }
    private void f_goto_table(int a_table_id)
    {
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "Method Entered";
        my_log_event.p_server_id = 4663662;
        my_log_event.p_table_id = a_table_id;
        my_log_event.p_player_id = p_session_player_id;

        log.Debug(my_log_event.ToString());

        /* Get reference to table by this table id
         For this GUI to work we need a HedgeEMTable object that it will obtain its data from (e.g. cards to display,
         odds for each hand etc).  So create a place-holder object that we will set later. */
        string my_endpoint = "Not Set";


        try
        {
            if (p_valid_session_exists)
            {

                HedgeemThemeInfo my_hedgeem_theme_info = new HedgeemThemeInfo();
                bool xxxHC_my_get_theme_info_from_server_definition = false;
                string theme_name = enum_theme.ONLINE.ToString();

                if (xxxHC_my_get_theme_info_from_server_definition){
                    my_endpoint = String.Format("{0}/ws_get_theme_details_for_hedgeem_table/{1}/", p_current_json_webservice_url_base, a_table_id);
                    my_hedgeem_theme_info = (HedgeemThemeInfo)f_get_object_from_json_call_to_server(my_endpoint, typeof(HedgeemThemeInfo));

                    if (my_hedgeem_theme_info == null)
                    {
                        throw new Exception(String.Format("Unable to determine theme for table [{0}]", a_table_id));
                    }

                    if (my_hedgeem_theme_info._error_message != "")
                    {
                        throw new Exception(my_hedgeem_theme_info._error_message);
                    }
                    theme_name = my_hedgeem_theme_info.short_name;
                    Session["theme"] = theme_name;
                }


                // xxx Note from Simon Jan 2015 - not sure what this next line does.  If it is just a pop up it can be deleted (esp as it does not work anyway)
                //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", "alert('" + "Theme name -" + Session["theme"].ToString() + "');", true);

                my_log_event.p_message = String.Format("Successfully retrieved theme for table ID [{0}] Theme [{1}] so redirecting to (opening) HedgeEmTable page so ASP can render page to this theme.", a_table_id, theme_name);
                log.Debug(my_log_event.ToString());

                Response.Redirect("frm_hedgeem_table.aspx", false);
            }
            else
            {
                Page.RegisterStartupScript("OnLoad", "<script>alert('You need to be logged in to sit at this table');</script>");
            }
        }
        catch (Exception ex)
        {
            // xxx_eh error not show to user
            string my_error_popup = "alert('Error in method [f_goto_table] - " + ex.Message.ToString() + "');";
        //    ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_log_event.p_message = String.Format("Error", ex.Message);
            log.Error(my_log_event.ToString());
            //throw new Exception(my_log_event.ToString());               


            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
              my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;
            
            //newuser.Visible = false;
            
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
        
            my_popup_message.Dispose();

        }
    }
    protected void f_login_anonymously(int a_player_id)
    {




        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        // Log the fact this method has been called
        my_log_event.p_message = String.Format("Method [btn_login_Click] called ");
        log.Debug(my_log_event.ToString());
        string my_endpoint = "Not Set";
        
        // Declare vairibles that will be required later
        string my_username = "";
        string my_password = "";
        DataTable my_user_details;

        
        try
        {
            // Attempt to retrieve a Player object from the HedgeEm Webservice using the credentials supplied.
            my_endpoint = String.Format("{0}/ws_login/{1},{2},{3},{4}/", p_current_json_webservice_url_base, p_session_id, p_session_server_id, my_username, my_password);
            HedgeEmPlayer my_player = (HedgeEmPlayer)f_get_object_from_json_call_to_server(my_endpoint, typeof(HedgeEmPlayer));

            if (my_player == null)
            {
                string my_error_msg = String.Format("Player object is null after call to Webservice to retrieve details", my_username);
                my_log_event.p_message = my_error_msg;
                log.Error(my_log_event.ToString());
                throw new Exception(my_error_msg);
            }

            if (my_player.p_player_id <= 0)
            {
                my_log_event.p_message = my_player.p_error_message;
                log.Error(my_log_event.ToString());
                throw new Exception(my_log_event.ToString());

            }
            else
            {
                // If we have got here the user has logged into the server sucessfully so we should set some session variables for ease of use later
                int my_player_id = my_player.p_player_id;
                Session["p_session_player_id"] = my_player_id;
                Session["display_name"] = my_player.p_display_name;
                Session["p_session_username"] = my_username;
                Session["password"] = my_password;
                Session["user_role"] = my_player.p_role;
                        
                p_session_personal_table_id = my_player.p_personal_table_id;
                if (Session["p_session_username"] != null)
                {
                    if (File.Exists(Server.MapPath("resources/player_avatar_" + Session["p_session_username"].ToString() + ".jpg")))
                    {
                        usr_image.ImageUrl = "../resources/player_avatar_" + Session["p_session_username"].ToString() + ".jpg";
                    }

                    else
                    {
                        usr_image.ImageUrl = "../resources/avitars/user_square.png";
                    }
                }
                // As the user has now logged in by HedgeEm authentication hide the Facebook login DIV
                if (Session["facebooklogin"] != null)
                {
                    //LoginDiv.Attributes.Add("style", "display:none !Important;");
                }

                // As the user has now logged show the logout button and hide the login button
                // xxx Nov 2014.  Not sure why this is on condition of facebooklogin; I separated this out from if/else
                // of above to figure this out.  I assume is because you could be logged in by facebook so still want to
                // show / hide login/logout buttons appropriately
                if (Session["facebooklogin"] == null)
                {
                    lbl_user_name.Text = Session["display_name"].ToString();
                    Logout.Attributes.Add("style", "display:block !Important;");
                    //LoginDiv.Attributes.Add("style", "display:none !Important;");
                    divLogin.Attributes.Add("style", "display:none !Important;");
                    userdetails.Attributes.Add("style", "display:none !Important;");
                    btnLogout.Visible = true;
                    btnLogout.Enabled = true;
                    Page.RegisterStartupScript("OnLoad", "<script>document.getElementById('userdetails').style.display='none';</script>");
                }

                
                string role = "";
                if (my_player != null)
                {
                    role = my_player.p_role;
                    my_log_event.p_message = String.Format("User/player role determined to be [{0}].", role.ToString());
                    log.Debug(my_log_event.ToString());
                }

                
            }
        }
        catch (Exception ex)
        {
            string my_error_message = "Fatal Errorin method [btn_login_Click] - " + ex.Message.ToString() + "');";

            //  Log the error and raise a new exception
            my_log_event.p_message = String.Format(
                "Fatal error in method [btn_login_Click]. Reason [{0}]",
                        ex.Message);
            log.Error(my_log_event.ToString(), new Exception(ex.Message));
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_message.ToString();
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
        }

    }
    private DC_hedgeem_game_state f_sit_at_anonymous_table(enum_theme a_enum_theme )
    {
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        DC_hedgeem_game_state my_game_state = new DC_hedgeem_game_state();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "f_sit_at_anonymous_table";
        log.Debug(_xxx_log_event.ToString());
        string my_endpoint = "Not Set";
        try
        {
            try
            {
    
                // Creates (registers) a new user (HedgeEmPlayer) in the HedgeEm Server.
                // Note this also creates a Personal Table for them (which the HedgeEmTable is returned in the Player object 'p_personal_table_id
                enum_authentication_method my_authentication_method = enum_authentication_method.FACEBOOK;
            my_endpoint = String.Format("{0}/ws_sit_at_anonymous_table/{1},{2},{3},{4}/",
                                                p_current_json_webservice_url_base,
                                                "anon_session_id_123",
                                                83,
                                                a_enum_theme.ToString(),
                                                "FASTPLAY_FLOP");

            my_game_state = (DC_hedgeem_game_state)f_get_object_from_json_call_to_server(my_endpoint, typeof(DC_hedgeem_game_state));
                if (my_game_state.p_error_message != null)
                {
                    if (my_game_state.p_error_message != "")
                    {
                        string my_error_msg = string.Format("Failed trying call 'sit anonymously' to server, Error returned [{0}], Endpoint targeted [{1}]",my_game_state.p_error_message,my_endpoint);
                        throw new Exception(my_error_msg);
                    }
                }

                // If we got here we assume Player was created successfully so store Player ID and continue
                //p_session_player_id = my_game_state.p_player_id;


                // login to the game
                /*Session["p_session_username"] = txt_username.Text;
                Session["password"] = txt_password.Text;
                Session["display_name"] = txt_full_name.Text;
                Session["p_session_personal_table_id"] = my_game_state.p_personal_table_id;
                Session["p_session_username"] = my_game_state.p_username;
                Session["p_session_password"] = txt_password.Text;
                Session["p_session_display_name"] = my_game_state.p_display_name;


                ScriptManager.RegisterStartupScript(Page, GetType(), "OnLoad", "alert('Thank you for registering,your facebook account with HedgeEm. A confirmation mail is sent to your email Id '); if(alert){ window.location='frm_facebook_canvas.aspx';}", true);
                */
                //Page.RegisterStartupScript("OnLoad", "<script>alert('Thank you for registering, you are now logged in an can start to play HedgeEm'); if(alert){ window.location='frm_facebook_canvas.aspx';}</script>");
            }
            catch (Exception ex)
            {
                string my_error_msg_summary = String.Format("Fatal error trying to sit at table anonymously");
                string my_error_msg_detail = String.Format("Error in {0} Reason [{1}]", 
                    my_log_event.p_method_name, 
                    ex.Message.ToString());

                my_log_event.p_message = my_error_msg_detail;

                log.Error(my_log_event.ToString());

                HedgeemerrorPopup my_popup_messageError = new HedgeemerrorPopup();
                my_popup_messageError.p_user_message_str = my_error_msg_summary;
                my_popup_messageError.p_detailed_message_str = my_error_msg_detail;
                my_popup_messageError.p_is_visible = true;

                Place_Holder_Popup_Message.Controls.Add(my_popup_messageError);

                my_popup_messageError.Dispose();

                //newuser.Visible = false;



            }
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in f_get_free_anonymous_player suald - " + ex.Message.ToString();
       //     ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            log.Error("Error in f_get_free_anonymous_player xxxaawe", new Exception(ex.Message));

            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;

            //newuser.Visible = false;

            Place_Holder_Popup_Message.Controls.Add(my_popup_message);

            my_popup_message.Dispose();

        }

        return my_game_state;
        
    }
    public void send_forgot_password_mail(string email_id, string password)
    {
        _xxx_log_event.p_method_name = "send_forgot_password_mail";
        _xxx_log_event.p_message = "Method to send Email of Forgotten Password";
        log.Debug(_xxx_log_event.ToString());
        try
        {
            // code to send password through mail
            SmtpClient smtp = new SmtpClient();
            smtp.Credentials = new NetworkCredential("*****@*****.**", "Plok23712");
            smtp.Port = 25;
            smtp.Host = "smtp.gmail.com";
            smtp.EnableSsl = true;

            MailMessage message = new MailMessage();
            message.From = new MailAddress("*****@*****.**");
            message.To.Add(email_id);
            message.Subject = "Forgot Password Mail";
            message.Body = "As requested, your details are :- <br/><br/> Username - " + email_id + " <br/> Password - " + password + "";
            // Send mail copy to Simon
            message.CC.Add("*****@*****.**");
            message.IsBodyHtml = true;
            smtp.Send(message);
            Page.RegisterStartupScript("UserMsg", "<script>alert('Password has been sent to you successfully. Check Your Mail for further instructions.');if(alert){ window.location='frm_facebook_canvas.aspx';}</script>");
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in send_forgot_password_mail - " + ex.Message.ToString();
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeemerrorPopup my_popup_messageError = new HedgeemerrorPopup();
            my_popup_messageError.p_detailed_message_str = "";
            my_popup_messageError.p_detailed_message_str = my_error_popup;
            my_popup_messageError.p_is_visible = true;

            Place_Holder_Popup_Message.Controls.Add(my_popup_messageError);

            my_popup_messageError.Dispose();
            log.Error("Fatal error in 'send_forgot_password_mail'", new Exception(ex.Message));
        }
    }
    /// <summary>
    /// Created by Simon on 4th Jan 2014 - I dont think this method is called - VERY BAD DUPLICATED CODE
    /// </summary>
    private void f_create_new_user_based_on_facebook_authentication()
    {

        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "This message creates new fb user in database";
        log.Debug(_xxx_log_event.ToString());
        string my_endpoint = "Not Set";
        try
        {
            xxxHC_a_opening_balance = 100;
            string xxx_default_password = "******";
            try
            {

                // Creates (registers) a new user (HedgeEmPlayer) in the HedgeEm Server.
                // Note this also creates a Personal Table for them (which the HedgeEmTable is returned in the Player object 'p_personal_table_id
                enum_authentication_method my_authentication_method = enum_authentication_method.FACEBOOK;
                my_endpoint = String.Format("{0}/ws_register_user_and_create_personal_table/{1},{2},{3},{4},{5}/",
                                                p_current_json_webservice_url_base,
                                                txt_fb_username.Text,
                                                xxx_default_password,
                                                txt_fb_display_name.Text,
                                                xxxHC_a_opening_balance,
                                                my_authentication_method);

                HedgeEmPlayer my_player = (HedgeEmPlayer)f_get_object_from_json_call_to_server(my_endpoint, typeof(HedgeEmPlayer));
                if (my_player.p_error_message != null)
                {
                    if (my_player.p_error_message != "")
                    {
                        throw new Exception(my_player.p_error_message);
                    }
                }

                // If we got here we assume Player was created successfully so store Player ID and continue
                p_session_player_id = my_player.p_player_id;


                // login to the game
                Session["p_session_username"] = txt_username.Text;
                Session["password"] = txt_password.Text;
                Session["display_name"] = txt_full_name.Text;
                Session["p_session_personal_table_id"] = my_player.p_personal_table_id;
                Session["p_session_username"] = my_player.p_username;
                Session["p_session_password"] = txt_password.Text;
                Session["p_session_display_name"] = my_player.p_display_name;


                //service.f_activate_user(txt_fb_username.Text);

                //send_fb_user_registration_mail(txt_fb_username.Text, xxx_default_password, txt_fb_display_name.Text);

                //lbl_register_status_msg.Visible = true;
                //lbl_register_status_msg.Text = "Thank you for registering, Please activate your account by clicking link sent on your registered email id.";
                ScriptManager.RegisterStartupScript(Page, GetType(), "OnLoad", "alert('Thank you for registering,your facebook account with HedgeEm. A confirmation mail is sent to your email Id '); if(alert){ window.location='frm_facebook_canvas.aspx';}", true);

                //Page.RegisterStartupScript("OnLoad", "<script>alert('Thank you for registering, you are now logged in an can start to play HedgeEm'); if(alert){ window.location='frm_facebook_canvas.aspx';}</script>");
            }
            catch (Exception ex)
            {
                string my_error_popup = "Error in btn_new_fb_user_Click - " + ex.Message.ToString();
          //      ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
                log.Error("Error while btn_new_fb_user_Click", new Exception(ex.Message));

                HedgeemerrorPopup my_popup_messageError = new HedgeemerrorPopup();
                my_popup_messageError.p_detailed_message_str = "";
                my_popup_messageError.p_detailed_message_str = my_error_popup;
                my_popup_messageError.p_is_visible = true;

                Place_Holder_Popup_Message.Controls.Add(my_popup_messageError);

                my_popup_messageError.Dispose();

                //newuser.Visible = false;



            }
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in creating user - " + ex.Message.ToString();
       //     ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            log.Error("Error in creating user", new Exception(ex.Message));

            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;

            //newuser.Visible = false;

            Place_Holder_Popup_Message.Controls.Add(my_popup_message);

            my_popup_message.Dispose();

        }
    }
    // This function plays sound on the click of deal button
    private void PlaySound()
    {
        log.Debug("PlaySound method of Hedgeem Table is called");
        try
        {
            SoundPlayer sd = new SoundPlayer();
            sd.SoundLocation = Server.MapPath("~/resources/waves/Deal-6.mp3 ");
            sd.Play();
            sd.Play();
            sd.Play();
            sd.Play();
            sd.Play();
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in PlaySound method - " + ex.Message.ToString();
           // ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeEmLogEvent my_log = new HedgeEmLogEvent();
            my_log.p_message = ex.Message;
            my_log.p_method_name = "PlaySound";
            my_log.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
            my_log.p_game_id = game_id;
            my_log.p_table_id = p_session_personal_table_id;
            log.Error(my_log.ToString());
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
        }
    }
    /// Context / Background reading
    /// ----------------------------
    /// You must understand the following before understanding this function
    /// + What the HedgeEmHandStageInfo class is and what its purpose is.
    /// 
    /// History
    /// -----------
    /// Original Author: Simon Hewins Jul 2014
    /// Last edit:       Simon Hewins Aug 2014
    /// 
    /// Description
    /// -----------
    /// 
    /// Gets a LIST of HedgeEmHandStageInfo objects for any given hand (index) at any given stage.
    /// </summary>
    /// <param name="a_enum_game_state"></param>
    /// <param name="a_hand_index"></param>
    /// <returns></returns>
    public double f_get_total_previous_bets_for_stage_and_hand_player(enum_betting_stage a_enum_betting_stage, int a_hand_index, int a_player_id)
    {
        // Create a 'log event' object to audit execution
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "Method Entered.";
        my_log_event.p_player_id = p_session_player_id;
        my_log_event.p_table_id = p_session_personal_table_id;
        log.Debug(my_log_event.ToString());

        /// xxx hack until Bet contains player id
        a_player_id = 0;

        List<HedgeEmBet> my_previous_bets_list = new List<HedgeEmBet>();

        double my_bet_total = -666;

        try
        {
            my_previous_bets_list = (from handsstage_objects in _global_game_state_object.p_recorded_bets
                                     where handsstage_objects.p_enum_betting_stage == a_enum_betting_stage
                         && handsstage_objects.p_hand_index == a_hand_index
                         && handsstage_objects.p_seat_index == a_player_id
                                     select handsstage_objects).ToList();

            my_bet_total = (from handsstage_objects in _global_game_state_object.p_recorded_bets
                            where handsstage_objects.p_enum_betting_stage == a_enum_betting_stage
                && handsstage_objects.p_hand_index == a_hand_index
                && handsstage_objects.p_seat_index == a_player_id
                            select handsstage_objects.p_bet_amount).Sum();



        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in f_get_previous_bets_for_stage_and_hand" + ex.Message.ToString();
           // ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeEmLogEvent my_log = new HedgeEmLogEvent();
            my_log_event.p_message = String.Format("Exception caught [{0}] ", ex.Message);
            my_log.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
            my_log.p_game_id = game_id;
            my_log.p_table_id = p_session_personal_table_id;
            log.Error(my_log.ToString());
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
        }
        return my_bet_total;
    }
    // This method add 25 chips amount to user's seat balance if a user clicks on get chips button
    protected void btn_get_chips_add_Click(object sender, EventArgs e)
    {
        // Create a 'log event' object to audit execution
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "Method Entered.";
        my_log_event.p_player_id = p_session_player_id;
        my_log_event.p_table_id = p_session_personal_table_id;
        log.Debug(my_log_event.ToString());

        try
        {
            my_log_event.p_message = "Method called ";
            my_log_event.p_method_name = "btn_get_chips_add_Click";
            my_log_event.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
            my_log_event.p_game_id = game_id;
            my_log_event.p_table_id = p_session_personal_table_id;
            log.Debug(my_log_event.ToString());
            log.Info("[" + Session["p_session_username"].ToString() + "] clicked btn_get_chips");
            int xxx_HC_seat_id = 0;
            double my_get_chips_top_up_amount = Convert.ToDouble(WebConfigurationManager.AppSettings["get_chips_default_amount"]);


            seat_balance_update my_seat_balance_update = new seat_balance_update
            {
                p_playerid = Convert.ToInt32(Session["p_session_player_id"]),
                p_tableid = p_session_personal_table_id,
                p_seatid = xxx_HC_seat_id,
                p_balance = my_get_chips_top_up_amount
            };


            int my_server_id = 10;
            // Call the Hedge'Em Webservices (via helper function) to place the bet.
            string get_chips_endpoint = String.Format("ws_top_up_chips_at_table/{0},{1},{2},{3},{4}",
                                                        my_server_id,
                                                        p_session_personal_table_id,
                                                        xxx_HC_seat_id,
                                                        my_get_chips_top_up_amount,
                                                        Convert.ToInt32(Session["p_session_player_id"]));
            my_seat_balance_update = (seat_balance_update)f_get_object_from_json_call_to_server(get_chips_endpoint, typeof(seat_balance_update));


            // gets clicked link value from session
            //    string clicked_name = Session["name"].ToString();

            //logs the entry of clicked link
            //   log.Info("[" + Session["p_session_username"].ToString() + "] Selected [" + clicked_name + "] option to get chips.");
            _global_game_state_object = (DC_hedgeem_game_state)f_get_object_from_json_call_to_server("get_game_state_object/" + p_session_personal_table_id, typeof(DC_hedgeem_game_state));
            game_id = _global_game_state_object.p_game_id;
            number_of_hands = _global_game_state_object.p_number_of_hands_int;

            enum_betting_stage my_betting_stage = f_get_current_betting_stage();
            _game_state = _global_game_state_object.p_current_state_enum;
            _hedgeem_hand_panels = new hedgeem_hand_panel[number_of_hands];
            _int_number_of_betting_stages = _global_game_state_object.p_number_of_betting_stages_int;
            _hedgeem_betting_panels = new BETTING_PANEL[_int_number_of_betting_stages, number_of_hands];
            lbl_game_id.Text = String.Format("Table/Game: {0}/{1} ", _global_game_state_object.p_table_id, game_id);

            f_call_functions_to_render_screen();
            updPanl_to_avoid_Postback.Update();
            ScriptManager.RegisterStartupScript(Page, GetType(), "", "alert('Congratulations £" + my_get_chips_top_up_amount + " have been added to your seat amount........!');", true);
        }
        catch (Exception ex)
        {
            // xxxeh this exeception does not show to users
            string my_error_popup = "Error in btn_get_chips_add_Click - " + ex.Message.ToString();
           //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
            my_log_event.p_message = String.Format("Exception caught in btn_get_chips_add_Click function. Reason [{0}] ", ex.Message);
            my_log_event.p_method_name = "btn_get_chips_add_Click";
            my_log_event.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
            my_log_event.p_game_id = game_id;
            my_log_event.p_table_id = p_session_personal_table_id;
            log.Error(my_log_event.ToString());
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        var type = Request.RequestType;

        // If we dont have a player ID we need to redirect the user back to the home screen where they can login or play anonymously to get a PlayerID.
        if (Session["p_session_player_id"] == null) 
        {
            string my_webapp_home_page = WebConfigurationManager.AppSettings["hedgeem_webapp_landing_page"].ToString();
            Response.Redirect(my_webapp_home_page);
        }
        else
        {
            HedgeEmLogEvent my_log = new HedgeEmLogEvent();
            my_log.p_message = "frm_hedgeem_table.aspx.cs method called.";
            my_log.p_method_name = "Page_Load";
            my_log.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
            my_log.p_game_id = game_id;
            my_log.p_table_id = p_session_personal_table_id;
            log.Debug(my_log.ToString());
            try
            {
                // checks if session is timed out
                if (Session.Count == 0)
                {
                    Page.RegisterStartupScript("Alert Message", "<script type='text/javascript'>show_session_timeout_message();</script>");
                }
                else
                {
                    int my_player_id = Convert.ToInt32(Session["p_session_player_id"]);
                    p_session_personal_table_id = Convert.ToInt32(Session["p_session_personal_table_id"]);

                    //f_preload_images();

                    bool ispostback = Page.IsAsync;

                    if (Page.IsPostBack == false)
                    {
                        try
                        {

                            _global_game_state_object = (DC_hedgeem_game_state)f_get_object_from_json_call_to_server("get_game_state_object/" + p_session_personal_table_id, typeof(DC_hedgeem_game_state));
                            if (_global_game_state_object.p_error_message != null)
                            {
                                if (_global_game_state_object.p_error_message != "")
                                {
                                    throw new Exception(_global_game_state_object.p_error_message);
                                }
                            }

                            my_log.p_message = String.Format("Successfully retrieved gamestate from server. Table ID [{0}], State [{1}]", _global_game_state_object.p_table_id, _global_game_state_object.p_current_state_enum.ToString());
                            log.Debug(my_log.ToString());
                        }
                        catch (Exception ex)
                        {
                            my_log.p_message = String.Format("Error trying to get game state from server. Reason [{0}]", ex.Message);
                            log.Error(my_log.ToString());
                            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
                            my_popup_message.p_detailed_message_str = "";
                            my_popup_message.p_is_visible = false;

                            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
                            my_popup_message.p_detailed_message_str = String.Format("Error trying to get game state from server. Reason [{0}]", ex.Message);
                            my_popup_message.p_is_visible = true;
                            Place_Holder_Popup_Message.Controls.Add(my_popup_message);

                        }
                        int dummy_var_for_break_point = 22;
                        if (Session["user_role"] == null)
                        {
                            Session["user_role"] = enum_user_role.BASIC_USER.ToString();
                        }
                        string role = Session["user_role"].ToString();
                        // if user is admin, show cashier button
                        if (role == enum_user_role.ADMIN.ToString())
                        {
                            btn_cashier.Visible = true;
                        }
                        //if (is_table_jackpot_enabled == true)
                        //{
                        //    table_jackpot_container.Visible = true;
                        //}
                        else
                        {
                            table_jackpot_container.Visible = false;
                        }
                        ScriptManager sManager = ScriptManager.GetCurrent(this.Page);
                        //Get Image from Facebook if the user is logged in via facebook
                        string facebook_imageurl = "";
                        if (Session["Facebook_User_Id"] != null)
                        {
                            if (Session["Facebook_User_Id"] != "")
                            {
                                //Get Image from Facebook
                                facebook_imageurl = "https://graph.facebook.com/" + Session["Facebook_User_Id"].ToString() + "/picture";
                            }
                            if (facebook_imageurl != "")
                            {
                                // Get path to save the image
                                string pathToSave = Server.MapPath("~/resources/") + "player_avatar_" + Session["p_session_username"].ToString() + ".jpg";
                                //Check if the Image exists already
                                if (!File.Exists(pathToSave))
                                {
                                    //Save the image
                                    WebClient client = new WebClient();
                                    //client.DownloadFile(facebook_imageurl, pathToSave);
                                }
                            }
                        }
                        chk_admin_flag_value = 1;
                        Session["Check_AltA"] = 1;


                        if (Session["Check_AltA"] == null)
                        {
                            btn_Show_Admin_Flag.Visible = true;
                            btn_Hide_Admin_Flag.Visible = false;
                        }
                        else if (Convert.ToInt32(Session["Check_AltA"]) == 0)
                        {
                            btn_Show_Admin_Flag.Visible = false;
                            btn_Hide_Admin_Flag.Visible = true;
                        }

                        game_id = _global_game_state_object.p_game_id;
                        number_of_hands = _global_game_state_object.p_number_of_hands_int;
                        enum_betting_stage my_betting_stage = f_get_current_betting_stage();
                        _game_state = _global_game_state_object.p_current_state_enum;
                        _hedgeem_hand_panels = new hedgeem_hand_panel[number_of_hands];
                        Session["sess_betting_stage_enum"] = _global_game_state_object.p_current_betting_stage_enum;
                        _int_number_of_betting_stages = _global_game_state_object.p_number_of_betting_stages_int;
                        _hedgeem_betting_panels = new BETTING_PANEL[_int_number_of_betting_stages, number_of_hands];
                        lbl_game_id.Text = String.Format("Table/Game: {0}/{1} ", _global_game_state_object.p_table_id, game_id);
                        // gets seat balance of the current player
                        player_funds_at_seat = _global_game_state_object._seats[0].p_player_seat_balance;

                        f_call_functions_to_render_screen();
                    }
                    // Dynamically contructed the Web page title so show relevant info about Server, Table and Game the player is playing. 
                    //   String my_page_title = String.Format("Texas Hedge'Em Poker | Server [{0}], Table {1}], Game [{2}]","server id", p_table_name, p_table_id);
                    //   this.Page.Title = my_page_title;

                    /*Click on Hand_Panel to get the value of current hand via _click_hand_index  and then that value pass to hidden textbox i.e mytext, when Hand_Index_Value is shown in textbox then btn_Get_Clicked_Hand_Value method to get the value of bet that we placed i.e HOLE: £1 bet pays £4*/
                   // Page.RegisterStartupScript("Bet_Placed_Details", "<script>f_placebet(_click_hand_index);</script>");
                }
            }
            

            catch (Exception ex)
            {
                //string my_error_popup = "alert('Error in Page Load - " + ex.Message.ToString() + "');";
                string my_error_popup = String.Format("Fatal Error in frm_hedgeem_table.aspx.cs Page Load. Reason [{0}]", ex.Message);
                my_log.p_message = String.Format("Fatal Error in frm_hedgeem_table.aspx.cs Page Load. Reason [{0}]", ex.Message);
                // xxxeh This exception does not show to users
                //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
                HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
                my_popup_message.p_detailed_message_str = "";
                my_popup_message.p_is_visible = false;

                //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
                my_popup_message.p_detailed_message_str = my_error_popup;
                my_popup_message.p_is_visible = true;
                Place_Holder_Popup_Message.Controls.Add(my_popup_message);
                log.Error(my_log.ToString());
                //throw new Exception(my_error_popup); 
         
            }
        }
        
    }
    /// <summary>
    /// This is the primary co-ordinating function initiates the transistion of a Hedge'Em game from one
    /// state to the next.  This function is called when a player/user clicks on and of the 'Deal' buttons
    /// (e.g. 'Deal Hole', 'Deal Flop', 'Deal Next' etc).  
    /// 
    /// If you imagine the in the real physical world it would be like the player at a black-jack table
    /// telling the dealer to deal the next card. 
    /// 
    /// Upon calling of this function two things happen:
    /// 
    ///    1. An instruction is sent to the server to tell it to progress the game to the next stage.  (e.g. 
    ///       (if the game is currently in 'HOLE' state, then progress to 'FLOP' state.
    ///       
    ///    2. An internal call to is made to tell the webpage to update its display based on the change in state
    ///       as read from the server post change to new state.  Eg. If the Hedge'Em game now enters the 'TURN'
    ///       stage then show/enable the 'Deal River' button and update the Odd that each hand has of winning. 
    ///       
    /// xxx ... Note: in most games (and how this is currently (Dec 2013) coded there will only be 
    /// one player per table so the game will change to the next state each time this function is called.
    /// In future the game will not progress to the next state until all players at the same table have 
    /// issued the same instruction or the dealer/server decided to do on a time-delay basis after each stage.
    /// </summary>
    /// <returns></returns>
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btn_deal_next_stage_Click(object sender, EventArgs e)
    {
        // Create a 'log event' object to audit execution
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "Method Entered.";
        my_log_event.p_player_id = p_session_player_id;
        my_log_event.p_table_id = p_session_personal_table_id;
        log.Debug(my_log_event.ToString());

        string my_username = Session["p_session_username"].ToString();

        log.Info("[" + my_username + "] clicked Deal Next Stage button");
        try
        {
           
            if (Session.Count == 0)
            {
                log.Info("Session timed out for user with player id = " + Convert.ToInt32(Session["p_session_player_id"]));
                ScriptManager.RegisterStartupScript(Page, GetType(), "SessionTimeOutMsg", "show_session_timeout_message();", true);
            }
            else
            {
               


                // call to webservice to get next state object
                _global_game_state_object = (DC_hedgeem_game_state)f_get_object_from_json_call_to_server("get_next_game_state_object/" + p_session_personal_table_id + "," + Convert.ToInt32(Session["p_session_player_id"]), typeof(DC_hedgeem_game_state));
                string stage = _global_game_state_object.p_current_state_enum.ToString();
                
                game_id = _global_game_state_object.p_game_id;
                number_of_hands = _global_game_state_object.p_number_of_hands_int;
                enum_betting_stage my_betting_stage = f_get_current_betting_stage();
                Session["sess_betting_stage_enum"] = _global_game_state_object.p_current_betting_stage_enum;
                _game_state = _global_game_state_object.p_current_state_enum;
                _hedgeem_hand_panels = new hedgeem_hand_panel[number_of_hands];
                _int_number_of_betting_stages = _global_game_state_object.p_number_of_betting_stages_int;
                _hedgeem_betting_panels = new BETTING_PANEL[_int_number_of_betting_stages, number_of_hands];
                player_funds_at_seat = _global_game_state_object._seats[0].p_player_seat_balance;
                // call to the method to render the screen
                f_call_functions_to_render_screen();
             

                //Script For Animation of cards
                if (stage == "STATUS_HOLE")
                {
                    ScriptManager.RegisterStartupScript(this, GetType(), "animate_Hand", "animate_Hand();", true);
                }
                if (stage == "STATUS_FLOP")
                {
                    ScriptManager.RegisterStartupScript(this, GetType(), "animate_card_flop", "animate_card_flop();", true);
                }
                if (stage == "STATUS_TURN")
                {
                    ScriptManager.RegisterStartupScript(this, GetType(), "animate_card_middle_turn", "animate_card_middle_turn();", true);
                }
                if (stage == "STATUS_RIVER")
                {
                    ScriptManager.RegisterStartupScript(this, GetType(), "animate_card_middle_river", "animate_card_middle_river();", true);
                }
                if (stage == "STATUS_START")
                {
                    ScriptManager.RegisterStartupScript(this, GetType(), "animate_card_next_game", "animate_card_next_game();", true);
                }            

            }
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in btn_deal_next_stage_Click - " + ex.Message.ToString();
           // ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", "alert ('plokerror')", true);
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
            my_log_event.p_message = String.Format("Exception caught in btn_deal_next_stage_Click function. Reason [{0}] ", ex.Message);
            my_log_event.p_method_name = "btn_deal_next_stage_Click";
            my_log_event.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
            my_log_event.p_game_id = game_id;
            my_log_event.p_table_id = p_session_personal_table_id;
            log.Error(my_log_event.ToString());
            //throw new Exception("xxx This exception is not being caught");
        }
    }
    // This cancels the bet placed by the user.
    public void btn_cancel_bets_for_this_hand_and_stage_Click(object sender, EventArgs e)
    {
        // Create a 'log event' object to audit execution
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "Method Entered.";
        my_log_event.p_player_id = p_session_player_id;
        my_log_event.p_table_id = p_session_personal_table_id;
        log.Debug(my_log_event.ToString());

        log.Info("[" + Session["p_session_username"].ToString() + "] cancelled the bet");
        try
        {
            // Get the hand_index from the hidden control
            int handindexbet = Convert.ToInt32(btn_hidden_control_temp_store_for_hand_index.Value);
            int xxx_HC_seat_index = 0;
            // Call webservice svc function to cancel the bet placed
            f_get_object_from_json_call_to_server("f_cancel_bets_for_this_hand_and_stage/" + p_session_personal_table_id.ToString() + "," + Convert.ToInt32(Session["p_session_player_id"]) + "," + xxx_HC_seat_index.ToString() + "," + handindexbet.ToString(), null);

            _global_game_state_object = (DC_hedgeem_game_state)f_get_object_from_json_call_to_server("get_game_state_object/" + p_session_personal_table_id, typeof(DC_hedgeem_game_state));
            game_id = _global_game_state_object.p_game_id;
            number_of_hands = _global_game_state_object.p_number_of_hands_int;
            enum_betting_stage my_betting_stage = f_get_current_betting_stage();
            _game_state = _global_game_state_object.p_current_state_enum;
            _hedgeem_hand_panels = new hedgeem_hand_panel[number_of_hands];
            _int_number_of_betting_stages = _global_game_state_object.p_number_of_betting_stages_int;
            _hedgeem_betting_panels = new BETTING_PANEL[_int_number_of_betting_stages, number_of_hands];
            lbl_game_id.Text = String.Format("Table/Game: {0}/{1} ", _global_game_state_object.p_table_id, game_id);
            // Method to render the screen
            f_call_functions_to_render_screen();
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in f_cancel_bets_for_this_hand_and_stage" + ex.Message.ToString();
           // ScriptManager.RegisterStartupScript(Page, GetType(), "OnLoad", "alert('" + ex.Message.ToString() + "');", true);
           // ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
            my_log_event.p_message = "Exception caught in f_cancel_bets_for_this_hand_and_stage function " + ex.Message;
            my_log_event.p_method_name = "f_cancel_bets_for_this_hand_and_stage";
            my_log_event.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
            my_log_event.p_game_id = game_id;
            my_log_event.p_table_id = p_session_personal_table_id;
            log.Error(my_log_event.ToString());
        }
    }
    //xxx commenting out the bet slider code and reverting back the old single bet place. NOw this function is not in use
    protected void btn_Bet_Click(object sender, EventArgs e)
    {
        // Create a 'log event' object to audit execution
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "Method Entered.";
        my_log_event.p_player_id = p_session_player_id;
        my_log_event.p_table_id = p_session_personal_table_id;
        log.Debug(my_log_event.ToString());

        HedgeEmBetAcknowledgement my_bet_ack = new HedgeEmBetAcknowledgement();
        log.Info("[" + Session["p_session_username"].ToString() + "] placed a bet");
        /* Get value of Selected_Hand_Panel for bet from textbox and save it in a variable */
        // xxx need to document this
        try
        {
            //  Get the hand_index from the hidden control
            int handindexbet = Convert.ToInt32(btn_hidden_control_temp_store_for_hand_index.Value);
            double bet_amount;
            if (handindexbet == 0)
            {
                bet_amount = double.Parse(amount1.Value);
            }
            else if (handindexbet == 1)
            {
                bet_amount = double.Parse(amount2.Value);
            }
            else if (handindexbet == 2)
            {
                bet_amount = double.Parse(amount3.Value);
            }
            else
            {
                bet_amount = double.Parse(amount4.Value);
            }

            double rounded_bet_amount = Math.Round(bet_amount, 2, MidpointRounding.AwayFromZero);
            DC_bet_acknowledgement enum_my_bet_ack;

            enum_betting_stage my_betting_stage = f_get_current_betting_stage();
            enum_my_bet_ack = f_place_bet(my_betting_stage,
               handindexbet, rounded_bet_amount);

            if (enum_my_bet_ack.p_ack_or_nak != enum_acknowledgement_type.ACK.ToString())
            {
                string short_desc = "Bet not accepted because.  Reason: ";
                string long_desc = my_bet_ack.p_ack_description;
                //To show error description that why bet is not accepted inside div
                short_description.InnerHtml = short_desc;
                long_description.InnerHtml = long_desc;
                ScriptManager.RegisterStartupScript(Page, GetType(), "JsStatus", "document.getElementById('error_message').style.display = 'block';document.getElementById('fade').style.display = 'block';", true);
            }
            f_place_bet();
            _global_game_state_object = (DC_hedgeem_game_state)f_get_object_from_json_call_to_server("get_game_state_object/" + p_session_personal_table_id, typeof(DC_hedgeem_game_state));
            game_id = _global_game_state_object.p_game_id;
            number_of_hands = _global_game_state_object.p_number_of_hands_int;
            _game_state = _global_game_state_object.p_current_state_enum;
            _hedgeem_hand_panels = new hedgeem_hand_panel[number_of_hands];
            _int_number_of_betting_stages = _global_game_state_object.p_number_of_betting_stages_int;
            _hedgeem_betting_panels = new BETTING_PANEL[_int_number_of_betting_stages, number_of_hands];
            lbl_game_id.Text = String.Format("Table/Game: {0}/{1} ", _global_game_state_object.p_table_id, game_id);
            f_call_functions_to_render_screen();
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in btn_Bet_Click" + ex.Message.ToString();
           // ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
            my_log_event.p_message = "Exception caught in btn_Bet_Click function " + ex.Message;
            my_log_event.p_method_name = "btn_Bet_Click";
            my_log_event.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
            my_log_event.p_game_id = game_id;
            my_log_event.p_table_id = p_session_personal_table_id;
            log.Error(my_log_event.ToString());
        }
    }
    protected void btn_new_user_Click(object sender, EventArgs e)
    {
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "This message creates new user in database";
        log.Debug(my_log_event.ToString());
        string my_endpoint = "Not Set";

        bool user_exist;
        hedgeem_control_popup_message my_popup_message = new hedgeem_control_popup_message();
        my_popup_message.p_detailed_message_str = "";

        try
        {
            // This checks whether the entered email id exists in the database or not.
            my_endpoint = String.Format("{0}/ws_get_player_list/sessionabc123,{1},10000/", p_current_json_webservice_url_base, p_server_id);

            List<HedgeEmPlayer> my_player_list = (List<HedgeEmPlayer>)f_get_object_from_json_call_to_server(my_endpoint, typeof(List<HedgeEmPlayer>));
            user_exist = my_player_list.Exists(x => x.p_username == txt_username.Text);

            if (user_exist == false)
            {
                xxxHC_a_opening_balance = 100;
                try
                {
                    enum_authentication_method my_authentication_method = enum_authentication_method.HEDGEEM_ACCOUNT;
                    // Creates (registers) a new user (HedgeEmPlayer) in the HedgeEm Server.
                    // Note this also creates a Personal Table for them (which the HedgeEmTable is returned in the Player object 'p_personal_table_id
                    my_endpoint = String.Format("{0}/ws_register_user_and_create_personal_table/{1},{2},{3},{4},{5}/",
                                                    p_current_json_webservice_url_base,
                                                    txt_username.Text,
                                                    txt_password.Text,
                                                    txt_full_name.Text,
                                                    xxxHC_a_opening_balance,
                                                    my_authentication_method);

                    HedgeEmPlayer my_player = (HedgeEmPlayer)f_get_object_from_json_call_to_server(my_endpoint, typeof(HedgeEmPlayer));
                    if (my_player.p_error_message != null)
                    {
                        if (my_player.p_error_message != "")
                        {
                //            throw new Exception(my_player.p_error_message);




                        }
                    }

                    // If we got here we assume Player was created successfully so store Player ID and continue
                    p_session_player_id = my_player.p_player_id;


                    // login to the game
                    Session["p_session_username"] = txt_username.Text;
                    Session["password"] = txt_password.Text;
                    Session["display_name"] = txt_full_name.Text;
                    Session["p_session_personal_table_id"] = my_player.p_personal_table_id;
                    Session["p_session_username"] = my_player.p_username;
                    Session["p_session_password"] = txt_password.Text;
                    Session["p_session_display_name"] = my_player.p_display_name;

                    //sends registration mail
                    //send_user_registration_mail(txt_username.Text, txt_password.Text, txt_full_name.Text);

                    //my_popup_message.p_detailed_message_str = "Thank you for registering, you may now start to play.  Please don't forget to confirm your registration by clicking on the link in the mail we have just sent you to get your free 50 chips and benefit from extra features.";
                    //Place_Holder_Popup_Message.Controls.Add(my_popup_message);
                    HedgeemMessage my_popup_messageError = new HedgeemMessage();
                    my_popup_messageError.p_detailed_message_str = "";
                    my_popup_messageError.p_detailed_message_str = "Thank you for registering, you may now start to play.  Please don't forget to confirm your registration by clicking on the link in the mail we have just sent you to get your free 50 chips and benefit from extra features.";
                    my_popup_messageError.p_is_visible = true;

                    Place_Holder_Popup_Message.Controls.Add(my_popup_messageError);

                    my_popup_messageError.Dispose();
                   // ScriptManager.RegisterStartupScript(Page, GetType(), "OnLoad", "alert('Thank you for registering. You may now start to play. Click on the link in the mail we have just sent you to get benefit from extra features.');", true);
                    //ScriptManager.RegisterStartupScript(Page, GetType(), "OnLoad", "alert('Thank you for registering, you may now start to play.  Please don't forget to confirm your registration by clicking on the link in the mail we have just sent you to get your free 50 chips and benefit from extra features.'); if(alert){ window.location='frm_facebook_canvas.aspx';}", true);
                    if (Session["p_session_username"] != null)
                    {

                        Logout.Attributes.Add("style", "display:block!Important;");
                        btnLogout.Visible = true;
                        btnLogout.Enabled = true;
                        Page.RegisterStartupScript("OnLoading", "<script>load_edit_profile();</script>");
                        if (Session["display_name"] != null)
                        {
                            lbl_user_name.Text = Session["display_name"].ToString();
                        }
                        //LoginDiv.Attributes.Add("style", "display:none !Important;");
                        divLogin.Attributes.Add("style", "display:none !Important;");
                        if (Session["p_session_username"] != null)
                        {
                            if (File.Exists(Server.MapPath("resources/player_avatar_" + Session["p_session_username"].ToString() + ".jpg")))
                            {
                                usr_image.ImageUrl = "../resources/player_avatar_" + Session["p_session_username"].ToString() + ".jpg";
                            }
                            
                            else
                            {
                                usr_image.ImageUrl = "../resources/avitars/user_square.png";
                            }
                        }

                        btn_play_now.Enabled = true;



                        string role = "";
                        if (my_player != null)
                        {
                            role = my_player.p_role;

                            my_log_event.p_message = String.Format("User/player role hardcoded to BASIC_USER");
                            log.Debug(my_log_event.ToString());

                        }

                        if (role == enum_user_role.ADMIN.ToString())
                        {
                            btnAdmin.Attributes.Add("style", "display:block");
                        }

                        // - xxx- Hardcoding value of role to BASIC_USER as need to discuss this with Simon.
                        Session["user_role"] = "BASIC_USER";
                        Page.RegisterStartupScript("OnLoad", "<script>document.getElementById('progressbar').style.display='none';</script>");
                    }

                }
                catch (Exception ex)
                {
                    my_log_event.p_message = String.Format("Reason [{0}]", ex.Message);
                    HedgeemerrorPopup my_popup_messageError = new HedgeemerrorPopup();
                    my_popup_messageError.p_detailed_message_str = "";
                    my_popup_messageError.p_detailed_message_str = String.Format("Reason [{0}]", ex.Message);
                    my_popup_messageError.p_is_visible = true;

                    Place_Holder_Popup_Message.Controls.Add(my_popup_messageError);

                    my_popup_messageError.Dispose();
                    log.Error(my_log_event.ToString());
                 //   throw new Exception(my_log_event.ToString());
                }
            }

            else
            {
                lbl_register_status_msg.Visible = true;
                lbl_register_status_msg.Text = "This User Already exists. Please try again or Login to continue.";
                //ScriptManager.RegisterStartupScript(Page, GetType(), "OnLoad", "alert('This User Already exists. Please try again or Login to continue.');", true);
            }
        }
        catch (Exception ex)
        {
            string my_error_message = String.Format("ERROR! Unable to create user.  Reason [{0}]", ex.Message);
            //string my_error_popup = "alert('Error in creating user - " + ex.Message.ToString() + "');";
            lbl_register_status_msg.Visible = true;
            lbl_register_status_msg.Text = "ERROR! Unable to create user.  Hedge'Em Administrators have been informed.";
            log.Error("Error in creating user", new Exception(ex.Message));
            HedgeemerrorPopup my_popup_messageError = new HedgeemerrorPopup();
            my_popup_messageError.p_detailed_message_str = "";
            my_popup_messageError.p_detailed_message_str = my_error_message;
            my_popup_messageError.p_is_visible = true;

            Place_Holder_Popup_Message.Controls.Add(my_popup_messageError);

            my_popup_messageError.Dispose();
            //throw new Exception("ssssss");

        }
    }
    /// <summary>
    /// Context / Background reading
    /// ----------------------------
    /// You must understand the following before understanding this function
    /// + What the HedgeEmHandStageInfo class is and what its purpose is.
    /// 
    /// History
    /// -----------
    /// Original Author: Simon Hewins Jul 2014
    /// Last edit:       Simon Hewins Aug 2014
    /// 
    /// Description
    /// -----------
    /// 
    /// Gets a LIST of HedgeEmHandStageInfo objects for any given hand (index) at any given stage.
    /// </summary>
    /// <param name="a_enum_game_state"></param>
    /// <param name="a_hand_index"></param>
    /// <returns></returns>
    public HedgeEmHandStageInfo f_get_hand_stage_info_object_for_stage_and_hand(enum_game_state a_enum_game_state, int a_hand_index)
    {
        // Create a 'log event' object to audit execution
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "Method Entered.";
        my_log_event.p_player_id = p_session_player_id;
        my_log_event.p_table_id = p_session_personal_table_id;
        log.Debug(my_log_event.ToString());

        List<HedgeEmHandStageInfo> myHedgeEmHandStageInfoList = new List<HedgeEmHandStageInfo>();
        HedgeEmHandStageInfo myHedgeEmHandStageInfo = null;
        try
        {
            // Return without searching if not a valid state where a hand_stage_info object is expected.
            if (!(a_enum_game_state == enum_game_state.STATUS_HOLE || a_enum_game_state == enum_game_state.STATUS_FLOP || a_enum_game_state == enum_game_state.STATUS_TURN || a_enum_game_state == enum_game_state.STATUS_RIVER))
            {
                return myHedgeEmHandStageInfo;
            }
            myHedgeEmHandStageInfoList = (from handsstage_objects in _global_game_state_object.p_hand_stage_info_list
                                          where handsstage_objects.p_enum_game_state == a_enum_game_state
                             && handsstage_objects.p_hand_index == a_hand_index
                                          select handsstage_objects).ToList();

            if (myHedgeEmHandStageInfoList.Count > 1)
            {
                String my_err_msg = String.Format("Expected only one 'HandStatusInfo' for state [{0}], hand [{1}] object got [{1}] ",
                    a_enum_game_state.ToString(),
                    a_hand_index,
                    myHedgeEmHandStageInfoList.Count);

                throw new Exception(my_err_msg);
            }

            if (myHedgeEmHandStageInfoList.Count > 0)
            {
                myHedgeEmHandStageInfo = myHedgeEmHandStageInfoList[0];
            } else
            {
                my_log_event.p_message = String.Format("Unusual circumstance.  Did not find any 'HandStatusInfo' for GameState [{0}], Hand Index[{1}] ", a_enum_game_state.ToString(), a_hand_index);
                my_log_event.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
                my_log_event.p_game_id = game_id;
                my_log_event.p_table_id = p_session_personal_table_id;
                log.Warn(my_log_event.ToString());

            }

        }
        catch (Exception ex)
        {
            //  ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_log_event.p_message = String.Format("Exception caught [{0}] ", ex.Message);
            my_log_event.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
            my_log_event.p_game_id = game_id;
            my_log_event.p_table_id = p_session_personal_table_id;
            log.Error(my_log_event.ToString());
            
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_log_event.p_message;
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
        }
        return myHedgeEmHandStageInfo;
    }
    protected void btnSend_Click(object sender, EventArgs e)
    {
        _xxx_log_event.p_method_name = "btnSend_Click";
        _xxx_log_event.p_message = "This button is clicked to send forgot password for the user.";
        log.Debug(_xxx_log_event.ToString());
        bool user_exist;

        string my_endpoint = "Not Set";

        try
        {

            // This checks whether the entered email id exists in the database or not.
            my_endpoint = String.Format("{0}/get_server_info/10/", p_current_json_webservice_url_base);

            List<HedgeEmPlayer> my_player_list = (List<HedgeEmPlayer>)f_get_object_from_json_call_to_server("ws_get_player_list/sessionabc123,10,10000/", typeof(List<HedgeEmPlayer>));
            user_exist = my_player_list.Exists(x => x.p_username == txt_username.Text);

            // If user exists then proceed
            if (user_exist != false)
            {
                DataTable dt = new DataTable();
                // get password of the entered username
                string my_endpoint1 = String.Format("{0}/ws_get_password_from_db/{1}/", p_current_json_webservice_url_base,
                                                                                  txt_Email.Text);

                dt = (DataTable)f_get_object_from_json_call_to_server(my_endpoint1, typeof(DataTable));

             //   dt = service.f_get_password_from_db(txt_Email.Text);
                string password = "";
                if (dt.Rows.Count > 0)
                {
                    password = dt.Rows[0]["password"].ToString();
                }

                // send email method is called with email and password of the user
                send_forgot_password_mail(txt_Email.Text, password);
            }
            else
            {
                ScriptManager.RegisterStartupScript(Page, GetType(), "OnLoad", "alert('This Email doesnot exists. Please try again with valid Email Id.'); show_forgot_password();", true);

            }
        }
        catch (Exception ex)
        {
            string my_error_popup = "alert('Error in btnSend_Click - " + ex.Message.ToString() + "');";
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeemerrorPopup my_popup_messageError = new HedgeemerrorPopup();
            my_popup_messageError.p_detailed_message_str = "";
            my_popup_messageError.p_detailed_message_str = my_error_popup;
            my_popup_messageError.p_is_visible = true;

            Place_Holder_Popup_Message.Controls.Add(my_popup_messageError);

            my_popup_messageError.Dispose();
            log.Error("Fatal error in 'btnSend_Click'", new Exception(ex.Message));
        }
    }
    protected void btn_transfer_Click(object sender, EventArgs e)
    {
        HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
        my_popup_message.p_detailed_message_str = "";
        my_popup_message.p_is_visible = false;
        //log event object is created 
        //HedgeEmLogEvent my_log_event = new HedgeEmLogEvent(); xxx - this does not work Kiran/Simon - 25th March 2014
        //my_log_event.p_method_name = "btn_transfer_Click";
        log.Info("btn_transfer_Click of Cashier Page is called");

        try
        {
            //if (! p_valid_session_exists_global_asax_IS_THIS_RIGHT_PLACE_xxx){
            if (!p_valid_session_exists)
            {
                throw new Exception("Invalid session - so this operation cannot proceed.");
            }
            double acc_balance = Convert.ToDouble(lbl_account_balance.Text);
            double balance_to_transfer = Convert.ToDouble(txt_tranfer_balance.Text);
            double final_player_balance = 0.0, final_seat_balance = 0;
            final_player_balance = acc_balance - balance_to_transfer;
            final_seat_balance = Math.Round(Convert.ToDouble(lbl_seat_balance.Text) + balance_to_transfer, 2);
            if (final_player_balance < 0)
            {
                lbl_msg.Visible = true;
                lbl_msg.Text = "Enter the Correct Amoount";
            }
            else
            {
                service.f_set_player_balance(playerid, final_player_balance);
                service.f_update_seat_table_with_seat_id(playerid, tableid, final_seat_balance, seat_id);
                lbl_msg.Text = "updated successfully";
                lbl_account_balance.Text = Math.Round(service.f_get_player_account_balance(playerid), 2).ToString();
                lbl_seat_balance.Text = Math.Round(service.f_get_player_seat_balance(tableid, 0, playerid), 2).ToString();
                txt_tranfer_balance.Text = "0";
                ss_seat.p_balance =service.f_get_player_seat_balance(tableid, 0, playerid).ToString();

            }
        }
        catch(Exception ex)
        {
            log.Error("Error in btn_transfer_Click of Cashier Page", new Exception(ex.Message));
            string my_error_popup = "Error in btn_transfer_Click of Cashier Page" + ex.Message.ToString();
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup.ToString();
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
            //my_log_event.p_message = "Exception caught - " + ex.Message;
            //log.Error(_xxx_log_event.ToString());
            //throw new Exception(String.Format("btn_transfer_Click ", ex.Message));
        }

    }
    public void send_fb_user_registration_mail(string email_id, string password, string display_name)
    {
        _xxx_log_event.p_method_name = "send_fb_user_registration_mail";
        _xxx_log_event.p_message = "Method to send Email of User Registration";
        log.Debug(_xxx_log_event.ToString());
        try
        {
            // Send mail to user
            string encrypted_email = Encryptdata(email_id);
            string encrypted_password = Encryptdata(password);
            string encrypted_displayname = Encryptdata(display_name);

            // code to send facebook user registration mail
            SmtpClient smtp = new SmtpClient();
            smtp.Credentials = new NetworkCredential("*****@*****.**", "Plok23712");
            smtp.Port = 25;
            smtp.Host = "smtp.gmail.com";
            smtp.EnableSsl = true;

            MailMessage message = new MailMessage();
            message.From = new MailAddress("*****@*****.**");
            message.To.Add(email_id);
            message.Subject = "Successfully Registered - Hedgeem Poker";
            message.Body = "Hi " + display_name + ",<br> Thank you for registering your facebook account with HedgeEm us can now log in at any time with your Facebook account alternatively you can login with you Hedgeem Player name <br> Email Id-" + email_id + " <br/> Password - " + password + "<br/> Username - " + display_name + ".";
            // Send mail copy to Simon
            message.CC.Add("*****@*****.**");
            message.IsBodyHtml = true;
            smtp.Send(message);
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in send_fb_user_registration_mail - " + ex.Message.ToString();
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeemerrorPopup my_popup_messageError = new HedgeemerrorPopup();
            my_popup_messageError.p_detailed_message_str = "";
            my_popup_messageError.p_detailed_message_str = my_error_popup;
            my_popup_messageError.p_is_visible = true;

            Place_Holder_Popup_Message.Controls.Add(my_popup_messageError);

            my_popup_messageError.Dispose();
            log.Error("Fatal error in 'send_fb_user_registration_mail'", new Exception(ex.Message));
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
        my_popup_message.p_detailed_message_str = "";
        my_popup_message.p_is_visible = false;
        //log event object is created 
        //HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();  xxx - this does not work Kiran/Simon - 25th March 2014
        //my_log_event.p_method_name = "page_load_frm_cashier";
        log.Info("Page_Load of Cashier Page is called");


        try
        {
            if (!p_valid_session_exists)
            {
                string my_error_popup = "Invalid session - so this operation cannot proceed.";
                //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
                my_popup_message.p_detailed_message_str = my_error_popup.ToString();
                Place_Holder_Popup_Message.Controls.Add(my_popup_message);
               // throw new Exception("Invalid session - so this operation cannot proceed.");
            }
           
            tableid = p_session_personal_table_id;
            playerid = p_session_player_id;

            if (Request.QueryString["seat_id"] != null)
            {
                p_session_current_seat_id = Convert.ToInt32(Request.QueryString["seat_id"]);
            }

            if (Session.Count == 0)
            {
                Page.RegisterStartupScript("Alert Message", "<script type='text/javascript'>show_session_timeout_message();</script>");
            }
            else
            {
               // lbl_account_balance.Text = service.f_get_player_account_balance(playerid).ToString();

                string my_endpoint = String.Format("{0}/ws_get_player_account_balance/{1}",
                                                                               playerid);

                lbl_account_balance.Text = f_get_object_from_json_call_to_server(my_endpoint, typeof(Double)).ToString();
        


                
                lbl_seat_balance.Text = Math.Round(service.f_get_player_seat_balance(tableid, 0, playerid), 2).ToString();
            }
        }
        catch(Exception ex)
        {
           //my_log_event.p_message = "Exception caught - " + ex.Message;
           //log.Error(_xxx_log_event.ToString());
           //throw new Exception(String.Format("page_load_frm_cashier", ex.Message));
            log.Error("Error in Page Load of Cashier Page", new Exception(ex.Message));
          //  throw new Exception(String.Format("page_load_frm_cashier", ex.Message));

            
         //  my_log_event.p_message = String.Format("Reason [{0}]", ex.Message);
            string my_error_popup = "Error in Page Load of Cashier Page - " + ex.Message.ToString();
                    //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
                    my_popup_message.p_detailed_message_str = my_error_popup.ToString();
                    Place_Holder_Popup_Message.Controls.Add(my_popup_message);
            
        }
    }
    protected void btn_login_Click(object sender, EventArgs e)
    {

       
       

        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        // Log the fact this method has been called
        my_log_event.p_message = String.Format("Method [btn_login_Click] called ");
        log.Debug(my_log_event.ToString());
        string my_endpoint = "Not Set";
        // Detemine if there is a session varible set for facebook. 
        // xxx Nov 2014 Note ... Not sure why - I assmume this is to check
        // if the user has already authenticated via facebook so we can make choices about what to display
        if (Session["chkfb"] != null)
        {
            //   chk_fb_visibility.Visible = true;
            log.Debug(String.Format("Session variable 'chkfb' is {0}", Session["chkfb"].ToString()));
        }
        else
        {
            //  chk_fb_visibility.Visible = false;
            //  chk_fb_visibility.Visible = false;
        }

        // Declare vairibles that will be required later
        string my_username = "";
        string my_password = "";
        DataTable my_user_details;

        // If the user has entered a email/userid into the text box use this to set 'my_username' varible (for later use)
        if (txt_get_fm_email_id.Text != "")
        {
            my_username = txt_get_fm_email_id.Text;
            my_password = Session["password"].ToString();
            Session["facebooklogin"] = "******";
        }
        else
        {
            my_username = txtUsername.Text;
            my_password = txtPassword.Text;
        }
        try
        {
            // Attempt to retrieve a Player object from the HedgeEm Webservice using the credentials supplied.
            my_endpoint = String.Format("{0}/ws_login/{1},{2},{3},{4}/", p_current_json_webservice_url_base, p_session_id, p_session_server_id, my_username, my_password);
            HedgeEmPlayer my_player = (HedgeEmPlayer)f_get_object_from_json_call_to_server(my_endpoint, typeof(HedgeEmPlayer));

            if (my_player == null)
            {
                string my_error_msg = String.Format("Player object is null after call to Webservice to retrieve details", my_username);
                my_log_event.p_message = my_error_msg;
                log.Error(my_log_event.ToString());
                throw new Exception(my_error_msg);
            }

            if (my_player.p_player_id <= 0)
            {
                my_log_event.p_message = my_player.p_error_message;
                log.Error(my_log_event.ToString());
                throw new Exception(my_log_event.ToString());

            }
            else
            {
                // If we have got here the user has logged into the server sucessfully so we should set some session variables for ease of use later
                int my_player_id = my_player.p_player_id;
                Session["p_session_player_id"] = my_player_id;
                Session["display_name"] = my_player.p_display_name;
                Session["p_session_username"] = my_username;
                Session["password"] = my_password;
                p_session_personal_table_id = my_player.p_personal_table_id;
                if (Session["p_session_username"] != null)
                {
                    if (File.Exists(Server.MapPath("resources/player_avatar_" + Session["p_session_username"].ToString() + ".jpg")))
                    {
                        usr_image.ImageUrl = "../resources/player_avatar_" + Session["p_session_username"].ToString() + ".jpg";
                    }

                    else
                    {
                        usr_image.ImageUrl = "../resources/avitars/user_square.png";
                    }
                }
                // As the user has now logged in by HedgeEm authentication hide the Facebook login DIV
                if (Session["facebooklogin"] != null)
                {
                    //LoginDiv.Attributes.Add("style", "display:none !Important;");
                }

                // As the user has now logged show the logout button and hide the login button
                // xxx Nov 2014.  Not sure why this is on condition of facebooklogin; I separated this out from if/else
                // of above to figure this out.  I assume is because you could be logged in by facebook so still want to
                // show / hide login/logout buttons appropriately
                if (Session["facebooklogin"] == null)
                {
                    lbl_user_name.Text = Session["display_name"].ToString();
                    Logout.Attributes.Add("style", "display:block !Important;");
                    //LoginDiv.Attributes.Add("style", "display:none !Important;");
                    divLogin.Attributes.Add("style", "display:none !Important;");
                    userdetails.Attributes.Add("style", "display:none !Important;");
                    btnLogout.Visible = true;
                    btnLogout.Enabled = true;
                    Page.RegisterStartupScript("OnLoad", "<script>document.getElementById('userdetails').style.display='none';</script>");
                }

                // As the user has now logged in Enable the 'Play Now' button
                btn_play_now.Enabled = true;

               // usr_image.ImageUrl = my_player.p_user_avitar_image_url;

                // If the 'fb_hide_logout' is set it implies xxxxxxxxxxxxxxxxxxxxx so enable the 'Play Now' button
                if (Session["fb_hide_logout"] != null)
                {
                    //    chk_fb_visibility_logout.Visible = false;
                    btn_play_now.Visible = true;

                }

                // If the 'chk_logout_hide' is set it implies xxxxxxxxxxxxxxxxxxxxx so enable the 'Play Now' button
                if (Session["chk_logout_hide"] != null)
                {

                    //   chk_fb_visibility.Visible = true;
                    btn_play_now.Visible = true;
                    btnLogout.Visible = false;
                }
                Page.RegisterStartupScript("OnLoading", "<script>load_edit_profile();</script>");
                // Response.Redirect("frm_facebook_canvas.aspx");
                Page.RegisterStartupScript("OnLoad", "<script>document.getElementById('progressbar').style.display='none';</script>");

                string role = "";
                if (my_player != null)
                {
                    role = my_player.p_role;
                    my_log_event.p_message = String.Format("User/player role determined to be [{0}].", role.ToString());
                    log.Debug(my_log_event.ToString());
                }

                if (role == enum_user_role.ADMIN.ToString())
                {
                    btnAdmin.Attributes.Add("style", "display:block");
                }
                else
                {
                    btnAdmin.Attributes.Add("style", "display:none");
                }
            }
        }
        catch (Exception ex)
        {
            string my_error_message = "Fatal Errorin method [btn_login_Click] - " + ex.Message.ToString() + "');";

            //  Log the error and raise a new exception
            my_log_event.p_message = String.Format(
                "Fatal error in method [btn_login_Click]. Reason [{0}]",
                        ex.Message);
            log.Error(my_log_event.ToString(), new Exception(ex.Message));
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;
        
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_message.ToString();
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
        }
       
    }
    protected void btn_deposit_Click(object sender, EventArgs e)
    {
        HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
        my_popup_message.p_detailed_message_str = "";
        my_popup_message.p_is_visible = false;

        //log event object is created 
        //HedgeEmLogEvent my_log_event = new HedgeEmLogEvent(); xxx - this does not work Kiran/Simon - 25th March 2014
        //my_log_event.p_method_name = "btn_deposit_Click"; 
        log.Info("btn_deposit_Click of Cashier Page is called");

        double acc_balance = Convert.ToDouble(lbl_account_balance.Text);
        double amount_to_deposit=Convert.ToDouble(txt_deposit.Text);
         double final_player_balance = 0.0;

         try
         {

             if (amount_to_deposit <= 0)
             {
                 lbl_msg.Visible = true;
                 lbl_deposit_status.Text = "Enter the Amoount greater than 0";
                 lbl_deposit_status.Visible = true;
             }
             else
             {
                 final_player_balance = acc_balance + amount_to_deposit;
                 service.f_set_player_balance(playerid, final_player_balance);

                 lbl_deposit_status.Text = "Deposited successfully";
                 lbl_deposit_status.Visible = true;
                 lbl_account_balance.Text = Math.Round(service.f_get_player_account_balance(playerid), 2).ToString();
                 lbl_seat_balance.Text = Math.Round(service.f_get_player_seat_balance(tableid, 0, playerid), 2).ToString();
                 txt_deposit.Text = "0";
             }
         }
         catch(Exception ex)
         {
             //my_log_event.p_message = "Exception caught - " + ex.Message;
             //log.Error(_xxx_log_event.ToString());
             //throw new Exception(String.Format("btn_deposit_Click", ex.Message));
             string my_error_popup = "Error in method [page_load_frm_cashier] - " + ex.Message.ToString();
             //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
             my_popup_message.p_detailed_message_str = my_error_popup.ToString();
             Place_Holder_Popup_Message.Controls.Add(my_popup_message);
             log.Error("Error inbtn_deposit_Click of Cashier Page", new Exception(ex.Message));
         }

    }
    protected void btnLogout_Click(object sender, EventArgs e)
    {
        _xxx_log_event.p_method_name = "btnLogout_Click";
        string my_endpoint = "Not Set";
        // Log the fact this method has been called
        _xxx_log_event.p_message = String.Format("Method [btnLogout_Click] called ");
        log.Info(_xxx_log_event.ToString());
        try
        {
            my_endpoint = String.Format("{0}/ws_logout/sessionabc123,10,{1}/", p_current_json_webservice_url_base, p_session_username);

            HedgeEmPlayer my_player = (HedgeEmPlayer)f_get_object_from_json_call_to_server(my_endpoint, typeof(HedgeEmPlayer));
            btnLogout.Visible = false;
            //btnLogin.Visible = true;
            Session.Abandon();
            Session.Contents.RemoveAll();
            System.Web.Security.FormsAuthentication.SignOut();
            Logout.Attributes.Add("style", "display:none !Important;");

            divLogin.Attributes.Add("style", "display:block !Important;");
            usr_image.ImageUrl = "../resources/avitars/user_square.png";
            btn_play_now.Enabled = false;
            Response.Redirect("frm_facebook_canvas.aspx?signout=true");
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in method [btnLogout_Click] - " + ex.Message.ToString() ;
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);

            //  Log the error and raise a new exception
            _xxx_log_event.p_message = String.Format(
                "Table [Fatal error in method [btnLogout_Click]. Reason [{0}]",
                        ex.Message);
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup.ToString();
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
            log.Error(_xxx_log_event.ToString(), new Exception(ex.Message));
         //   throw new Exception(_xxx_log_event.ToString());
        }
       

    }
    protected void btn_sit_here_Click(object sender, EventArgs e)
    {

        HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
        my_popup_message.p_detailed_message_str = "";
        my_popup_message.p_is_visible = false;
        //log event object is created 
        //HedgeEmLogEvent my_log_event = new HedgeEmLogEvent(); xxx - this does not work Kiran/Simon - 25th March 2014
        //my_log_event.p_method_name = "btn_sit_here_Click"; 
        log.Info("btn_sit_here_Click of Cashier Page is called");

        double acc_balance = 0;
        if (lbl_account_balance.Text != "")
        {
            acc_balance = Convert.ToDouble(lbl_account_balance.Text);
        }
        
        
        double amount_to_deposit = 0;
        if (txt_deposit.Text != "")
        {
            amount_to_deposit = Convert.ToDouble(txt_deposit.Text);
        }
        
        double final_player_balance = 0.0;

        try
        {

            if (amount_to_deposit <= 0)
            {
                lbl_msg.Visible = true;
                lbl_deposit_status.Text = "Enter the Amoount greater than 0";
                lbl_deposit_status.Visible = true;
            }
            else
            {
                final_player_balance = acc_balance + amount_to_deposit;
                service.f_set_player_balance(playerid, final_player_balance);

                lbl_deposit_status.Text = "Deposited successfully";
                lbl_deposit_status.Visible = true;
                lbl_account_balance.Text = Math.Round(service.f_get_player_account_balance(playerid), 2).ToString();
                lbl_seat_balance.Text = Math.Round(service.f_get_player_seat_balance(tableid, 0, playerid), 2).ToString();
                txt_deposit.Text = "0";

                int xxx_my_HC_session_id_not_used_yet = 666999;
                int my_HC_seat_id = 0;
                HedgeEmGenericAcknowledgement my_generic_ack = new HedgeEmGenericAcknowledgement();
                my_generic_ack = (HedgeEmGenericAcknowledgement)f_get_object_from_json_call_to_server("ws_sit_at_table_new/" + p_session_current_table_id + "," +
                                                   10 + "," +
                                                   p_session_current_table_id + "," +
                                                   p_session_current_seat_id + "," +
                                                   p_session_player_id + "," +
                                                   amount_to_deposit, typeof(HedgeEmGenericAcknowledgement));
                if (my_generic_ack.p_error_message != null)
                {
                    if (my_generic_ack.p_error_message != "")
                    {
                        throw new Exception(my_generic_ack.p_error_message);
                    }
                }

                //my_log.p_message = String.Format("Successfully retrieved gamestate from server. Table ID [{0}], State [{1}]", _global_game_state_object.p_table_id, _global_game_state_object.p_current_state_enum.ToString());
                //log.Debug(my_log.ToString());
                 
 

                
            }
        }
        catch (Exception ex)
        {
            //my_log_event.p_message = "Exception caught - " + ex.Message;
            //log.Error(_xxx_log_event.ToString());
            string my_error_popup = "Error in btn_sit_here_Click of Cashier Page " + ex.Message.ToString();
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup.ToString();
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
            log.Error("Error in btn_sit_here_Click of Cashier Page", new Exception(ex.Message));
        }

    }
    // Method to get details of Player from JSON Web Service
    public HedgeEmPlayer get_player_details(string username)
    {
        HedgeEmPlayer my_player = null;
        log.Debug("get_player_details called for getting details of user - " + username);
        string my_endpoint = "Not Set";

        try
        {
            my_endpoint = String.Format("{0}/ws_get_player_list/sessionabc123,10,10000/", p_current_json_webservice_url_base);

            List<HedgeEmPlayer> my_player_list = (List<HedgeEmPlayer>)f_get_object_from_json_call_to_server(my_endpoint, typeof(List<HedgeEmPlayer>));
            foreach (HedgeEmPlayer player in my_player_list)
            {
                if (player.p_username == username)
                {
                    my_player = player;
                    return my_player;
                }
                else
                {
                    my_player = null;
                }
            }

        }
        catch (Exception ex)
        {

            log.Error("Exception in get_player_details() function, - " + ex.Message);

            //string my_error_popup = "alert('Error in method [get_player_details] - " + ex.Message.ToString() + "');";
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;
            string my_error_popup = "Error in method [get_player_details] - " + ex.Message.ToString();
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup.ToString();
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);

            //hedgeem_control_popup_message my_popup_message = new hedgeem_control_popup_message();
            //my_popup_message.p_detailed_message_str = "";
            //my_popup_message.p_detailed_message_str = ex.Message;
            //my_popup_message.p_is_visible = true;

            ////newuser.Visible = false;

            //Place_Holder_Popup_Message.Controls.Add(my_popup_message);

            //my_popup_message.Dispose();
            
        }
        return my_player;
    }
    protected void btn_play_shared_table_Click(object sender, EventArgs e)
    {

        try
        {
            // Log that the user has clicked the 'Play now' button.
            HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
            my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
            my_log_event.p_message = String.Format("User [{0}] click 'Play Shared Table", Session["p_session_username"]);
            log.Info(my_log_event.ToString());

            Session["p_session_player_id"] = xxxHC_ANON_PLAYER_ID;
            Session["theme"] = "CASINO_TABLE";
            Session["Facebook_User_Id"] = "not_set";
            Session["user_role"] = "BASIC_USER";
            Session["p_session_username"] = xxxHC_ANON_USERNAME;
            Session["p_session_personal_table_id"] = 1000;
            f_goto_table(1000);
        }
        catch (Exception ex)
        {
            string my_error_popup = "alert('Error in method [btn_play_shared_table_Click] - " + ex.Message.ToString() + "');";

            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;

            //newuser.Visible = false;

            Place_Holder_Popup_Message.Controls.Add(my_popup_message);

            my_popup_message.Dispose();

            log.Error("Error in btn_play_shared_table_Click", new Exception(ex.Message));
      //      throw new Exception(String.Format("fish cakes:", ex.Message));
        }


    }
    protected void f_login_anonymously(int a_player_id)
    {
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        // Log the fact this method has been called
        my_log_event.p_message = String.Format("Method [btn_login_Click] called ");
        log.Debug(my_log_event.ToString());
        string my_endpoint = "Not Set";
        
        // Declare vairibles that will be required later
        string my_username = "";
        string my_password = "";
        DataTable my_user_details;

        
        try
        {
            // Attempt to retrieve a Player object from the HedgeEm Webservice using the credentials supplied.
            my_endpoint = String.Format("{0}/ws_login/{1},{2},{3},{4}/", p_current_json_webservice_url_base, p_session_id, p_session_server_id, my_username, my_password);
            HedgeEmPlayer my_player = (HedgeEmPlayer)f_get_object_from_json_call_to_server(my_endpoint, typeof(HedgeEmPlayer));

            if (my_player == null)
            {
                string my_error_msg = String.Format("Player object is null after call to Webservice to retrieve details", my_username);
                my_log_event.p_message = my_error_msg;
                log.Error(my_log_event.ToString());
                throw new Exception(my_error_msg);
            }

            if (my_player.p_player_id <= 0)
            {
                my_log_event.p_message = my_player.p_error_message;
                log.Error(my_log_event.ToString());
                throw new Exception(my_log_event.ToString());

            }
            else
            {
                // If we have got here the user has logged into the server sucessfully so we should set some session variables for ease of use later
                int my_player_id = my_player.p_player_id;
                Session["p_session_player_id"] = my_player_id;
                Session["display_name"] = my_player.p_display_name;
                Session["p_session_username"] = my_username;
                Session["password"] = my_password;
                Session["user_role"] = my_player.p_role;
                        
                p_session_personal_table_id = my_player.p_personal_table_id;
                
                
                string role = "";
                if (my_player != null)
                {
                    role = my_player.p_role;
                    my_log_event.p_message = String.Format("User/player role determined to be [{0}].", role.ToString());
                    log.Debug(my_log_event.ToString());
                }

                
            }
        }
        catch (Exception ex)
        {
            string my_error_message = "Fatal Errorin method [btn_login_Click] - " + ex.Message.ToString() + "');";

            //  Log the error and raise a new exception
            my_log_event.p_message = String.Format(
                "Fatal error in method [btn_login_Click]. Reason [{0}]",
                        ex.Message);
            log.Error(my_log_event.ToString(), new Exception(ex.Message));
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_message.ToString();
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
        }

    }
    protected void btnAdmin_Click(object sender, EventArgs e)
    {
        log.Info("User clicked on Admin Button");
        try
        {
            if (txt_get_fm_email_id.Text == "")
            {
                Page.RegisterStartupScript("Alert Message", "<script type='text/javascript'> document.getElementById('alertmessage').style.display = 'block';</script>");
                //  Page.RegisterStartupScript("Alert Message", "<script type='text/javascript'>alert('You are not logged in. Please log in to view this Page.');document.getElementById('progressbar').style.display='none'; </script>");
            }
            else
            {
                DataTable get_password = new DataTable();
                DataTable user_details = new DataTable();

                string my_endpoint1 = String.Format("{0}/ws_get_password_from_db/{1}/", p_current_json_webservice_url_base,
                                                                           txt_get_fm_email_id.Text);

                get_password = (DataTable)f_get_object_from_json_call_to_server(my_endpoint1, typeof(DataTable));

              //  get_password = service.f_get_password_from_db(txt_get_fm_email_id.Text);
                if (get_password.Rows.Count == 0)
                {
                    Page.RegisterStartupScript("Alert Message", "<script type='text/javascript'> document.getElementById('alertmessage').style.display = 'block';</script>");
                    // Page.RegisterStartupScript("Alert Message", "<script type='text/javascript'>alert('You are not authorized to view this page.');</script>");
                }
                else
                {
                    string password = get_password.Rows[0]["password"].ToString();


                  string  my_endpoint = String.Format("{0}/ws_my_user_details/{1},{2}/", p_current_json_webservice_url_base,
                                                                                    txt_get_fm_email_id.Text,
                                                                                     password);

                    user_details = (DataTable)f_get_object_from_json_call_to_server(my_endpoint, typeof(DataTable));
          
                   // user_details = service.my_user_details(txt_get_fm_email_id.Text, password);
                    // Check you got only one record back, if not throw appropriate exception
                    if (user_details.Rows.Count < 1)
                    {
                        throw new Exception(String.Format("Username '{0}' not found. Username or password incorrect.", txt_get_fm_email_id.Text));
                    }
                    else if (user_details.Rows.Count > 1)
                    {
                        throw new Exception(String.Format("Multiple users found for username '{0}'.  This indicates something is wrong so cancelling operation..", txt_get_fm_email_id.Text));
                    }
                    else
                    {
                        enum_user_role role = (enum_user_role)Enum.Parse(typeof(enum_user_role), user_details.Rows[0]["role"].ToString());
                        if (role == enum_user_role.ADMIN)
                        {
                            Response.Redirect("http://serveradmin.hedgeem.com");
                        }
                        else
                        {
                            Page.RegisterStartupScript("Alert Message", "<script type='text/javascript'> document.getElementById('alertmessage').style.display = 'block';</script>");

                            //Page.RegisterStartupScript("Alert Message", "<script type='text/javascript'>alert('You are not authorized to view this page.');</script>");
                        }
                    }
                }

            }
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in method [btnAdmin_Click] - " + ex.Message.ToString();
        //    ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            log.Error("Error in btnAdmin_Click", new Exception(ex.Message));

            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;
           
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);

            my_popup_message.Dispose();

        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "Method called.";
        log.Debug(my_log_event.ToString());

        p_session_current_table_id = 1000;
        p_session_server_id = 10;

        try
        {

            string strUserAgent = Request.UserAgent.ToString().ToLower();
            bool MobileDevice = Request.Browser.IsMobileDevice;
            if (Request.Cookies["MobileDevice"] != null)
            {
                if (Request.Cookies["MobileDevice"].Value == "IgnoreMobile") { MobileDevice = false; }
            }
            else
            {
                if (strUserAgent != null)
                {
                    //if (MobileDevice == true || strUserAgent.Contains("iphone") || strUserAgent.Contains("blackberry") || strUserAgent.Contains("mobile") ||
                    //strUserAgent.Contains("android") || strUserAgent.Contains("windows ce") || strUserAgent.Contains("opera mini") || strUserAgent.Contains("palm"))
                    if (strUserAgent.Contains("iphone"))
                    {
                        Response.Redirect("https://itunes.apple.com/gb/app/texas-hedgeem/id1018941577?mt=8");
                    }
                }
            }


            //Read more: http://www.thecodingguys.net/blog/asp-net-mobile-detection#ixzz3qoYVKpHs

            if (Request.QueryString["un"] != null && Request.QueryString["p"] != null)
            {
                string retrieved_username = Decryptdata(Request.QueryString["un"].ToString());
                string retrieved_password = Decryptdata(Request.QueryString["p"].ToString());
                string retrieved_displayname = Decryptdata(Request.QueryString["dn"].ToString());
                Session["p_session_username"] = retrieved_username;
                Session["password"] = retrieved_password;
                Session["display_name"] = retrieved_displayname;
                //  service.f_activate_user(retrieved_username);
                //    my_log_event.p_message = String.Format("Username [{0}] activated. ", retrieved_username);
                my_log_event.p_message = String.Format("User [{0}] clicked on link activation. ", retrieved_username);
                ScriptManager.RegisterStartupScript(Page, GetType(), "OnLoad", "alert('Thanks for verifying your account. You can now play the game.'); if(alert){ window.location='frm_facebook_canvas.aspx';}", true);
                log.Debug(my_log_event.ToString());

            }
            if (Page.IsPostBack == false)
            {
                if (Request.QueryString["signout"] != "true")
                {
                    Page.RegisterStartupScript("OnLoad", "<script>document.getElementById('element').style.display='block';</script>");
                    Page.RegisterStartupScript("OnLoad2", "<script> $('#element').introLoader({animation: { name: 'counterLoader', options: { exitFx: 'slideRight',ease: 'easeOutSine',style: 'fluoYellow', delayBefore: 1000, exitTime: 500, animationTime: 1000} } });</script>");

                    //#region load_all_images_at_once
                    ////Get Path of Images
                    //var path = Server.MapPath("~/resources/cards/");
                    //string[] images = Directory.GetFiles(path, "*.png");
                    //List<string> get_list_of_images = new List<string>();
                    //foreach (string image in images)
                    //{
                    //    string name = Path.GetFileName(image);
                    //    // Add image names in list
                    //    get_list_of_images.Add("'resources/cards/" + name + "'");
                    //}
                    //// convert list to array
                    //string[] array_of_images = get_list_of_images.ToArray();
                    //// convert array to string along with joining with ','
                    //string images_ = ConvertStringArrayToStringJoin(array_of_images);

                    //// script to call the Progress Bar while images are loading
                    //Page.RegisterStartupScript("Loading", "<script type='text/javascript'> var myImages = [" + images_ + "]; progressBar(myImages.length); </script>");

                    //// script to load all images
                    //Page.RegisterStartupScript("Prefetch Images", "<script type='text/javascript'> var myImages = [" + images_ + "]; for (var i = 0; i <= myImages.length; i++) { var img = new Image();  img.src = myImages[i];}</script>");
                    //#endregion load_all_images_at_once

                }
            }
            else
            {
                //Page.RegisterStartupScript("OnLoad", "<script>document.getElementById('progressbar').style.display='none';</script>");
            }

            if (Request.QueryString["r"] != null)
            {
                my_log_event.p_message = String.Format("Session Timedout message shown to user.");
                log.Debug(my_log_event.ToString());
                Page.RegisterStartupScript("Alert Message", "<script type='text/javascript'>show_session_timeout_message();</script>");


            }
            else
            {
                
                if (Request.QueryString["action"] != null)
                {
                    Response.Clear();
                    Session.Abandon();
                    Response.Redirect("frm_facebook_canvas.aspx");
                }
                
                if (Session["p_session_username"] != null)
                {

                    //Page.RegisterStartupScript("OnLoading", "<script>load_edit_profile();</script>");
                    if (Session["display_name"] != null)
                    {
                    }
                    
                    
                    HedgeEmPlayer my_player = get_player_details(Session["p_session_username"].ToString());

                   
                    string role = "";
                    if (my_player != null)
                    {
                        role = my_player.p_role;

                        //my_log_event.p_message = String.Format("User/player role hardcoded to BASIC_USER");
                        //log.Debug(my_log_event.ToString());
                        my_log_event.p_message = String.Format("User/player role determined to be [{0}].", role.ToString());
                        log.Debug(my_log_event.ToString());
                    }

                    
                    Session["user_role"] = role;
                    //// - xxx- Hardcoding value of role to BASIC_USER as need to discuss this with Simon.
                    //Session["user_role"] = "BASIC_USER";
                    Page.RegisterStartupScript("OnLoad", "<script>document.getElementById('progressbar').style.display='none';</script>");
                }
            }
        }
        catch (Exception ex)
        {
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;
            string my_error_popup = "Error in Page Load of frm_facebook_canvas - " + ex.Message.ToString();
            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup.ToString();
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
            my_log_event.p_message = "Exception caught in Page Load of frm_facebook_canvas- " + ex.Message;
            log.Error(my_log_event.ToString(), new Exception(ex.Message));
        }
    }
    // This function calculate the total winnings in the game.
    private String f_calculate_winnings()
    {
        // Create a 'log event' object to audit execution
        HedgeEmLogEvent my_log_event = new HedgeEmLogEvent();
        my_log_event.p_method_name = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        my_log_event.p_message = "Method Entered.";
        my_log_event.p_player_id = p_session_player_id;
        my_log_event.p_table_id = p_session_personal_table_id;
        log.Debug(my_log_event.ToString());

        log.Debug("f_calculate_winnings called");
        String my_complete_win_string = "";
        try
        {
            int my_number_of_seats = _global_game_state_object.p_number_of_seats_int;

            StringBuilder my_winnings_for_each_stage_SB = new StringBuilder();
            Double my_total_winning = 0;
            double my_winnings_from_this_bet = 0;
            //For each winning hand ...
            #region for_all_hands
            for (int current_hand = 0; current_hand < number_of_hands; current_hand++)
            {
                // If this is a winning hand then for each player playing ...
                if (_global_game_state_object.p_hand_stage_info_list[current_hand].p_is_hand_a_winner_at_this_stage == true)
                {

                    //Calulate the winnings (if any) for any bet placed on each of the stages ...
                    for (int seat_index = 0; seat_index < my_number_of_seats; seat_index++)
                    {
                        //For each betting stage (POCKETS, FLOP, and TURN) ...
                        for (int stage_index = 0; stage_index < _int_number_of_betting_stages; stage_index++)
                        {

                            string str_betting_stage = "HOLE bet";
                            int game_state = 6;
                            switch (stage_index)
                            {
                                case 0:
                                    str_betting_stage = "HOLE bet";
                                    game_state = 6;
                                    break;
                                case 1:
                                    str_betting_stage = "FLOP bet";
                                    game_state = 10;
                                    break;
                                case 2:
                                    str_betting_stage = "TURN bet";
                                    game_state = 11;
                                    break;

                                default:
                                    break;
                            }
                            HedgeEmHandStageInfo my_hedgeem_hand_stage_info = f_get_hand_stage_info_object_for_stage_and_hand((enum_game_state)game_state, current_hand);
                            if (my_hedgeem_hand_stage_info == null)
                            {
                                throw new Exception("my_hedgeem_hand_stage_info is null in f_calculate winnings");
                            }
                            else
                            {
                                double my_bet_total = f_get_total_previous_bets_for_stage_and_hand_player((enum_betting_stage)stage_index, current_hand, Convert.ToInt32(Session["p_session_player_id"]));

                                if (Math.Sign(my_hedgeem_hand_stage_info.p_odds_margin_rounded_double) == 1)
                                {
                                    my_winnings_from_this_bet = Convert.ToDouble(my_bet_total)
                                                                 * my_hedgeem_hand_stage_info.p_odds_margin_rounded_double;
                                }
                                else
                                {
                                    if (my_hedgeem_hand_stage_info.p_odds_margin_rounded_double != 0)
                                    {
                                        my_winnings_from_this_bet = my_bet_total
                                                                     / my_hedgeem_hand_stage_info.p_odds_margin_rounded_double;
                                        my_winnings_from_this_bet = Math.Abs(my_winnings_from_this_bet);
                                    }
                                }
                                if (my_bet_total != 0)
                                {
                                    double my_initial_bet_for_stage_hand = my_bet_total;
                                    double my_total_winnings_for_stage_hand = my_winnings_from_this_bet + my_initial_bet_for_stage_hand;
                                    my_total_winning = my_total_winning + my_total_winnings_for_stage_hand;
                                    /// xxx hack to not show message box on Online version
                                    my_winnings_for_each_stage_SB.AppendLine();
                                    my_winnings_for_each_stage_SB.AppendFormat("£{0:#0.00} from {1}.",
                                        my_total_winnings_for_stage_hand,
                                        str_betting_stage);
                                }
                            }
                        }
                    }
                }
            }
            #endregion
            if (my_total_winning > 0)
            {
                my_complete_win_string = String.Format("You won £{0:#0.00}", my_total_winning);
            }
            else
            {
                my_complete_win_string = "";
            }

            return my_complete_win_string;
        }
        catch (Exception ex)
        {
            string my_error_popup = "Error in f_calculate_winnings - " + ex.Message.ToString();
           // ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            HedgeemerrorPopup my_popup_message = new HedgeemerrorPopup();
            my_popup_message.p_detailed_message_str = "";
            my_popup_message.p_is_visible = false;

            //ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", my_error_popup, true);
            my_popup_message.p_detailed_message_str = my_error_popup;
            my_popup_message.p_is_visible = true;
            Place_Holder_Popup_Message.Controls.Add(my_popup_message);
            my_log_event.p_message = "Exception caught in f_calculate_winnings function " + ex.Message;
            my_log_event.p_method_name = "f_calculate_winnings";
            my_log_event.p_player_id = Convert.ToInt32(Session["p_session_player_id"]);
            my_log_event.p_game_id = game_id;
            my_log_event.p_table_id = p_session_personal_table_id;
            log.Error(my_log_event.ToString());
            return my_complete_win_string;
        }
    }