private static string GenerateOTableScript(String tableName, DataTableAttributes dataTableParams, AjaxOptions ajaxOptions)
        {
            string scriptText = string.Empty;
            scriptText += "$(document).ready(function () {\n";
            //scriptText += "alert('hey!');\n";
            scriptText += string.Format("\tvar oTable = $('#{0}').dataTable({{\n", tableName);
            scriptText += string.Format("\t\"aoColumnDefs\": {0},\n", GenerateColumnDefsForOTable(dataTableParams.ColumnDefs));
            scriptText += string.Format("\t\"bAutoWidth\": {0},\n", dataTableParams.AutoWidth.ToLowerString());
            scriptText += string.Format("\t\"bDeferRender\": {0},\n", dataTableParams.DeferRender.ToLowerString());
            scriptText += string.Format("\t\"bFilter\": {0},\n", dataTableParams.Filter.ToLowerString());
            scriptText += string.Format("\t\"bInfo\": {0},\n", dataTableParams.Info.ToLowerString());
            scriptText += string.Format("\t\"bJQueryUI\": {0},\n", dataTableParams.JQueryUI.ToLowerString());
            scriptText += string.Format("\t\"bLengthChange\": {0},\n", dataTableParams.LengthChange.ToLowerString());
            scriptText += string.Format("\t\"bPaginate\": {0},\n", true.ToLowerString());
            scriptText += string.Format("\t\"bProcessing\": {0},\n", true.ToLowerString());
            scriptText += string.Format("\t\"bScrollInfinite\": {0},\n", dataTableParams.ScrollInfinite.ToLowerString());
            scriptText += string.Format("\t\"bServerSide\": {0},\n", true.ToLowerString());
            scriptText += string.Format("\t\"bSort\": {0},\n", dataTableParams.Sort.ToLowerString());
            scriptText += string.Format("\t\"bSortClasses\": {0},\n", dataTableParams.SortClasses.ToLowerString());
            scriptText += string.Format("\t\"bStateSave\": {0},\n", dataTableParams.StateSave.ToLowerString());
            if (!string.IsNullOrEmpty(dataTableParams.ScrollX))
                scriptText += string.Format("\t\"sScrollX\": {0},\n", dataTableParams.ScrollX);
            if (!string.IsNullOrEmpty(dataTableParams.ScrollY))
                scriptText += string.Format("\t\"sScrollY\": {0},\n", dataTableParams.ScrollY);
            scriptText += string.Format("\t\"sPaginationType\": \"{0}\",\n", GetDescription(dataTableParams.PaginationType));

            scriptText += string.Format("\t\"sAjaxSource\": \"{0}\",\n", ajaxOptions.Url);
            scriptText += string.Format("\t\"sServerMethod\": \"{0}\"\n", ajaxOptions.HttpMethod);

            scriptText += "\t}); \n";
            scriptText += "});";

            //+ string.Format("\t\"\": {0},\n", )

            return scriptText;
        }
        public static MvcHtmlString DataTable(this AjaxHelper ajaxHelper,
            String tableName,
            AjaxOptions ajaxOptions,
            DataTableAttributes dataTableParams
            )
        {
            //ajaxOptions.Confirm
            //ajaxOptions.HttpMethod  // fnServerData :: type
            //ajaxOptions.InsertionMode
            //ajaxOptions.LoadingElementDuration
            //ajaxOptions.LoadingElementId
            //ajaxOptions.OnBegin // fnServerParams ??
            //ajaxOptions.OnComplete // $.ajax :: complete(jqXHR, textStatus)
            //ajaxOptions.OnFailure // $.ajax :: error(jqXHR, textStatus, errorThrown)
            //ajaxOptions.OnSuccess // $.ajax :: success 
            //ajaxOptions.UpdateTargetId ???
            //ajaxOptions.Url= // sAjaxSource 


            //            string tableId = ResolveTableId(tableName, ajaxOptions.UpdateTargetId);
            //            TagBuilder tableTag = TableTagBuilder(tableId, tableName, ajaxOptions.UpdateTargetId);

            //            TagBuilder builder = new TagBuilder("script");

            //            builder.InnerHtml = @"
            ////var oTable;
            ////var generated_aoColumnDefs = [@generateColumnsForOTable()];
            ////var generated_sAjaxSource = '@Url.Action(""GetTableRows"", new { TableName = Model.TableDefinition.Name })';
            //
            //$(document).ready(function () {
            //
            //    var oTable = $('#tblRows').dataTable({
            //        ""aoColumnDefs"": {0},
            //        ""bJQueryUI"": true,
            //        ""aLengthMenu"": [[5, 10, 25, 100, -1], [5, 10, 25, 100, ""All""]],
            //        ""bSort"": true,
            //        ""aaSorting"": [[1, ""asc""]],
            //        ""bFilter"": false, /* Searching will not be implemented in the this release */
            //        ""bPaginate"": true,
            //        ""sPaginationType"": ""full_numbers"",
            //        ""bAutoWidth"": false,
            //        ""bProcessing"": true,
            //        ""bServerSide"": true,
            //        ""bStateSave"": true, //why it doesn't work?
            //        ""sAjaxSource"": generated_sAjaxSource,
            //        ""fnServerData"": function (sSource, aoData, fnCallback) {
            //            UpdateUrl();
            //            FetchServerData(this, sSource, aoData, fnCallback);
            //        }
            //
            //});
            //";






            //return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));
            return MvcHtmlString.Create(string.Format("<script type='text/javascript'>\n{0}\n</script>", GenerateOTableScript(tableName, dataTableParams, ajaxOptions)));
        }