/// <summary>
        /// ascending quick sort by intime using recusrion
        /// </summary>
        /// <param name = "list" ></ param >
        /// < returns ></ returns >
        public List <VisitorsInformation> QuickSortByInTime(List <VisitorsInformation> list)
        {
            if (list.Count <= 1)
            {
                return(list);
            }

            Random random = new Random();
            List <VisitorsInformation> less    = new List <VisitorsInformation>();
            List <VisitorsInformation> greater = new List <VisitorsInformation>();

            int pos = random.Next(list.Count);
            VisitorsInformation pivot = list[pos];

            list.RemoveAt(pos);

            foreach (VisitorsInformation item in list)
            {
                DateTime inTimeItem  = DateTime.Parse(item.CheckInTime);
                DateTime inTimePivot = DateTime.Parse(pivot.CheckInTime);
                if (inTimeItem < inTimePivot)
                {
                    less.Add(item);
                }
                else
                {
                    greater.Add(item);
                }
            }
            return(Concat(QuickSortByInTime(less), pivot, QuickSortByInTime(greater)));
        }
        public List <VisitorsInformation> Concat(List <VisitorsInformation> less, VisitorsInformation pivot, List <VisitorsInformation> greater)
        {
            List <VisitorsInformation> sorted = new List <VisitorsInformation>(less);

            sorted.Add(pivot);

            foreach (VisitorsInformation i in greater)
            {
                sorted.Add(i);
            }

            return(sorted);
        }
        private void ValidateAndSave()
        {
            List <VisitorsInformation> visitorList = new List <VisitorsInformation>();
            VisitorsInformation        visitor     = new VisitorsInformation();
            bool errorOccured = false;

            visitor.ID          = Int64.Parse(visitorID.Text);
            visitor.EntryDate   = dateToday.Text;
            visitor.CheckInTime = CheckInTimePicker.Text;
            if (CheckOutTimepicker.Visible)
            {
                visitor.CheckOutTime = CheckOutTimepicker.Text;
            }



            string fName = txtFirstName.Text;

            if (MuseumManagementSystem.Validators.ValidateEmpty(fName))
            {
                errFirstName.Hide();
                visitor.FirstName = fName;
            }
            else
            {
                errorOccured = true;
                errFirstName.Show();
            }

            string lName = txtLastName.Text;

            if (MuseumManagementSystem.Validators.ValidateEmpty(lName))
            {
                errLastName.Hide();
                visitor.LastName = lName;
            }
            else
            {
                errorOccured = true;
                errLastName.Show();
            }

            string address = txtAddress.Text;

            if (MuseumManagementSystem.Validators.ValidateEmpty(address))
            {
                errAddress.Hide();
                visitor.Address = address;
            }
            else
            {
                errorOccured = true;
                errAddress.Show();
            }

            string contact = txtContactNo.Text;

            if (MuseumManagementSystem.Validators.ValidateNumber(contact))
            {
                errContactNo.Hide();
                visitor.ContactNo = Int64.Parse(contact);
            }
            else
            {
                errorOccured = true;
                errContactNo.Show();
            }

            string mailAddress = txtEmailAddr.Text;

            if (MuseumManagementSystem.Validators.ValidateEmailFormat(mailAddress))
            {
                errEmailAddress.Hide();
                visitor.EmailAddress = mailAddress;
            }
            else
            {
                errorOccured = true;
                errEmailAddress.Show();
            }

            string occupation = txtOccupation.Text;

            if (MuseumManagementSystem.Validators.ValidateEmpty(occupation))
            {
                errOccupation.Hide();
                visitor.Occupation = occupation;
            }
            else
            {
                errorOccured = true;
                errOccupation.Show();
            }

            if (errorOccured == false)
            {
                visitorList.Add(visitor);
                bool abc = CheckOutTimepicker.Visible;
                if (CheckOutTimepicker.Visible)
                {
                    WriteCheckoutDataToFile(visitorList);
                }
                else
                {
                    WriteCheckInDataToFile(visitorList);
                }

                MessageBox.Show("Visitor successfully added.");
                btnNewVisitor.PerformClick();
            }
        }