//opens modal to edit specified user details
        protected void lblName_Click(object sender, EventArgs e)
        {
            LinkButton  name     = sender as LinkButton;
            GridViewRow row      = name.NamingContainer as GridViewRow;
            Label       Id       = row.FindControl("lblUserID") as Label;
            Label       empId    = row.FindControl("lblEmpID") as Label;
            Label       username = row.FindControl("lblUserName") as Label;

            lblEditHeader.Text = name.Text;
            userID             = Convert.ToByte(Id.Text);

            resetEdit();

            if (userID != null)
            {
                ClientScript.RegisterStartupScript(GetType(), "Show", "<script> jQuery.noConflict(); $('#editUserModal').modal('toggle');</script>", false);
            }
            else
            {
                ShowMessage("Something went wrong and record could not be opened. Kindly try again and if the error persists, refer to the error log for details.", MessageType.Error);
            }

            //setup modals
            editUser.Visible = true;
            addUser.Visible  = false;

            editUser.ddl_Employee.Visible = false;
            editUser.lbl_Employee.Visible = true;
            editUser.lbl_Employee.Text    = name.Text;



            ///*populate with user data*/
            MembershipUser usr = Membership.GetUser(username.Text);

            Int16     employeeId = Convert.ToInt16(empId.Text);
            DataTable dt         = getEmployeeDetails(employeeId);

            if (dt != null)
            {
                foreach (DataRow r in dt.Rows)
                {
                    editUser.FirstName = r["FirstName"].ToString();
                    editUser.LastName  = r["LastName"].ToString();
                    editUser.Status    = r["IsActive"].ToString();
                    if (r["ResetNeeded"] != DBNull.Value)
                    {
                        editUser.Reset = true;
                    }
                }
            }

            //user roles
            editUser.Roles = new List <string>(Roles.GetRolesForUser(usr.UserName));

            //username
            editUser.UserName = usr.UserName;

            //user email
            editUser.Email = usr.Email;

            //password, disable validators
            editUser.pwdvalidator.Enabled     = false;
            editUser.confpwdvalidator.Enabled = false;
            //editUser.Password = usr.GetPassword();


            //store previous values
            prevVals prev = new prevVals();

            prev.empDetails = dt;
            prev.oldEmail   = usr.Email;
            prev.oldRoles   = new List <string>(Roles.GetRolesForUser(usr.UserName));
            persistValues   = prev;


            //save employee id
            employeeID = Convert.ToInt16(empId.Text);

            //modal performance
            editUser.isNewUser = false;

            if (users != null)
            {
                bindUsers(); //needed for modal performance
            }
        }
        //update user details
        protected bool updateUserLogin()
        {
            bool success = false;
            //variables
            List <string> role         = editUser.Roles;
            string        firstName    = editUser.FirstName;
            string        lastName     = editUser.LastName;
            string        email        = editUser.Email;
            bool          status       = Convert.ToBoolean(editUser.Status);
            string        passsword    = editUser.Password;
            string        confpassword = editUser.confPassword;
            bool          reset        = editUser.Reset;
            short         employeeId   = (Int16)employeeID;
            string        username     = editUser.UserName;
            byte          loggedInUser = MISC.getUserID();
            byte          updateUser   = MISC.getUserID(username);

            //old values and membership variables
            prevVals       prev = persistValues;
            MembershipUser user;

            user = Membership.GetUser(username);

            /*Update employee details*/

            if (updateEmployee(status, reset, firstName, lastName, employeeId, loggedInUser))
            {
                try
                {
                    /*Update Membership details*/
                    if (prev.oldEmail != email)
                    {
                        user.Email = email;
                    }

                    if (passsword != "")
                    {
                        user.ChangePassword(user.ResetPassword(), passsword);
                    }

                    //Roles Update
                    if (!role.SequenceEqual(prev.oldRoles))
                    {
                        //update roles
                        foreach (string rolename in prev.oldRoles)
                        {
                            if (Roles.IsUserInRole(username, rolename))
                            {
                                Roles.RemoveUserFromRole(username, rolename);
                            }
                        }
                        foreach (string rolename2 in role)
                        {
                            if (!Roles.IsUserInRole(username, rolename2))
                            {
                                Roles.AddUserToRole(username, rolename2);
                            }
                        }
                    }
                    //update user details
                    Membership.UpdateUser(user);
                    success = true;
                    AuditLog(employeeId, "tbl_Sup_Employees", "Updated User Details For - " + lastName + ", " + firstName, loggedInUser);
                }
                catch (Exception exec)
                {
                    //rollback employee update?
                    MISC.writetoAlertLog(exec.ToString());
                }
            }

            return(success);
        }