public static MvcHtmlString Hidden(this HtmlHelper htmlHelper, ReportParameter parameter)
        {
            if (htmlHelper != null && parameter != null)
            {
                return htmlHelper.Hidden(parameter.Id, parameter.CurrentValue);
            }

            return MvcHtmlString.Empty;
        }
        private static MvcHtmlString LabeledDropDown(this HtmlHelper htmlHelper, ReportParameter parameter, bool disabled = false)
        {
            if (!IsVisibleDropDown(parameter)) return MvcHtmlString.Empty;

            return LabeledControl(htmlHelper, parameter, IsDateRangeDropDown(parameter)
                                                              ? DateRangeDropDownForParameter(htmlHelper, parameter, disabled)
                                                              : DropDownForParameter(htmlHelper, parameter, disabled));

        }
        public static MvcHtmlString LabeledParameterField(this HtmlHelper htmlHelper, ReportParameter parameter, bool disabled)
        {
            if (parameter == null) throw new ArgumentNullException("parameter");
            ReportControlType reportControlType = GetReportControlType(parameter);
            
            switch(reportControlType)
            {
                case ReportControlType.Hidden:      return Hidden(htmlHelper, parameter);
                case ReportControlType.CheckBox:    return LabeledCheckBox(htmlHelper, parameter, disabled);
                case ReportControlType.DatePicker:  return LabeledDatePicker(htmlHelper, parameter, disabled);
                case ReportControlType.ListBox:     return LabeledListBox(htmlHelper, parameter, disabled);
                case ReportControlType.DropDown:    return LabeledDropDown(htmlHelper, parameter, disabled);
                case ReportControlType.TextBox:     return LabeledTextBox(htmlHelper, parameter, disabled);
            }

            throw new ArgumentOutOfRangeException("parameter");
        }
        private static MvcHtmlString CheckBoxForParameter(HtmlHelper htmlHelper, ReportParameter reportParameter, bool disabled)
        {
            bool value;
            if (!bool.TryParse(reportParameter.CurrentValue, out value)) value = false;

            Dictionary<string, object> htmlAttributes = GetHtmlAttributes(reportParameter.Dependents, null, disabled);

            return htmlHelper.CheckBox(reportParameter.Id, value, htmlAttributes);
        }
        private static MvcHtmlString LabeledDatePicker(this HtmlHelper htmlHelper, ReportParameter parameter, bool disabled = false)
        {
            if (!IsVisibleDateTime(parameter)) return MvcHtmlString.Empty;

            return LabeledControl(htmlHelper, parameter, DatePickerForParameter(htmlHelper, parameter, disabled));
        }
 private static MvcHtmlString LabeledTextBox(this HtmlHelper htmlHelper, ReportParameter parameter, bool disabled = false)
 {
     return LabeledControl(htmlHelper, parameter, TextBoxForParameter(htmlHelper, parameter, disabled));
 }
 public static int GetReportParameterHeight(ReportParameter reportParameter)
 {
     ReportControlType reportControlType = GetReportControlType(reportParameter);
     return GetReportControlTypeHeight(reportControlType);
 }
        private static bool IsVisibleDropDown(ReportParameter reportParameter)
        {
            if (reportParameter.Scheduling)
            {
                return !IsDateRangeDropDown(reportParameter);
            }

            return true;
        }
        public static ReportControlType GetReportControlType(ReportParameter parameter)
        {
            if (parameter == null) throw new ArgumentNullException("parameter");

            if (parameter.Hidden)
            {
                return ReportControlType.Hidden;
            }

            switch (parameter.ParameterType)
            {
                case ParameterType.Boolean:
                    return ReportControlType.CheckBox;

                case ParameterType.DateTime:
                    return ReportControlType.DatePicker;

                case ParameterType.Float:
                case ParameterType.Integer:
                case ParameterType.String:
                    if (parameter.Options.Any() || parameter.ItemParameter.ValidValuesQueryBased)
                    {
                        if (parameter.MultiValue)
                        {
                            return ReportControlType.ListBox;
                        }

                        return ReportControlType.DropDown;
                    }

                    return ReportControlType.TextBox;

                default:
                    return ReportControlType.Unsupported;
            }
        }
 private static bool IsDateRangeDropDown(ReportParameter reportParameter)
 {
     return reportParameter.Options.Any(o => o.Value == ReportParameter.CustomDateRangeValue);
 }
        private static bool IsVisibleDateTime(ReportParameter reportParameter)
        {
            if (reportParameter.Scheduling)
            {
                switch (reportParameter.Id.ToUpperInvariant())
                {
                    case "DATETIMEFROM":
                    case "DATETIMETO":
                        return false;
                }
            }

            return true;
        }
        private static MvcHtmlString LabeledControl(this HtmlHelper htmlHelper, ReportParameter parameter, MvcHtmlString inputControl)
        {
            if (htmlHelper != null && parameter != null)
            {
                return MvcHtmlString.Create(string.Format(CultureInfo.InvariantCulture, "{1}{0}{2}", Environment.NewLine,
                                                          htmlHelper.Label(parameter.Id, parameter.Label),
                                                          inputControl));
            }

            return MvcHtmlString.Empty;
        }
        private static MvcHtmlString DatePickerForParameter(HtmlHelper htmlHelper, ReportParameter reportParameter, bool disabled)
        {
            Dictionary<string, object> htmlAttributes = GetHtmlAttributes(reportParameter.Dependents, null, disabled);
            htmlAttributes.Add("class", "datepicker");

            return htmlHelper.TextBox(reportParameter.Id, reportParameter.CurrentValue, htmlAttributes);
        }
        private static MvcHtmlString TextBoxForParameter(HtmlHelper htmlHelper, ReportParameter reportParameter, bool disabled)
        {
            Dictionary<string, object> htmlAttributes = GetHtmlAttributes(reportParameter.Dependents, reportParameter.Suggestions, disabled);

            return htmlHelper.TextBox(reportParameter.Id, reportParameter.CurrentValue, htmlAttributes);
        }
        private static MvcHtmlString DateRangeDropDownForParameter(HtmlHelper htmlHelper, ReportParameter reportParameter, bool disabled)
        {
            Dictionary<string, object> htmlAttributes = GetHtmlAttributes(reportParameter.Dependents, null, disabled, "enableDependents");
            htmlAttributes.Add("data-value", ReportParameter.CustomDateRangeValue);

            return htmlHelper.DropDownList(reportParameter.Id, reportParameter.Options, htmlAttributes);
        }
        private static MvcHtmlString ListBoxForParameter(HtmlHelper htmlHelper, ReportParameter reportParameter, bool disabled)
        {
            Dictionary<string, object> htmlAttributes = GetHtmlAttributes(reportParameter.Dependents, null, disabled);

            return htmlHelper.ListBox(reportParameter.Id, reportParameter.Options, htmlAttributes);
        }