public override void HandleRequest(string jsonString, AjaxBase ajax)
        {
            if (!User.IsAdminLoggedIn(ajax))
            {
                ajax.Unauthorized();
                return;
            }

            AdminErrorLogsGetRequest request = Utility.ParseJson<AdminErrorLogsGetRequest>(jsonString);
            AdminErrorLogsGetResponse response = new AdminErrorLogsGetResponse();
            response.numberOfLogs = Convert.ToInt32(Database.Select("errorlog", null, null, null, "COUNT(*)")[0]["COUNT(*)"]);
            List<ErrorLogJson> logs = new List<ErrorLogJson>();
            foreach (Dictionary<string, object> data in Database.Select("errorlog", null, "`time` DESC", (request.page * request.elementsPerPage) + "," + request.elementsPerPage))
            {
                ErrorLogJson log = new ErrorLogJson();
                log.id = Convert.ToInt32(data["id"]);
                log.time = Convert.ToInt32(data["time"]);
                log.type = Convert.ToString(data["type"]);
                log.source = Convert.ToString(data["source"]);
                log.message = Convert.ToString(data["message"]);
                log.stackTrace = Convert.ToString(data["stacktrace"]);
                logs.Add(log);
            }

            response.logs = logs.ToArray();
            ajax.ReturnJson(response);
        }
        private void GetRequestSuccess(AdminErrorLogsGetResponse response)
        {
            numberOfLogs = response.numberOfLogs;
            pagination.Refresh();

            jQuery.Select("#admin-errorlogs-tbody").Children().Remove();
            if (response.logs.Length == 0)
            {
                Template.Get("admin", "noitem-trow", true).AppendTo(jQuery.Select("#admin-errorlogs-tbody"));
            }

            for (int i = 0; i < response.logs.Length; i++)
            {
                jQueryObject row = Template.Get("admin", "admin-errorlogs-trow", true).AppendTo(jQuery.Select("#admin-errorlogs-tbody"));
                jQuery.Select(".admin-errorlogs-time", row).Text(String.Format(Strings.Get("TimeFormat"), new Date(response.logs[i].time * 1000)));
                jQuery.Select(".admin-errorlogs-stacktrace", row).Attribute("data-stacktrace", response.logs[i].stackTrace).Click(ShowButtonClicked);
                jQuery.Select(".admin-errorlogs-type", row).Text(response.logs[i].type);
                jQuery.Select(".admin-errorlogs-source", row).Text(response.logs[i].source);
                jQuery.Select(".admin-errorlogs-message", row).Text(response.logs[i].message);
            }
        }