private void OnReservateButtonClicked(object sender, RoutedEventArgs e)
        {
            DateTime start = new DateTime(1970, 1, 1, 9, 0, 0);
            DateTime end   = new DateTime(1970, 1, 1, 17, 30, 0);

#if DEBUG
            var isDebug = true;
#else
            var isDebug = false;
#endif

            if (isDebug || !isUserMode || (start.TimeOfDay <= DateTime.Now.TimeOfDay && DateTime.Now.TimeOfDay <= end.TimeOfDay))
            {
                if (ReservationStatusPerDay.IsSelectedAlreadyOccupied())
                {
                    MessageBox.Show("이미 예약 되어 있습니다", "예약 불가", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
                else
                {
                    ReservationWindow window = new ReservationWindow(isUserMode);
                    window.onReservationSuccess = (item) => {
                        refresh();
                        if (item.classroom.Contains("과도관"))
                        {
                            MessageBox.Show("예약에 성공했습니다\n꼭 예약 종이에 도장을 받아가 주세요", "예약 성공", MessageBoxButton.OK, MessageBoxImage.Information);
                        }
                        else
                        {
                            MessageBox.Show("예약에 성공했습니다", "예약 성공", MessageBoxButton.OK, MessageBoxImage.Information);
                        }
                    };
                    window.ShowInTaskbar = false;
                    window.ShowDialog();
                }
            }
            else
            {
                MessageBox.Show("강의실 예약은 아침 9시 부터 오후 5시 반 까지만 가능합니다.", "예약 불가", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        }
        public void refresh()
        {
            try {
                scrollViewContentPanel.Children.Clear();
                for (int i = 0; i < 7; i++)
                {
                    if (displayDate.AddDays(i).DayOfWeek != 0)
                    {
                        var view = new ReservationStatusPerDay(displayDate.AddDays(i));
                        view.onOneSelected = onOneSelected;
                        if (i == 0)
                        {
                            view.mainBorder.BorderThickness = new Thickness(0);
                        }
                        scrollViewContentPanel.Children.Add(view);
                    }
                }

                //remake leftLabelGrid
                leftLabelsGrid.Children.Clear();
                leftLabelsGrid.RowDefinitions.Clear();
                List <string> classroomList    = ServerClient.getInstance().classroomList;
                Label         nowBuildingLabel = null;
                for (int row = 0; row < classroomList.Count; row++)
                {
                    //Add RowDefinition
                    RowDefinition rowDef = new RowDefinition();
                    rowDef.Height = new GridLength(1, GridUnitType.Star);
                    leftLabelsGrid.RowDefinitions.Add(rowDef);

                    //Get building name and classroom name
                    string buildingName  = (classroomList[row] as string).Split(':')[0];
                    string classroomName = (classroomList[row] as string).Split(':')[1];

                    //Add label to Grid
                    Label classroomLabel = new Label();
                    classroomLabel.Content    = classroomName;
                    classroomLabel.Background = (row % 2 == 0) ? backgroundEven : backgroundOdd;
                    classroomLabel.HorizontalContentAlignment = HorizontalAlignment.Center;
                    classroomLabel.VerticalContentAlignment   = VerticalAlignment.Center;

                    Grid.SetRow(classroomLabel, row);
                    Grid.SetColumn(classroomLabel, 1);

                    leftLabelsGrid.Children.Add(classroomLabel);

                    //Adjust building label
                    if (nowBuildingLabel != null && nowBuildingLabel.Content.Equals(buildingName))
                    {
                        Grid.SetRowSpan(nowBuildingLabel, Grid.GetRowSpan(nowBuildingLabel) + 1);
                    }
                    else
                    {
                        Label buildingLabel = new Label();
                        buildingLabel.Content = buildingName;
                        buildingLabel.Style   = Resources["LabelStyle"] as Style;

                        Grid.SetRow(buildingLabel, row);
                        Grid.SetColumn(buildingLabel, 0);
                        Grid.SetRowSpan(buildingLabel, 1);

                        nowBuildingLabel = buildingLabel;
                        leftLabelsGrid.Children.Add(buildingLabel);
                    }
                }

                //remake reservationStatusControls
                List <StatusItem> items = ServerClient.getInstance().reservationListWeek(displayDate);
                var views = scrollViewContentPanel.Children;
                foreach (ReservationStatusPerDay view in views)
                {
                    view.clear();
                    view.rearrangeGrid();
                    foreach (StatusItem item in items)
                    {
                        if (view.date.Day == item.date.Day)
                        {
                            int row = Int32.Parse(item.classroom);
                            view.putData(row + 2, item.classtime - 1, item);
                        }
                    }
                }

                endDateLable.Content = " ~ " + Essential.dateTimeToString(displayDate.AddDays(6));
            } catch (Exception ex) {
                MessageBox.Show(ex.Message + "\n" + ex.StackTrace, "", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }