######################################################
##  General TODO
######################################################

 * [BUG] Bundle::Business::Shipping doesn't work
   - It probably should be Business/Shipping.pm instead of just Shipping.pm.

 * [ENH] Confirm that the auto-update feature works well.

 * [BUG] Error on missing arguments isn't working very well (user_id, password)

 * [ENH] Make the error handling more customizable
   Each module should be able to specifiy it's parameters, so that, for example,
   you could have lots of debugging/errors for RateRequest::Offline, but none 
   for RateRequest::Online.
   
 * [ENH] How do I document the fact that some of the modules I require do not
   build very easily in CPAN?  Right now, it's:
     - SQL::Statement keeps trying to install, even after it is installed
	 - XML::Parser fails t/stream test 11.  
	 - XML::Parser::PerlSAX

 * [ENH] Allow error format to specified: With/without caller, line numbers.

 * [ENH] Evaluate fields.pm as a guard against autovivification. 
 
 * [ENH] Update to more recent C:MM syntax, like '-default', etc.
 
 * [ENH] Allow users to set path to support files.

 * [ENH] Need to check for support_files() config param, and exit if files
   are missing.

 * [ENH] Allow the user to set the timeout for http requests.  Sometimes 30
   seconds is too long.

 * [DOC] Add minimal documentation to each module, with most of the 
   documentation in the main module.

 * [DOC] Include the terms of use for each provider.
 
 * [BUG] When the internet is down, we should give a more useful error message
   than the following:
	 "Business::Shipping::RateRequest::Online::USPS::_handle_response: ()
     File does not exist:  at .../RateRequest/Online/USPS.pm line 202"
 
 * [BUG] Add a test that will confirm that we only cache responses that are a
   success.
 
 * [ENH] Evaluate Log4Perl.

 * [ENH] Is non-ssl communication with either Online provider possible?
 
 * [ENH] Migrate the "retry on failure" code from business-shipping.tag to 
   Business::Shipping proper.  Default to tries=2, but allow that to be
   overridden.  ("Failure" means HTTP 500 errors.)

 * [ENH] Business::Shipping::OldUPS
    - Doesn't require signup (no username/password, etc.)
    - Utilize the new Business::UPS 2.0.
 
 * [ENH] The Shipping module itself should be able to be queried for what 
   shippers it handles. Each shipper should be able to be queried for what 
   services it provides... maybe code would look like this:

	use Business::Shipping; 
	
	# Query the module for installed shipper specific modules.
	my @shippers = Business::Shipping::available_shippers(); 
	
	my %shipping_option; 
	for my $shipper (@shippers) { 
	
		# Services would be Ground, 2nd day air, things like that.
		my @services = $shipper->services();
	 
		for my $service (@services) { 
	
			# The $package would have been previously generated.
			$shipping_option{$shipper->name}->{$service} =
				$shipper->rate($service, $package); 
	
		}
	}
	
 * [ENH] Additional module flexibility
	- Allow the use of Net::SSLeay as well as Crypt::SSLeay

 * [ENH] New feature ideas:
 	- Address Verification
	- Shipping status (package tracking)
	- Service Availability
	- Electronic Merchandise Return?
	- Shipping label generation?
	- Customs forms?
	- Shipping time (how long till it gets there)?
	- Delivery/Signature confirmation?

 * [ENH] Allow the user to enable one shipper as a secondary shipper, if the 
   first should fail.  For example, if the UPS/USPS servers are down, it will
   automatically utilize the table-lookup method.
   
 * [ENH] Many of the functions that are currently in 
   Shipping::RateRequest::Offline::UPS should probably be moved somewhere else.
   They work on one shipment at a time, and having them in the RateRequest 
   object makes it seem like they should be able to work on multiple shipments
   at once.  Perhaps make the first parameter the given shipment to be worked 
   on?
 
 * [ENH] Find or create some module that will automatically update the "=head1 
   VERSION" POD based on the CVS "Revision" keyword or the perl $VERSION 
   variable in the same file.
   
 * [DOC] Need to create a list of common errors that will be encountered.
 
 * [ENH] Is there a way to overload the '=' operator to make some code prettier?
   We could do "$self->weight = 5" instead of "$self->set_weight( 5 )".
 
 * [ENH] Setup a proper "announce", "cvs", and "users" mailing list where users
   can sign up for updates and get information.   
 
 * [ENH] Build a more advanced configuration system, with more config-file
   flexibility.
   
######################################################
##  Online::USPS TODO
######################################################

 * [BUG] Find a better way to correlate "Air mail" with all the various names
   it is called by each country.
 
 * [BUG] Not correctly realizing when there is an error (<Error><Number>...)
   - Perhaps because we don't ( KeepRoot => 1, ) on the XMLin()?

 * [ENH] Enable Cache for USPS.
 
 * [ENH] Support get_charges( 'service' ) for domestic types.

 * [ENH] Use the International Country Listing
	- http://pe.usps.gov/cpim/ftp/manuals/Imm/Immctry.pdf
 
######################################################
##  Offline::UPS TODO
######################################################

 * [BUG] Error:  No zone found for geo code (key) Cyprus, type ExpeditedSM_EC.
   Important variables:
        shipper =>      'Offline::UPS',
        service =>      'XPD',
        to_country =>   'CY',
        weight =>       '2',
        to_zip =>       '2024',

 * [ENH] Remove zip files from the build (save space)
 
 * [ENH] Performance enhancement: instead of transforming the data with
   calc_zone_data() everytime, just re-write the data file.
 
 * [DOC] Refer to Express for Express Plus.  To determine whether Express Plus
   service is available to your destination postal code, call 800-782-7892.

 * Analyze the 'extra services fees' table:
   - Extended/Domestic Area Surcharge:  Residential = 1.75, Commercial= 1.00
   - Residential Surcharge = 1.40 (always assume yes, unless explicitly stated
     no).
 
 * [ENH] Allow user to specify "use default" for Makefile.PL (already done?)
 
 * [ENH] Provide example documentation for easily keeping up to date with the
   CVS.  For example:
     
     cvs up
	 perl Makefile.PL
	 make
	 make test
	 make install
	 
	 -or-
	 
	 cd $PATH_TO_SHIP
	 su $USER -c 'perl Makefile.PL'
	 su $USER -c 'make'
	 su $USER -c 'make test'
	 make install
	 
 * [ENH] For Canada, only the first shipping method works.

 * [ENH] Change from_state to a Shipment function, which will calculate and set 
   the is_from_west_coast() value, instead of doing from within 
   massage_values().

 * [BUG] France Metropolitan:
		[business-shipping]: Offline::UPS error: No zone found for geo code (key) France,
		Metropolitan, type ExpeditedSM_EC. .
		Options were: {'cache' => "1",'from_state' => "Washington",'from_zip' => "98682",'weight' =>
		"1.5",'to_zip' => "69100",'from_country' => "US",'shipper' => "Offline::UPS",'to_country' =>
		"FX",'service' => "XPD",}

 * [BUG] Canada via XPR/XPD doesn't work (and wont, until canada is implemented)
		[business-shipping]: Offline::UPS error: No zone found for geo code (key) Canada, type
		ExpeditedSM_EC. .
		Options were: {'cache' => "1",'from_state' => "Washington",'from_zip' => "98682",'weight' =>
		"1",'to_zip' => "h9h2v3",'from_country' => "US",'shipper' => "Offline::UPS",'to_country' =>
		"CA",'service' => "XPD",}
				
 * [ENH] Have a simple example script in the doc directory.

 * [ENH] How to find the current fuel surcharge rate:
   - http://www.ups.com/content/us/en/resources/find/cost/fuel_surcharge.html	
   - m/Effective.+: ?(\d\.\d\d\)%/
   
 * [ENH] Extended Area Surcharge: 
   - http://www.ups.com/media/en/extended_area_us.pdf
   
 * [ENH] Modify the system so that the easy-to-read data is read into memory
         just once, and then is optimized for lookup speed, so the sequential
		 lookups will be as fast as possible.  (Increases memory footprint, but
		 it should be worth it).
 
 * [ENH] Canada needs to check for EAS surcharge (see canww.csv->'EAS' column)
 
 * [ENH] Add support for Canada (UPS Standard, XPD, XPR, XDM)
         - Requires new parsing method (Canada ZIP style, etc.)

 * [ENH] Add test for the support files directory.  (Just warn, because they 
         may be running the test as a non-priveledged user).
 
 * [ENH] Re-write the calc_zone_data() and calc_cost() routines.

 * [ENH] New table design?

		zone table:
		
 			zone_from_exactly	zone_from_lt	zone_from_gt	zip_to_exactly	zip_to_lt	zip_to_gt	service
		
		weight table:
		
			weight	zone	amt

 * [ENH] Add tests for Alaska, Hawaii, Canada, and International.
         Add tests for 1DAP.

 * [ENH] Look at the zone file comments to determine which zone file to use.
   (i.e. 970.csv has "970-01 to 972-99" -- means it actually does 972.csv too).
 
 * [ENH] Utilize GDBM or SQL, if available, to speed up lookups.

######################################################
##  Online::UPS TODO
######################################################
 
 * [BUG] Fix the multi-package API for UPS.  
   # TODO: Move to a different XML generation scheme, since all the packages 
   #       in a multi-package shipment will have the name "Package".
   # TODO: multi-package support: loop over the packages
   
 * [BUG] Return error message if trying to ship to military americas:
   - USP does not ship to APO or FPO addresses.

 * [BUG] Be able to handle "mal-formed XML doc" error return from UPS.  
 	- Right now, it still tries to parse as an XML doc.

 * [ENH] Allow better names, like "One Day Air" instead of 1DA.
   - Better names for packaging too (instead of numbers).
 
 * [ENH] Test for thread-safety-ness.	
 
 * [ENH] UPS support for sending multiple simultaneous requests
	- (USPS had built-in support in the API for Intl)
 	- If they don't support it, try LWP::Parallel::UserAgent.
	
######################################################
##  Interchange UserTag TODO
######################################################

 * [BUG] The $shipper variable acts as if it can only be "UPS" or "USPS", but
   now it can actually be "Offline::UPS" or anything else.  Works for now, but
   should be fixed.

 * [ENH] Test for ability to use within Safe?  Or catalog-level usertag?
   [perl]$Tag->business_shipping();[/perl] 

######################################################
##  Online::FedEx 
######################################################
		 
 * [ENH] FedEx module: Christopher L Wenham from Synesmedia has created an 
   Interchange usertag that uses FedEx::DirectConnect for various functions.  
   Evaluate.
