DACF:jpeters@ots-inc.com
+-Catalog
+-+-showCatalog
+-+-+-dsp_showCatalog.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: dsp_showCatalog.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I display the current catalog contents and allow the user to get details
+-+-+-+-about
+-+-+-+-specific items.
+-+-+-+-
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+-
+-+-+-+---> XFA.showItemDetails: STRING (a fuseaction)
+-+-+-+-<-- ItemID: INTEGER NOT NULL (item's catalog ID number)
+-+-+-+-
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-showItem
+-+-+-qry_getItem.cfm
+-+-+-+-<!--- || BEGIN FUSEDOC ||
+-+-+-+-|| Responsibilities ||
+-+-+-+-I receive attributes.ItemID and return title, author, description,
+-+-+-+-price, publisher, and pubDate for that item.
+-+-+-+-
+-+-+-+-|| Properties ||
+-+-+-+---> itemID: STRING NOT NULL
+-+-+-+-<-- qryGetItem: QUERY ( title, author, description, price, publisher,
+-+-+-+-pubDate )
+-+-+-+-
+-+-+-+-|| END FUSEDOC || --->

+-+-+-dsp_itemDetails.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: dsp_itemDetails.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I display information about a specified item.  I also provide a button
+-+-+-+-to add the 
+-+-+-+-item to the cart.
+-+-+-+-
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.addItemToCart: STRING (a fuseaction)
+-+-+-+-<-> ItemID: INTEGER NOT NULL (item's catalog ID number)
+-+-+-+-
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->
+-+-searchCatalog
+-+-+-qry_getSearchResults.cfm
+-+-+-+-<!--- || BEGIN FUSEDOC ||
+-+-+-+-|| Responsibilities ||
+-+-+-+-I receive a search target and return all catalog items with that string
+-+-+-+-in their title or author fields.
+-+-+-+-
+-+-+-+-|| Properties ||
+-+-+-+---> searchTarget: STRING NOT NULL
+-+-+-+-<-- qryGetSearchMatches: QUERY ( itemID )
+-+-+-+-
+-+-+-+-|| END FUSEDOC || --->

+-+-+-dsp_searchResults.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: dsp_SearchResults.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I display the results of the user's search.
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.showItem
+-+-+-+-
+-+-+-+-<-- itemID
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-Cart
+-+-showCart
+-+-+-dsp_displayCart.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: dsp_displayCart.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I display the user's cart and offer options to clear the cart, retotal
+-+-+-+-the cart, 
+-+-+-+-and checkout.
+-+-+-+-
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.showBook: STRING NOT NULL (a fuseaction)
+-+-+-+---> XFA.deleteBooks: STRING NOT NULL (a fuseaction)
+-+-+-+---> XFA.retotalCart: STRING NOT NULL (a fuseaction)
+-+-+-+---> XFA.checkout: STRING NOT NULL (a fuseaction)
+-+-+-+---> client.cart: STRUCTURE 
+-+-+-+-     ^itemID STRUCTURE
+-+-+-+-        ^quantity INTEGER
+-+-+-+-        ^price NUMBER
+-+-+-+-<-- client.cart: STRUCTURE 
+-+-+-+-     ^itemID STRUCTURE
+-+-+-+-        ^quantity INTEGER
+-+-+-+-        ^price NUMBER
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-clearCart
+-+-+-act_deleteCartItems.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: act_deleteCartItem.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I delete one or all items from the user's cart.
+-+-+-+-
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.itemDeleted: STRING (a fuseaction)
+-+-+-+---> itemID: STRING NOT NULL (ID of item to delete, or "ALL" to clear
+-+-+-+-cart)
+-+-+-+---> client.cart: STRUCTURE 
+-+-+-+-     ^itemID STRUCTURE
+-+-+-+-        ^quantity INTEGER
+-+-+-+-        ^price NUMBER
+-+-+-+-<-- client.cart: STRUCTURE 
+-+-+-+-     ^itemID STRUCTURE
+-+-+-+-        ^quantity INTEGER
+-+-+-+-        ^price NUMBER
+-+-+-+-|| END FUSEDOC ||--->

+-+-deleteItem
+-+-+-act_deleteCartItems.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: act_deleteCartItem.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I delete one or all items from the user's cart.
+-+-+-+-
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.itemDeleted: STRING (a fuseaction)
+-+-+-+---> itemID: STRING NOT NULL (ID of item to delete, or "ALL" to clear
+-+-+-+-cart)
+-+-+-+---> client.cart: STRUCTURE 
+-+-+-+-     ^itemID STRUCTURE
+-+-+-+-        ^quantity INTEGER
+-+-+-+-        ^price NUMBER
+-+-+-+-<-- client.cart: STRUCTURE 
+-+-+-+-     ^itemID STRUCTURE
+-+-+-+-        ^quantity INTEGER
+-+-+-+-        ^price NUMBER
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-retotalCart
+-+-+-act_retotalCart.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: act_retotalCart.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I recalculate the contents of the user's cart.  If the item is marked
+-+-+-+-for 
+-+-+-+-removal, I delete it from the cart.  Othewise, I multiply quantity by
+-+-+-+-price to
+-+-+-+-get total.
+-+-+-+-
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.cartRetotaled
+-+-+-+---> client.cart: STRUCTURE
+-+-+-+-     ^itemID: a STRUCTURE
+-+-+-+-       ^quantity INTEGER
+-+-+-+-       ^price NUMBER
+-+-+-+-
+-+-+-+-<-- client.cart: STRUCTURE
+-+-+-+-     ^itemID: a STRUCTURE
+-+-+-+-       ^quantity INTEGER
+-+-+-+-       ^price NUMBER
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-addToCart
+-+-+-act_addCartItem.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: act_addCartItem.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I take an itemID and quantity and add an item to a structure called
+-+-+-+-"client.cart" (WDDX).
+-+-+-+-
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.itemAdded: STRING (a fuseaction)
+-+-+-+---> itemID: STRING NOT NULL
+-+-+-+---> quantity: INTEGER NOT NULL
+-+-+-+---> client.cart: STRUCTURE
+-+-+-+-     ^itemID: a STRUCTURE
+-+-+-+-       ^quantity INTEGER
+-+-+-+-       ^price NUMBER
+-+-+-+-
+-+-+-+-<-- client.cart: STRUCTURE
+-+-+-+-     ^itemID: a STRUCTURE
+-+-+-+-       ^quantity INTEGER
+-+-+-+-       ^price NUMBER
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-Checkout
+-+-showShippingForm
+-+-+-dsp_shippingInfo.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: dsp_shippingInfo.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I display the shipping information form and provide Back and Continue
+-+-+-+-buttons.
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.BackFromShipForm
+-+-+-+---> XFA.ContinueFromShipForm
+-+-+-+-<-- firstName: STRING (user's first name)+
+-+-+-+-<-- lastName: STRING (user's last name)+
+-+-+-+-<-- address: TEXTAREA (user's address)
+-+-+-+-<-- city: STRING (user's last name)
+-+-+-+-<-- state: STRING (state abbreviation; 2)
+-+-+-+-<-- zip: STRING (numeric; 5+4)
+-+-+-+-<-- phone: STRING 
+-+-+-+-<-- eMail: STRING (user's email)+
+-+-+-+-
+-+-+-+-
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-showBillingForm
+-+-+-dsp_billingInfo.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: dsp_billingInfo.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I display the billing information form and provide Back and Continue
+-+-+-+-buttons.  
+-+-+-+-I also allow the user to select an option to make billing address
+-+-+-+-information 
+-+-+-+-match the shipping address information.
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.goBackFromBillForm
+-+-+-+---> XFA.continueFromBillForm
+-+-+-+-
+-+-+-+-<-- cardName: STRING NOT NULL (name on credit card)
+-+-+-+-<-- cardType: STRING NOT NULL (credit card type)
+-+-+-+-<-- cardNumber: STRING NOT NULL (credit card number)
+-+-+-+-<-- cardExpMonth: INTEGER NOT NULL (credit card expiration month)
+-+-+-+-<-- cardExpYear: INTEGER NOT NULL (credit card expiration year)
+-+-+-+-<-- matchShipping: BOOLEAN 
+-+-+-+-<-- address: TEXTAREA (user's address)
+-+-+-+-<-- city: STRING (user's last name)
+-+-+-+-<-- state: STRING (state abbreviation; 2)
+-+-+-+-<-- zip: STRING (numeric; 5+4)
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-processCredit
+-+-+-act_creditAuthorization.cfm
+-+-+-+-<!-- act_creditAuthorization.cfm by jeff.peters@bigfoot.com -->
+-+-+-+-
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: act_creditAuthorization.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I check the user's credit card information and pass action accordingly.
+-+-+-+-
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.creditApproved: STRING (a fuseaction)
+-+-+-+---> XFA.creditDeclined: STRING (a fuseaction)
+-+-+-+---> cardName: STRING NOT NULL (name on credit card)
+-+-+-+---> cardType: STRING NOT NULL (credit card type)
+-+-+-+---> cardNumber: STRING NOT NULL (credit card number)
+-+-+-+---> cardExpMonth: INTEGER NOT NULL (credit card expiration month)
+-+-+-+---> cardExpYear: INTEGER NOT NULL (credit card expiration year)
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-showComplete
+-+-+-dsp_orderComplete.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: dsp_orderComplete.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I display a thank you message to the user and provide a Continue
+-+-+-+-button.
+-+-+-+-
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.continueFromOrderComplete
+-+-+-+-
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-submitShipping
+-+-+-act_submitShipping.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: act_submitShipping.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I store shipping data to the user's database record.  If successful, I
+-+-+-+-return XFA.SaveSuccessful.
+-+-+-+-Otherwise, I return XFA.SaveFailed.
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.SaveSuccessful: STRING (a fuseaction)
+-+-+-+---> XFA.SaveFailed: STRING (a fuseaction)
+-+-+-+--->  firstName: STRING (user's first name)+
+-+-+-+--->  lastName: STRING (user's last name)+
+-+-+-+--->  address: TEXTAREA (user's address)
+-+-+-+--->  city: STRING (user's last name)
+-+-+-+--->  state: STRING (state abbreviation; 2)
+-+-+-+--->  zip: STRING (numeric; 5+4)
+-+-+-+--->  phone: STRING 
+-+-+-+--->  eMail: STRING (user's email)+
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-submitBilling
+-+-+-act_submitBilling.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: act_submitBilling.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I store billing data to the user's database record.
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.SaveSuccessful: STRING (a fuseaction)
+-+-+-+---> XFA.SaveFailed: STRING (a fuseaction)
+-+-+-+--->  cardName: STRING NOT NULL (name on credit card)
+-+-+-+--->  cardType: STRING NOT NULL (credit card type)
+-+-+-+--->  cardNumber: STRING NOT NULL (credit card number)
+-+-+-+--->  cardExpMonth: INTEGER NOT NULL (credit card expiration month)
+-+-+-+--->  cardExpYear: INTEGER NOT NULL (credit card expiration year)
+-+-+-+--->  matchShipping: BOOLEAN 
+-+-+-+--->  address: TEXTAREA (user's address)
+-+-+-+--->  city: STRING (user's last name)
+-+-+-+--->  state: STRING (state abbreviation; 2)
+-+-+-+--->  zip: STRING (numeric; 5+4)
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-Users
+-+-showLoginForm
+-+-+-dsp_login.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: dsp_login.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I display the user login form, allowing a user to login under an
+-+-+-+-existing user 
+-+-+-+-account.  I also provide a link (XFA.createNewUser) to create a new user
+-+-+-+-account.  
+-+-+-+-If I get a variable called badLogin, I let the user know the previous 
+-+-+-+-authentication wasn't successful.
+-+-+-+-
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.submitLogin: STRING (a fuseaction)
+-+-+-+---> XFA.createNewUser: STRING (a fuseaction)
+-+-+-+---> [badLogin]: BOOLEAN ( TRUE )
+-+-+-+-
+-+-+-+-<-- Email: STRING NOT NULL
+-+-+-+-<-- Password: STRING NOT NULL
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-submitLogin
+-+-+-act_login.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: act_login.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I check for the user's ID and password in the database.  If successful,
+-+-+-+-I return
+-+-+-+-XFA.loginSuccessful.  Otherwise, I return XFA.loginFailed.
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.loginSuccessful: STRING (a fuseaction)
+-+-+-+---> XFA.loginFailed: STRING (a fuseaction)
+-+-+-+---> eMail: STRING (user's email address)+
+-+-+-+---> Password: STRING (password)+
+-+-+-+-+++ qry_getUser
+-+-+-+-
+-+-+-+-@DeveloperNote: qry_getUser is included in index.cfm; no need to include
+-+-+-+-it here.
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-showUserForm
+-+-+-dsp_newAccount.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: dsp_newAccount.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I display the Create New Account form and allow user to submit
+-+-+-+-information.  
+-+-+-+-I also validate the password against a password confirmation field, but
+-+-+-+-I don't 
+-+-+-+-pass the confirmation field out as a variable.
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.createUser: STRING (a fuseaction)
+-+-+-+-<-- firstName: STRING (user's first name)+
+-+-+-+-<-- lastName: STRING (user's last name)+
+-+-+-+-<-- address: TEXTAREA (user's address)
+-+-+-+-<-- city: STRING (user's last name)
+-+-+-+-<-- state: STRING (state abbreviation; 2)
+-+-+-+-<-- zip: STRING (numeric; 5+4)
+-+-+-+-<-- phone: STRING 
+-+-+-+-<-- eMail: STRING (user's email)+
+-+-+-+-<-- password: STRING
+-+-+-+-
+-+-+-+-
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->

+-+-submitUserForm
+-+-+-act_newAccount.cfm
+-+-+-+-<!---
+-+-+-+-|| BEGIN FUSEDOC ||
+-+-+-+-	
+-+-+-+-|| Properties ||
+-+-+-+-Name: act_newAccount.cfm
+-+-+-+-Author: jeff.peters@bigfoot.com
+-+-+-+-
+-+-+-+-|| Responsibilities ||
+-+-+-+-I store the user's details to the database.  If the user already exists,
+-+-+-+-I
+-+-+-+-issue a message and return XFA.newAccountFailed.
+-+-+-+-
+-+-+-+-|| Attributes ||
+-+-+-+---> XFA.newAccountSuccessful: STRING (a fuseaction)
+-+-+-+---> XFA.newAccountFailed: STRING (a fuseaction)
+-+-+-+---> firstName: STRING (user's first name)+
+-+-+-+---> lastName: STRING (user's last name)+
+-+-+-+---> address: TEXTAREA (user's address)
+-+-+-+---> city: STRING (user's last name)
+-+-+-+---> state: STRING (state abbreviation; 2)
+-+-+-+---> zip: STRING (numeric; 5+4)
+-+-+-+---> phone: STRING 
+-+-+-+---> eMail: STRING (user's email)+
+-+-+-+---> password: STRING
+-+-+-+-+++ qry_getUser
+-+-+-+-
+-+-+-+-@DeveloperNote: qry_getUser is included in index.cfm; no need to include
+-+-+-+-it here.
+-+-+-+-
+-+-+-+-|| END FUSEDOC ||--->