//this is what happens when you click search
        //use output of productdb query to build an object to then display its attributes on the form
        private void BtnSearchUPC_Click(object sender, EventArgs e)
        {
            bool temp = Validator.validateUPC(txtProductUPCSearch.Text); //first make sure the format is correct

            if (temp)
            {
                bool   j;       // boolean object reference for return
                string pstring; // Product string updated upon product DB search call.

                //p = productList.find(Convert.ToInt32(txtProductUPCSearch.Text)); //search our list for this upc
                Product k; //used to create an object after learning which type we have
                //get table from database to read row attributes for our product
                OleDbDataReader odb = pdb.SelectProductFromProduct(Convert.ToInt32(txtProductUPCSearch.Text), out j, out pstring);
                //MessageBox.Show(pstring);
                if (!j) //not found
                {
                    MessageBox.Show("Product not found");
                    txtProductUPCSearch.Clear();
                    txtProductUPCSearch.Focus();
                } // Creates a ne product to dislay in form.
                else
                {
                    string[] attributes = pstring.Split('\n'); // splits product attributes into  array
                    for (int i = 0; i < attributes.Length; i++)
                    {
                        attributes[i] = attributes[i].Trim('\r');
                    }
                    string ptype = attributes[4]; // gets the product type from this attribute and then creates new product to display in form

                    if (ptype == "Book")
                    {
                        string left  = attributes[5].Substring(0, 3);
                        string right = attributes[5].Substring(3);

                        k = new Book(Convert.ToInt32(attributes[0]), Convert.ToDecimal(attributes[1]), attributes[2], Convert.ToInt32(attributes[3]),
                                     left, right, attributes[6], Convert.ToInt32(attributes[7]));
                        k.Display(this);
                        FormController.searchForm(this);
                        txtProductUPCSearch.Clear();
                    }
                    else if (ptype == "BookCIS")
                    {
                        string left  = attributes[5].Substring(0, 3);
                        string right = attributes[5].Substring(3);

                        k = new BookCIS(Convert.ToInt32(attributes[0]), Convert.ToDecimal(attributes[1]), attributes[2], Convert.ToInt32(attributes[3]),
                                        left, right, attributes[6], Convert.ToInt32(attributes[7]), attributes[8]);
                        k.Display(this);
                        FormController.searchForm(this);
                        txtProductUPCSearch.Clear();
                    }
                    else if (ptype == "DVD")
                    {
                        k = new DVD(Convert.ToInt32(attributes[0]), Convert.ToDecimal(attributes[1]), attributes[2], Convert.ToInt32(attributes[3]),
                                    attributes[5], DateTime.Parse(attributes[6]), Convert.ToInt32(attributes[7]));
                        k.Display(this);
                        FormController.searchForm(this);
                        txtProductUPCSearch.Clear();
                    }
                    else if (ptype == "CDOrchestra")
                    {
                        k = new CDOrchestra(Convert.ToInt32(attributes[0]), Convert.ToDecimal(attributes[1]), attributes[2], Convert.ToInt32(attributes[3]),
                                            attributes[5], attributes[6], attributes[7]);
                        k.Display(this);
                        FormController.searchForm(this);
                        txtProductUPCSearch.Clear();
                    }
                    else if (ptype == "CDChamber")
                    {
                        k = new CDChamber(Convert.ToInt32(attributes[0]), Convert.ToDecimal(attributes[1]), attributes[2], Convert.ToInt32(attributes[3]),
                                          attributes[5], attributes[6], attributes[7]);
                        k.Display(this);
                        FormController.searchForm(this);
                        txtProductUPCSearch.Clear();
                    }
                }
            }
            else //user needs to fix format
            {
                MessageBox.Show("Invalid UPC format");
                txtProductUPCSearch.Clear();
                txtProductUPCSearch.Focus();
            }
        }
        }     // end getItem

        //Searches item by the UPC number since it is guarenteed that this will be a unique identifier
        private void btnProductUPCSearch_Click(object sender, EventArgs e)
        {
            bool temp = Validation.validateProductUPC(txtProductUPCSearch.Text); //first make sure the format is correct

            if (temp)
            {
                bool    found;   // boolean reference for search success
                string  pstring; // Product string updated upon product DB search call.
                Product prod;

                //  this returns an OleDbDataReader object, but you don't really need to use it
                //  the boolean flag and string that are returned are important
                //  pstring will hold the attributes of a product from the database in a single string, separated by newline characters
                //  split it below

                OleDbDataReader odb = dbFunctions.SelectProductFromProduct(Convert.ToInt32(txtProductUPCSearch.Text), out found, out pstring);

                if (!found) //not found
                {
                    MessageBox.Show("Product not found");
                    txtProductUPCSearch.Clear();
                    txtProductUPCSearch.Focus();
                } // Creates a new product to display in form.
                else
                {
                    txtProductUPC.ReadOnly      = true;
                    txtProductTitle.ReadOnly    = true;
                    txtProductQuantity.ReadOnly = true;
                    txtProductPrice.ReadOnly    = true;

                    btnDelete.Enabled = true;
                    string[] attributes = pstring.Split('\n'); // splits product attributes into array

                    for (int i = 0; i < attributes.Length; i++)
                    {
                        attributes[i] = attributes[i].Trim('\r'); // clears "junk" from each field
                    }

                    string ptype = attributes[4]; // gets the product type from this attribute and then creates new product to display in form

                    if (ptype == "DVD")
                    {
                        txtDVDLeadActor.ReadOnly   = true;
                        txtDVDReleaseDate.ReadOnly = true;
                        txtDVDRunTime.ReadOnly     = true;
                        prod = new DVD(Convert.ToInt32(attributes[0]), Convert.ToDecimal(attributes[1]), attributes[2], Convert.ToInt32(attributes[3]),
                                       attributes[5], DateTime.Parse(attributes[6]), Convert.ToInt32(attributes[7]));
                        prod.Display(this);
                        FormController.searchForm(this);
                        FormController.activateDVD(this);
                        thisProductList.Add(prod);
                        currentIndex++;
                    }

                    if (ptype == "Book")
                    {
                        String isbnS = attributes[5];
                        String isbn1 = isbnS.Substring(0, 3);
                        String isbn2 = isbnS.Substring(3, 3);
                        txtBookISBNLeft.ReadOnly  = true;
                        txtBookISBNRight.ReadOnly = true;
                        txtBookAuthor.ReadOnly    = true;
                        txtBookPages.ReadOnly     = true;
                        prod = new Book(Convert.ToInt32(attributes[0]), Convert.ToDecimal(attributes[1]), attributes[2], Convert.ToInt32(attributes[3]),
                                        Convert.ToInt32(isbn1), Convert.ToInt32(isbn2), attributes[6], Convert.ToInt32(attributes[7]));
                        prod.Display(this);
                        FormController.searchForm(this);
                        FormController.activateBook(this);
                        thisProductList.Add(prod);
                        currentIndex++;
                    }

                    if (ptype == "BookCIS")
                    {
                        String isbnS = attributes[5];
                        String isbn1 = isbnS.Substring(0, 3);
                        String isbn2 = isbnS.Substring(3, 3);
                        txtBookISBNLeft.ReadOnly   = true;
                        txtBookISBNRight.ReadOnly  = true;
                        txtBookAuthor.ReadOnly     = true;
                        txtBookPages.ReadOnly      = true;
                        txtBookCISCISArea.ReadOnly = true;
                        prod = new BookCIS(Convert.ToInt32(attributes[0]), Convert.ToDecimal(attributes[1]), attributes[2], Convert.ToInt32(attributes[3]),
                                           Convert.ToInt32(isbn1), Convert.ToInt32(isbn2), attributes[6], Convert.ToInt32(attributes[7]), attributes[8]);
                        prod.Display(this);
                        FormController.searchForm(this);
                        FormController.activateBookCIS(this);
                        thisProductList.Add(prod);
                        currentIndex++;
                    }

                    if (ptype == "CDOrchestra")
                    {
                        txtCDClassicalArtists.ReadOnly   = true;
                        txtCDClassicalLabel.ReadOnly     = true;
                        txtCDOrchestraConductor.ReadOnly = true;
                        prod = new CDOrchestra(Convert.ToInt32(attributes[0]), Convert.ToDecimal(attributes[1]), attributes[2], Convert.ToInt32(attributes[3]),
                                               attributes[5], attributes[6], attributes[7]);
                        prod.Display(this);
                        FormController.searchForm(this);
                        FormController.activateCDOrchestra(this);
                        thisProductList.Add(prod);
                        currentIndex++;
                    }

                    if (ptype == "CDChamber")
                    {
                        txtCDClassicalArtists.ReadOnly      = true;
                        txtCDClassicalLabel.ReadOnly        = true;
                        txtCDChamberInstrumentList.ReadOnly = true;
                        //String[] InstrumentList = attributes[6].Split(' ');
                        prod = new CDChamber(Convert.ToInt32(attributes[0]), Convert.ToDecimal(attributes[1]), attributes[2], Convert.ToInt32(attributes[3]),
                                             attributes[5], attributes[6], attributes[7]);
                        prod.Display(this);
                        FormController.searchForm(this);
                        FormController.activateCDChamber(this);
                        thisProductList.Add(prod);
                        currentIndex++;
                    }

                    /*
                     *
                     * add else ifs for the other product types and handle each accordingly
                     *
                     */
                    else
                    {
                        // this is an invalid record (since it does not fit one of our types)
                    }
                }
            }
            else
            {
                // UPC is invalid
                MessageBox.Show("Invalid URL", "Error:");
            }
        }