public UserDisplay(Windows.UI.Xaml.Controls.StackPanel p, User theUser)
        {
            this.theUser = theUser;

            //set colors
            SolidColorBrush color1 = new SolidColorBrush(Color.FromArgb(179, 100, 130, 200));
            SolidColorBrush color2 = new SolidColorBrush(Color.FromArgb(255, 45, 63, 104));

            //parent -> display
            this.display = new StackPanel();
            p.Children.Add(this.display);
            this.display.Background  = color1;
            this.display.Height      = 200;
            this.display.Width       = p.Width; // set width to parent's width
            this.display.Orientation = Orientation.Horizontal;

            //parent -> display -> borderName
            DisplayNameBox borderName = new DisplayNameBox(display, color2);
            TextBlock      rowName    = (TextBlock)borderName.rowName;

            rowName.Text = "Personal Data";

            //parent -> display -> scroller
            ScrollViewer scroller = new ScrollViewer();

            this.display.Children.Add(scroller);
            scroller.VerticalScrollMode = ScrollMode.Disabled;
            scroller.ZoomMode           = ZoomMode.Disabled;
            scroller.Width  = this.display.Width - 260;
            scroller.Height = this.display.Height;
            scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
            scroller.VerticalScrollBarVisibility   = ScrollBarVisibility.Disabled;

            //parent -> display -> scroller -> dataStack
            StackPanel dataStack = new StackPanel();

            scroller.Content              = dataStack;
            dataStack.Height              = 200;
            dataStack.Orientation         = Orientation.Horizontal;
            dataStack.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Left;

            //parent -> display -> scroller -> dataStack -> milesStack
            DisplaySliderStack milesStack = new DisplaySliderStack(dataStack,
                                                                   "How many miles do you drive a year?", "What percent are city miles (vs highway)?",
                                                                   User.MinMiles, User.MaxMiles,
                                                                   ((int)(User.MinMiles / 1000)).ToString() + "k", ((int)(User.MaxMiles / 1000)).ToString() + "k",
                                                                   (int)(User.MinPercentCity * 100), (int)(User.MaxPercentCity * 100),
                                                                   ((int)(User.MinPercentCity * 100)).ToString() + "%", ((int)(User.MaxPercentCity * 100)).ToString() + "%",
                                                                   color1, color2);
            UIElementCollection milesStackChildren = ((StackPanel)(milesStack.stackP).Children[1]).Children;

            ((Slider)milesStackChildren[1]).ValueChanged += updateMilesPerYear;
            milesStackChildren = ((StackPanel)(milesStack.stackP).Children[3]).Children;
            ((Slider)milesStackChildren[1]).ValueChanged += updatePercentCityMiles;

            //parent -> display -> scroller -> dataStack -> gasStack
            DisplaySoloSliderStack gasStack = new DisplaySoloSliderStack(dataStack,
                                                                         "How much does a gallon of gas cost?",
                                                                         (int)User.MinPriceFuel, (int)User.MaxPriceFuel,
                                                                         "$" + User.MinPriceFuel.ToString("F"), "$" + User.MaxPriceFuel.ToString("F"),
                                                                         color1, color2);
            UIElementCollection gasStackChildren = ((StackPanel)(gasStack.stackP).Children[1]).Children;

            ((Slider)gasStackChildren[1]).ValueChanged += updateGasPrice;

            //parent -> display -> scroller -> dataStack -> interestTaxStack
            DisplaySliderStack interestTaxStack = new DisplaySliderStack(dataStack,
                                                                         "What is your interest rate?", "What is your sales tax rate?",
                                                                         (int)User.MinInterest, (int)User.MaxInterest,
                                                                         ((int)(User.MinInterest)).ToString() + "%",
                                                                         ((int)(User.MaxInterest)).ToString() + "%",
                                                                         (int)User.MinTax, (int)User.MaxTax,
                                                                         ((int)(User.MinTax)).ToString() + "%",
                                                                         ((int)(User.MaxTax)).ToString() + "%",
                                                                         color1, color2);
            UIElementCollection interestTaxStackChildren = ((StackPanel)(interestTaxStack.stackP).Children[1]).Children;

            ((Slider)interestTaxStackChildren[1]).ValueChanged += updateInterest;
            interestTaxStackChildren = ((StackPanel)(interestTaxStack.stackP).Children[3]).Children;
            ((Slider)interestTaxStackChildren[1]).ValueChanged += updateTax;

            //parent -> display -> scroller -> dataStack -> deleteStack
            DisplayDeleteButton displayDeleteButton = new DisplayDeleteButton(dataStack, "Reset User Data", color2);
            Button deleteButton = displayDeleteButton.deleteB;

            deleteButton.Tapped += clearData;

            //parent -> memoBar
            this.memoBar = new StackPanel();
            p.Children.Add(this.memoBar);
            this.memoBar.Width       = p.Width; // set width to parent's width
            this.memoBar.Height      = 64;
            this.memoBar.Orientation = Orientation.Horizontal;

            //parent -> memoBar -> memoScroll -> memoStack -> elements
            DisplayMemoScroll    memoScroll       = new DisplayMemoScroll(this.memoBar);
            StackPanel           memoStack        = (StackPanel)memoScroll.memoScroll.Content;
            DisplayMemoTextBlock milesLabel       = new DisplayMemoTextBlock(memoStack, "Annual Miles:");
            DisplayMemoTextBox   miles            = new DisplayMemoTextBox(memoStack, (0.ToString()), color1);
            DisplayMemoTextBlock percentCityLabel = new DisplayMemoTextBlock(memoStack, "Percent City Miles:");
            DisplayMemoTextBox   percentCity      = new DisplayMemoTextBox(memoStack, (0.ToString()) + "%", color1);
            DisplayMemoTextBlock fuelCostLabel    = new DisplayMemoTextBlock(memoStack, "Fuel Cost:");
            DisplayMemoTextBox   fuelCost         = new DisplayMemoTextBox(memoStack, "$" + (0.ToString("F")), color1);
            DisplayMemoTextBlock interestLabel    = new DisplayMemoTextBlock(memoStack, "Interest Rate:");
            DisplayMemoTextBox   interest         = new DisplayMemoTextBox(memoStack, (0.ToString("F")) + "%", color1);
            DisplayMemoTextBlock taxLabel         = new DisplayMemoTextBlock(memoStack, "Tax Rate:");
            DisplayMemoTextBox   tax = new DisplayMemoTextBox(memoStack, (0.ToString("F")) + "%", color1);
        }
        public VehicleDisplay(Windows.UI.Xaml.Controls.StackPanel p, VehicleWrapper theVehicle, int numVehicles)
        {
            this.theVehicle = theVehicle;

            //set colors
            SolidColorBrush color1, color2;

            switch (numVehicles % 4)
            {
            case 0:     //red
                color1 = new SolidColorBrush(Color.FromArgb(179, 212, 107, 61));
                color2 = new SolidColorBrush(Color.FromArgb(255, 118, 42, 9)); break;

            case 1:     //green
                color1 = new SolidColorBrush(Color.FromArgb(179, 31, 166, 71));
                color2 = new SolidColorBrush(Color.FromArgb(255, 21, 83, 39)); break;

            case 2:     //purple
                color1 = new SolidColorBrush(Color.FromArgb(179, 128, 74, 133));
                color2 = new SolidColorBrush(Color.FromArgb(255, 83, 19, 89)); break;

            //color1 = new SolidColorBrush(Color.FromArgb(255, 155, 22, 168)); break;
            default:     //orange
                color1 = new SolidColorBrush(Color.FromArgb(179, 228, 184, 67));
                color2 = new SolidColorBrush(Color.FromArgb(255, 220, 171, 40)); break;
            }



            //parent -> display
            this.display = new StackPanel();
            p.Children.Add(this.display);
            this.display.Background  = color1;
            this.display.Height      = 200;
            this.display.Width       = p.Width; // set width to parent's width
            this.display.Orientation = Orientation.Horizontal;

            //parent -> display -> borderName
            DisplayNameBox borderName = new DisplayNameBox(display, color2);

            updateName("New Vehicle " + (numVehicles + 1).ToString());

            //parent -> display -> scroller
            ScrollViewer scroller = new ScrollViewer();

            this.display.Children.Add(scroller);
            scroller.VerticalScrollMode = ScrollMode.Disabled;
            scroller.ZoomMode           = ZoomMode.Disabled;
            scroller.Width  = this.display.Width - 260;
            scroller.Height = this.display.Height;
            scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
            scroller.VerticalScrollBarVisibility   = ScrollBarVisibility.Disabled;

            //parent -> display -> scroller -> dataStack
            StackPanel dataStack = new StackPanel();

            scroller.Content              = dataStack;
            dataStack.Height              = 200;
            dataStack.Orientation         = Orientation.Horizontal;
            dataStack.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Left;

            //parent -> display -> scroller -> dataStack -> descStack1
            DisplayTextBlockStack descStack1 = new DisplayTextBlockStack(dataStack, "Year:", "Make:", "Model:", "Source:");

            //parent -> display -> scroller -> dataStack -> descStack2
            DisplayTextBoxStack descStack2 = new DisplayTextBoxStack(dataStack);
            UIElementCollection textBoxes  = descStack2.stackP.Children;

            ((TextBox)textBoxes[0]).TextChanged += new TextChangedEventHandler(updateYear);
            ((TextBox)textBoxes[1]).TextChanged += new TextChangedEventHandler(updateMake);
            ((TextBox)textBoxes[2]).TextChanged += new TextChangedEventHandler(updateModel);
            ((TextBox)textBoxes[3]).TextChanged += new TextChangedEventHandler(updateSource);

            //parent -> display -> scroller -> dataStack -> priceStack
            DisplaySliderStack priceStack = new DisplaySliderStack(dataStack,
                                                                   "Price", "Cost to Repair", VehicleWrapper.MinPrice, VehicleWrapper.MaxPrice,
                                                                   "$" + VehicleWrapper.MinPrice.ToString(), "$" + VehicleWrapper.MaxPrice.ToString(),
                                                                   VehicleWrapper.MinRepairCost, VehicleWrapper.MaxRepairCost,
                                                                   "$" + VehicleWrapper.MinRepairCost.ToString(), "$" + VehicleWrapper.MaxRepairCost.ToString(),
                                                                   color1, color2);
            UIElementCollection priceStackChildren = ((StackPanel)(priceStack.stackP).Children[1]).Children;

            ((Slider)priceStackChildren[1]).ValueChanged += updatePrice;      // price
            priceStackChildren = ((StackPanel)(priceStack.stackP).Children[3]).Children;
            ((Slider)priceStackChildren[1]).ValueChanged += updateRepairCost; // repair

            //parent -> display -> scroller -> dataStack -> mileageStack
            DisplaySliderStack mileageStack = new DisplaySliderStack(dataStack,
                                                                     "Initial Mileage", "Estimated Final Mileage",
                                                                     VehicleWrapper.MinInitialMileage, VehicleWrapper.MaxInitialMileage,
                                                                     ((int)(VehicleWrapper.MinInitialMileage / 1000)).ToString() + "k",
                                                                     ((int)(VehicleWrapper.MaxInitialMileage / 1000)).ToString() + "k",
                                                                     theVehicle.MinFinalMileage, VehicleWrapper.MaxFinalMileage,
                                                                     ((int)(theVehicle.MinFinalMileage / 1000)).ToString() + "k",
                                                                     ((int)(VehicleWrapper.MaxFinalMileage / 1000)).ToString() + "k",
                                                                     color1, color2);
            UIElementCollection mileageStackChildren = ((StackPanel)(mileageStack.stackP).Children[1]).Children;

            ((Slider)mileageStackChildren[1]).ValueChanged += updateInitialMileage; // initial mileage
            mileageStackChildren = ((StackPanel)(mileageStack.stackP).Children[3]).Children;
            ((Slider)mileageStackChildren[1]).ValueChanged += updateFinalMileage;

            //parent -> display -> scroller -> dataStack -> mpgStack
            DisplaySliderStack mpgStack = new DisplaySliderStack(dataStack,
                                                                 "City MPG", "Highway MPG",
                                                                 VehicleWrapper.MinCityMPG, VehicleWrapper.MaxCityMPG,
                                                                 ((int)(VehicleWrapper.MinCityMPG)).ToString(),
                                                                 ((int)(VehicleWrapper.MaxCityMPG)).ToString(),
                                                                 VehicleWrapper.MinHighwayMPG, VehicleWrapper.MaxHighwayMPG,
                                                                 ((int)(VehicleWrapper.MinHighwayMPG)).ToString(),
                                                                 ((int)(VehicleWrapper.MaxHighwayMPG)).ToString(),
                                                                 color1, color2);
            UIElementCollection mpgStackChildren = ((StackPanel)(mpgStack.stackP).Children[1]).Children;

            ((Slider)mpgStackChildren[1]).ValueChanged += updateCityMPG;
            mpgStackChildren = ((StackPanel)(mpgStack.stackP).Children[3]).Children;
            ((Slider)mpgStackChildren[1]).ValueChanged += updateHighwayMPG;

            //parent -> display -> scroller -> dataStack -> notesStack
            DisplayNotesStack   notesStack         = new DisplayNotesStack(dataStack, "Notes:", "Insert any notes about your vehicle here.");
            UIElementCollection notesStackChildren = notesStack.stackP.Children;

            ((TextBox)notesStackChildren[1]).TextChanged += updateNotes;

            //parent -> display -> scroller -> dataStack -> deleteStack
            DisplayDeleteButton displayDeleteButton = new DisplayDeleteButton(dataStack, "Delete Vehicle", color2);
            Button deleteButton = displayDeleteButton.deleteB;

            deleteButton.Tapped += deleteVehicle;

            //parent -> memoBar
            this.memoBar = new StackPanel();
            p.Children.Add(this.memoBar);
            this.memoBar.Width       = p.Width; // set width to parent's width
            this.memoBar.Height      = 64;
            this.memoBar.Orientation = Orientation.Horizontal;

            //parent -> memoBar -> memoScroll -> memoStack -> elements
            DisplayMemoScroll  memoScroll = new DisplayMemoScroll(this.memoBar);
            StackPanel         memoStack  = (StackPanel)memoScroll.memoScroll.Content;
            DisplayMemoTextBox cpm        = new DisplayMemoTextBox(memoStack, (0.ToString("F") + "¢ per mile"), color1);

            cpm.memoText.FontSize        += 13; // make cents per mile display bigger
            cpm.memoText.FontWeight       = Windows.UI.Text.FontWeights.Thin;
            cpm.memoText.CharacterSpacing = 75;
            cpm.memoText.Margin           = new Windows.UI.Xaml.Thickness(0, 0, 0, 0);
            cpm.memoText.Width            = 225;
            DisplayMemoTextBlock totalCostLabel   = new DisplayMemoTextBlock(memoStack, "Total Cost:");
            DisplayMemoTextBox   totalCost        = new DisplayMemoTextBox(memoStack, "$" + (0.ToString()), color1);
            DisplayMemoTextBlock lifeSpanLabel    = new DisplayMemoTextBlock(memoStack, "Life Span:");
            DisplayMemoTextBox   lifeSpan         = new DisplayMemoTextBox(memoStack, (0.ToString("F") + " years"), color1);
            DisplayMemoTextBlock avgMPGLabel      = new DisplayMemoTextBlock(memoStack, "Average MPG:");
            DisplayMemoTextBox   aveMPG           = new DisplayMemoTextBox(memoStack, (1.ToString("F")), color1);
            DisplayMemoTextBlock maintenanceLabel = new DisplayMemoTextBlock(memoStack, "Maintenance:");
            DisplayMemoTextBox   maintenance      = new DisplayMemoTextBox(memoStack, "$" + (0.ToString()), color1);
            DisplayMemoTextBlock resellLabel      = new DisplayMemoTextBlock(memoStack, "Resell:");
            DisplayMemoTextBox   resell           = new DisplayMemoTextBox(memoStack, "$" + (0.ToString()), color1);
        }