/* SAVE OF UPDATE */
        private void btnCreateEditUpdateVisit_Click(object sender, RoutedEventArgs e)
        {
            // VALIDATION
            bool isError = false;
            if (String.IsNullOrEmpty(acbDoctor.Text))
            {
                acbDoctor.BorderBrush = new BrushConverter().ConvertFromString("Red") as Brush;
                isError = true;
            }
            if (!dtDate_of_Examination.SelectedDate.HasValue)
            {
                dtDate_of_Examination.SetValue(Border.BorderBrushProperty, Brushes.Red);
                isError = true;
            }
            if (isError)
            {
                return;
            }

            Domain.Visit Visit;
            if (mode == Mode.create)
            {
                Visit = new Domain.Visit();
                Visit.Patient = Patient;
                Patient.Visits.Add(Visit);
            }
            else
            {
                Visit = SelectedVisit;
            }

            // ENCAPSULATION
            Visit.ReferredBy = acbReferredBy.Text;
            Visit.Doctors_Email = acbDoctors_Email.Text;
            Visit.Doctor = acbDoctor.Text;
            Visit.Date_of_Examination = dtDate_of_Examination.SelectedDate.Value;

            Visit.Diagnosis = acbDiagnosis.Text;
            Visit.Treatment = acbTreatment.Text;

            foreach (Domain.Symptom sym in TempVisitSymptoms)
            {
                bool isNew = true;
                foreach (Domain.Symptom s in Visit.Symptoms)
                {
                    if (s.Name == sym.Name)
                    {
                        isNew = false;
                    }
                }
                if (isNew)
                {
                    sym.Visit = Visit;
                    Visit.Symptoms.Add(sym);
                }
            }
            foreach (Domain.Tag tag in TempVisitTags)
            {
                bool isNew = true;
                foreach (Domain.Tag t in Visit.Tags)
                {
                    if (t.Name == tag.Name)
                    {
                        isNew = false;
                    }
                }
                if (isNew)
                {
                    tag.Visit = Visit;
                    Visit.Tags.Add(tag);
                }
            }

            List<Domain.Symptom> toberemovedSymptoms = new List<Domain.Symptom>();
            foreach (Domain.Symptom s in Visit.Symptoms)
            {
                bool isPresent = false;
                foreach (Domain.Symptom sym in TempVisitSymptoms)
                {
                    if (s.Name == sym.Name)
                    {
                        isPresent = true;
                    }
                }
                if (!isPresent)
                {
                    toberemovedSymptoms.Add(s);
                }
            }
            foreach (Domain.Symptom s in toberemovedSymptoms)
            {
                s.Visit = null;
                Visit.Symptoms.Remove(s);
            }

            List<Domain.Tag> toberemovedTags = new List<Domain.Tag>();
            foreach (Domain.Tag t in Visit.Tags)
            {
                bool isPresent = false;
                foreach (Domain.Tag tag in TempVisitTags)
                {
                    if (t.Name == tag.Name)
                    {
                        isPresent = true;
                    }
                }
                if (!isPresent)
                {
                    toberemovedTags.Add(t);
                }
            }
            foreach (Domain.Tag t in toberemovedTags)
            {
                t.Visit = null;
                Visit.Tags.Remove(t);
            }

            // DB
            var session = ((App)Application.Current).session;

            using (var transaction = session.BeginTransaction())
            {
                session.SaveOrUpdate(Visit);
                transaction.Commit();
            }

            if (mode == Mode.create)
            {
                CreateNewVisitComplete();
                Start();
            }
            else
            {
                UpdateVisit();
                Refresh();
            }
        }
        /* populates selected visit details */
        private void lbxVisits_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lbxVisits.SelectedIndex != -1)
            {
                /* If User clicks on previous visits while creating a visit
                 * ui needs to be updated for updating */
                if (mode == Mode.create)
                {
                    CreateNewVisitComplete();
                }

                SelectedVisit = (Domain.Visit)lbxVisits.SelectedItem;

                acbReferredBy.Text = SelectedVisit.ReferredBy;
                acbDoctors_Email.Text = SelectedVisit.Doctors_Email;
                acbDoctor.Text = SelectedVisit.Doctor;
                dtDate_of_Examination.Text = SelectedVisit.Date_of_Examination.Date.ToString();

                acbDiagnosis.Text = SelectedVisit.Diagnosis;
                acbTreatment.Text = SelectedVisit.Treatment;

                TempVisitSymptoms = SelectedVisit.Symptoms.ToList();
                TempVisitTags = SelectedVisit.Tags.ToList();

                lbxSymptoms.ItemsSource = TempVisitSymptoms;
                lbxTags.ItemsSource = TempVisitTags;
                acbSymptom.Text = "";
                acbTag.Text = "";

                UpdateVisit();

            }
        }
        /* populates selected visit details */
        private void lbxVisits_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lbxVisits.SelectedIndex != -1)
            {
                /* If User clicks on previous visits while creating a visit
                 * ui needs to be updated for updating */
                if (mode == Mode.create)
                {
                    CreateNewVisitComplete();
                }
                if(TempVisitMedia!=null)
                    CleanupMedia.AddRange(TempVisitMedia.FindAll(m => m.Id == 0).Select(m => m.Path));

                SelectedVisit = (Domain.Visit)lbxVisits.SelectedItem;

                acbReferredBy.Text = SelectedVisit.ReferredBy;
                acbDoctors_Email.Text = SelectedVisit.Doctors_Email;
                acbDoctor.Text = SelectedVisit.Doctor;
                dtDate_of_Examination.Text = SelectedVisit.Date_of_Examination.Date.ToString();

                acbDiagnosis.Text = SelectedVisit.Diagnosis;
                acbTreatment.Text = SelectedVisit.Treatment;

                TempVisitSymptoms = SelectedVisit.Symptoms.ToList();
                lbxSymptoms.ItemsSource = TempVisitSymptoms;
                TempVisitTags = SelectedVisit.Tags.ToList();
                lbxTags.ItemsSource = TempVisitTags;
                TempVisitMedia = SelectedVisit.Media.ToList();
                lbxVideos.ItemsSource = TempVisitMedia.FindAll(n => n.Type == Domain.MediumType.Video);
                lbxImages.ItemsSource = TempVisitMedia.FindAll(n => n.Type == Domain.MediumType.Image);

                acbSymptom.Text = "";
                acbTag.Text = "";

                UpdateVisit();

            }
        }