public static void AppendEditViewFields(DataView dvFields, HtmlTable tbl, System.Data.SqlClient.SqlDataReader rdr, CommandEventHandler Page_Command, bool bLayoutMode, string sEDIT_NAME)
        {
            bool bIsMobile = false;
            CRMPage Page = tbl.Page as CRMPage;
            if (Page != null)
                bIsMobile = Page.IsMobile;

            HtmlTableRow tr = null;

            int nRowIndex = tbl.Rows.Count - 1;
            int nColIndex = 0;
            HtmlTableCell tdLabel = null;
            HtmlTableCell tdField = null;

            if (bLayoutMode)
                tbl.Border = 1;

            if (dvFields.Count == 0 && tbl.Rows.Count <= 1)
                tbl.Visible = false;

            DataView vwSchema = null;
            if (rdr != null)
                vwSchema = new DataView(rdr.GetSchemaTable());

            bool bEnableTeamManagement = Common.Config.enable_team_management();
            bool bRequireTeamManagement = Common.Config.require_team_management();

            bool bRequireUserAssignment = Common.Config.require_user_assignment();
            HttpSessionState Session = HttpContext.Current.Session;
            foreach (DataRowView row in dvFields)
            {
                int gID = TypeConvert.ToInteger(row["ID"]);
                int nFIELD_INDEX = TypeConvert.ToInteger(row["FIELD_INDEX"]);
                string sFIELD_TYPE = TypeConvert.ToString(row["FIELD_TYPE"]);
                string sDATA_LABEL = TypeConvert.ToString(row["DATA_LABEL"]);
                string sDATA_FIELD = TypeConvert.ToString(row["DATA_FIELD"]);
                string sDISPLAY_FIELD = TypeConvert.ToString(row["DISPLAY_FIELD"]);
                string sCACHE_NAME = TypeConvert.ToString(row["CACHE_NAME"]);
                bool bDATA_REQUIRED = TypeConvert.ToBoolean(row["DATA_REQUIRED"]);
                bool bUI_REQUIRED = TypeConvert.ToBoolean(row["UI_REQUIRED"]);
                string sONCLICK_SCRIPT = TypeConvert.ToString(row["ONCLICK_SCRIPT"]);
                string sFORMAT_SCRIPT = TypeConvert.ToString(row["FORMAT_SCRIPT"]);
                short nFORMAT_TAB_INDEX = TypeConvert.ToShort(row["FORMAT_TAB_INDEX"]);
                int nFORMAT_MAX_LENGTH = TypeConvert.ToInteger(row["FORMAT_MAX_LENGTH"]);
                int nFORMAT_SIZE = TypeConvert.ToInteger(row["FORMAT_SIZE"]);
                int nFORMAT_ROWS = TypeConvert.ToInteger(row["FORMAT_ROWS"]);
                int nFORMAT_COLUMNS = TypeConvert.ToInteger(row["FORMAT_COLUMNS"]);
                int nCOLSPAN = TypeConvert.ToInteger(row["COLSPAN"]);
                int nROWSPAN = TypeConvert.ToInteger(row["ROWSPAN"]);
                string sLABEL_WIDTH = TypeConvert.ToString(row["LABEL_WIDTH"]);
                string sFIELD_WIDTH = TypeConvert.ToString(row["FIELD_WIDTH"]);
                int nDATA_COLUMNS = TypeConvert.ToInteger(row["DATA_COLUMNS"]);

                string sFIELD_VALIDATOR_MESSAGE = TypeConvert.ToString(row["FIELD_VALIDATOR_MESSAGE"]);
                string sVALIDATION_TYPE = TypeConvert.ToString(row["VALIDATION_TYPE"]);
                string sREGULAR_EXPRESSION = TypeConvert.ToString(row["REGULAR_EXPRESSION"]);
                string sDATA_TYPE = TypeConvert.ToString(row["DATA_TYPE"]);
                string sMININUM_VALUE = TypeConvert.ToString(row["MININUM_VALUE"]);
                string sMAXIMUM_VALUE = TypeConvert.ToString(row["MAXIMUM_VALUE"]);
                string sCOMPARE_OPERATOR = TypeConvert.ToString(row["COMPARE_OPERATOR"]);

                if (nDATA_COLUMNS == 0)
                    nDATA_COLUMNS = 2;

                if (!bLayoutMode && sDATA_FIELD == "TEAM_ID")
                {
                    if (!bEnableTeamManagement)
                    {
                        sFIELD_TYPE = "Blank";
                        bUI_REQUIRED = false;
                    }
                    else
                    {

                        if (bRequireTeamManagement)
                            bUI_REQUIRED = true;
                    }
                }
                if (!bLayoutMode && sDATA_FIELD == "ASSIGNED_USER_ID")
                {

                    if (bRequireUserAssignment)
                        bUI_REQUIRED = true;
                }
                if (bIsMobile && String.Compare(sFIELD_TYPE, "AddressButtons", true) == 0)
                {

                    continue;
                }

                if ((nCOLSPAN >= 0 && nColIndex == 0) || tr == null || bIsMobile)
                {

                    nRowIndex++;
                    tr = new HtmlTableRow();
                    tbl.Rows.Insert(nRowIndex, tr);
                }
                if (bLayoutMode)
                {
                    HtmlTableCell tdAction = new HtmlTableCell();
                    tr.Cells.Add(tdAction);
                    tdAction.Attributes.Add("class", "tabDetailViewDL");
                    tdAction.NoWrap = true;

                    Literal litIndex = new Literal();
                    tdAction.Controls.Add(litIndex);
                    litIndex.Text = " " + nFIELD_INDEX.ToString() + " ";

                    ImageButton btnMoveUp = CreateLayoutImageButtonSkin(gID, "Layout.MoveUp", nFIELD_INDEX, Translation.GetTranslation.Term("Dropdown.LNK_UP"), "uparrow_inline", Page_Command);
                    ImageButton btnMoveDown = CreateLayoutImageButtonSkin(gID, "Layout.MoveDown", nFIELD_INDEX, Translation.GetTranslation.Term("Dropdown.LNK_DOWN"), "downarrow_inline", Page_Command);
                    ImageButton btnInsert = CreateLayoutImageButtonSkin(gID, "Layout.Insert", nFIELD_INDEX, Translation.GetTranslation.Term("Dropdown.LNK_INS"), "plus_inline", Page_Command);
                    ImageButton btnEdit = CreateLayoutImageButtonSkin(gID, "Layout.Edit", nFIELD_INDEX, Translation.GetTranslation.Term("Dropdown.LNK_EDIT"), "edit_inline", Page_Command);
                    ImageButton btnDelete = CreateLayoutImageButtonSkin(gID, "Layout.Delete", nFIELD_INDEX, Translation.GetTranslation.Term("Dropdown.LNK_DELETE"), "delete_inline", Page_Command);
                    tdAction.Controls.Add(btnMoveUp);
                    tdAction.Controls.Add(btnMoveDown);
                    tdAction.Controls.Add(btnInsert);
                    tdAction.Controls.Add(btnEdit);
                    tdAction.Controls.Add(btnDelete);
                }

                Literal litLabel = new Literal();
                if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    litLabel.ID = sDATA_FIELD + "_LABEL";
                if (nCOLSPAN >= 0 || tdLabel == null || tdField == null)
                {
                    tdLabel = new HtmlTableCell();
                    tdField = new HtmlTableCell();
                    tr.Cells.Add(tdLabel);
                    tr.Cells.Add(tdField);
                    if (nCOLSPAN > 0)
                    {
                        tdField.ColSpan = nCOLSPAN;
                        if (bLayoutMode)
                            tdField.ColSpan++;
                    }
                    tdLabel.Attributes.Add("class", "dataLabel");
                    tdLabel.VAlign = "top";
                    tdLabel.Width = sLABEL_WIDTH;
                    tdField.Attributes.Add("class", "dataField");
                    tdField.VAlign = "top";
                    if (nCOLSPAN == 0)
                        tdField.Width = sFIELD_WIDTH;

                    tdLabel.Controls.Add(litLabel);

                    if (bLayoutMode)
                        litLabel.Text = sDATA_LABEL;
                    else if (sDATA_LABEL.IndexOf(".") >= 0)
                        litLabel.Text = Translation.GetTranslation.Term(sDATA_LABEL);
                    else if (!TypeConvert.IsEmptyString(sDATA_LABEL) && rdr != null)
                    {

                        litLabel.Text = sDATA_LABEL;
                        if (vwSchema != null)
                        {
                            vwSchema.RowFilter = "ColumnName = '" + TypeConvert.EscapeSQL(sDATA_LABEL) + "'";
                            if (vwSchema.Count > 0)
                                litLabel.Text = TypeConvert.ToString(rdr[sDATA_LABEL]) + Translation.GetTranslation.Term("Calls.LBL_COLON");
                        }
                    }

                    else
                        litLabel.Text = sDATA_LABEL;  // "&nbsp;";

                    if (!bLayoutMode && bUI_REQUIRED)
                    {
                        Label lblRequired = new Label();
                        tdLabel.Controls.Add(lblRequired);
                        lblRequired.CssClass = "required";
                        lblRequired.Text = Translation.GetTranslation.Term(".LBL_REQUIRED_SYMBOL");
                    }
                }

                if (String.Compare(sFIELD_TYPE, "Blank", true) == 0)
                {
                    Literal litField = new Literal();
                    tdField.Controls.Add(litField);
                    if (bLayoutMode)
                    {
                        litLabel.Text = "*** BLANK ***";
                        litField.Text = "*** BLANK ***";
                    }
                    else
                    {

                        litLabel.Text = "&nbsp;";
                        litField.Text = "&nbsp;";
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "Label", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        Literal litField = new Literal();
                        tdField.Controls.Add(litField);

                        tdField.VAlign = "middle";

                        litField.ID = sDATA_FIELD;
                        if (bLayoutMode)
                            litField.Text = sDATA_FIELD;
                        else if (sDATA_FIELD.IndexOf(".") >= 0)
                            litField.Text = Translation.GetTranslation.Term(sDATA_FIELD);
                        else if (rdr != null)
                            litField.Text = TypeConvert.ToString(rdr[sDATA_FIELD]);
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "ListBox", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {

                        ListControl lstField = null;
                        if (nFORMAT_ROWS > 0)
                        {
                            ListBox lb = new ListBox();
                            lb.SelectionMode = ListSelectionMode.Multiple;
                            lb.Rows = nFORMAT_ROWS;
                            lstField = lb;
                        }
                        else
                        {

                            lstField = new KeySortDropDownList();
                        }
                        tdField.Controls.Add(lstField);
                        lstField.ID = sDATA_FIELD;
                        lstField.TabIndex = nFORMAT_TAB_INDEX;

                        if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                        {

                            if (!TypeConvert.IsEmptyString(sCACHE_NAME) && (bLayoutMode || !tbl.Page.IsPostBack))
                            {
                                lstField.DataValueField = "NAME";
                                lstField.DataTextField = "DISPLAY_NAME";
                                lstField.DataSource = CRMCache.List(sCACHE_NAME);

                                if (sCACHE_NAME != "lead_status_dom")
                                {
                                    if (sCACHE_NAME != "Currencies")
                                    {
                                        lstField.Attributes.Add("class", "dropdown");
                                    }
                                }

                                if (sCACHE_NAME != "program_plan" || sCACHE_NAME != "Currencies")
                                {
                                    if (sCACHE_NAME != "Currencies")
                                    {
                                        lstField.Attributes.Add("dom", sCACHE_NAME);
                                    }
                                }
                                lstField.DataBind();

                                if (!TypeConvert.IsEmptyString(sONCLICK_SCRIPT))
                                    lstField.Attributes.Add("onchange", sONCLICK_SCRIPT);

                                if (!bUI_REQUIRED)
                                {
                                    lstField.Items.Insert(0, new ListItem(Translation.GetTranslation.Term(".LBL_NONE"), ""));
                                    lstField.DataBound += new EventHandler(ListControl_DataBound_AllowNull);
                                }
                            }
                            if (rdr != null)
                            {
                                string sVALUE = TypeConvert.ToString(rdr[sDATA_FIELD]);
                                if (nFORMAT_ROWS > 0 && sVALUE.StartsWith("<?xml"))
                                {
                                    XmlDocument xml = new XmlDocument();
                                    xml.LoadXml(sVALUE);
                                    XmlNodeList nlValues = xml.DocumentElement.SelectNodes("Value");
                                    foreach (XmlNode xValue in nlValues)
                                    {
                                        foreach (ListItem item in lstField.Items)
                                        {
                                            if (item.Value == xValue.InnerText)
                                                item.Selected = true;
                                        }
                                    }
                                }
                                else
                                {
                                    lstField.SelectedValue = sVALUE;
                                }
                            }

                            else if (rdr == null && !tbl.Page.IsPostBack && sCACHE_NAME == "AssignedUser")
                            {
                                if (nFORMAT_ROWS == 0)
                                    lstField.SelectedValue = CRMSecurity.USER_ID.ToString();
                            }
                        }

                        if (bLayoutMode)
                        {
                            Literal litField = new Literal();
                            litField.Text = sDATA_FIELD;
                            tdField.Controls.Add(litField);
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "CheckBox", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        CheckBox chkField = new CheckBox();
                        tdField.Controls.Add(chkField);
                        chkField.ID = sDATA_FIELD;
                        chkField.CssClass = "checkbox";
                        chkField.TabIndex = nFORMAT_TAB_INDEX;
                        if (rdr != null)
                            chkField.Checked = TypeConvert.ToBoolean(rdr[sDATA_FIELD]);

                        if (!TypeConvert.IsEmptyString(sONCLICK_SCRIPT))
                            chkField.Attributes.Add("onclick", sONCLICK_SCRIPT);
                        if (bLayoutMode)
                        {
                            Literal litField = new Literal();
                            litField.Text = sDATA_FIELD;
                            tdField.Controls.Add(litField);
                            chkField.Enabled = false;
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "ChangeButton", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {

                        if (sDATA_LABEL == "PARENT_TYPE")
                        {
                            tdLabel.Controls.Clear();

                            DropDownList lstField = new KeySortDropDownList();
                            tdLabel.Controls.Add(lstField);
                            lstField.ID = sDATA_LABEL;
                            lstField.TabIndex = nFORMAT_TAB_INDEX;
                            lstField.Attributes.Add("onChange", "ChangeParentType();");

                            if (bLayoutMode || !tbl.Page.IsPostBack)
                            {

                                lstField.DataValueField = "NAME";
                                lstField.DataTextField = "DISPLAY_NAME";

                                lstField.DataSource = CRMCache.List("record_type_display");
                                lstField.DataBind();
                                if (rdr != null)
                                {
                                    lstField.ClearSelection();
                                    lstField.SelectedValue = TypeConvert.ToString(rdr[sDATA_LABEL]);
                                }
                            }
                        }
                        TextBox txtNAME = new TextBox();
                        tdField.Controls.Add(txtNAME);
                        txtNAME.ID = sDISPLAY_FIELD;
                        txtNAME.ReadOnly = true;
                        txtNAME.TabIndex = nFORMAT_TAB_INDEX;

                        txtNAME.EnableViewState = false;

                        if (bLayoutMode)
                        {
                            txtNAME.Text = sDISPLAY_FIELD;
                            txtNAME.Enabled = false;
                        }

                        else if (tbl.Page.IsPostBack)
                        {

                            if (tbl.Page.Request[txtNAME.UniqueID] != null)
                                txtNAME.Text = TypeConvert.ToString(tbl.Page.Request[txtNAME.UniqueID]);
                        }
                        else if (!TypeConvert.IsEmptyString(sDISPLAY_FIELD) && rdr != null)
                            txtNAME.Text = TypeConvert.ToString(rdr[sDISPLAY_FIELD]);

                        else if (sDATA_FIELD == "TEAM_ID" && rdr == null && !tbl.Page.IsPostBack)
                            txtNAME.Text = CRMSecurity.TEAM_NAME;
                        else if (sDATA_FIELD == "ASSIGNED_USER_ID" && rdr == null && !tbl.Page.IsPostBack)
                            txtNAME.Text = CRMSecurity.USER_NAME;

                        HtmlInputHidden hidID = new HtmlInputHidden();
                        tdField.Controls.Add(hidID);
                        hidID.ID = sDATA_FIELD;
                        if (!bLayoutMode)
                        {
                            if (!TypeConvert.IsEmptyString(sDATA_FIELD) && rdr != null)
                            {
                                hidID.Value = TypeConvert.ToString(rdr[sDATA_FIELD]);
                                hidID.Value = (TypeConvert.ToGuid(hidID.Value) == Guid.Empty) ? "" : hidID.Value;
                            }

                            else if (sDATA_FIELD == "TEAM_ID" && rdr == null && !tbl.Page.IsPostBack)
                                hidID.Value = CRMSecurity.TEAM_ID.ToString();

                            else if (sDATA_FIELD == "ASSIGNED_USER_ID" && rdr == null && !tbl.Page.IsPostBack)
                                hidID.Value = CRMSecurity.USER_ID.ToString();
                        }
                        if (!String.IsNullOrEmpty(CRMSecurity.TEAM_NAME))
                        {
                            txtNAME.Text = CRMSecurity.TEAM_NAME;
                        }
                        else
                        {
                            InlineQueryDBManager oQuery = new InlineQueryDBManager();
                            oQuery.CommandText = "select Teams.name,Teams.id from Teams where id in (select t.team_ID from users u "
                                               + "inner join Team_Memberships t on u.id = t.USER_ID "
                                               + "and u.id ='" + Security.USER_ID.ToString() + "')";
                            using (DataTable dt = oQuery.GetTable())
                            {
                                if (dt.Rows.Count > 0 && (sDATA_FIELD != "ASSIGNED_USER_ID" && rdr == null && !tbl.Page.IsPostBack))
                                {
                                    txtNAME.Text = dt.Rows[0]["name"].ToString();
                                    hidID.Value = dt.Rows[0]["id"].ToString();
                                }
                            }
                        }
                        Literal litNBSP = new Literal();
                        tdField.Controls.Add(litNBSP);
                        litNBSP.Text = "&nbsp;";

                        HtmlInputButton btnChange = new HtmlInputButton("button");
                        tdField.Controls.Add(btnChange);

                        btnChange.ID = sDATA_FIELD + "_btnChange";
                        btnChange.Attributes.Add("class", "button");
                        if (!TypeConvert.IsEmptyString(sONCLICK_SCRIPT))
                            btnChange.Attributes.Add("onclick", sONCLICK_SCRIPT);

                        btnChange.Attributes.Add("title", Translation.GetTranslation.Term(".LBL_SELECT_BUTTON_TITLE"));

                        btnChange.Value = Translation.GetTranslation.Term(".LBL_SELECT_BUTTON_LABEL");

                        if (sONCLICK_SCRIPT.IndexOf("Popup();") > 0)
                        {
                            litNBSP = new Literal();
                            tdField.Controls.Add(litNBSP);
                            litNBSP.Text = "&nbsp;";

                            HtmlInputButton btnClear = new HtmlInputButton("button");
                            tdField.Controls.Add(btnClear);
                            btnClear.ID = sDATA_FIELD + "_btnClear";
                            btnClear.Attributes.Add("class", "button");
                            btnClear.Attributes.Add("onclick", sONCLICK_SCRIPT.Replace("Popup();", "('', '');").Replace("return ", "return Change"));
                            btnClear.Attributes.Add("title", Translation.GetTranslation.Term(".LBL_CLEAR_BUTTON_TITLE"));
                            btnClear.Value = Translation.GetTranslation.Term(".LBL_CLEAR_BUTTON_LABEL");
                        }
                        if (!bLayoutMode && bUI_REQUIRED && !TypeConvert.IsEmptyString(sDATA_FIELD))
                        {
                            RequiredFieldValidatorForHiddenInputs reqID = new RequiredFieldValidatorForHiddenInputs();
                            reqID.ID = sDATA_FIELD + "_REQUIRED";
                            reqID.ControlToValidate = hidID.ID;
                            reqID.ErrorMessage = Translation.GetTranslation.Term(".ERR_REQUIRED_FIELD");
                            reqID.CssClass = "required";
                            reqID.EnableViewState = false;

                            reqID.EnableClientScript = false;
                            reqID.Enabled = false;

                            reqID.Style.Add("padding-left", "4px");
                            tdField.Controls.Add(reqID);
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "TextBox", true) == 0 || String.Compare(sFIELD_TYPE, "Password", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        TextBox txtField = new TextBox();
                        tdField.Controls.Add(txtField);
                        txtField.ID = sDATA_FIELD;
                        txtField.TabIndex = nFORMAT_TAB_INDEX;
                        if (nFORMAT_ROWS > 0 && nFORMAT_COLUMNS > 0)
                        {
                            txtField.Rows = nFORMAT_ROWS;
                            txtField.Columns = nFORMAT_COLUMNS;
                            txtField.TextMode = TextBoxMode.MultiLine;
                        }
                        else
                        {
                            txtField.MaxLength = nFORMAT_MAX_LENGTH;
                            txtField.Attributes.Add("size", nFORMAT_SIZE.ToString());
                            txtField.TextMode = TextBoxMode.SingleLine;
                        }
                        if (bLayoutMode)
                        {
                            txtField.Text = sDATA_FIELD;
                            txtField.ReadOnly = true;
                        }
                        else if (!TypeConvert.IsEmptyString(sDATA_FIELD) && rdr != null)
                        {
                            int nOrdinal = rdr.GetOrdinal(sDATA_FIELD);
                            string sTypeName = rdr.GetDataTypeName(nOrdinal);

                            if (sTypeName == "money" || rdr[sDATA_FIELD].GetType() == typeof(System.Decimal))
                                txtField.Text = TypeConvert.ToDecimal(rdr[sDATA_FIELD]).ToString("#,##0.00");
                            else
                                txtField.Text = TypeConvert.ToString(rdr[sDATA_FIELD]);
                        }

                        if (String.Compare(sFIELD_TYPE, "Password", true) == 0)
                            txtField.TextMode = TextBoxMode.Password;
                        if (!bLayoutMode && bUI_REQUIRED && !TypeConvert.IsEmptyString(sDATA_FIELD))
                        {
                            RequiredFieldValidator reqNAME = new RequiredFieldValidator();
                            reqNAME.ID = sDATA_FIELD + "_REQUIRED";
                            reqNAME.ControlToValidate = txtField.ID;
                            reqNAME.ErrorMessage = Translation.GetTranslation.Term(".ERR_REQUIRED_FIELD");
                            reqNAME.CssClass = "required";
                            reqNAME.EnableViewState = false;

                            reqNAME.EnableClientScript = false;
                            reqNAME.Enabled = false;
                            reqNAME.Style.Add("padding-left", "4px");
                            tdField.Controls.Add(reqNAME);
                        }
                        if (!bLayoutMode && !TypeConvert.IsEmptyString(sDATA_FIELD))
                        {
                            if (sVALIDATION_TYPE == "RegularExpressionValidator" && !TypeConvert.IsEmptyString(sREGULAR_EXPRESSION) && !TypeConvert.IsEmptyString(sFIELD_VALIDATOR_MESSAGE))
                            {
                                RegularExpressionValidator reqVALIDATOR = new RegularExpressionValidator();
                                reqVALIDATOR.ID = sDATA_FIELD + "_VALIDATOR";
                                reqVALIDATOR.ControlToValidate = txtField.ID;
                                reqVALIDATOR.ErrorMessage = Translation.GetTranslation.Term(sFIELD_VALIDATOR_MESSAGE);
                                reqVALIDATOR.ValidationExpression = sREGULAR_EXPRESSION;
                                reqVALIDATOR.CssClass = "required";
                                reqVALIDATOR.EnableViewState = false;

                                reqVALIDATOR.EnableClientScript = false;
                                reqVALIDATOR.Enabled = false;
                                reqVALIDATOR.Style.Add("padding-left", "4px");
                                tdField.Controls.Add(reqVALIDATOR);
                            }
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "DatePicker", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {

                        DatePicker ctlDate = tbl.Page.LoadControl("~/CRM/UserControls/DatePicker.ascx") as DatePicker;
                        tdField.Controls.Add(ctlDate);
                        ctlDate.ID = sDATA_FIELD;

                        ctlDate.TabIndex = nFORMAT_TAB_INDEX;
                        if (rdr != null)
                            ctlDate.Value = CRM.Common.TimeZone.GetTimeZone.FromServerTime(rdr[sDATA_FIELD]);

                        if (bLayoutMode)
                        {
                            Literal litField = new Literal();
                            litField.Text = sDATA_FIELD;
                            tdField.Controls.Add(litField);
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "DateRange", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {

                        Table tblDateRange = new Table();
                        tdField.Controls.Add(tblDateRange);
                        TableRow trAfter = new TableRow();
                        TableRow trBefore = new TableRow();
                        tblDateRange.Rows.Add(trAfter);
                        tblDateRange.Rows.Add(trBefore);
                        TableCell tdAfterLabel = new TableCell();
                        TableCell tdAfterData = new TableCell();
                        TableCell tdBeforeLabel = new TableCell();
                        TableCell tdBeforeData = new TableCell();
                        trAfter.Cells.Add(tdAfterLabel);
                        trAfter.Cells.Add(tdAfterData);
                        trBefore.Cells.Add(tdBeforeLabel);
                        trBefore.Cells.Add(tdBeforeData);

                        DatePicker ctlDateStart = tbl.Page.LoadControl("~/CRM/UserControls/DatePicker.ascx") as DatePicker;
                        DatePicker ctlDateEnd = tbl.Page.LoadControl("~/CRM/UserControls/DatePicker.ascx") as DatePicker;
                        Literal litAfterLabel = new Literal();
                        Literal litBeforeLabel = new Literal();
                        litAfterLabel.Text = Translation.GetTranslation.Term("SavedSearch.LBL_SEARCH_AFTER");
                        litBeforeLabel.Text = Translation.GetTranslation.Term("SavedSearch.LBL_SEARCH_BEFORE");

                        tdAfterLabel.Controls.Add(litAfterLabel);
                        tdAfterData.Controls.Add(ctlDateStart);
                        tdBeforeLabel.Controls.Add(litBeforeLabel);
                        tdBeforeData.Controls.Add(ctlDateEnd);

                        ctlDateStart.ID = sDATA_FIELD + "_AFTER";
                        ctlDateEnd.ID = sDATA_FIELD + "_BEFORE";

                        ctlDateStart.TabIndex = nFORMAT_TAB_INDEX;
                        ctlDateEnd.TabIndex = nFORMAT_TAB_INDEX;
                        if (rdr != null)
                        {
                            ctlDateStart.Value = CRM.Common.TimeZone.GetTimeZone.FromServerTime(rdr[sDATA_FIELD]);
                            ctlDateEnd.Value = CRM.Common.TimeZone.GetTimeZone.FromServerTime(rdr[sDATA_FIELD]);
                        }

                        if (bLayoutMode)
                        {
                            Literal litField = new Literal();
                            litField.Text = sDATA_FIELD;
                            tdField.Controls.Add(litField);
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "DateTimePicker", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {

                        DateTimePicker ctlDate = tbl.Page.LoadControl("~/CRM/UserControls/DateTimePicker.ascx") as DateTimePicker;
                        tdField.Controls.Add(ctlDate);
                        ctlDate.ID = sDATA_FIELD;

                        ctlDate.TabIndex = nFORMAT_TAB_INDEX;
                        if (rdr != null)
                            ctlDate.Value = CRM.Common.TimeZone.GetTimeZone.FromServerTime(rdr[sDATA_FIELD]);

                        if (bLayoutMode)
                        {
                            Literal litField = new Literal();
                            litField.Text = sDATA_FIELD;
                            tdField.Controls.Add(litField);
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "DateTimeEdit", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {

                        DateTimeEdit ctlDate = tbl.Page.LoadControl("~/CRM/UserControls/DateTimeEdit.ascx") as DateTimeEdit;
                        tdField.Controls.Add(ctlDate);
                        ctlDate.ID = sDATA_FIELD;

                        ctlDate.TabIndex = nFORMAT_TAB_INDEX;
                        if (rdr != null)
                            ctlDate.Value = CRM.Common.TimeZone.GetTimeZone.FromServerTime(rdr[sDATA_FIELD]);

                        if (!bLayoutMode && bUI_REQUIRED)
                        {
                            ctlDate.EnableNone = false;
                        }
                        if (bLayoutMode)
                        {
                            Literal litField = new Literal();
                            litField.Text = sDATA_FIELD;
                            tdField.Controls.Add(litField);
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "File", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        HtmlInputFile ctlField = new HtmlInputFile();
                        tdField.Controls.Add(ctlField);
                        ctlField.ID = sDATA_FIELD;
                        ctlField.MaxLength = nFORMAT_MAX_LENGTH;
                        ctlField.Size = nFORMAT_SIZE;
                        ctlField.Attributes.Add("TabIndex", nFORMAT_TAB_INDEX.ToString());
                        if (!bLayoutMode && bUI_REQUIRED)
                        {
                            RequiredFieldValidator reqNAME = new RequiredFieldValidator();
                            reqNAME.ID = sDATA_FIELD + "_REQUIRED";
                            reqNAME.ControlToValidate = ctlField.ID;
                            reqNAME.ErrorMessage = Translation.GetTranslation.Term(".ERR_REQUIRED_FIELD");
                            reqNAME.CssClass = "required";
                            reqNAME.EnableViewState = false;

                            reqNAME.EnableClientScript = false;
                            reqNAME.Enabled = false;
                            reqNAME.Style.Add("padding-left", "4px");
                            tdField.Controls.Add(reqNAME);
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "Image", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        HtmlInputHidden ctlHidden = new HtmlInputHidden();
                        if (!bLayoutMode)
                        {
                            tdField.Controls.Add(ctlHidden);
                            ctlHidden.ID = sDATA_FIELD;

                            HtmlInputFile ctlField = new HtmlInputFile();
                            tdField.Controls.Add(ctlField);

                            ctlField.ID = sDATA_FIELD + "_File";

                            Literal litBR = new Literal();
                            litBR.Text = "<br />";
                            tdField.Controls.Add(litBR);
                        }

                        Image imgField = new Image();

                        imgField.ID = "img" + sDATA_FIELD;
                        try
                        {
                            if (bLayoutMode)
                            {
                                Literal litField = new Literal();
                                litField.Text = sDATA_FIELD;
                                tdField.Controls.Add(litField);
                            }
                            else if (rdr != null)
                            {
                                if (!TypeConvert.IsEmptyString(rdr[sDATA_FIELD]))
                                {
                                    ctlHidden.Value = TypeConvert.ToString(rdr[sDATA_FIELD]);
                                    imgField.ImageUrl = "~/CRM/Images/Image.aspx?ID=" + ctlHidden.Value;

                                    tdField.Controls.Add(imgField);

                                    Literal litClear = new Literal();
                                    litClear.Text = "<br /><input type=\"button\" class=\"button\" onclick=\"form." + ctlHidden.ClientID + ".value='';form." + imgField.ClientID + ".src='';" + "\"  value='" + "  " + Translation.GetTranslation.Term(".LBL_CLEAR_BUTTON_LABEL") + "  " + "' title='" + Translation.GetTranslation.Term(".LBL_CLEAR_BUTTON_TITLE") + "' />";
                                    tdField.Controls.Add(litClear);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Literal litField = new Literal();
                            litField.Text = ex.Message;
                            tdField.Controls.Add(litField);
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "AddressButtons", true) == 0)
                {
                    tr.Cells.Remove(tdField);
                    tdLabel.Width = "10%";
                    tdLabel.RowSpan = nROWSPAN;
                    tdLabel.VAlign = "middle";
                    tdLabel.Align = "center";
                    tdLabel.Attributes.Remove("class");
                    tdLabel.Attributes.Add("class", "tabFormAddDel");
                    HtmlInputButton btnCopyRight = new HtmlInputButton("button");
                    Literal litSpacer = new Literal();
                    HtmlInputButton btnCopyLeft = new HtmlInputButton("button");
                    tdLabel.Controls.Add(btnCopyRight);
                    tdLabel.Controls.Add(litSpacer);
                    tdLabel.Controls.Add(btnCopyLeft);
                    btnCopyRight.Attributes.Add("title", Translation.GetTranslation.Term("Accounts.NTC_COPY_BILLING_ADDRESS"));
                    btnCopyRight.Attributes.Add("onclick", "return copyAddressRight()");
                    btnCopyRight.Value = ">>";
                    litSpacer.Text = "<br><br>";
                    btnCopyLeft.Attributes.Add("title", Translation.GetTranslation.Term("Accounts.NTC_COPY_SHIPPING_ADDRESS"));
                    btnCopyLeft.Attributes.Add("onclick", "return copyAddressLeft()");
                    btnCopyLeft.Value = "<<";
                    nColIndex = 0;
                }
                else if (String.Compare(sFIELD_TYPE, "Hidden", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        HtmlInputHidden hidID = new HtmlInputHidden();
                        tdField.Controls.Add(hidID);
                        hidID.ID = sDATA_FIELD;
                        if (bLayoutMode)
                        {
                            TextBox txtNAME = new TextBox();
                            tdField.Controls.Add(txtNAME);
                            txtNAME.ReadOnly = true;

                            txtNAME.EnableViewState = false;
                            txtNAME.Text = sDATA_FIELD;
                            txtNAME.Enabled = false;
                        }
                        else
                        {

                            nCOLSPAN = -1;
                            tr.Cells.Remove(tdLabel);
                            tdField.Attributes.Add("style", "display:none");
                            if (!TypeConvert.IsEmptyString(sDATA_FIELD) && rdr != null)
                                hidID.Value = TypeConvert.ToString(rdr[sDATA_FIELD]);

                            else if (sDATA_FIELD == "TEAM_ID" && rdr == null && !tbl.Page.IsPostBack)
                                hidID.Value = CRMSecurity.TEAM_ID.ToString();

                            else if (sDATA_FIELD == "ASSIGNED_USER_ID" && rdr == null && !tbl.Page.IsPostBack)
                                hidID.Value = CRMSecurity.USER_ID.ToString();
                        }
                    }
                }
                else
                {
                    Literal litField = new Literal();
                    tdField.Controls.Add(litField);
                    litField.Text = "Unknown field type " + sFIELD_TYPE;
                }

                if (nCOLSPAN > 0)
                    nColIndex += nCOLSPAN;
                else if (nCOLSPAN == 0)
                    nColIndex++;
                if (nColIndex >= nDATA_COLUMNS)
                    nColIndex = 0;
            }
        }
        /// <summary>
        /// Generate CSV formatted output for the given reader.
        /// </summary>
        public string Generate(System.Data.Common.DbDataReader reader)
        {
            var builder = new StringBuilder();

            var schema = reader.GetSchemaTable();
            var colcount = reader.FieldCount;
            var nullable = new bool[colcount];
            var datatype = new Type[colcount];
            var typename = new string[colcount];

            for(int c=0; c<colcount; c++)
            {
                nullable[c] = true;
                datatype[c] = reader.GetFieldType(c);
                typename[c] = reader.GetDataTypeName(c);

                if (c == 0)
                {
                    if (this.Settings.AddLineNumbers)
                    {
                        if (this.Settings.QuotedStrings) builder.Append(this.Settings.StringQuote);
                        builder.Append("Line");
                        if (this.Settings.QuotedStrings) builder.Append(this.Settings.StringQuote);
                        builder.Append(this.Settings.FieldSeparator);
                    }
                }
                else
                {
                    builder.Append(this.Settings.FieldSeparator);
                }
                if (this.Settings.QuotedStrings) builder.Append(this.Settings.StringQuote);
                builder.Append(reader.GetName(c));
                if (this.Settings.QuotedStrings) builder.Append(this.Settings.StringQuote);
            }

            builder.Append(this.Settings.LineSeparator);

            var lineNumber = 0;
            while (reader.Read())
            {
                lineNumber++;

                for (int c = 0; c < colcount; c++)
                {
                    if (c == 0)
                    {
                        if (this.Settings.AddLineNumbers)
                        {
                            builder.Append(lineNumber);
                            builder.Append(this.Settings.FieldSeparator);
                        }
                    }
                    else
                    {
                        builder.Append(this.Settings.FieldSeparator);
                    }

                    if (nullable[c] && reader.IsDBNull(c))
                    {
                    }
                    else
                    {
                        if (datatype[c] == typeof(String))
                        {
                            if (this.Settings.QuotedStrings) builder.Append(this.Settings.StringQuote);
                            builder.Append(ToCsvableString(reader.GetString(c)));                            
                            if (this.Settings.QuotedStrings) builder.Append(this.Settings.StringQuote);
                        }
                        else if (datatype[c] == typeof(DateTime))
                        {
                            builder.Append(reader.GetDateTime(c).ToString(this.Settings.DateTimeFormat, this.Settings.FormatProvider));
                        }
                        else if (datatype[c] == typeof(Boolean))
                        {
                            builder.Append(reader.GetBoolean(c) ? this.Settings.BooleanTrue : this.Settings.BooleanFalse);
                        }
                        else
                        {
                            builder.AppendFormat(this.Settings.FormatProvider, "{0}", reader.GetValue(c));
                        }
                    }
                }

                builder.Append(this.Settings.LineSeparator);
            }

            return builder.ToString();
        }
        public static void SetEditViewFields(System.Web.UI.UserControl Parent, string sEDIT_NAME, System.Data.SqlClient.SqlDataReader rdr)
        {
            bool bEnableTeamManagement = Common.Config.enable_team_management();
            DataTable dtFields = CRMCache.EditViewFields(sEDIT_NAME);
            DataView dvFields = dtFields.DefaultView;
            foreach (DataRowView row in dvFields)
            {
                string sFIELD_TYPE = TypeConvert.ToString(row["FIELD_TYPE"]);
                string sDATA_LABEL = TypeConvert.ToString(row["DATA_LABEL"]);
                string sDATA_FIELD = TypeConvert.ToString(row["DATA_FIELD"]);
                string sDISPLAY_FIELD = TypeConvert.ToString(row["DISPLAY_FIELD"]);
                int nFORMAT_ROWS = TypeConvert.ToInteger(row["FORMAT_ROWS"]);

                if (sDATA_FIELD == "TEAM_ID")
                {
                    if (!bEnableTeamManagement)
                    {
                        sFIELD_TYPE = "Blank";
                    }
                }
                if (String.Compare(sFIELD_TYPE, "Blank", true) == 0)
                {
                }
                else if (String.Compare(sFIELD_TYPE, "Label", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        Literal litField = Parent.FindControl(sDATA_FIELD) as Literal;
                        if (litField != null)
                        {
                            if (sDATA_FIELD.IndexOf(".") >= 0)
                                litField.Text = Translation.GetTranslation.Term(sDATA_FIELD);
                            else
                                litField.Text = TypeConvert.ToString(rdr[sDATA_FIELD]);
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "ListBox", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        if (nFORMAT_ROWS > 0)
                        {

                            ListBox lstField = Parent.FindControl(sDATA_FIELD) as ListBox;
                            if (lstField != null)
                            {
                                lstField.SelectedValue = TypeConvert.ToString(rdr[sDATA_FIELD]);
                            }
                        }
                        else
                        {
                            DropDownList lstField = Parent.FindControl(sDATA_FIELD) as DropDownList;
                            if (lstField != null)
                            {
                                try
                                {
                                    lstField.SelectedValue = TypeConvert.ToString(rdr[sDATA_FIELD]);
                                }
                                catch
                                {
                                    lstField.SelectedIndex = 0;
                                }
                            }
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "CheckBox", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        CheckBox chkField = Parent.FindControl(sDATA_FIELD) as CheckBox;
                        if (chkField != null)
                            chkField.Checked = TypeConvert.ToBoolean(rdr[sDATA_FIELD]);
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "ChangeButton", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {

                        if (sDATA_LABEL == "PARENT_TYPE")
                        {
                            DropDownList lstField = Parent.FindControl(sDATA_LABEL) as DropDownList;
                            if (lstField != null)
                            {
                                lstField.ClearSelection();
                                lstField.SelectedValue = TypeConvert.ToString(rdr[sDATA_LABEL]);
                            }
                        }
                        TextBox txtNAME = Parent.FindControl(sDISPLAY_FIELD) as TextBox;
                        if (txtNAME != null)
                        {
                            if (!TypeConvert.IsEmptyString(sDISPLAY_FIELD))
                                txtNAME.Text = TypeConvert.ToString(rdr[sDISPLAY_FIELD]);
                            HtmlInputHidden hidID = Parent.FindControl(sDATA_FIELD) as HtmlInputHidden;
                            if (hidID != null)
                            {
                                hidID.Value = TypeConvert.ToString(rdr[sDATA_FIELD]);
                            }
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "TextBox", true) == 0 || String.Compare(sFIELD_TYPE, "Password", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        TextBox txtField = Parent.FindControl(sDATA_FIELD) as TextBox;
                        if (txtField != null)
                        {
                            int nOrdinal = rdr.GetOrdinal(sDATA_FIELD);
                            string sTypeName = rdr.GetDataTypeName(nOrdinal);
                            if (sTypeName == "money" || rdr[sDATA_FIELD].GetType() == typeof(System.Decimal))
                                txtField.Text = TypeConvert.ToDecimal(rdr[sDATA_FIELD]).ToString("#,##0.00");
                            else
                                txtField.Text = TypeConvert.ToString(rdr[sDATA_FIELD]);
                        }
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "DatePicker", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        DatePicker ctlDate = Parent.FindControl(sDATA_FIELD) as DatePicker;
                        if (ctlDate != null)
                            ctlDate.Value = CRM.Common.TimeZone.GetTimeZone.FromServerTime(rdr[sDATA_FIELD]);
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "DateTimePicker", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        DateTimePicker ctlDate = Parent.FindControl(sDATA_FIELD) as DateTimePicker;
                        if (ctlDate != null)
                            ctlDate.Value = CRM.Common.TimeZone.GetTimeZone.FromServerTime(rdr[sDATA_FIELD]);
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "DateTimeEdit", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        DateTimeEdit ctlDate = Parent.FindControl(sDATA_FIELD) as DateTimeEdit;
                        if (ctlDate != null)
                            ctlDate.Value = CRM.Common.TimeZone.GetTimeZone.FromServerTime(rdr[sDATA_FIELD]);
                    }
                }
                else if (String.Compare(sFIELD_TYPE, "File", true) == 0)
                {
                }
                else if (String.Compare(sFIELD_TYPE, "Image", true) == 0)
                {
                    if (!TypeConvert.IsEmptyString(sDATA_FIELD))
                    {
                        HtmlInputHidden ctlHidden = Parent.FindControl(sDATA_FIELD) as HtmlInputHidden;
                        Image imgField = Parent.FindControl("img" + sDATA_FIELD) as Image;
                        if (ctlHidden != null && imgField != null)
                        {
                            if (!TypeConvert.IsEmptyString(rdr[sDATA_FIELD]))
                            {
                                ctlHidden.Value = TypeConvert.ToString(rdr[sDATA_FIELD]);
                                imgField.ImageUrl = "~/CRM/Images/Image.aspx?ID=" + ctlHidden.Value;
                            }
                        }
                    }
                }
            }
        }