[interchange-cvs] interchange - heins modified 107 files

interchange-core@icdevgroup.org interchange-core@icdevgroup.org
Tue Jan 14 00:08:00 2003


User:      heins
Date:      2003-01-14 02:25:54 GMT
Modified:  .        MANIFEST Makefile.PL README WHATSNEW configure
Modified:  SPECS    interchange.spec
Modified:  code/SystemTag deliver.coretag
Modified:  code/UI_Tag auto_wizard.coretag global_value.coretag
Modified:           reconfig.coretag regenerate.coretag
Modified:  dist/foundation/products variable.txt
Modified:  dist/lib/UI ichelp.txt
Modified:  dist/lib/UI/pages/admin access_permissions.html
Modified:           bug_report.html content.html content_push.html
Modified:           customer.html customer_all.html customer_bill.html
Modified:           customer_mailing.html customer_pref.html
Modified:           customer_ship.html customer_view.html
Modified:           db_metaconfig.html db_newview.html dbconfig.html
Modified:           dbinfo.html file_transfer.html flex_editor.html
Modified:           flex_select.html genconfig.html gentable.html
Modified:           help.html import_table.html index.html item.html
Modified:           item_cross.html item_edit.html item_feature.html
Modified:           item_inventory.html item_price.html item_up.html
Modified:           layout.html layout_auto.html login.html
Modified:           menu_editor.html merchandising.html
Modified:           meta_editor.html order.html order_status.html
Modified:           order_view.html payment.html preferences.html
Modified:           reconfig.html search_replace.html
Modified:           search_wizard.html search_wizard2.html
Modified:           search_wizard3.html search_wizard_results.html
Modified:           ship.html ship_data.html ship_edit.html
Modified:           ship_range.html show_session.html spread.html
Modified:           tax.html
Modified:  dist/lib/UI/pages/admin/survey index.html overall.html
Modified:  dist/lib/UI/pages/include page_editor
Modified:  dist/lib/UI/profiles db_maintenance process_filter
Modified:  dist/lib/UI/vars UI_STD_FILE_NAV UI_STD_FOOTER UI_STD_HEAD
Modified:  lib/Vend Dispatch.pm Error.pm Interpolate.pm Page.pm
Modified:           Parse.pm Parser.pm
Modified:  lib/Vend/Table DB_File.pm Editor.pm GDBM.pm
Modified:  scripts  interchange.PL
Added:     code/SystemTag output_to.tag unpack.coretag
Added:     code/Widget gpg_keys.widget
Added:     dist/lib/UI/locales en_US.cfg
Added:     dist/lib/UI/pages/admin commerce.html
Added:              content_components.html content_templates.html
Added:              dbconfig_save.html edit_metaconfig.html
Added:              generic.html genfunction.html gpg_key.html
Added:              menu_loader.html merge_meta.html
Added:              order_status_alt.html page_metaconfig.html
Added:              pref_select.html
Added:     dist/lib/UI/pages/include/meta mv_metadata.asc
Added:     dist/lib/UI/pages/include/templates ui_type1 ui_type2
Added:              ui_type3 ui_type5
Log:
* Major changes to the Interchange output model and UI.

* There will be more commits for menu data.

UI
-------

* Zeald's redesign of the UI layout is almost fully implemented. There
  are but a few pages that don't incorporate the new layout.

* Each page can have an entry in mv_metadata, which allows setting
  of page titles, display types, menus, and more via database setting.
  An editor is provided.

* Virtual UI pages are fully supported. This will allow catalog-specific
  UI settings to be transmitted to a catalog with simple database updates.
  Each page is simply an entry in mv_metadata.

* The second-level menu can be set either with the page class, as before,
  or in the page metadata with $Scratch->{second_menu}.

* There is a third-level menu callable via $Scratch->{third_menu}. There
  are few situations where the old "next_line" menu setting causes the
  third-level menu -- old menu files should be compatible but where possible
  the third-level menu is explicitly specified.

* [table-editor] and [tabbed-display] can now do tabs to the third-level
  menus. This provides a very seamless tabbed display that does not
  require a page access to change.

* Many changes made to pages to map output to the new template.

* New GPG encryption wizard to make setting up of encryption as close
  to painless as I can make it.

* Change to menu editor to incorporate better menu loading.

* New merge_metadata function allows management of new metadata when
  updating the UI.

* Many, many minor changes and visual improvements.

* A good deal of documentation about the metadata and table editor
  has been written, and those items should be committed soon. Many
  of the features are covered.

Core
-----
* Output of the parser is now sent to @Vend::Output, which allows remapping
  of the parser output before output by the Server module.

  There should be no difference in behavior by default.

  Each piece of output is pushed onto an array, and pointers
  are maintained as to the name of the output. The default if
  the output is not remapped is to go to the $Vend::OutputMap{''} space.

  When output is done in non-mapped mode, @Vend::Output is simply
  joined and sent.

  The behavior diffence comes if you use the Vend::Page::output_cat
  routine. It will output the value of a named space.

  You can map output with the ITL tag:

  	[output-to name=foo]

  To return to the default space, you use:

  	[output-to name=""]

  To return to the *previous* named space, use:

  	[output-to]

  That is not normally what is wanted, though.

  All of the above allows you to map pieces of a page to different named
  spaces and unpack them with the [unpack] tag.

  This is all perhaps easier illustrated than described -- the illustration
  is in the changes to the UI, which map output from the page code to the
  template.

Revision  Changes    Path
2.79      +27 -0     interchange/MANIFEST


rev 2.79, prev_rev 2.78
Index: MANIFEST
===================================================================
RCS file: /var/cvs/interchange/MANIFEST,v
retrieving revision 2.78
retrieving revision 2.79
diff -u -r2.78 -r2.79
--- MANIFEST	7 Jan 2003 19:57:31 -0000	2.78
+++ MANIFEST	14 Jan 2003 02:25:49 -0000	2.79
@@ -13,8 +13,11 @@
 UPGRADE
 WHATSNEW
 code/ActionMap/foo.am
+code/Filter/convert_date.filter
 code/Filter/date2time.filter
+code/Filter/encrypt.filter
 code/Filter/lc.filter
+code/Filter/linkdecode.filter
 code/Filter/next_sequential.filter
 code/SystemTag/accessories.coretag
 code/SystemTag/accounting.coretag
@@ -69,6 +72,7 @@
 code/SystemTag/onfly.coretag
 code/SystemTag/options.coretag
 code/SystemTag/order.coretag
+code/SystemTag/output_to.tag
 code/SystemTag/page.coretag
 code/SystemTag/parse_locale.coretag
 code/SystemTag/perl.coretag
@@ -103,12 +107,14 @@
 code/SystemTag/total_cost.coretag
 code/SystemTag/tree.coretag
 code/SystemTag/try.coretag
+code/SystemTag/unpack.coretag
 code/SystemTag/update.coretag
 code/SystemTag/userdb.coretag
 code/SystemTag/value.coretag
 code/SystemTag/value_extended.coretag
 code/SystemTag/warnings.coretag
 code/UI_Tag/add_gpg_key.coretag
+code/UI_Tag/assume_identity.tag
 code/UI_Tag/auto_wizard.coretag
 code/UI_Tag/available_ups_internal.coretag
 code/UI_Tag/available_www_shipping.coretag
@@ -186,6 +192,7 @@
 code/UserTag/history_scan.tag
 code/UserTag/load_cart.tag
 code/UserTag/loc.tag
+code/UserTag/page_meta.tag
 code/UserTag/rand.tag
 code/UserTag/save_cart.tag
 code/UserTag/summary.tag
@@ -194,6 +201,7 @@
 code/UserTag/ups_query.tag
 code/UserTag/usertrack.tag
 code/UserTag/var.tag
+code/Widget/gpg_keys.widget
 code/Widget/imagedir.widget
 code/Widget/imagehelper.widget
 code/Widget/uploadhelper.widget
@@ -916,6 +924,7 @@
 dist/lib/UI/locales/da_DK.cfg
 dist/lib/UI/locales/de_DE.cfg
 dist/lib/UI/locales/default.cfg
+dist/lib/UI/locales/en_US.cfg
 dist/lib/UI/locales/es_ES.cfg
 dist/lib/UI/locales/he_IL.cfg
 dist/lib/UI/locales/ja_JP.cfg
@@ -934,11 +943,14 @@
 dist/lib/UI/pages/admin/bug_report.html
 dist/lib/UI/pages/admin/build_related.html
 dist/lib/UI/pages/admin/button_builder.html
+dist/lib/UI/pages/admin/commerce.html
 dist/lib/UI/pages/admin/content.html
+dist/lib/UI/pages/admin/content_components.html
 dist/lib/UI/pages/admin/content_editor.html
 dist/lib/UI/pages/admin/content_preview.html
 dist/lib/UI/pages/admin/content_publish.html
 dist/lib/UI/pages/admin/content_push.html
+dist/lib/UI/pages/admin/content_templates.html
 dist/lib/UI/pages/admin/customer.html
 dist/lib/UI/pages/admin/customer_all.html
 dist/lib/UI/pages/admin/customer_bill.html
@@ -952,12 +964,14 @@
 dist/lib/UI/pages/admin/db_metaconfig.html
 dist/lib/UI/pages/admin/db_newview.html
 dist/lib/UI/pages/admin/dbconfig.html
+dist/lib/UI/pages/admin/dbconfig_save.html
 dist/lib/UI/pages/admin/dbdownload.html
 dist/lib/UI/pages/admin/dbinfo.html
 dist/lib/UI/pages/admin/direct_sql.html
 dist/lib/UI/pages/admin/do_upload.html
 dist/lib/UI/pages/admin/do_upload_page.html
 dist/lib/UI/pages/admin/do_view.html
+dist/lib/UI/pages/admin/edit_metaconfig.html
 dist/lib/UI/pages/admin/entry.html
 dist/lib/UI/pages/admin/entry_select.html
 dist/lib/UI/pages/admin/env_vars.html
@@ -970,7 +984,10 @@
 dist/lib/UI/pages/admin/flex_select.html
 dist/lib/UI/pages/admin/fr_index.html
 dist/lib/UI/pages/admin/genconfig.html
+dist/lib/UI/pages/admin/generic.html
+dist/lib/UI/pages/admin/genfunction.html
 dist/lib/UI/pages/admin/gentable.html
+dist/lib/UI/pages/admin/gpg_key.html
 dist/lib/UI/pages/admin/group.html
 dist/lib/UI/pages/admin/group_edit.html
 dist/lib/UI/pages/admin/help.html
@@ -990,16 +1007,21 @@
 dist/lib/UI/pages/admin/layout_auto.html
 dist/lib/UI/pages/admin/login.html
 dist/lib/UI/pages/admin/menu_editor.html
+dist/lib/UI/pages/admin/menu_loader.html
 dist/lib/UI/pages/admin/merchandising.html
+dist/lib/UI/pages/admin/merge_meta.html
 dist/lib/UI/pages/admin/meta_editor.html
 dist/lib/UI/pages/admin/misc_order_number.html
 dist/lib/UI/pages/admin/order.html
 dist/lib/UI/pages/admin/order_status.html
+dist/lib/UI/pages/admin/order_status_alt.html
 dist/lib/UI/pages/admin/order_view.html
 dist/lib/UI/pages/admin/orderstats.html
+dist/lib/UI/pages/admin/page_metaconfig.html
 dist/lib/UI/pages/admin/page_upload.html
 dist/lib/UI/pages/admin/payment.html
 dist/lib/UI/pages/admin/pref_colors.html
+dist/lib/UI/pages/admin/pref_select.html
 dist/lib/UI/pages/admin/preferences.html
 dist/lib/UI/pages/admin/quick_question.html
 dist/lib/UI/pages/admin/quicklinks.html
@@ -1100,10 +1122,15 @@
 dist/lib/UI/pages/include/menus/Reports.txt
 dist/lib/UI/pages/include/menus/Top.txt
 dist/lib/UI/pages/include/menus/Wizard.txt
+dist/lib/UI/pages/include/meta/mv_metadata.asc
 dist/lib/UI/pages/include/order_delete_archive
 dist/lib/UI/pages/include/page_editor
 dist/lib/UI/pages/include/table_populator
 dist/lib/UI/pages/include/template_editor
+dist/lib/UI/pages/include/templates/ui_type1
+dist/lib/UI/pages/include/templates/ui_type2
+dist/lib/UI/pages/include/templates/ui_type3
+dist/lib/UI/pages/include/templates/ui_type5
 dist/lib/UI/pages/include/wizard_checklist
 dist/lib/UI/pages/include/wizard_profiles
 dist/lib/UI/profiles/Cancel



2.33      +1 -1      interchange/Makefile.PL


rev 2.33, prev_rev 2.32
Index: Makefile.PL
===================================================================
RCS file: /var/cvs/interchange/Makefile.PL,v
retrieving revision 2.32
retrieving revision 2.33
diff -u -r2.32 -r2.33
--- Makefile.PL	12 Dec 2002 16:08:06 -0000	2.32
+++ Makefile.PL	14 Jan 2003 02:25:49 -0000	2.33
@@ -28,7 +28,7 @@
 my @remove_old;
 my $Lock_troubles;
 
-$VERSION = '4.9.6';
+$VERSION = '4.9.7';
 
 my @os_hints;
 eval {



2.17      +1 -1      interchange/README


rev 2.17, prev_rev 2.16
Index: README
===================================================================
RCS file: /var/cvs/interchange/README,v
retrieving revision 2.16
retrieving revision 2.17
diff -u -r2.16 -r2.17
--- README	12 Dec 2002 16:08:06 -0000	2.16
+++ README	14 Jan 2003 02:25:49 -0000	2.17
@@ -2,7 +2,7 @@
 
                            I N T E R C H A N G E
 
-Interchange 4.9.6
+Interchange 4.9.7
 
 Copyright (C) 1996-2002 Red Hat, Inc., and others.
 



2.82      +2 -1      interchange/WHATSNEW


rev 2.82, prev_rev 2.81
Index: WHATSNEW
===================================================================
RCS file: /var/cvs/interchange/WHATSNEW,v
retrieving revision 2.81
retrieving revision 2.82
diff -u -r2.81 -r2.82
--- WHATSNEW	13 Jan 2003 22:00:11 -0000	2.81
+++ WHATSNEW	14 Jan 2003 02:25:49 -0000	2.82
@@ -5,8 +5,9 @@
 
 ------------------------------------------------------------------------------
 
+Interchange 4.9.7 not yet released
 
-Interchange 4.9.6 not yet released.
+Interchange 4.9.6, released 8-Jan-2003.
 
 
 Core



2.12      +2 -2      interchange/configure


rev 2.12, prev_rev 2.11
Index: configure
===================================================================
RCS file: /var/cvs/interchange/configure,v
retrieving revision 2.11
retrieving revision 2.12
diff -u -r2.11 -r2.12
--- configure	14 Dec 2002 17:59:30 -0000	2.11
+++ configure	14 Jan 2003 02:25:49 -0000	2.12
@@ -1,8 +1,8 @@
 #!/bin/sh
 
-# $Id: configure,v 2.11 2002/12/14 17:59:30 jon Exp $
+# $Id: configure,v 2.12 2003/01/14 02:25:49 mheins Exp $
 
-ICVERSION='4.9.6'
+ICVERSION='4.9.7'
 
 cat <<EOF
 



2.19      +1 -1      interchange/SPECS/interchange.spec


rev 2.19, prev_rev 2.18
Index: interchange.spec
===================================================================
RCS file: /var/cvs/interchange/SPECS/interchange.spec,v
retrieving revision 2.18
retrieving revision 2.19
diff -u -r2.18 -r2.19
--- interchange.spec	12 Dec 2002 16:08:07 -0000	2.18
+++ interchange.spec	14 Jan 2003 02:25:50 -0000	2.19
@@ -7,7 +7,7 @@
 
 Summary: Interchange web application platform
 Name: interchange
-Version: 4.9.6
+Version: 4.9.7
 Release: 1
 Vendor: Interchange Development Group
 Group: System Environment/Daemons



1.4       +2 -1      interchange/code/SystemTag/deliver.coretag


rev 1.4, prev_rev 1.3
Index: deliver.coretag
===================================================================
RCS file: /var/cvs/interchange/code/SystemTag/deliver.coretag,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- deliver.coretag	20 Nov 2002 17:34:35 -0000	1.3
+++ deliver.coretag	14 Jan 2003 02:25:50 -0000	1.4
@@ -1,7 +1,7 @@
 UserTag deliver Order type
 UserTag deliver HasEndTag
 UserTag deliver addAttr
-UserTag deliver Version $Revision: 1.3 $
+UserTag deliver Version $Revision: 1.4 $
 UserTag deliver Routine <<EOR
 sub {
 	my ($type, $opt, $body) = @_;
@@ -70,6 +70,7 @@
 					} );
 		}
 	}
+	$::Pragma->{download} = 1;
 	::response($out);
 	$Vend::Sent = 1;
 	return 1;



1.1                  interchange/code/SystemTag/output_to.tag


rev 1.1, prev_rev 1.0
Index: output_to.tag
===================================================================
UserTag output-to Order name
UserTag output-to addAttr
UserTag output-to hasEndTag
UserTag output-to Routine <<EOR
sub {
	my ($name, $opt, $body) = @_;
	$name ||= '';
	$name = lc $name;
	my $nary = $Vend::OutPtr{$name} ||= [];
	push @Vend::Output, \$body;
	push @$nary, $#Vend::Output;
	return;
}
EOR



1.1                  interchange/code/SystemTag/unpack.coretag


rev 1.1, prev_rev 1.0
Index: unpack.coretag
===================================================================
UserTag unpack PosNumber 0
UserTag unpack addAttr
UserTag unpack hasEndTag
UserTag unpack Interpolate
UserTag unpack Routine <<EOR
sub {
	my ($opt, $template) = @_;
	Vend::Interpolate::substitute_image(\$template);
	if($Vend::MultiOutput) {
#::logDebug("We have mult-output");
		for my $space (keys %Vend::OutPtr) {
#::logDebug("Filtering $space");
			my $things = $Vend::OutPtr{$space} || [];
			for my $ptr (@$things) {
				my $subs = $Vend::OutFilter{$space} || [];
				for my $sub (@$subs) {
#::logDebug("Filtering ${$Vend::Output[$ptr]}");
					$sub->($Vend::Output[$ptr]);
#::logDebug("Now is    ${$Vend::Output[$ptr]}");
				}
			}
		}
	}
	else {
		for(@Vend::Output) {
			Vend::Interpolate::substitute_image($_);
		}
	}
	undef $Vend::MultiOutput;
	$::Pragma->{no_image_rewrite} = 1;
	Vend::Page::templatize($template);
	return;
}
EOR



1.8       +1 -1      interchange/code/UI_Tag/auto_wizard.coretag


rev 1.8, prev_rev 1.7
Index: auto_wizard.coretag
===================================================================
RCS file: /var/cvs/interchange/code/UI_Tag/auto_wizard.coretag,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- auto_wizard.coretag	20 Nov 2002 18:52:16 -0000	1.7
+++ auto_wizard.coretag	14 Jan 2003 02:25:50 -0000	1.8
@@ -75,7 +75,7 @@
 		$surv->{$wizname} = $set;
 	}
 
-	if ($Vend::Session->{logged_in}) {
+	if ($Vend::Session->{logged_in} and ! $Vend::admin) {
 		if (! defined $surv->{$wizname}) {
 			my $o = {
 				function => 'check_file_acl',



1.2       +3 -2      interchange/code/UI_Tag/global_value.coretag


rev 1.2, prev_rev 1.1
Index: global_value.coretag
===================================================================
RCS file: /var/cvs/interchange/code/UI_Tag/global_value.coretag,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- global_value.coretag	29 Jan 2002 05:52:40 -0000	1.1
+++ global_value.coretag	14 Jan 2003 02:25:50 -0000	1.2
@@ -1,9 +1,10 @@
 UserTag  global-value  Order  name
 UserTag  global-value  Routine <<EOR
 sub {
+	my $thing = shift;
 	no strict 'refs';
-	defined ${$_[0]} and return ${$_[0]};
-	return '';
+	return '' unless defined ${$thing};
+	return ${$thing};
 }
 EOR
 



1.2       +14 -4     interchange/code/UI_Tag/reconfig.coretag


rev 1.2, prev_rev 1.1
Index: reconfig.coretag
===================================================================
RCS file: /var/cvs/interchange/code/UI_Tag/reconfig.coretag,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- reconfig.coretag	29 Jan 2002 05:52:40 -0000	1.1
+++ reconfig.coretag	14 Jan 2003 02:25:50 -0000	1.2
@@ -1,9 +1,9 @@
-UserTag reconfig Order name
-UserTag reconfig PosNumber  1
+UserTag reconfig Order name table file
 UserTag reconfig Routine <<EOR
 use strict;
 sub {
-	my $name = shift || $Vend::Cfg->{CatalogName};
+	my ($name, $table, $file) = @_;
+	$name ||= $Vend::Cfg->{CatalogName};
 
 	my $myname = $Vend::Cfg->{CatalogName};
 #::logGlobal("Trying to reconfig $name");
@@ -15,7 +15,17 @@
 	}
 #::logGlobal("Passed name check on reconfig $name");
 
-	logData("$Global::RunDir/reconfig", $Global::Catalog{$name}->{'script'});
+	my $script = $Global::Catalog{$name}->{script};
+	unless($script) {
+		logGlobal("Attempt to reconfigure catalog without script?");
+		logError("Attempt to reconfigure catalog without script?");
+		return undef;
+	}
+
+	if($table and $file) {
+		$script = join "\t", $script, $table, $file;
+	}
+	logData("$Global::RunDir/reconfig", $script);
 	return 1;
 }
 EOR



1.3       +2 -1      interchange/code/UI_Tag/regenerate.coretag


rev 1.3, prev_rev 1.2
Index: regenerate.coretag
===================================================================
RCS file: /var/cvs/interchange/code/UI_Tag/regenerate.coretag,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- regenerate.coretag	5 Oct 2002 05:26:29 -0000	1.2
+++ regenerate.coretag	14 Jan 2003 02:25:50 -0000	1.3
@@ -338,7 +338,7 @@
 	my $end = (times)[0] - $start;
 	$end = int($end);
 	regen_track("Finished static page building in $end seconds.");
-	::response(::interpolate_html(<<EOF, 1));
+	::interpolate_html(<<EOF, 1);
 <table cellpadding=2 cellspacing=0 width=__UI_OVERALL_WIDTH__ bgcolor=__UI_C_TITLEBARBG__ border=0>
 <tr>
 <td>
@@ -365,6 +365,7 @@
    <center>
 $Global::Variable->{UI_STD_FOOTER};
 EOF
+	::response();
 	return;
 }
 EOR



1.1                  interchange/code/Widget/gpg_keys.widget


rev 1.1, prev_rev 1.0
Index: gpg_keys.widget
===================================================================
CodeDef gpg_keys Widget 1
CodeDef gpg_keys Routine <<EOR
sub {
	my ($opt) = @_;
	$opt->{passed} = $Tag->get_gpg_keys();
	$opt->{type} = delete $opt->{variant} || 'combo';
	$opt->{filter} = 'nullselect' if $opt->{type} eq 'combo';
	return Vend::Form::display($opt);
}
EOR



2.20      +1 -0      interchange/dist/foundation/products/variable.txt


rev 2.20, prev_rev 2.19
Index: variable.txt
===================================================================
RCS file: /var/cvs/interchange/dist/foundation/products/variable.txt,v
retrieving revision 2.19
retrieving revision 2.20
diff -u -r2.19 -r2.20
--- variable.txt	30 Dec 2002 01:02:12 -0000	2.19
+++ variable.txt	14 Jan 2003 02:25:50 -0000	2.20
@@ -14,6 +14,7 @@
 CATEGORYBAR_HOVERDECO	underline	Catalog Colors and Style
 CGI_URL	__MVC_CGIURL__	Directories and Paths
 CHECK_ACCEPTED	1	Payment
+CHECKOUT_MAIL_LIST	1	Mailings
 CITY	__MVC_CITY__	Company
 COD_ACCEPTED	__MVC_PAYCOD__	Payment
 COMPANY	__MVC_COMPANY__	Company



2.5       +81 -77    interchange/dist/lib/UI/ichelp.txt


rev 2.5, prev_rev 2.4
Index: ichelp.txt
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/ichelp.txt,v
retrieving revision 2.4
retrieving revision 2.5
diff -u -r2.4 -r2.5
--- ichelp.txt	18 Aug 2002 08:17:41 -0000	2.4
+++ ichelp.txt	14 Jan 2003 02:25:50 -0000	2.5
@@ -1,95 +1,99 @@
 code	title	helptext
-gentable	Direct Table Edit	<p>
The <b>Direct Table Edit</b> page allows you to edit any of Interchange's internal tables. Select a table
to edit, or search a table and select rows to edit.
</p>
-table.searchreplace	Database: Search and Replace	This feature allows you to mass-change a field in the database.

<P>
Select the table to operate on, then the column, from the dropdowns. (This page requires JavaScript enabled.) Enter the string to be searched for, and the string to replace it. Click <b>Search and Replace</b>.
<P>
The search string is a regular expression. If the string is a partial match for the field, only the matching text will be replaced. You may parenthesize one part of the search expression, in which case only the parenthesized part will be replaced and the rest of the matching text will be kept in place.
<P>
The replacement string is the literal text that will be inserted instead of the search text.
<P>
If the regular expression is incorrect, you will be returned to the page and the message "Error: Compiling regex" will be displayed.
<P>
If the operation is successful, you will be sent to the edit select list for the table you operated on, and a message indicating how many rows (if any) were changed.
+404	Help Topic Not Found	<p>
The help topic you requested does not exist.
Explore the list of help topics below to find the information you are looking for.
</p>

~~HELP_TOPICS~~
+access.main	Administrator Accounts	<p> The <b>Administrator Accounts</b> page allows the Site Administrator to create
  and edit user accounts and restrict the use of certain Administration Site functions.
  For example, you may wnat one user to have access to order and customer information,
  but not to Web content.
<p> Users can have permissions granted on an individual basis, or by group. A
  <b>Super User</b> has access to all Interchange Administration Site areas, regardless
  of how the permissions are set.
<p> <i><b>Hint:</b> Clicking <b>Access</b> from the menu displays the <b>Users</b>
  of the Access section by default. To access the <b>Groups</b> section, click
  <b>Groups</b> from the menu.</i>
<p>
<h2>Functions</h2>
<b>Create New Administrator</b><br>
To create a new administrator account, click this button.
<p> <b>Edit Administrator</b><br>
  After choosing a user name from the list, click this button to make changes
  to that user's preferences, such as the user group he or she belongs to or that
  user's <b>Super User</b> status.
<p> <b>Show Permissions</b><br>
  After choosing a user name from the list, click this button to view that user's
  site access permissions.
<p> <b>Change Password</b><br>
  After choosing a user name from the list, click this button to change that user's
  password.
<p> <b>Delete Administrator</b><br>
  After choosing a user name from the list, click this button to delete that user
  from the system.
<p> <b>Back</b><br>
  To return to the previous page, click this button.<br>
  <br>

<p><i><b>Hint:</b> By default, administrator accounts are stored and managed separately
  from customer login accounts.</i> </p>
+access.permissions	Administrator Permissions	<p>
The <b>Administrator Permissions</b> page allows you to select the operations that each user can have access to in the back office. Each section of the back office can be restricted with great detail. For example, a user can be given the ability to view a list of all orders, but not have access to the order details. Access to the individual rows of Interchange's internal tables can also be restricted on a per-table basis for each user.
<p>
<h2>Functions</h2>
<b>OK</b><br>
After selecting the type of access the user will have to each section of the Interchange Administration Site, click <b>OK</b> to commit the changes. The next time this user logs on to the Administration Site the new permissions will be used.
<p>
<b>Cancel</b><br>
Click Cancel to abandon the permissions change.
</p>
+admin.edit.user	Administrator Edit	<p>
The <b>Administrator Edit</b> page allows you create and edit administrator preferences.
<p>
<h2>Functions</h2>
<b>Real Name</b><br>
If adding an administrator, type the name of that administrator in this field.<br>
<i>or </i><br>
If editing an administrator, make the necessary changes here.
<p> <b>User Name</b><br>
If adding an administrator, type the user name of that administrator in this field.<br>
  <i>or</i><br>
If editing an administrator, the user name for that administrator is displayed here.
<p> <b>Super User</b><br>
  If the administrator you are adding or editing is a Super User, be sure to check
  this box. A <i>Super User</i> is an administrator that has full access to all
  aspects of the Administration Site, regardless of what permissions have been
  set.
<p>
<b>Groups</b><br>
Click the name of the group with which you want this administrator to be associated.
<p>
<b>Permissions</b><br>
To view and/or edit the site access permissions for this user, click this button.
<p>
<b>OK</b><br>
To commit the administrator changes/additions you made, click this button.
<p>
<b>Cancel</b><br>
To abandon the changes/additions you made, click this button.
+affiliate.edit	Edit Affiliate	<p>The <b>Edit Affiliate</b> page allows you to edit specific attributes for an Affiliate. The following is a list of some of the most common attributes that you can edit.
<p>
<h2>Functions</h2>

<b>Affiliate ID</b><br>
This field contains the <b>Affiliate ID</b> for the Affiliate you are editing.
<p></p>

<p>
<b>Affiliate Name</b><br>
This field contains the name of the Affiliate you are editing.
</p>

<p> <b>Campaigns</b><br>
This field is used to track traffic from advertising campaigns.
</p><p> <b>Coupon_amount</b><br>
This field is used to enter the coupon discount amount to be applied to a purchase made by the Affiliate you are editing.
<p>
<b>Join Date</b><br>
The value in this field can be used to keep track of when the Affiliate signed with you.
</p>

<p>
<b>URL</b><br>
The value in this field is used to direct visitors coming from the Affiliate you are editing to your home page or a page designed specifically for visitors from that Affiliate's site. <br>
This should <i>not</i> be the URL of the Affiliate's home site.
</p>

<p> <b>Timeout Delay</b><br>
The value in this field is used to specify the amount of time a customer has to place an order and still give the Affiliate credit for it. If the customer goes over this amount of time, the Affiliate doesn't get credit for the customer visit. The timeout delay is measured in seconds, with the value of 0 (zero) disabling it. It is recommended that you use a value in the thousands to be sure the customer has enough time to shop.
<p>
<b>OK</b><br>
To commit your changes, click <b>OK</b>.
<i><b>Hint:</b> Using the browser's back button to exit the screen will not commit the changes you have made. </i>
<p>
<b>Cancel</b><br>
To abandon the changes you have made, click this button.
+affiliate.manager	Affiliate Manager	<p> The <b>Affiliate Manager</b> page allows you view a list of the Affiliates
  associated with your site. The Affiliate feature allows you to place a link
  on another web site that connects directly to a product page on your site. The
  product page can be customized specifically for visitors from that Affiliate.
  This feature also allows you to keep track of how many referrals you have gotten
  from each Affiliate.
<p>
<h2>Features</h2>
<b>Limit with Search</b><br>
Type the paramater by which you want to search the Affiliate list. For example,
you can type a portion of an Affiliate name perform a search for Affiliates containing
that value. Only the Affiliates containing the search parameter will be displayed.
<p>

<h2>Functions</h2>

You can sort the item directory by clicking the heading of the column by which
you want to sort. For example, to sort by Code, click the <b>Code</b> heading.
This displays the Affiliates by code name in alphabetical order. Click a value
listed in one of the following columns to access specific information about that
value:
<p>
<ul>
  <li>Code-click the value in this column to access the <b>Edit Affiliate</b>
    page for that affiliate.
  <li>Linkback and Entry URLs-click the URL in this column to test the link. To
    edit the URL, go to the <b>Edit Affiliate</b> page.
    <li>Reports-click the value in this column to access the corresponding report
    page for that Affiliate.
</ul>
+affiliates.main	Edit Affiliates	<p> An Affiliates Program allows the merchant to make linking agreements with
  the owners of other web sites then track which orders come in from those off-site
  links. In many cases, the partner site earn a percentage of the sale from that
  link. In other cases, the merchant is simply interested in knowing how many
  people are buying as a result of a particular link. The <b>Edit Affiliates</b>
  page allows you to edit Affilite information. </p>

<p> <b>Create New Affiliate</b><br>
  Click this button to make a new Affiliate. You will be asked to give that Affiliate
  a name. This name will appear in your personal list of Affiliates and will also
  appear on any orders resulting from this affiliate's links. After you submit
  the new Affiliate information, Interchange will display a unique URL which you
  will need to email to your new Affiliate. They will receive credit for an order
  only if the purchaser originally clicked on that specific URL. </p>

<p> <b>Default URL to Redirect to</b><br>
  When setting up your Affilate, you have the choice of having their link point
  to your front page, to any other page in your site, or perhaps to a welcome
  page specifically for that Affiliate's customers. Enter the complete URL in
  this space. Note: do <i>not</i> enter the URL of the Affiliate's web site in
  this space. </p>

<p> <b>Timeout Delay</b><br>
  The amount of time you enter here, in seconds, is the time that purchasers have
  between the time they enter your site through the link and when they must purchase
  before their status expires. If you set this time to 60 seconds, most purchasers
  will not have time to place an order and your Affiliate would not get credit
  for any of the sales. We recommend a setting in the thousands, or a setting
  of zero, which disables this feature. </p>

<p> <b>Edit Affiliate</b><br>
  Select an Affiliate's name from the list, and click "Edit Affiliate" to review
  or change the Affiliate information. If you forget the URL that the Af
iate" screen. </p>

<p> <b>Show Orders</b><br>
  This feature will review the number, amounts, and specifics of all orders attributed
  to a particular affiliate. Select the Affiliate from the list and click "Show
  Statistics." </p>

<p>
<b>Show Traffic</b><br>
This button will allow you to view information on the number of visitors who
have come to your site via the selected affiliate.
</p>

<p> <b>Delete Affiliate</b><br>
  Select the Affiliate from the list and click "Delete Affiliate" to remove it.
  You will be asked to confirm your choice, after which it can not be recovered.
</p>

<p>
<b>Affiliate Relations</b><br>
  You may also choose to allow the Affiliate to view the statistics for the traffic
  on your site to which they are responsible. You can do this by allowing them
  a restricted amount of access. (See the <a href="access.main.html">Access Manager</a>
  for details.) </p>

<p> Note: the affiliates feature requires that the purchaser's computer accept
  cookies. Keep in mind that some purchasers may have their browsers set to reject
  cookies or may be using browsers that do not support them. </p>
+button.builder	Button builder	<p> The <b>Button Builder</b> page allows you create HTML links and buttons for
  ordering items in your store. </p>

<p>
This function allows for quick access to a product and is useful if you have a few products you want to list on a page or if you want to put an order link on a page on another site.
</p>

<p> The Button Builder can generate either a URL for use in an <b>&lt;A HREF...&gt;</b>
  HTML tag, or a submit button inside of a <b>&lt;FORM&gt;</b> tag.
<p>
<h2>Functions</h2>
<b>Build</b><br>
After entering the necessary information, click <b>Build</b> to create the button. The Interchange Administration Site builds the button for you and issues the resulting HTML that displays the button. Cut and this information and paste it to the page on which you want to display the button.
+change.password	Change Password	<p>
The <b>Change Password</b> page allows you to change the password for a user. This should typically be done by the Site Administrator or super user.
<p>
<h2>Functions</h2>
<b>New Password</b><br>
Enter the new password.
<p>
<b>Verify Password</b><br>
Confirm the new password.
<p>
<b>OK</b><br>
To commit the new password, click this button.
<p>
<b>OK</b><br>
To abandon the changes you made, click this button.
</p>
+create.new.affiliate	Create New Affiliate	<p>
The <b>Create New Affiliate</b> page allows you to create an Affiliate. The following is a list of attributes that you can specify.
<p>
<h2>Functions</h2>

<b>Affiliate ID</b><br>
This field will contain the text "new".
<p></p>

<p>
<b>Affiliate Name</b><br>
This field contains the name of the Affiliate you are creating.
</p>

<p> <b>Campaigns</b><br>
This field is used to track traffic from advertising campaigns.
</p>
<p> <b>Coupon_amount</b><br>
This field is used to enter the coupon discount amount to be applied to a purchase made by the Affiliate you are creating.
<p>
<b>Join Date</b><br>
The value in this field can be used to keep track of when the Affiliate signed with you.
</p>

<p>
<b>URL</b><br>
The value in this field is used to direct visitors coming from the Affiliate you are creating to your home page or a page designed specifically for visitors from that Affiliate's site. <br>
This should <i>not</i> be the URL of the Affiliate's home site.
</p>

<p> <b>Timeout Delay</b><br>
The value in this field is used to specify the amount of time a customer has to place an order and still give the Affiliate credit for it. If the customer goes over this amount of time, the Affiliate doesn't get credit for the customer visit. The timeout delay is measured in seconds, with the value of 0 (zero) disabling it. It is recommended that you use a value in the thousands to be sure the customer has enough time to shop.
<p>
<b>OK</b><br>
To commit your changes, click <b>OK</b>.
<i><b>Hint:</b> Using the browser's back button to exit the screen will not commit the changes you have made. </i>
<p>
<b>Cancel</b><br>
To abandon the changes you have made, click this button.
+create.new.customer	Create new customer	<p> The <b>Create New Customer</b> page allows you create a new customer account
  by entering the necessary customer information. The fields displayed on this
  page are dependent on how the page was set up by your Site Administrator or
  Super User.
<p>
<h2>Functions</h2>
<b>OK</b><br>
After entering the necessary information to create a new customer, click <b>OK</b> to save the information. The <b>Active Customers</b> page is displayed including the customer you created.
<p>
<b>Cancel</b><br>To return to the <b>Active Customers</b> page without saving the new customer information, click <b>Cancel</b>.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super
User, is displayed below each field name. This link allows the Site Administrator
or Super User to change the parameters for each field. For more information on
<b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a> page.
+crosssell	Cross-Sell	<p>
The <b>Cross-Sell</b>
page is used to exercise the Cross-Sell marketing feature. The Cross-Sell
feature allows you to display an item or items that compliment the item the
customer has chosen and give the customer the choice of adding the complimentary
item. For example, you may choose to display a paintbrush as a Cross-Sell
item to a customer that is purchasing paint. <!--reference the page where the graphics are posted or parameters for display are set-->
</p><p>
</p><h2>Functions</h2>
<b>OK</b><br>
After completing the necessary Cross-Sell information, click <b>OK</b> to export the Cross-Sell connection.<!--what is the result of this action?-->
<p>
<b>Cancel</b><br>
To abandon the Cross-Sell task you started without saving the change.
</p><p> <b>Auto-Export</b><br>
  Click this checkbox to enable the Auto-Export feature. The Auto-Export feature
  exports the changes you are committing to the tables described on these pages
  to the original flat text file. This feature allows you to keep your original
  files up-to-date and portable. However, while this feature may not hinder the
  system's performance when exporting a small table, exporting a large table may
  slow your system.
</p><p>
</p><h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super
User, is displayed below each field name. This link allows the Site Administrator
or Super User to change the parameters for each field. For more information on
<b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a>
page.<br>
+customer	Active/Inactive Customers	<p> The <b>Active Customers</b> and <b>Inactive Customers</b> pages display all
  customers in the system. You can group the customers as active or inactive depending
  on your preference. <b>Active Customers</b> usually include those with pending
  orders or orders that have recently been filled. <b>Inactive Customers</b> usually
  include those who have decided not to create a user account or haven't submitted
  an order recently. Contact your Site Administrator or Super User for your rules
  regarding customers.<br>
</p>
<p><br>
<span style="font-weight: bold;">NOTE:</span> If you have a large number
of customers, many thousands, you may want to define the
CUSTOMER_VIEW_LARGE preference. This will prevent long startup times
accessing the list of customers, and present a query-by-example
interface to search for customers. </p>
<h2>Functions</h2>
<b>Search for Customer</b><br>
Type the parameter by which you want to search for a customer. For example, type <b>CA</b>
to search for all customers located in the state of California. Only the
customers containing the search parameter will be displayed. <p> <b>Delete Checked Customers</b><br>
  Click this button after checking the customer(s) you want to delete. A warning
  is displayed. Click <b>OK</b> to delete. The deleted customer(s) are removed
  from the page, but remain in the system. <i><b>Hint:</b> To delete an individual
  customer, click the <b>X</b> in the red square beside the customer ID.</i>
</p><p> <b>Deactivate Checked Customers</b> (on the <b>Active Customers</b> page)<br>
  <i>or</i><br>
  <b>Activate Checked Customers</b> (on the <b>Inactive Customers</b> page)<br>
  Click this button after checking the customers(s) you want to activate or deactivate.
  The customer(s) are moved to the appropriate section. <i><b>Hint:</b> To activate
  or deactivate an individual customer, click the black arrow beside the customer
  ID.</i>
</p><p>

</p><h2>Features</h2> You can sort the customer list by clicking the
heading of t

by customer ID, click the <b>ID</b> heading. This displays the customers by ID in ascending or descending alphabetical order.
<p>
You can click the customer ID to access the <a href="customer.view.html">View Customer</a> page to view the details of a specific customer.</p>
+customer.edit	Customer Edit	<p>

This help page corresponds to the following Administration screens:<p>
<ul>
<li>Customer preferences
<li>Customer shipping information
<li>Customer billing information
</ul>

These screens allow you to enter or change information relating to the customer.
The fields displayed on these pages are dependent on how the Site Administrator
or Super User set up Interchange Administrator. For assistance with completing
these pages, see your Site Administrator or Super User.
<p>
<h2>Functions</h2>
<b>OK</b><br>
After completing the necessary information on the page, click <b>OK</b> to commit your changes/additions. The page is refreshed and the changes are committed.
<p>
<b>Cancel</b><br>
Abandon entered changes without committing them. The page is refreshed, displaying only the original information.
<p> <b>Auto-Export</b><br>
  Click this checkbox to enable the Auto-Export feature. The Auto-Export feature
  exports the changes you are committing to the tables described on these pages
  to the original flat text file. This feature allows you to keep your original
  files up-to-date and portable. However, while this feature may not hinder the
  system's performance when exporting a small table, exporting a large table may
  slow your system.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super
User, is displayed below each field name. This link allows the Site Administrator
or Super User to change the parameters for each field. For more information on
<b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a>
page.
 customer.mailing	Customer Mailing	 <p> This facility is intended to email a limited number of users a templated message.  </p> <p> Records are substituted with the values from the <b>userdb</b> table.  Each field is in {curly brackets}. For example, the first name column <i>fname</i> would be templated as {FNAME}.  </p> <p> The full range of templating available with the Interchange ITL tag <b>[attr-list]</b> are available, so you can do tests and conditional substitutions. See the IC documentation of <a href="http://www.icdevgroup.org/cgi-bin/ic/search.html?mv_coordinate=1&mv_searchtype=db&from_search=1&mv_value=link_banner%3DSearch+results&mv_search_page=docresults&mv_search_file=documentation&mv_searchspec=attr_list">attr_list</A> for help with that.  </p> <p> You can choose any list that currently has subscribers. Formulate your message in the textarea, set the Subject:, the From:, and To: settings. Some reasonable defaults are supplied except for Subject. If you want the reply to go to a different address than the From:, set that too.  </P> <p> By default, each user's box is checked for mailing. If there are users you don't want the mailing to go to, uncheck them. If you want to send in more than one batch, the system will remember which users you have mailed to as long as you remain logged in.  </p> <p> It is a good idea to do the <b>Email Preview</b> to check the messages before you send.  </p> <P> If you have a very large list, you cannot <b>Send Now</b>. Use the <b>Download Batch</b> button to download a shell script that will use <tt>sendmail</tt> to send it via the UNIX command line.</p>
-shipping.data	Shipping: Edit Data Table	<p>
Once you've created a shipping method, you can fine tune the calculation
based on the weight of the order. Use the "+" button to add new ranges
and specify which ranges will apply to which calculations. Choose a type
of calculation to perform for each weight range, such as a number (flat charge),
formula (arbitrary calculation based on the weight), UPS lookup (internal
or via their Web site), multiply by (simple rate), or select <b>Message</b> to
generate an error message. If you specify a formula, you can include the
string "@@TOTAL@@" to represent the total weight of the order. For example,
"8 + @@TOTAL@@ + 2.50".
</p>
-shipping.main	Shipping Options	<p>
The <b>Shipping Options</b> page allows you to specify and configure the shipping methods and costs for your online store. Before you begin here, you need to decide how you want to charge for shipping. We support all the most common shipping options:
</p>

<p>
<a href="shipping.price.html">By Price:</a> shipping total based on the total price of the order. This can also be used to calculate a flat shipping price ($0 - infinity = $4.95) or a flat rate with big orders shipped free ($0 - 500 = $4.95 and $500 - infinity = free). The shipping charge can either be a flat charge or a percentage.
</p>

<p>
<a href="shipping.weight.html">Standard by Weight: </a> calculates shipping by total weight with no regard to zones. To use this method, you must enter a weight for each item in your inventory. You can use any unit of measure you wish as long as you are consistent. If you enter your item prices in grams, then configure shipping with pounds, your customers will not be happy when they are quoted huge shipping rates.
</p>

<p>
<a href="shipping.quantity.html">Standard by Quantity:</a> this is identical to shipping by price, but the shipping charge will be multiplied by the total number of items ordered.
</p>

<p>
<a href="shipping.ups.html">UPS Zones-Based:</a> Interchange is pre-configured with UPS zones tables for ground, three day select, second day air, and next day air.
</p>

<p>
If you require zones support for Fedex, DHL, or USPS, please <a href="mailto:info@akopia.com">contact Akopia</a>.
</p>

<p>
Keep in mind that you can choose a variety of these shipping methods, giving the customer a choice. Many companies use flat shipping for ground orders and use UPS zones shipping for second day and next day orders.
</p>

<p>
<b>Create New Method</b><br>
Once you've decided what shipping options you are going to offer your customers, click the "Create New Method" button and configure each option. You will be able to name and configure each option from the "Create New Method" screen. See

</p>

<p>
<b><a href="shipping.edit.html">Edit Method</a></b><br>
Select one of the currently existing shipping methods from the list and click "edit method" to change its name, enable or disable it, change the calculation method, or set a minimum charge. The "edit method" button takes you to the same screen as "create new method" button, but already filled out. To edit the individual charges for different prices or weights, use the "edit data table" function.
</p>

<p><b><a href="shipping.data.html">Edit Data Table</a></b><br>
The process of creating a new method is usually a two-step process. In the first step, you name the shipping method and devide on a calculation algorithm (by price, by weight/zone, etc). The second stage involves configuring your chosen method. The "edit data table" function allows you to change the particular settings for an already-created method.
</p>

<p>
<b>Delete Method</b><br>
Select a method from the list and click on this button to delete it. You will be asked to confirm your choice. If you choose yes, it will be deleted permanently. If you merely want to temporarily disable a particular shipping method and remove it from the list your customers see, edit the method and un-check the box next to "enable this method." That way, if you want to enable it later, you won't have to re-configure it.
</p>
-order.main.pending	Pending Orders	The <b>Pending Orders</b> page displays all current orders in the system. This page works in real-time, but if you leave this page open or your Web browser has cached the page's contents, it is recommended that you re-load the page periodically to see the most recent orders.
<h2>Functions</h2>
<b>Start at Order Number</b><br>
Type the order number to be displayed first. Following this number, all other order numbers will be displayed in numerical order.
<p>
<b>Limit with Search</b><br>
Type the parameter by which you want to search. For example, type <b>CA</b> to search for all orders originating in the state of California. Only the orders containing the search parameter will be displayed.
<p>
<b>Delete Checked Orders</b><br>
Click this button after checking the order(s) you want to delete. A warning is displayed. Click <b>OK</b> to delete. The deleted order(s) are removed from the <b>Orders</b> page, but remain in the system. <i><b>Hint:</b> To delete an individual order, click the <b>X</b> in the red square beside the order number.</i>
<p>
<b>Archive Checked Orders</b><br>
Click this button after checking the order(s) you want to archive. The order(s) are moved to the <A HREF="order.main.archived.html">Archived Orders</a> section. <i><b>Hint:</b> To archive an individual order, click the black arrow beside the order checkbox.</i>
<p>
<h2>Features</h2>
You can sort the order list by clicking the heading of the column by which you want to sort. For instance, to sort by total price, click the <b>Total</b> heading. This displays the orders by amount in ascending or descending order. To sort in reverse order, click the <b>Total</b> heading again.
<p>
You can view the details of a specific order by clicking the <b>Order Number</b>, <b>User</b>, or <b>Status</b> of that order.<br>
Click the <b>Order Number</b> to access the <a href="order.view.html">View Order</a> page.<br>
Click the <b>User</b> to access the <a href="customer.view.html">View Customer</a> page.<br>
Click the <b>Statu
to access the <a href="item.edit.html">Order Status</a> page.
<p>



<!-- commented out
<p>
<b>Delete False Order</b><br>
Periodically, either through fraud or because an order fell through after it was placed due to product availability problems, an order will need to be deleted and not reported in the order statistics. Select the false order from the list and click on the delete false order button. You will be asked for confirmation to delete this order, because once an order is deleted, it is irretrievable.
</p>
-->
 customer.view	View Customer	<p> The <b>View Customer</b> screen allows you to view detailed information about
  a particular customer. The customer's order history is also displayed.
<p>
<h2>Functions</h2>
<b>Back</b><br>
Returns you to the <b>Active Customers</b> or <b>Inactive Customers</b> list.
<p> <b>Enter Order</b><br>
  Click this button to access the <a href="order_entry.main.html">Order Entry</a>
  page. The <b>Order Entry</b> page is displayed and is prepopulated with the
  customer's information, allowing you to quickly enter an order.
<p><b>Deactivate Customer</b><br>
  <i>or</i><br>
  <b>Activate Customer</b><br>
  The button displayed depends on if the customer you are viewing is an <b>Active
  Customer</b> or <b>Inactive Customer</b>. It allows you to reverse the status
  of a customer (from active to inactive, or vice versa).
<p> <b>Change Password<br>
  </b>Click this button to access the <b>Change Customer Password</b> page. The
  <b>Change Customer Password</b> page allows you to change the customer's password.
  <i><b>Hint:</b> Do not change a customer's password without notifying the customer.
  The customer will not be able to access his or her account without the new password.</i>
<p> <b>Delete Customer</b><br>
  Deletes the customer.
<p>
<h2>Features</h2>
Depending on how much information is stored on the system about a customer, some
of the items on the <b>View Order</b> page are hotlinked to allow you to access
other information:<br>
<ul>
  <li>Click the customer's name to access the <a href="customer.view.html">View
    Customer</a> page. The <b>View Customer</b> page displays detailed information
    about the customer.
  <li>Click the customer's email address to send that customer an email.
  <li>Click <b>Bill To:</b> to access that customer's complete billing information.
  <li>Click <b>Ship To:</b> to access that customer's complete shipping information.
  <li>Click the order's status to access the <a href="item.edit.html">Order Status</a>
    page. The <b>Order Status</b> page dis
shipment.
</ul>
-wizard.shipping	Wizard : Set Up Shipping Information	This section helps you to set up your shipping information and is intended only to get you started with shipping calculation. It offers choice of three shipping methods and does not allow for multiple delivery options. This information will be entered into Interchange and populated into the Administration tool. The Administration tool allows you to enter more complex shipping options. The required fields are displayed in bold.<p>The following are descriptions of the fields displayed on the page:<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><b>Field</b></td><td bgcolor="E0DCE0"><b>Definition</b></td></tr><tr><td>Shipping Method</td><td>The method by which you will ship your products. Choose from the drop-down menu. Your choices are:<br><ul><li>Federal Express (FedEx)</li><li>United Postal Service (UPS)</li><li>United States Postal Service (USPS)</li></ul></td></tr><tr><td>Warehouse ZIP code</td><td>The ZIP code of the location from which you will be shipping. This, combined with with the <b>Shipping Method</b>, are compared against an internal table to determine the correct shipping cost.</td></tr></table>
-logout.main	Logout	<p>
The <b>Login/Logout</b> page allows you to log in to the Interchange Administration Site. If more then one user has been specified on your system, this page can be used to log on as a different user. Enter your user name and password to access the Administration Site. If you are unsure of your user name or password, contact your Site Administrator.
-genconfig.main	Catalog Information	<p> Here you see various information on the catalog and Interchange installation.
  Of particular interest are:
<ul>
  <li><b>Active Sessions: </b>Here you can select an active session and see all
    the information Interchange has on currently active Web site visitors, including
    Administrators.<br>
    <br>
  <li><b>Database Information:</b> This lists all the Perl database access modules
    installed on the server and available for Interchange. <br>
    <br>
  <li> <b>Module Information:</b> A list of Perl modules available to Interchange,
    with comments about affected functionality for those that are missing.
</ul>
-affiliate.manager	Affiliate Manager	<p> The <b>Affiliate Manager</b> page allows you view a list of the Affiliates
  associated with your site. The Affiliate feature allows you to place a link
  on another web site that connects directly to a product page on your site. The
  product page can be customized specifically for visitors from that Affiliate.
  This feature also allows you to keep track of how many referrals you have gotten
  from each Affiliate.
<p>
<h2>Features</h2>
<b>Limit with Search</b><br>
Type the paramater by which you want to search the Affiliate list. For example,
you can type a portion of an Affiliate name perform a search for Affiliates containing
that value. Only the Affiliates containing the search parameter will be displayed.
<p>

<h2>Functions</h2>

You can sort the item directory by clicking the heading of the column by which
you want to sort. For example, to sort by Code, click the <b>Code</b> heading.
This displays the Affiliates by code name in alphabetical order. Click a value
listed in one of the following columns to access specific information about that
value:
<p>
<ul>
  <li>Code-click the value in this column to access the <b>Edit Affiliate</b>
    page for that affiliate.
  <li>Linkback and Entry URLs-click the URL in this column to test the link. To
    edit the URL, go to the <b>Edit Affiliate</b> page.
    <li>Reports-click the value in this column to access the corresponding report
    page for that Affiliate.
</ul>
+dbdownload.main	Database Download	<p></p>
<p>
The <b>Database Download</b> page allows you to export any of the internal
tables on Interchange to the <b>backup</b> directory of your catalog. By
default, it exports each table to a tab-delimited file named for the table.
It also can export Gnumeric simple-text output and, if you have the Perl Spreadsheet::WriteExcel module installed, it can write XLS spreadsheet files.

<blockquote>
NOTE: XLS output is only available when you have the Spreadsheet::WriteExcel
module installed.  Spreadsheet::WriteExcel is available at CPAN.
</blockquote>

<p>
To use, take the following steps:

<OL>
  <LI>Check the boxes corresponding to the tables you want to export.
  <LI>Select whether you want Gnumeric output and/or XLS output.
  <LI>Click <B>Perform Export</B> button.
</OL>
NOTE: If you have very large database tables, the export function may take a
long time. It is not recommended for more than 25,000 products.

<P>
Once the tables are exported to a Gnumeric or XLS format, they will be
available for download on the same page. Individual tables are downloadable
via the <I>File Transfer</I> menu.
<P>
Caveats:
<P>
<UL>
  <LI>Fields longer than 255 characters will be wrapped to the next line
  and must be combined in the spreadsheet to be re-imported.
</UL>
+dbupload.main	Database Upload	<p>
<b>Coming soon</b>
</p>
+edit.item	Edit/Create Item	<p> The <b>Edit Item</b> page is used to create or edit a product item. The fields
  displayed on this page are dependant on how the page was set up by your Site
  Administrator or Super User. For more information on the fields displayed on
  this page, see your Site Administrator or Super User.
<p>
<h2>Function</h2>
<b>OK</b><br>
After completing the necessary information on the page, click <b>OK</b> to commit your changes/additions. The page is refreshed and the changes are committed.
<p>
<b>Cancel</b><br>
Abandon entered changes without committing them. The page is refreshed, displaying only the original information.
<p> <b>Auto-Export</b><br>
  Click this checkbox to enable the Auto-Export feature. The Auto-Export feature
  exports the changes you are committing to the tables described on these pages
  to the original flat text file. This feature allows you to keep your original
  files up-to-date and portable. However, while this feature may not hinder the
  system's performance when exporting a small table, exporting a large table may
  slow your system.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super
User, is displayed below each field name. This link allows the Site Administrator
or Super User to change the parameters for each field. For more information on
<b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a> page.
 edit.page	Edit Page	<p> The <b>Edit Page</b> page allows you to edit the preferences of each Web page
  in your site, including the Interchange Administrator Site. The <b>Edit Page</b>
  page also allows you to view and edit the html source code for the page.
<p>
<h2>Functions</h2>
<b>Preview</b><br>
After completing the necessary information on the <b>Edit Page</b> page, click
this button to preview the page. This function is helpful if you want to view
the page before committing to the changes. The following is a list and description
of the most common fields displayed on this page. If you are unsure of the function
of a field displayed, contact your Site Administrator or Super User.
<p>
<ul>

<li><b>Change Template</b><br>
After choosing a template from the drop-down list, click this button to implement the change. For more information on creating or editing your templates, see <a href="something.html">blah</a>.
<p>
  <li><b>Page Title</b><br>
    The title of the Web page that you are editing/creating.
    <p>
  <li><b>Page Banner</b><br>
    The banner of the Web page that you are editing/creating.
    <p>
  <li><b>Members Only</b><br>
    Limits access to the Web page to customers that have a user account with you.
    If activiated, a user log in page is displayed before the Web page is displayed.
    <p>
  <li><b>Component Before Content</b><br>
    Allows you to specify a marketing device to be displayed before the content
    on this Web page.
    <p>
  <li><b>Component After Content</b><br>
    Allows you to specify a marketing device to be displayed after the content
    on this Web page.
    <p>
  <li><b>Background Color</b><br>
    Allows you to specify the background color of the Web page that you are editing/creating.
    <p>
<li><b>Content</b><br>
    Displays the html source code that corresponds to the Web page that you are
    editing/creating. This is where the content of the Web page is specified.
</ul>

<b>Save</b><br>
After completing the necessary information on the <b>Edit Page</b> page
changes. The <a href="page.editor.html">Page Editor</a> page is displayed.
<p>
<b>Cancel</b><br>
Abandon changes by clicking this button. The <a href="page.editor.html">Page Editor</a> page is displayed.
-merch.build_related	Build Related	<p>
You can mine the data from your <TT>orderline</TT> database to suggest products that
might be bought in combination with a certain product.
</p>

<p>
All that is necessary is to access this page. The database will be mined and
entries made in the <TT>others_bought</TT> field of the <TT>merchandising</TT> database.
</p>

<p>
The database is scanned, and a list of items purchased on the same order with
each item is built. This is stored in a data structure and can be accessed
<I>in a shopping cart or flypage</I> with the code:
</p>

<XMP>
  [if-item-data merchandising others_bought]
  [perl tables=products]
    my $hash = [item-data merchandising others_bought];
    my @ary = sort { $hash->{$b} <=> $hash->{$a} } keys %$hash;
    return '' unless @ary;
    my %in_basket;
    splice(@ary, 3);
    for(@{$Carts->{main}}) {
      $in_basket{$_->{code}} = 1;
    }
    @ary = grep ! $in_basket{$_}, @ary;
    return '' unless @ary;
    my $out = q{
    <BR><TABLE CELLPADDING=0 CELLSPACING=0 WIDTH="100%">
    <TR><TD __HEADERBG__>
    <FONT SIZE="-1" COLOR="__HEADERTEXT__">
      Customers who bought this item also bought:
    </TD>
    </TR><TR>
    <TD><FONT SIZE="-1">
    };
    for(@ary) {
       my $desc = tag_data( 'products', 'description', $_);      $out .= q{<A HREF="[area $_]">$desc</A><BR>}
    }
    return $out . '</TD></TR></TABLE>';
  [/perl]
  [/if-item-data]
</XMP>

<p>
This code is used in the <B>Barry</B> and possibly other demos.
</p>
+env_vars	Environment Variables	<p>Here you can view the environment of the running Interchange daemon.
Useful only for debugging purposes.
</p>
+export.main	Individual Table Export	<p>
The <b>Individual Table Export</b> page allows you to export any of the internal tables on Interchange to a file on the server.
<p>
<h2>Functions</h2>
<b>Export</b><br>
After selecting the export criteria, click <b>Export</b> to export the table.
The following list describes the <b>Export As</b> available formats.
<ul>

<p>
  <li><b>Current Type/System Default</b><br>
    Types specified in the Interchange configuration files.
<p></p>

<p>
  <li><b>TAB Delimited</b><br>
    First line of the file represents column names. Each line
represents a row, with tab characters separating columns.
<p></p>

<p>
  <li><b>CVS</b><br>
    The same as TAB delimited, but separated by commas and quotes.
<p></p>

<p>
  <li><b>PIPE Separated</b><br>
    The same as TAB delimited, but separated by | characters instead of tabs.
<p></p>

<p>
  <li><b>%%/%%%</b><br>
    One column per line, separated by %% lines, with %%% between rows.
<p></p>
</ul>
+faq	Frequently Asked Questions	<p> <i><b>Does Interchange do real-time credit card processing?</b></i> <br>
No, but it does interface with real-time payment processing systems, along with transaction management and order management systems of all kinds. Please <a href="mailto:info@akopia.com">contact Akopia</a> for more information.
</p>

<p> <i><b>Interchange is open source, but I don't know how to do computer programming.
  What can I do if I want to add features?</b></i> <br>
Akopia's consulting group provides an array of installation, customization, and custom programming services. Contact them at <a href="mailto:consulting@akopia.com">consulting@akopia.com</a>.
</p>
+flex.meta	Meta information edit	<p> The <b>Meta Information Edit</b> page allows a user to edit the parameters
  of a displayed field. For example, if you click the <b>meta</b> link for the
  <b>Last Name</b> field, the <b>Meta Information Edit</b> page is displayed for
  that field. Editing the parameters in the <b>Meta Information Edit</b> page
  effects the values that will be accepted for the <b>Last Name</b> field. You
  could specify the width of this field, meaning the number of characters accepted,
  as 30 using the <b>Meta Information Edit</b> page. This would limit the length
  of any value entered in the <b>Last Name</b> field to 30 characters.
<p> The <b>Meta Information Edit</b> field is displayed only to Super Users. Exercise
  caution when editing this page.
<p><h2>Features</h2>
<b>OK</b><br>
After entering the necessary values, click <b>OK</b>. The following is a description of some of the displayed fields.
<ul>
<p>
  <li>"Widget Type" specifies the HTML INPUT tag type to use when displaying the
    field in, say, the item editor.
    <p></p>

<p>
  <li>"Width" and "Height" only apply to some of the "Widget Type" options, for
    instance the "Textarea" widget.
    <p></p>

<p>
  <li>"label" is displayed instead of the internal column name. For example, the
    "category" column of the "products" table might have a label of "Product Category."
    <p></p>

<p>
<li>"help" is displayed below the column label, and helps describe the purpose of
the field to the user.
<p></p>

<p>
<li>"help url" can be used to link to a page giving more information on the field.
<p></p>

<p>
  <li>"lookup" can be used when a field is acting like a foreign key into another
    table. In that case, you'll probably want to use some sort of select box as
    the widget type, and if you want to reference multiple rows in the destination
    table, you'll probably want to use a multi-select box, with "colons_to_null"
    as the pre_filter, and "::" as the lookup_exclude.
    <p></p>

<p>
<li>"filter" and "pre_filter" can be
for that field
or data read from that field, respectively.
<p></p>
</ul>
+flex.select	Direct Table Edit: Select for table edit	<p>
Having selected a table to edit, you can now add a new row, edit an existing
row, edit all rows spreadsheet-style, or delete a row.
</p>
+genconfig.main	Catalog Information	<p> Here you see various information on the catalog and Interchange installation.
  Of particular interest are:
<ul>
  <li><b>Active Sessions: </b>Here you can select an active session and see all
    the information Interchange has on currently active Web site visitors, including
    Administrators.<br>
    <br>
  <li><b>Database Information:</b> This lists all the Perl database access modules
    installed on the server and available for Interchange. <br>
    <br>
  <li> <b>Module Information:</b> A list of Perl modules available to Interchange,
    with comments about affected functionality for those that are missing.
</ul>
+genexport.main	Import/Export	<p> Interchange makes it easy to import and export data to and from your commerce
  Web site. </p>

<p>
<a href="dbupload.main.html">Database Upload</a> allows you to import a tab delimited database of your product information to Interchange to make set-up faster and easier.
</p>

<p>
<a href="dbdownload.main.html">Database Download</a> does just the opposite, allowing you to download the data from Interchange.
</p>

<p>
<a href="layoutupload.main.html">Layout Upload</a> lets you upload your site's layout information.
</p>

<p>
<a href="layoutdownload.main.html">Layout Download</a> lets you download your site's layout information.
</p>
+gensql.main	Direct SQL utility	<p> The <b>Direct SQL Utility</b> should only be used by the Site Administrator
  or Super User that is familiar with the utility. </p>
+gentable	Direct Table Edit	<p>
The <b>Direct Table Edit</b> page allows you to edit any of Interchange's internal tables. Select a table
to edit, or search a table and select rows to edit.
</p>
+glossary.main	Glossary	<p>
<b>Akopia</b><br>
  Developer of Interchange, open source e-commerce storefront management system.
  Akopia also offers a wide array of e-commerce consulting services. For more
  information please see <a href="http://www.akopia.com/">Akopia's Web page</a>.
</p>

<p>
<b>Algorithm</b><br> A step-by-step problem-solving procedure, especially an established, recursive computational procedure for solving a problem in a finite number of steps.
</p>

<p>
<b>AOL</b><br> The largest Internet service provider in the United States.
</p>

<p>
<b>Apache</b><br> The most widely used web server. One of the most successful free software packages.
</p>

<p>
<b>API</b><br> Application Program Interface. A set of routines, protocols, and tools for building software applications. A good API makes it easier to develop a program by providing many building blocks for the programmer, who puts them together. Although APIs are designed for programmers, they are ultimately good for users because they help all programs using a common API will have similar interfaces.
</p>

<p> <b>Archiving Orders</b><br>
   A process through which you can remove your orders from immediate view on your management administrator without deleting the record.
</p>

<p>
<b>Browser</b><br> Short for Web browser, a software application used to locate and display Web pages. You're likely familiar with one if you're reading this, right?
</p>

<p> <b>Business to Business</b><br>
   Also seen as B2B. A B2B company offers goods and services to other businesses.
</p>

<p> <b>Business to Consumer</b><br>
   Also seen as B2C. These are companies that offer goods and services to consumers.
</p>

<p>
<b>Cell</b><br> An area in which data is entered.
</p>

<p>
<b>CGI</b><br> Common Gateway Interface. A specification for transferring information between a World Wide Web server and a program. A CGI program is any program designed to accept and return data that conforms to the CGI specification. The program could be written in any programming languag
re a common way for Web servers to interact dynamically with users.
</p>

<p>
<b>Cookie</b><br> A chunk of information transmitted to a Web browser by a Web server. The browser stores the information on the user's local computer (either in memory or on the hard disk). The message is then sent back to the server each time the browser requests a page from the server. The main purpose of cookies is to identify users and possibly prepare customized Web pages for them.
</p>

<p> <b>E-Commerce</b><br>
   The specific business of selling goods and services via the Internet.
</p>

<p> <b>Electronic Catalog</b><br>
   An Internet site that offers goods and services for sale. Much like the magazine catalogs.
</p>

<p>
<b>Embedded Perl</b><br> When the programming language Perl can be found within the context of another language, it is said that it is embedded. Interchange supports embedding Perl right into its HTML templates.
</p>

<p>
<b>FAQ</b><br> Frequently Asked Questions. (Usually including the answers to those questions!)
</p>

<p>
<b>HTML</b><br> Abbreviation for Hypertext Markup Language. The language of codes used to format plain text, most often for viewing in a web browser.
</p>

<p>
<b>HTTP</b><br>
  Abbreviation for Hypertext Transfer Protocol. The primary mechanism (or protocol)
  of transfering information over the Internet from a Web server to a user's computer.
</p>

<p>
<b>httpd</b><br>
  Hypertext transfer protocol daemon: a Web server. </p>

<p>
<b>Internationalization</b><br> (Also known as I18N.) The adaptation of Interchange for multiple languages and currencies.
</p>

<p>
<b>Item</b><br> A single product in your on-line store.
</p>

<p>
<b>Java</b><br> A general purpose programming language used both on servers and clients (Web browsers).
</p>

<p>
<b>JavaScript</b><br> A scripting language developed by Netscape to enable Web authors to design interactive sites. Although it shares many of the features and structures of the full Java language, it was developed independently.
</p>

<p>
<b>Interchange
e flagship e-commerce platform developed by Akopia. Interchange is an open
  source program that has thousands of implementations throughout the world. For
  more information on Interchange please visit the <a href="http://www.akopia.com/">Akopia
  Web site</a>. </p>

<p>
<b>Linux</b><br>
  The UNIX-like kernel developed by Linus Torvalds, which forms the basis of many
  open source computer operating systems. </p>

<p>
<b>Matrix</b><br> A table of all the possible combinations of options available for an item.
</p>

<p>
<b>Netscape Navigator (or Communicator)</b><br> A popular web browser.
</p>

<p>
<b>Open Source</b><br> Software with source code that is freely viewed and altered by its users. Often the software is released under the license of the GNU General Public License which requires further distribution be free of cost or usage restrictions, and that program source code be made available.
</p>

<p>
<b>Perl</b><br> Amazing, powerful, flexible, expressive, free programming language by Larry Wall. See <a href="http://www.perl.com/">perl.com</a> for all sorts of information on Perl.
</p>

<p> <b>Product Matrix</b><br>
   The complete list of possible descriptors for a product. This includes size, color, etc.
</p>

<p>
<b>Regeneration</b><br> After making changes to a site or page, commanding Interchange to regenerate means to update the changes for general use.
</p>

<p>
<b>Search Engine</b><br> A program that is designed to search through a database to answer queries.
</p>

<p> <b>Shipping Algorithm</b><br>
   The equations used to calculate shipping costs.
</p>

<p>
<b>SKU</b><br> Stock Keeping Unit. A unique code associated with each product for inventory purposes.
</p>

<p>
<b>SQL</b><br> Structured Query Language. SQL is a standardized query language for requesting information from a database.
</p>

<p>
<b>SSL</b><br>
  Secure Sockets Layer. A transport-layer technology, developed by Netscape, that
  allows secure transactions among compliant browsers and Web servers. </p>

<p>
<b>Template</b><br> With 
to Akopia's software, templates are pre-designed formats that a business can use to create a ready Interchange implementation.
</p>

<p> <b>Web Server</b><br>
   The computer and/or software that delivers Internet information to the user's computer.
</p>

<p> <b>Zone-Based Shipping</b><br>
   The calculation of shipping charges based on the region of destination.
</p>
 group.main	Administrator Groups	<p>
The <b>Admin Group Manager</b> page allows you to create and edit  entire groups of users at one time, without having to access each user's individual profile, and restrict the use of certain Administration Site functions on a per group basis. This feature is useful if you want to limit access to the Interchange Administration Site for an entire group of users.
<p>
<h2>Functions</h2>
<b>Create New Group</b><br>
To create a new user group, click this button.
<p>
<b>Edit Group</b><br>
After choosing a group name from the list, click this button to make changes to that user group's preferences, such as <b>Super User</b> status.
<p>
<b>Show Permissions</b><br>
After choosing a group name from the list, click this button to view that group's site access permissions.
<p>
<b>Delete Group</b><br>
After choosing a group name from the list, click this button to delete that group from the system.
<p>
<b>Back</b><br>
To return to the previous page, click this button.<br>
<p>

<i><b>Hint:</b> By default, Administrator accounts are stored and managed
separately from customer login accounts.</i>
</p>
-shipping.price	Shipping by Price	<p>
Shipping total based on the total price of the order. This can also be used to calculate a flat shipping price ($0 - infinity = $4.95) or a flat rate with big orders shipped free ($0 - 500 = $4.95 and $500 - infinity = free). The shipping charge can either be a flat charge or a percentage.
</p>

<p>
To begin, click on the plus sign once for each range you would like to enter. You can add or subtract more fields at any time, so don't worry. <i><b>Hint</b>: On some browsers, when you click the plus sign more than once, it won't register. In that case, click the "reload" button on your browser to make more fields appear. The first range will automatically start with zero and the last range will automatically end with infinity.</i><p> If you want one flat rate charge, only create one range, from zero to infinity and give it a charge amount. Otherwise, create all the ranges you need and give each range an amount. In case you would like to charge a percentage of the order total as the shipping and handling charge, you have the option of specifying a percentage for any of the ranges. Note: Interchange automatically bases the beginning point of each range on the end of the last. If you end one range at $50.00, the next range will begin at $50.01.
</p>
+home	Interchange Administration Tool Help	<p>The Interchange context-sensitive help system is easy to use. Simply click
the <b>Help</b> link in the upper right-hand section of any page of the Interchange
Administration Tool. A small popup window will appear offering help for that
page.</p>
<p><b>Using the Interchange Administration Site</b></p>
<p>Some shortcut functions are accessible on each page of the Interchange
Administration Tool:</p>
<ul>

  <li><b>Interchange logo</b><br>
The <b>Interchange logo</b> link is located in the upper left-hand corner of each page. Clicking this logo takes you to the main menu of the UI.
    
  </li>
  <li><b>Tables</b><br>
The <b>Tables</b> link is located in the upper right section of each page.
Clicking this link takes you to the <b>Database Tables</b> page of the Interchange
Administration Tool. This shortcut function allows you to quickly access
table information.
    
  </li>
  <li><b>Quicklinks</b><br>
The <b>Quicklinks</b> link is located in the upper right section of each
page. Clicking this link displays a window containing shortcut links to commonly
used pages in the Interchange Administration Tool.
    
  </li>
  <li><b>Apply Changes</b><br>
The <b>Apply Changes</b> link is located in the upper right section of each
page. Clicking this link updates the Interchange server with certain non-automatic
changes.
    
  </li>
  
  <li><b>Log Out</b><br>
The <b>Log Out</b> link is located in the&nbsp;upper right  section of each
page. Clicking this link logs you out of the Administration Tool. You can
log back in as a different user if you wish.</li><li><span style="font-weight: bold;">Interchange version<br>
    </span>The version of Interchange is displayed in the lower
left-hand corner. Clicking on <span style="font-weight: bold;">Interchange</span> takes you to the ICDEVGROUP
developer site<span style="font-weight: bold;">.<span style="font-weight: bold;"></span><br>
    <span style="font-weight: bold;"></span></span></li>
  <li><b>Store ID</b><br>
Your <b>Store ID</b>
on of each page. Clicking
this link takes you to your store's main Interchange page. This allows you to instantly
view site changes implemented through the Administration Tool.</li>

</ul>

<p>Here are the available help topics:</p>
~~HELP_TOPICS~~<br>
+import.main	Table Import	<p>
The <b>Table Import</b> page allows you to upload a file from your computer
to Interchange in order to update one of Interchange's internal tables. This
can be done in one of several formats -- TAB-delimited text, Gnumeric simple text,
or Excel XLS workbook.
</p>

<p>
You can import slices of a table -- the only column that is required is
the key column (for example, <B>sku</B> is usually the key column for
<i>products</i> and <i>inventory</i>).

<P>
For instance, to update only the quantityfor a series of items in <i>inventory</i>, create a file with two columns, the
<B>sku</B> and <B>quantity</b>. Not all items must be updated, so you can
just upload the ones to be added or changed.
</p>

<p>
If you wish rows to be added when a new key is found, keep the default selection
<b>Add new items if present</b>. To only update existing rows, change
that to <b>Ignore new items</b>.
</p>

<p>
To upload changes to a single table in TAB-delimited format,
select a TAB-delimited file to send to Interchange by clicking <b>Browse...</b>,
and a table to update from the list on the right. Then select whether to
add new rows from your file to the table, or to only update rows that are in
both your file and the table.
</p>

<p>To upload changes to multiple tables in <B>Gnumeric simple-text</B> format,
select it and use <b>Browse...</b>, then select your upload options.
The table selection is not important because the table is selected from
with the Gnumeric simple-text file.
</P>

<P>
Uploading in <B>Excel/XLS</b> format requires that the module Spreadsheet::ParseExcel
be installed on your server. Check with your admin if you need this and
the option is not present in the file format chooser. Otherwise, you simply
select the <tt>.xls</tt> file with <B>Browse...</b> and upload as with
Gnumeric simple-text format.
+item.edit	Items: Edit/Create	<p>
The <b>Items: Edit/Create</b> page allows you to create or edit an item by filling in it's fields.
Common fields include <b>Short Description</b>, <b>Long Description</b>, and <b>Image</b>, that are used when displaying an item on a catalog page, and <b>Product Price</b> and <b>Weight in Pounds</b>, that are used when calculating charges in the shopping basket.
</p>

<p>
The <b>Category</b> field can be used to select which category pages the item
will appear on. Multiple categories can be selected. For more control
of product categories, choose <b>Site Layout</b> from the quicklinks menu.
</p>

<p>
The <b>meta</b> link, which is only visible to the Site Administrator or Super User, is displayed below each field name. This link allows the Site Administrator or Super User to change the parameters for each field. For more information on <b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a> page.
</p>
 item.editor	Item Editor	<p>
The <b>Item Editor</b> page displays a directory of the product items logged in your system. This page also allows a quick view of information associated with each item, such as SKU, pricing, etc.
<p>
<h2>Features</h2>
<b>Limit with Search</b><br>
Type the paramater by which you want to search the Item list. For example, type <b>14.99</b> to perform a search for all items priced at $14.99. Only the items containing the search parameter will be displayed.
<p>
<b>Edit Checked Items in Sequence</b><br>
Click this button after checking the item(s) you want to edit. The <a href="edit.item.html"> Edit Item</a> page is displayed for the first item you checked. Make the necessary edits and click <b>OK</b>. The <b>Edit Item</b> page of the next item you checked is displayed.
<p>
<b>Delete Checked Items</b><br>
Click this button after checking the item(s) you want to delete. A warning is displayed. Click <b>OK</b> to delete.
<p>
<h2>Functions</h2>

You can sort the item directory by clicking the heading of the column by which you want to sort. For example, to sort by price, click the <b>Price</b> heading. This displays the orders by amount in ascending or decending order. To sort in reverse order, click the <b>Price</b> heading again.

Click a value listed in one of the following columns to access specific information about that value:<p>
<ul>
<li>SKU-click a SKU value in this column to access the <a href="edit.item.html">Edit Item</a> page for that item.
<li>Quantity Pricing-click the value in this column to access the <a href="something.html">Pricing</a> page for that item.
<li>Up Sell-click the value in this column to access the <a href="something.html">Upsell</a> page for that item.
<li>Cross Sell-click the value in this column to access the <a href="something.html">Cross Sell</a> page for that item.
<li>Promotion-click the value in this column to access the <a href="something.html">Feature</a> page for that item.
<li>Inventory-click the value in this column to access the <a href="something
-order.main.archived	Archived Orders	The <b>Archived Orders</b> page displays all archived orders in the system. Orders are usually archived when they have been fulfilled. For an order to be displayed in the <b>Archived Orders</b> section, it must be manually moved from the <A HREF="order.main.pending.html">Pending Orders</a> section. This page works in real-time, but if you leave this page open or your Web browser has cached the page's contents, it is recommended that you re-load the page periodically
to see the most recent orders.
<p>
<h2>Functions</h2>
<p>
<b>Start at Order Number</b><br>
Type the order number to be displayed first. Following this number, all other order numbers will be displayed in numerical order.
<p>
<b>Limit with Search</b><br>
Type the parameter by which you want to search. For example, type <b>CA</b> to search for all orders originating in the state of California. Only the orders containing the search parameter will be displayed.
<p>
<b>Delete Checked Orders</b><br>
Click this button after checking the order(s) you want to delete. A warning is displayed. Click <b>OK</b> to delete. The deleted order(s) are removed from the <b>Orders</b> page, but remain in the system. <i><b>Hint:</b> To delete an individual order, click the <b>X</b> in the red square beside the order number.</i>
<p>
<b>Unarchive Checked Orders</b><br>
Click this button after checking the order(s) you want to unarchive. The order(s) are moved back to the <A HREF="order.main.pending.html">Pending Orders</a> section.<br>
<i><b>Hint:</b> To unarchive an individual order, click the black arrow beside the order checkbox.</i>
<p>
<h2>Features</h2>
You can sort the order list by clicking the heading of the column by which you want to sort. For instance, to sort by total price, click the <b>Total</b> heading. This displays the orders by amount in ascending or descending order. To sort in reverse order, click the <b>Total</b> heading again.
<p>
You can view the details of a specific order by clicking the <b>Order Number</b>, <b>Use
>, or <b>Status</b>.<br>
Click the <b>Order Number</b> to access the <a href="order.view.html">View Order</a> page.<br>
Click the <b>User</b> to access the <a href="customer.view.html">View Customer</a> page.<br>
Click the <b>Status</b> to access the <a href="item.edit.html">Order Status</a> page.
<p>

<!-- commented out
<p>
<b>Delete False Order</b><br>
Periodically, either through fraud or because an order fell through after it was placed due to product availability problems, an order will need to be deleted and not reported in the order statistics. Select the false order from the list and click on the delete false order button. You will be asked for confirmation to delete this order, because once an order is deleted, it is irretrievable.
</p>
-->
-access.main	Administrator Accounts	<p> The <b>Administrator Accounts</b> page allows the Site Administrator to create
  and edit user accounts and restrict the use of certain Administration Site functions.
  For example, you may wnat one user to have access to order and customer information,
  but not to Web content.
<p> Users can have permissions granted on an individual basis, or by group. A
  <b>Super User</b> has access to all Interchange Administration Site areas, regardless
  of how the permissions are set.
<p> <i><b>Hint:</b> Clicking <b>Access</b> from the menu displays the <b>Users</b>
  of the Access section by default. To access the <b>Groups</b> section, click
  <b>Groups</b> from the menu.</i>
<p>
<h2>Functions</h2>
<b>Create New Administrator</b><br>
To create a new administrator account, click this button.
<p> <b>Edit Administrator</b><br>
  After choosing a user name from the list, click this button to make changes
  to that user's preferences, such as the user group he or she belongs to or that
  user's <b>Super User</b> status.
<p> <b>Show Permissions</b><br>
  After choosing a user name from the list, click this button to view that user's
  site access permissions.
<p> <b>Change Password</b><br>
  After choosing a user name from the list, click this button to change that user's
  password.
<p> <b>Delete Administrator</b><br>
  After choosing a user name from the list, click this button to delete that user
  from the system.
<p> <b>Back</b><br>
  To return to the previous page, click this button.<br>
  <br>

<p><i><b>Hint:</b> By default, administrator accounts are stored and managed separately
  from customer login accounts.</i> </p>
 item.main	Items	<p>
<b>Create New item</b><br>
Click this button to create a new item.
</p>

<p>
<b>Edit item</b><br>
After selecting an item from the list, click <b>Edit Item</b>. Edit the necessary fields.
<p>
<b>OK</b><br>
To commit your changes, click <b>OK</b>.
<i><b>Hint:</b> Using the browser's back button to exit the screen will not commit the changes you have made. </i>
<p>
<b>Delete Item</b><br>
Select an item from the list that you want to delete, and click
<b>Delete</b>. A warning is displayed. Click <b>OK</b> to delete. The deleted item is permanently removed from the system.
</p>
-search_builder	Search Builder	<p>
The <b>Search Builder</b> page allows you to generate very complex reports on the database, or to help in the construction of ITL templates.
</p>

<p>
Select a <b>Base Table</b> to be the foundation for the report. Specify the maximum number of rows to be returned at once, and if you want the table to show only
unique entries.
</p>

<p>
The <b>Search Filter</b> then allows you to narrow down the list of rows returned
by matching columns of the table based on various criteria. Up to three
separate conditions can be specified. The returned rows must match all criteria.
</p>

<p>
Finally, select any sorting options you wish the results to be displayed by and decide the list of columns you want returned.
</p>

<p>
Click <b>Run</b> to run the search immediately and display the results.
<b>Generate Definition</b> will display an ITL tag which can be placed in a template
and which will return the results when executed.
</p>
-wizard.indexpage	Wizard : Index Page	<p><font size=2>This page allows you to create an index page. The index page is the first page of your site, and is ususally the first page that your customers see.<p><font size=2>In the <b>Page Title</b> field, enter the title for your index page. Typically the index page title contains the name of your store. The <b>Content</b> field has been pre-populated with sample information that has been formatted in HTML. If you are unfamiliar with HTML, it is recommended that you leave the HTML coding in place and simply replace the existing text with text relating to your store. If you are familiar with using HTML, you can choose to delete the prepopulated text and construct this page using your own text and HTML coding.
-tax.main	Tax	<p>
The <b>Tax Manager</b> allows you to set up multiple sales tax rates that might apply
to your customers. The simplest example, which would apply to most merchants,
is one tax rate for those people in your state and one tax rate (0%) for those
outside the state. Of course, your business might have multiple locations or
your state might have different tax rates by city, so you have the option of
creating an unlimited number of tax rate choices.
</p>

<p>
To begin, specify the location to which the tax rate will apply. To create
a new entry, click on the red <b>+</b>, then enter the amount of tax to
be applied to orders which specify that location during checkout.
</p>

<p>
If you're done, click on the <b>OK</b> button. Otherwise, click the plus sign and
continue until you've created all the rates you need.
</p>

<p>
If you need to delete any of the rates, of if you accidentally created too
many fields, click the red <b>X</b> next to that rate.
</p>

<p>
If your company has many locations or your sales tax needs are very
complicated, Interchange can be set up to work with third party tax software.
<a href="mailto:info@akopia.com">Contact Akopia</a> for more information.
</p>
-prefs.main	Preferences	<p>
This feature allows you to change the colors of the administration interface. Changing the color does not affect system functionality.
</p>
 knar.main	Knar Editor	<p>
Knar stands for "Knar's Not A Registry." It's kind of like a registry.
</p>

<p>
The Knar table stores store-wide configuration information. If you don't know
about store-wide configuration, it probably won't help you much. On the other
hand, if you just can't find the place to tweak the value you're looking for,
it might be worth poking around (gently!) in here.
</p>
+layout.edit	Site Layout	<p>
The <b>Site Layout Editor</b> can be used to manage the content on your site.
Content is divided into sections, and you can create subsections of each
section, much like directories and subdirectories on a disk.
</p>

<p>
Selecting a section on the left shows information about it on the right.
Click <b>Create New Section</b> to create a new top level section, or select an
existing section and click <b>Create Subsection</b> to create a new section under
the existing section heading.
</p>

<p>Sections come in three types: product pages, content pages, and links to
foreign pages. In future releases of Interchange, you'll be able to
control many page attributes without having to edit the templates by hand.
</p>

<p>
Product pages are for listing items in your inventory. Generally, you'll
create a section for each kind of item in your store, so that visitors can
browse your items easily. If you have many kinds of items, you may want to
list their sections together under a <b>Products</b> section. When you've selected
a section that is a product page, you will be presented with a list of items
in that section and options for adding and deleting items in that section.
Deleting an item from a section doesn't actually delete the item from your store; the <b>Items</b> page is used for that.
</p>

<p>
Content pages are pages which primarily contain information about the site and
don't list any items. You can choose from pages you've uploaded with the
file uploader.
</p>

<p>
Links to foreign pages provide an easy way to link to another site.
</p>
+layout.main	Layout Manager	<p>
The site layout manager is the interface that a designer or product manager uses to assign products to a page, manage elements on the page such as links, do merchandizing like specifying featured products, and rearranging elements on the pages.
</p>

<p>
When you enter this page, you see first a listing of the main pages linked on the front page of your Web site and other elements on that page such as featured products or navigation bars. We call these the "children" of the front page. If you click on the name of one of these children, the list will expand to show you the children of that element, and so on. Next to the name of each child is a radio button. Select the button of the element you want to work with before clicking any of the buttons at the bottom of the page.
</p>

<p>
<b>Add as Child</b><br>
You can add three types of children to any particular element: items, groups, and pages. The pull-down menus below the list display the available children. To add children to a page, first click the radio button next to that page's name in the list, then select either a group, page, or item from the pull-down menus. Click on the "Add as Child" button. You should see the new child appear under its parent automatically.
</p>

<p>
<img src="images/layout.add.child.jpg" alt="" width="350" height="254">
</p>

<p>
<b>Rearrange Children</b><br>
The order that the children appear in this list is important, as it determines the order in which they will be displayed on the site. The "Rearrange Children" feature lets you place them in the correct order. First, click the radio button next to the parent whose children you want to arrange, then click on the "Rearrange Children" button. That will take you to a new screen with a list of all the children in order. Select each child that you want to move, then click the "up" or "down." Continue this process until they're in the right order, then click "ok." Clicking "cancel" will take you back without making any changes, even if you've already rear
d some of your products.
</p>

<p>
<b>Move Some Children/Move All Children</b><br>
If you want to move children out from under one parent over to another, these two functions will do that. "Move Some Children" allows you to choose which of the children in the list you would like to move, then asks you which new parent to assign them under. "Move All Children" simply moves them all. Below, see the "Move Children" screen. Notice you can "control click" to select more than one child to move.
</p>

<p>
<img src="images/layout.move.child.jpg" alt="" width="200" height="210">
</p>

<p>
<b>Hide All</b><br>
Just as clicking on the name of an element will make its children appear, clicking on the name again will make them disappear. If you have a lot of different parents' children showing, the "Hide All" button will make them all disappear.
</p>

<p>
<b>Delete</b><br>
The delete button allows you to remove a child from the parent. Select the child you would like to remove by clicking the button next to its name, then click on the delete button.
</p>
 layoutdownload.main	Layout Download	<p>
Coming Soon
</p>
-admin.edit.user	Administrator Edit	<p>
The <b>Administrator Edit</b> page allows you create and edit administrator preferences.
<p>
<h2>Functions</h2>
<b>Real Name</b><br>
If adding an administrator, type the name of that administrator in this field.<br>
<i>or </i><br>
If editing an administrator, make the necessary changes here.
<p> <b>User Name</b><br>
If adding an administrator, type the user name of that administrator in this field.<br>
  <i>or</i><br>
If editing an administrator, the user name for that administrator is displayed here.
<p> <b>Super User</b><br>
  If the administrator you are adding or editing is a Super User, be sure to check
  this box. A <i>Super User</i> is an administrator that has full access to all
  aspects of the Administration Site, regardless of what permissions have been
  set.
<p>
<b>Groups</b><br>
Click the name of the group with which you want this administrator to be associated.
<p>
<b>Permissions</b><br>
To view and/or edit the site access permissions for this user, click this button.
<p>
<b>OK</b><br>
To commit the administrator changes/additions you made, click this button.
<p>
<b>Cancel</b><br>
To abandon the changes/additions you made, click this button.
-wizard.verisign	Wizard : Signio/Verisign Payment Preferences	Enter the values you recieved when you registered for payment processing through Signio/Verisign. If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold</b>. 
-affiliates.main	Edit Affiliates	<p> An Affiliates Program allows the merchant to make linking agreements with
  the owners of other web sites then track which orders come in from those off-site
  links. In many cases, the partner site earn a percentage of the sale from that
  link. In other cases, the merchant is simply interested in knowing how many
  people are buying as a result of a particular link. The <b>Edit Affiliates</b>
  page allows you to edit Affilite information. </p>

<p> <b>Create New Affiliate</b><br>
  Click this button to make a new Affiliate. You will be asked to give that Affiliate
  a name. This name will appear in your personal list of Affiliates and will also
  appear on any orders resulting from this affiliate's links. After you submit
  the new Affiliate information, Interchange will display a unique URL which you
  will need to email to your new Affiliate. They will receive credit for an order
  only if the purchaser originally clicked on that specific URL. </p>

<p> <b>Default URL to Redirect to</b><br>
  When setting up your Affilate, you have the choice of having their link point
  to your front page, to any other page in your site, or perhaps to a welcome
  page specifically for that Affiliate's customers. Enter the complete URL in
  this space. Note: do <i>not</i> enter the URL of the Affiliate's web site in
  this space. </p>

<p> <b>Timeout Delay</b><br>
  The amount of time you enter here, in seconds, is the time that purchasers have
  between the time they enter your site through the link and when they must purchase
  before their status expires. If you set this time to 60 seconds, most purchasers
  will not have time to place an order and your Affiliate would not get credit
  for any of the sales. We recommend a setting in the thousands, or a setting
  of zero, which disables this feature. </p>

<p> <b>Edit Affiliate</b><br>
  Select an Affiliate's name from the list, and click "Edit Affiliate" to review
  or change the Affiliate information. If you forget the URL that the Af
iate" screen. </p>

<p> <b>Show Orders</b><br>
  This feature will review the number, amounts, and specifics of all orders attributed
  to a particular affiliate. Select the Affiliate from the list and click "Show
  Statistics." </p>

<p>
<b>Show Traffic</b><br>
This button will allow you to view information on the number of visitors who
have come to your site via the selected affiliate.
</p>

<p> <b>Delete Affiliate</b><br>
  Select the Affiliate from the list and click "Delete Affiliate" to remove it.
  You will be asked to confirm your choice, after which it can not be recovered.
</p>

<p>
<b>Affiliate Relations</b><br>
  You may also choose to allow the Affiliate to view the statistics for the traffic
  on your site to which they are responsible. You can do this by allowing them
  a restricted amount of access. (See the <a href="access.main.html">Access Manager</a>
  for details.) </p>

<p> Note: the affiliates feature requires that the purchaser's computer accept
  cookies. Keep in mind that some purchasers may have their browsers set to reject
  cookies or may be using browsers that do not support them. </p>
-access.permissions	Administrator Permissions	<p>
The <b>Administrator Permissions</b> page allows you to select the operations that each user can have access to in the back office. Each section of the back office can be restricted with great detail. For example, a user can be given the ability to view a list of all orders, but not have access to the order details. Access to the individual rows of Interchange's internal tables can also be restricted on a per-table basis for each user.
<p>
<h2>Functions</h2>
<b>OK</b><br>
After selecting the type of access the user will have to each section of the Interchange Administration Site, click <b>OK</b> to commit the changes. The next time this user logs on to the Administration Site the new permissions will be used.
<p>
<b>Cancel</b><br>
Click Cancel to abandon the permissions change.
</p>
-page.editor	Page editor	<p>
The <b>Page editor</b> displays a directory of the html pages that make up your site, including the Interchange Administration Site pages, allowing you to quickly access and edit any page of your site.
<p>
To access a web page, click the name of the web page from the <b>Page editor</b>. The Edit Page page is displayed.
-shipping.ups	UPS Zones-Based Shipping	<p>
Interchange is pre-configured with UPS zones tables for Ground, Three Day Select, Second Day Air, Second Day Air AM, Next Day Air Saver, and Next Dday Air.
</p>

<p>
If you require zones support for FedEx, DHL, or USPS, please <a href="mailto:info@akopia.com">contact Akopia</a>.
</p>

<p>
There are no tables to configure if you select these options, but to use zones-based shipping, you need to enter the zip code of your shipping location. Interchange will automatically generate zones charts based on your zip code.
</p>

<p>
[Coming Soon: Information on how to enter your zip code]
</p>
-reconfig	Reconfigure	<p>
<b>Apply Changes</b> commits all changes that the Interchange Administration Site doesn't commit automatically. It is good practice to occasionally click <b>Apply Changes</b> when administering the Administration Site to make sure your changes are implemented.
</p>
-wizard.preview	Wizard : Preview	<p><font size=2>The preview page allows you to view and test your newly created site before launch. After you preview your site you can go back to any point in the Wizard and make changes to your settings. You can preview and make changes as many times as necessary. <p>The following table describes the options displayed on this page.<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><font size=2><b>Field</b></td><td bgcolor="E0DCE0"><font size=2><b>Description</b></td></tr><tr><td><font size=2>Insert products data</td><td><font size=2>Enters into Interchange the product spreadsheet you uploaded. Choose <b>Yes</b> if you already uploaded sample product information or your own product information and want to enter it into Interchange. <br>Choose <b>No</b> if you entered products using the Manual Product Entry page.</td></tr><tr><td><font size=2>Insert sample order data</td><td><font size=2>Choose <b>Yes</b> to insert sample order and user data. This will help you to see how the Administration Tool works by providing sample orders and customers for view. You can purge this information before launch.</td></tr><tr><td><font size=2>Enable Secure (SSL)</td><td><font size=2>Choose <b>Yes</b> to enable your SSL certificate. This is not necessary to preview your site, but is strongly recommended for launch if you are processing payments online.</td></tr><tr><td><font size=2>Finish</td><td><font size=2>Click to preview your site.</td></tr></table>
-wizard.cybercash	Wizard : CyberCash Payment Preferences	Enter the values you recieved when you registered for payment processing through CyberCash. If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold. </b>
-customer	Active/Inactive Customers	<p> The <b>Active Customers</b> and <b>Inactive Customers</b> pages display all
  customers in the system. You can group the customers as active or inactive depending
  on your preference. <b>Active Customers</b> usually include those with pending
  orders or orders that have recently been filled. <b>Inactive Customers</b> usually
  include those who have decided not to create a user account or haven't submitted
  an order recently. Contact your Site Administrator or Super User for your rules
  regarding customers.
<h2>Functions</h2>
<b>Search for Customer</b><br>
Type the parameter by which you want to search for a customer. For example, type <b>CA</b> to search for all customers located in the state of California. Only the customers containing the search parameter will be displayed.
<p> <b>Delete Checked Customers</b><br>
  Click this button after checking the customer(s) you want to delete. A warning
  is displayed. Click <b>OK</b> to delete. The deleted customer(s) are removed
  from the page, but remain in the system. <i><b>Hint:</b> To delete an individual
  customer, click the <b>X</b> in the red square beside the customer ID.</i>
<p> <b>Deactivate Checked Customers</b> (on the <b>Active Customers</b> page)<br>
  <i>or</i><br>
  <b>Activate Checked Customers</b> (on the <b>Inactive Customers</b> page)<br>
  Click this button after checking the customers(s) you want to activate or deactivate.
  The customer(s) are moved to the appropriate section. <i><b>Hint:</b> To activate
  or deactivate an individual customer, click the black arrow beside the customer
  ID.</i>
<p>

<h2>Features</h2>
You can sort the customer list by clicking the heading of the column by which you want to sort. For instance, to sort by customer ID, click the <b>ID</b> heading. This displays the customers by ID in ascending or descending alphabetical order.
<p>
You can click the customer ID to access the <a href="customer.view.html">View Customer</a> page to view the details of a specific customer.
-export.main	Individual Table Export	<p>
The <b>Individual Table Export</b> page allows you to export any of the internal tables on Interchange to a file on the server.
<p>
<h2>Functions</h2>
<b>Export</b><br>
After selecting the export criteria, click <b>Export</b> to export the table.
The following list describes the <b>Export As</b> available formats.
<ul>

<p>
  <li><b>Current Type/System Default</b><br>
    Types specified in the Interchange configuration files.
<p></p>

<p>
  <li><b>TAB Delimited</b><br>
    First line of the file represents column names. Each line
represents a row, with tab characters separating columns.
<p></p>

<p>
  <li><b>CVS</b><br>
    The same as TAB delimited, but separated by commas and quotes.
<p></p>

<p>
  <li><b>PIPE Separated</b><br>
    The same as TAB delimited, but separated by | characters instead of tabs.
<p></p>

<p>
  <li><b>%%/%%%</b><br>
    One column per line, separated by %% lines, with %%% between rows.
<p></p>
</ul>
-wizard.payment	Wizard : Setting Up Payment Information	This section helps you to set up your payment acceptance and processing information and is intended only to get you started. It offers a choice of processing options and payment methods. This information will be entered into Interchange and populated into the Administration tool. The required fields are displayed in bold.<p>The following are descriptions of the fields displayed on the page:<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><b>Field</b></td><td bgcolor="E0DCE0"><b>Definition</b></td></tr><td>Payment gateway</td><td>The payment gateway that is processing your payments. Choose your payment processor from the drop-down list. If you don't have a payment processor, you can choose one now, or choose no credit cards. Your choices are:<br><ul><li><b>no credit cards</b>-select if you are not processing payment information, or if you are processing payments manually (over the phone or using a Magnetic Stripe Reader). You can also select this if you are unsure of how you will process your payments.</li><li>PGP sent credit cards-select if you are using Pretty Good Protection (PGP) to process your payments. For more information on PGP, see <a href="http://www.pgpi.org">www.pgpi.org</a>.</li><li><b>CyberCash</b>-select if you are using CyberCash to process your payments. For more information on CyberCash, see <a href="http://www.cybercash.com">www.cybercash.com</a>.</li><li><b>Verisign</b>-select if you are using Verisign to process your payments. For more information on Verisign, see <a href="http://www.verisign.com">www.verisign.com</a>.</li></ul></td></tr></table>
-wizard.pgp	Wizard : PGP Payment Preferences	Enter the values you recieved when you registered for payment processing through Pretty Good Protection (PGP). If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold</b>. 
-order.view	View Order	<p>
The <b>View Order</b> screen allows you to view detailed information about a particular order.
<p>
<h2>Functions</h2>

<b>Return</b><br>
Returns you to the <b>Pending Orders</b> or <b>Archived Orders</b> list.
<p>
<b>View Next Order</b><br>
Displays the next order. <i><b>Hint:</b> The <b>View Next Order</b> button displays the <b>View Order</b> pages in sequential order by order number. Both Archived and Unarchived orders are displayed.</i>
<p>
<b>Archive Order and View Next</b><br>
<i>or</i><br>
<b>Un-Archive Order and View Next</b><br>
The button displayed depends on if the order you are viewing is an <b>Archived Order</b> or <b>Pending Order</b>. It allows you to reverse the status of an order (from pending to archived, or vice versa).
<p>
<b>Delete Order and View Next</b><br>
Deletes the order and displays the next order.
<p>
<h2>Features</h2>

Depending on how much information is stored on the system about a customer, some of the items on the <b>View Order</b> page are hotlinked to allow you to access other information:<br>
<ul>
<li>Click the customer's name to access the <a href="customer.view.html">View Customer</a> page. The <b>View Customer</b> page displays detailed information about the customer.
<li>Click the customer's email address to send that customer an email.
<li>Click <b>Bill To:</b> to access that customer's complete billing information.
<li>Click <b>Ship To:</b> to access that customer's complete shipping information.
<li>Click the order's status to access the <a href="item.edit.html">Order Status</a> page. The <b>Order Status</b> page displays detailed information about the order shipment.

</p>
-customer.edit	Customer Edit	<p>

This help page corresponds to the following Administration screens:<p>
<ul>
<li>Customer preferences
<li>Customer shipping information
<li>Customer billing information
</ul>

These screens allow you to enter or change information relating to the customer.
The fields displayed on these pages are dependent on how the Site Administrator
or Super User set up Interchange Administrator. For assistance with completing
these pages, see your Site Administrator or Super User.
<p>
<h2>Functions</h2>
<b>OK</b><br>
After completing the necessary information on the page, click <b>OK</b> to commit your changes/additions. The page is refreshed and the changes are committed.
<p>
<b>Cancel</b><br>
Abandon entered changes without committing them. The page is refreshed, displaying only the original information.
<p> <b>Auto-Export</b><br>
  Click this checkbox to enable the Auto-Export feature. The Auto-Export feature
  exports the changes you are committing to the tables described on these pages
  to the original flat text file. This feature allows you to keep your original
  files up-to-date and portable. However, while this feature may not hinder the
  system's performance when exporting a small table, exporting a large table may
  slow your system.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super
User, is displayed below each field name. This link allows the Site Administrator
or Super User to change the parameters for each field. For more information on
<b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a>
page.
-wizard.authorizenet	Wizard : Authorize.net Payment Preferences	Enter the values you recieved when you registered for payment processing through Authorize.net. If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold</b>.
-wizard.itransact	Wizard : iTransact Payment Preferences	Enter the values you recieved when you registered for payment processing through Authorize.net. If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold</b>.
-wizard.skipjack	Wizard : Skipjack Payment Preferences	Enter the values you recieved when you registered for payment processing through Authorize.net. If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold</b>.
-wizard.index	Wizard : Welcome 	<font size=-1>The Catalog Wizard gets you started with the Interchange e-commerce platform. It will lead you through the process of configuring the fundamentals of your store. When you finish you will have a fully functioning e-commerce site!  <br><br>The checklist at the left side of the page shows your progress in the Catalog Wizard. You can complete the sections in any order and you can go back to any section at any time. At any point in the Catalog Wizard process you can choose to stop, save your settings, and continue later.
-shipping.weight	Shipping by Weight	<p>
<b>Standard Shipping by Weight:</b> This calculates shipping by total weight with no regard to zones. Weight-based shipping with zones are marked by the company whose zones the algorithm calculates by, i.e., <a href="shipping.ups.html">UPS</a>. To use this method, you must enter a weight for each item in your inventory.
</p>

<p>
<blockquote>
<i>Note: You can use any unit of measure you wish as long as you are consistent: if you enter your item prices in grams then configure shipping with pounds, your customers will not be happy when they are quoted huge shipping rates.</i>
</blockquote>
</p>

<p>
To begin, click on the plus sign once for each range you would like to enter. You can add or subtract more fields at any time, so don't worry. <i><b>Hint</b>: on some browsers, when you click the plus sign more than once, it won't register. In that case, click the "reload" button on your browser to make more fields appear. The first range will automatically start with zero and the last range will automatically end with infinity.</i>

<p>
Create all the ranges you need and give each range a charge amount. In case you would like to charge a percentage of the order total as the shipping and handling charge, you have the option of specifying a percentage for any of the ranges. Note: Interchange automatically bases the beginning point of each range on the end of the last. If you end one range at 5 kg, the next range will begin at 5.00001 kg.
</p>
-matrix.main	Matrix Editor	<p>
<b>What is a Matrix?</b><br>
A matrix is a table of all the possible combinations of options available for an item. For example, a golf club can have options for mens and ladies, right and left handed, several shaft types and flexes, different lofts, or head angles. But not all lofts are available in left handed, and some aren't available in ladies, and graphite shafts cost extra and all have different SKUs. The matrix contains all the variables. A simple matrix might be a size matrix, which has small, medium, large, and extra large. You would then be able to apply a unique sku or price or inventory information to each variation of each item.
</p>

<p>
A matrix can be specified for a particular item in the <a href="item.editor.html">Item Editor</a>, but each matrix must first be created in the Matrix Editor.
</p>

<p>
<b>Create New Matrix</b><br>
Here, give your new matrix a descriptive name, such as "drivers and fairway woods" or "build-to-order bikes."
</p>

<p>
<b>Edit Matrix</b><br>
This feature allows you to edit the name. To edit the matrix's dimensions, use the "Show Dimensions" feature.
</p>

<p>
<b>Show Dimensions</b><br>
This feature allows you to create new dimensions and create ranges underneath those dimensions.
</p>

<p>
<b>Create New Dimension</b><br>
Like the "Create New Matrix" feature, "Create New Dimension" simply lets you specify a name for the dimension. Each matrix can have an unlimited number of dimensions.
</p>

<p>
<blockquote>
Example: The "drivers and fairway woods" matrix will have dimensions for shaft type, flex, right/left handed, and loft.
</blockquote>
</p>

<p>
<b>Edit Dimension</b><br>
This feature allows you to edit the name.
</p>

<p>
<b>Show Ranges</b><br>
This feature will take you to another screen where you can create and edit ranges under that dimension.
</p>

<p>
<b>Create New Range</b><br>
This will allow you to give your new range a name. Each dimension can have an unlimited number of ranges.
</p>

<p>
<blockquote>
Example: The "flex" dime
vers and fairway woods" matrix will have range entries for light, firm, and stiff.
</blockquote>
</p>
-import.main	Table Import	<p>
The <b>Table Import</b> page allows you to upload a file from your computer
to Interchange in order to update one of Interchange's internal tables. This
can be done in one of several formats -- TAB-delimited text, Gnumeric simple text,
or Excel XLS workbook.
</p>

<p>
You can import slices of a table -- the only column that is required is
the key column (for example, <B>sku</B> is usually the key column for
<i>products</i> and <i>inventory</i>).

<P>
For instance, to update only the quantityfor a series of items in <i>inventory</i>, create a file with two columns, the
<B>sku</B> and <B>quantity</b>. Not all items must be updated, so you can
just upload the ones to be added or changed.
</p>

<p>
If you wish rows to be added when a new key is found, keep the default selection
<b>Add new items if present</b>. To only update existing rows, change
that to <b>Ignore new items</b>.
</p>

<p>
To upload changes to a single table in TAB-delimited format,
select a TAB-delimited file to send to Interchange by clicking <b>Browse...</b>,
and a table to update from the list on the right. Then select whether to
add new rows from your file to the table, or to only update rows that are in
both your file and the table.
</p>

<p>To upload changes to multiple tables in <B>Gnumeric simple-text</B> format,
select it and use <b>Browse...</b>, then select your upload options.
The table selection is not important because the table is selected from
with the Gnumeric simple-text file.
</P>

<P>
Uploading in <B>Excel/XLS</b> format requires that the module Spreadsheet::ParseExcel
be installed on your server. Check with your admin if you need this and
the option is not present in the file format chooser. Otherwise, you simply
select the <tt>.xls</tt> file with <B>Browse...</b> and upload as with
Gnumeric simple-text format.
-dbdownload.main	Database Download	<p></p>
<p>
The <b>Database Download</b> page allows you to export any of the internal
tables on Interchange to the <b>backup</b> directory of your catalog. By
default, it exports each table to a tab-delimited file named for the table.
It also can export Gnumeric simple-text output and, if you have the Perl Spreadsheet::WriteExcel module installed, it can write XLS spreadsheet files.

<blockquote>
NOTE: XLS output is only available when you have the Spreadsheet::WriteExcel
module installed.  Spreadsheet::WriteExcel is available at CPAN.
</blockquote>

<p>
To use, take the following steps:

<OL>
  <LI>Check the boxes corresponding to the tables you want to export.
  <LI>Select whether you want Gnumeric output and/or XLS output.
  <LI>Click <B>Perform Export</B> button.
</OL>
NOTE: If you have very large database tables, the export function may take a
long time. It is not recommended for more than 25,000 products.

<P>
Once the tables are exported to a Gnumeric or XLS format, they will be
available for download on the same page. Individual tables are downloadable
via the <I>File Transfer</I> menu.
<P>
Caveats:
<P>
<UL>
  <LI>Fields longer than 255 characters will be wrapped to the next line
  and must be combined in the spreadsheet to be re-imported.
</UL>
-upload.main	File Transfer	<p>
The <b> File Transfer</b> page allows you to easily transfer pages, templates, and configuration files to and from a server to your computer. The following is a list of the types of files you can upload and download.
<p>
<ul>
<li><b>Pages</b><br>
The <b>Pages</b> link allows you to access the <b>Upload/Download Pages</b> page. This page makes it easy for you to view, download, upload, or edit your Web pages.<!--upload from where? download from where?-->
<p>
<li><b>Configuration (catalog.cfg)</b><br>
The <b>Configuration (catalog.cfg)</b> link allows you to access the <b>Configuration Upload/Download</b> page. This page makes it easy for you to view, download, upload, or edit your configuration file. <!--upload and download from where? what's the configuration file?-->
<p>
<li><b>Any File</b><br>
The <b>Any File</b> link allows you to access the <b>File Upload</b> page. This page makes it easy for you to view, download, upload, or edit any file on your system. <!--from where?-->
</ul>
-crosssell	Cross-Sell	<p>
The <b>Cross-Sell</b> page is used to exercise the Cross-Sell marketing feature. The Cross-Sell feature allows you to display an item or items that compliment the item the customer has chosen and give the customer the choice of adding the complimentary item. For example, you may choose to display a paintbrush as a Cross-Sell item to a customer that is purchasing paint.

<!--reference the page where the graphics are posted or parameters for display are set-->
<p>
<h2>Functions</h2>
<b>OK</b><br>
After completing the necessary Cross-Sell information, click <b>OK</b> to export the Cross-Sell connection.<!--what is the result of this action?-->
<p>
<b>Cancel</b><br>
To abandon the Cross-Sell task you started without saving the change.
<p> <b>Auto-Export</b><br>
  Click this checkbox to enable the Auto-Export feature. The Auto-Export feature
  exports the changes you are committing to the tables described on these pages
  to the original flat text file. This feature allows you to keep your original
  files up-to-date and portable. However, while this feature may not hinder the
  system's performance when exporting a small table, exporting a large table may
  slow your system.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super
User, is displayed below each field name. This link allows the Site Administrator
or Super User to change the parameters for each field. For more information on
<b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a>
page.
 layoutupload.main	Layout Upload	<p>
Coming Soon
</p>
-shipping.quantity	Shipping by Quantity	<p>
Charges an amount according to how many items are ordered. This rate is especially suited for stores that sell all items which are similar in weight and size, such as CDs or DVDs.
</p>

<p>
To begin, click on the plus sign once for each range you would like to enter. You can add or subtract more fields at any time, so don't worry. <i><b>Hint</b>: On some browsers, when you click the plus sign more than once, it won't register. In that case, click the "reload" button on your browser to make more fields appear.</i>
</p>

<p>
The first range will automatically start with zero and the last range will automatically end with infinity. Note: Interchange automatically bases the beginning point of each range on the end of the last. If you end one range at five items, the next range will begin at six.
</p>
-dbupload.main	Database Upload	<p>
<b>Coming soon</b>
</p>
-layout.edit	Site Layout	<p>
The <b>Site Layout Editor</b> can be used to manage the content on your site.
Content is divided into sections, and you can create subsections of each
section, much like directories and subdirectories on a disk.
</p>

<p>
Selecting a section on the left shows information about it on the right.
Click <b>Create New Section</b> to create a new top level section, or select an
existing section and click <b>Create Subsection</b> to create a new section under
the existing section heading.
</p>

<p>Sections come in three types: product pages, content pages, and links to
foreign pages. In future releases of Interchange, you'll be able to
control many page attributes without having to edit the templates by hand.
</p>

<p>
Product pages are for listing items in your inventory. Generally, you'll
create a section for each kind of item in your store, so that visitors can
browse your items easily. If you have many kinds of items, you may want to
list their sections together under a <b>Products</b> section. When you've selected
a section that is a product page, you will be presented with a list of items
in that section and options for adding and deleting items in that section.
Deleting an item from a section doesn't actually delete the item from your store; the <b>Items</b> page is used for that.
</p>

<p>
Content pages are pages which primarily contain information about the site and
don't list any items. You can choose from pages you've uploaded with the
file uploader.
</p>

<p>
Links to foreign pages provide an easy way to link to another site.
</p>
-regen.main	Regenerate	<p>
After you have made changes to your Interchange site's data, you must use the <b>Regenerate</b> function to create (or re-create) your site's pages based on the new data. Until you regenerate, your Web site will not be changed as you work with Interchange.
</p>
-button.builder	Button builder	<p> The <b>Button Builder</b> page allows you create HTML links and buttons for
  ordering items in your store. </p>

<p>
This function allows for quick access to a product and is useful if you have a few products you want to list on a page or if you want to put an order link on a page on another site.
</p>

<p> The Button Builder can generate either a URL for use in an <b>&lt;A HREF...&gt;</b>
  HTML tag, or a submit button inside of a <b>&lt;FORM&gt;</b> tag.
<p>
<h2>Functions</h2>
<b>Build</b><br>
After entering the necessary information, click <b>Build</b> to create the button. The Interchange Administration Site builds the button for you and issues the resulting HTML that displays the button. Cut and this information and paste it to the page on which you want to display the button.
-flex.select	Direct Table Edit: Select for table edit	<p>
Having selected a table to edit, you can now add a new row, edit an existing
row, edit all rows spreadsheet-style, or delete a row.
</p>
-wizard.tax	Wizard : Set Up Tax Information	This section helps you to set up your tax information. This information will be entered into Interchange and populated into the Administration tool. This screen is intended only to get you started with tax calculation. It offers a simple calculation method and does not account for multiple delivery locations. The Administration tool allows you to upload tax calculation tables or enter specific tax application rules. The required fields are displayed in bold.<p>The following are descriptions of the fields displayed on the page:<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><font size=2><b>Field</b></td><td bgcolor="E0DCE0"><font size=2><b>Definition</b></td></tr><tr><td><font size=2>Tax location</td><td><font size=2>The State in which you will be selling your products. If you will be selling in more than one state, enter the primary state. You can make adjustments using the administration tool later.</td></tr><tr><td><font size=2>Tax rate</td><td><font size=2>The percentage that should be used when calculating tax. This is typically the default sales tax for the state you are selling in. If you are unsure of what percentage to use, contact your local Better Business Bureau.</td></tr><tr><td><font size=2>Tax shipping?</td><td><font size=2>If the tax percentage should be applied to the total cost, including shipping. Click the appropriate response from the drop-down menu. Clicking <b>Yes</b> applies the tax after the shipping cost has been added to the order.</td></tr></table>
-wizard.fedex	Wizard : Shipping Configuration for Federal Express 	This screen allows you to choose the Federal Express shipping options that you want to offer. If you are unsure of what a shipping option means, contact Federal Express for further explaination. The <b>Handling fee</b> allows you to enter a fee for handling the delivery for the customer. Most e-commerce sites charge a handling fee depending on how big or how fragile a product is. This value should be entered in decimal format. For example, if you are charging a handling fee of $3.00, enter 3.00 in the <b>Handling fee</b> field.<p> The Wizard <b>Checklist</b> is displayed on the left. From the checklist you can access any of the Wizard screens. Click <b>Save current settings</b> to save your work to this point.
 license	Licensing	<p>
This program is free software. You can redistribute it and/or
modify it under the terms of Version 2 of the GNU General Public
License as published by the Free Software Foundation.
</p>

<p>
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the <a
href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a>
for more details.
</p>
-genexport.main	Import/Export	<p> Interchange makes it easy to import and export data to and from your commerce
  Web site. </p>

<p>
<a href="dbupload.main.html">Database Upload</a> allows you to import a tab delimited database of your product information to Interchange to make set-up faster and easier.
</p>

<p>
<a href="dbdownload.main.html">Database Download</a> does just the opposite, allowing you to download the data from Interchange.
</p>

<p>
<a href="layoutupload.main.html">Layout Upload</a> lets you upload your site's layout information.
</p>

<p>
<a href="layoutdownload.main.html">Layout Download</a> lets you download your site's layout information.
</p>
+logout.main	Logout	<p>
The <b>Login/Logout</b> page allows you to log in to the Interchange Administration Site. If more then one user has been specified on your system, this page can be used to log on as a different user. Enter your user name and password to access the Administration Site. If you are unsure of your user name or password, contact your Site Administrator.
+matrix.main	Matrix Editor	<p>
<b>What is a Matrix?</b><br>
A matrix is a table of all the possible combinations of options available for an item. For example, a golf club can have options for mens and ladies, right and left handed, several shaft types and flexes, different lofts, or head angles. But not all lofts are available in left handed, and some aren't available in ladies, and graphite shafts cost extra and all have different SKUs. The matrix contains all the variables. A simple matrix might be a size matrix, which has small, medium, large, and extra large. You would then be able to apply a unique sku or price or inventory information to each variation of each item.
</p>

<p>
A matrix can be specified for a particular item in the <a href="item.editor.html">Item Editor</a>, but each matrix must first be created in the Matrix Editor.
</p>

<p>
<b>Create New Matrix</b><br>
Here, give your new matrix a descriptive name, such as "drivers and fairway woods" or "build-to-order bikes."
</p>

<p>
<b>Edit Matrix</b><br>
This feature allows you to edit the name. To edit the matrix's dimensions, use the "Show Dimensions" feature.
</p>

<p>
<b>Show Dimensions</b><br>
This feature allows you to create new dimensions and create ranges underneath those dimensions.
</p>

<p>
<b>Create New Dimension</b><br>
Like the "Create New Matrix" feature, "Create New Dimension" simply lets you specify a name for the dimension. Each matrix can have an unlimited number of dimensions.
</p>

<p>
<blockquote>
Example: The "drivers and fairway woods" matrix will have dimensions for shaft type, flex, right/left handed, and loft.
</blockquote>
</p>

<p>
<b>Edit Dimension</b><br>
This feature allows you to edit the name.
</p>

<p>
<b>Show Ranges</b><br>
This feature will take you to another screen where you can create and edit ranges under that dimension.
</p>

<p>
<b>Create New Range</b><br>
This will allow you to give your new range a name. Each dimension can have an unlimited number of ranges.
</p>

<p>
<blockquote>
Example: The "flex" dime
vers and fairway woods" matrix will have range entries for light, firm, and stiff.
</blockquote>
</p>
+menu.edit	Menu Editor	The
menu editor allows you to manage menus based on the ITL [menu ...] tag.
These menus are used to control Interchange's UI and for display of
product listings (typically for left-hand navigation).<br>
<br>
<h3>Menu Name</h3>
A list of existing menus is displayed in the <span style="font-weight: bold;">Menu name: </span>&nbsp;dropdown. To load one, select it and press <span style="font-weight: bold;">Load</span>. There is a link to manage the files, i.e. delete a menu or download it.<br>
<br>
<h3>Menu Loader -- Single Table</h3>
The menu loader allows you to pre-load a menu from a database table in one of three ways.<br>
<br>
In Category mode, you have two choices of load methods. In the first,
you select a pair of fields; one for the first level, one for the
second level. A tree-based menu is built based on those two fields.<br>
<br>
The combined category method uses a single field to develop the tree.
That field must contain a colon-separated list of categories; i.e. <span style="font-weight: bold;">Hand Tools:Hammers</span>. That would be identical in effect to having the <span style="font-weight: bold;">prod_group</span> field equal to <span style="font-weight: bold;">Hand Tools</span> and the <span style="font-weight: bold;">category</span> field equal to <span style="font-weight: bold;">Hammers</span>. The difference is that you can add arbitrary additional categories and the tree will reflect that.<br>
<br>
<h3><span style="font-weight: bold;">Menu Loader -- Dual Table</span></h3>
This menu loading method allows you to integrate an Interchange 4.8.x menu developed with the Layout Editor. It reads the <span style="font-weight: bold;">cat</span> and <span style="font-weight: bold;">area</span> tables by default, and develops a menu based on your current settings in that table. <span style="font-weight: bold;">Note: </span>If you change the settings of those tables with the <span style="font-weight: bold;">Layout Editor</span>, you must reload the menu.<br>
<br>
<h3>Create from HTML</h
f links, try
pasting it into the text box displayed when an empty menu is loaded. It
will initialize the menu editor.<br>
<br>
<br>
+merch.build_related	Build Related	<p>
You can mine the data from your <TT>orderline</TT> database to suggest products that
might be bought in combination with a certain product.
</p>

<p>
All that is necessary is to access this page. The database will be mined and
entries made in the <TT>others_bought</TT> field of the <TT>merchandising</TT> database.
</p>

<p>
The database is scanned, and a list of items purchased on the same order with
each item is built. This is stored in a data structure and can be accessed
<I>in a shopping cart or flypage</I> with the code:
</p>

<XMP>
  [if-item-data merchandising others_bought]
  [perl tables=products]
    my $hash = [item-data merchandising others_bought];
    my @ary = sort { $hash->{$b} <=> $hash->{$a} } keys %$hash;
    return '' unless @ary;
    my %in_basket;
    splice(@ary, 3);
    for(@{$Carts->{main}}) {
      $in_basket{$_->{code}} = 1;
    }
    @ary = grep ! $in_basket{$_}, @ary;
    return '' unless @ary;
    my $out = q{
    <BR><TABLE CELLPADDING=0 CELLSPACING=0 WIDTH="100%">
    <TR><TD __HEADERBG__>
    <FONT SIZE="-1" COLOR="__HEADERTEXT__">
      Customers who bought this item also bought:
    </TD>
    </TR><TR>
    <TD><FONT SIZE="-1">
    };
    for(@ary) {
       my $desc = tag_data( 'products', 'description', $_);      $out .= q{<A HREF="[area $_]">$desc</A><BR>}
    }
    return $out . '</TD></TR></TABLE>';
  [/perl]
  [/if-item-data]
</XMP>

<p>
This code is used in the <B>Barry</B> and possibly other demos.
</p>
+merchandising	Merchandising	<p>
The <b>Merchandising</b> page allows you to edit how the product items displayed are promoted. For example, you might notice the trend that customers who buy hammers also buy nails. Because of this, you might decide to use the cross-sell feature on this page to have nails displayed on the same page as hammers. You also might want to offer a discount to customers purchasing a certain quantity of one item.
<p>
<h2>Features</h2>
<b>Limit with search</b><br>
Type the paramater by which you want to search the Item list. For example, you can type a portion of a SKU to perform a search for items containing that value. Only the items containing the search parameter will be displayed.
<p>

<h2>Functions</h2>

You can sort the item directory by clicking the heading of the column by which you want to sort. For example, to sort by SKU, click the <b>SKU</b> heading. This displays the orders by SKU in ascending or decending order. To sort in reverse order, click the <b>SKU</b> heading again.

Click a value listed in one of the following columns to access specific information about that value:<p>
<ul>
<li>SKU-click a SKU value in this column to access the <b>Edit Item</b> page for that item.
<li>Qty pricing-click the value in this column to access the <b>Edit Item</b> page for that item.
<li>Up-sell-click the value in this column to access the <b>Up-sell</b> page for that item.

<li>Cross-sell-click the value in this column to access the <b>Cross-sell</b> page for that item.
<li>Promotion-click the value in this column to access the <b>Feature</b> page for that item.
</ul>
+order.main.archived	Archived Orders	The <b>Archived Orders</b>
page displays all archived orders in the system. Orders are usually
archived when they have been fulfilled. For an order to be displayed in
the <b>Archived Orders</b> section, it must be manually moved from the <a href="order.main.pending.html">Pending Orders</a>
section. This page works in real-time, but if you leave this page open
or your Web browser has cached the page's contents, it is recommended
that you re-load the page periodically to see the most recent orders.<br>
<br>
The functions are the same as the  <a href="order.main.pending.html">Pending Orders</a> section.<br>
<p>
</p><p>
+order.main.pending	Pending Orders	The <b>Pending Orders</b>
page displays all current orders in the system. This page works in
real-time, but if you leave this page open or your Web browser has
cached the page's contents, it is recommended that you re-load the page
periodically to see the most recent orders.<br>
<br>
When you have large numbers of pending orders, you may want to define
the transactions database as being LARGE. Contact the administrator to
have them set this parameter for the transactions table.<br>
<br>
To view archived orders, i.e. those that have been shipped or canceled, click the <a href="order.main.archived.html"><span style="font-weight: bold;">Archived Orders</span></a> tab.<span style="font-weight: bold;"></span><span style="font-weight: bold;"></span><br>

<h2>Functions</h2>
<p>
<b>View order</b><br> Type the order number you want to view. Useful
when there is a large list of pending orders and the order you want to
view is on a subsequent page.</p>

<p>
<b>Limit with Search</b><br>
Type the parameter by which you want to search. For example, type <b>CA</b>
to search for all orders originating in the state of California. Only
the orders containing the search parameter will be displayed. </p>

<p>
<b>Check all ...</b><br>There are links to check the box of all orders of a particular status, so that you can archive them en masse.<br>
</p>
<p><b>Delete Checked Orders</b><br>
Click this button after checking the order(s) you want to delete. A warning is displayed. Click <b>OK</b> to delete. The deleted order(s) are removed from the <b>Orders</b> page, but remain in the system. <i><b>Hint:</b> To delete an individual order, click the <b>X</b> in the red square beside the order number.</i>
</p>
<p>
<b>Archive Checked Orders</b><br>
Click this button after checking the order(s) you want to archive. The order(s) are moved to the <a href="order.main.archived.html">Archived Orders</a> section. <i><b>Hint:</b> To archive an individual order, click the black arrow beside the order checkbox.</i>
</p
er list by clicking the
heading of the column by which you want to sort. For instance, to sort
by total price, click the <b>Total</b> heading. This displays the orders by amount in ascending or descending order. To sort in reverse order, click the <b>Total</b> heading again.
<p>
You can view the details of a specific order by clicking the <b>Order Number</b>, <b>User</b>, or <b>Status</b> of that order.<br>
Click the <b>Order Number</b> to access the <a href="order.view.html">View Order</a> page.<br>
Click the <b>User</b> to access the <a href="customer.view.html">View Customer</a> page.<br>
Click the <b>Status</b> to access the <a href="item.edit.html">Order Status</a> page.
</p><p>



<!-- commented out
<p>
<b>Delete False Order</b><br>
Periodically, either through fraud or because an order fell through after it was placed due to product availability problems, an order will need to be deleted and not reported in the order statistics. Select the false order from the list and click on the delete false order button. You will be asked for confirmation to delete this order, because once an order is deleted, it is irretrievable.
</p>
--></p>
+order.view	View Order	<p>
The <b>View Order</b> screen allows you to view detailed information about a particular order.
</p><p>
</p><h2>Functions</h2>

<b>Return</b><br>
Returns you to the <b>Pending Orders</b> or <b>Archived Orders</b> list.
<p>
<b>View Next Order</b><br>
Displays the next order. <i><b>Hint:</b> The <b>View Next Order</b> button displays the <b>View Order</b> pages in sequential order by order number. Both Archived and Unarchived orders are displayed.</i>
</p><p>
<b>Archive Order and View Next</b><br>
<i>or</i><br>
<b>Un-Archive Order and View Next</b><br>
The button displayed depends on if the order you are viewing is an <b>Archived Order</b> or <b>Pending Order</b>. It allows you to reverse the status of an order (from pending to archived, or vice versa).
</p><p>
<b>Delete Order and View Next</b><br>
Deletes the order and displays the next order.
</p><p>
</p><h2>Features</h2>

Depending on how much information is stored on the system about a customer, some of the items on the <b>View Order</b> page are hotlinked to allow you to access other information:<br>
<ul>
<li>Click the customer's name to access the <a href="customer.view.html">View Customer</a> page. The <b>View Customer</b> page displays detailed information about the customer.
</li><li>Click the customer's email address to send that customer an email.</li><li>If
you have the CUSTOMER_VIEW_DEALER preference set, you can view the
customer's dealer status and click on it to take you to the preference
editor.<br>
  </li>
<li>Click <b>Bill To:</b> to access that customer's complete billing information.
</li><li>Click <b>Ship To:</b> to access that customer's complete shipping information.
</li><li>Click the order's status to access the <a href="item.edit.html">Order Status</a> page. The <b>Order Status</b> page displays detailed information about the order shipment.

<p></p></li></ul>
+order_entry.main	Enter Order	<p>

This section allows you to manually enter an order for a new or existing customer.
<p>
<h2>Functions</h2>
<p>
<b>Enter/Recalculate</b><br>
Click this button after entering the SKU, description, and quantity of the item to be ordered. The order information is displayed.<br> <i><b>Hint:</b> To remove this item from the order, click the <b>Remove</b> checkbox beside the item.</i> <i>When entering an item, only the SKU number is necessary. The description field can be left blank. If the quantity field is left blank, the system defaults to one item.</i>
<p>
<b>Find</b><br>
After completing all or a portion of the <b>Shipping Address</b> information, click this button to display a list of possible customers. For instance, entering only <b>CA</b> in the <b>State</b> field before clicking <b>Find</b> will display all customers shipping to California. From the displayed customer list, highlight the desired customer and click <b>Select</b>. The fields in the <b>Shipping Address</b> area are automatically populated with the desired customer's information.
<p>
<b>Clear</b><br>
Click this button to clear all shipping address information.
<p>
<b>Place Order</b><br>
After entering the necessary payment, billing address, and email preference information; click this button to place the order.
<p>
<h2>Features</h2>
<p>
Use the <b>Gift Note</b> or <b>Special Instructions</b> field to enter additional information.
+orderstats.view	Statistics: View	<p>
Statistics can be viewed in several levels of detail, showing overall
totals and breakdowns by various criteria.
</p>
+page.editor	Page editor	<p>
The <b>Page editor</b> displays a directory of the html pages that make up your site, including the Interchange Administration Site pages, allowing you to quickly access and edit any page of your site.
<p>
To access a web page, click the name of the web page from the <b>Page editor</b>. The Edit Page page is displayed.
 payment.main	Payment Options	<p>
The <b>Payment Options</b> page allows you to specify the payment options that your business accepts.
<p>
After choosing the payment acceptance status for each of the payment options listed, click <b>Update</b> to commit the changes. Click <b>Back</b> to return to the previous screen, without saving your changes.
</p>

<p>
<i><b>Hint:</b> If you would like to do real-time payment processing, we can help you set
up processing through CyberCash, Signio, authorize.net and most other services. <a href="mailto:info@akopia.com">Contact Akopia</a> for more information about any of these services.</i>
</p>
-wizard.email	Wizard : Company E-mail Information	Enter the email addresses to be used for information routing in the fields provided. This information will be entered into Interchange and populated in the Administration tool. The required fields are displayed in bold.<p>The following are descriptions of the fields displayed on the page:<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><b>Field</b></td><td bgcolor="E0DCE0"><b>Definition</b></td></tr><tr><td>Orders sent to</td><td>The email address where customer orders will be sent. This field has been pre-populated for your convenience. If the email address displayed is not correct, type the correct email address in the field.</td></tr><tr><td>Info requests sent to</td><td>The email address where visitors to your site can send inquiries for more information. This field has been pre-populated for your convenience. If the email address displayed is not correct, type the correct email address in the field. The sales organization is typically the recipient of requests for more information.</td></tr><tr><td>Service requests sent to</td><td>The email address where visitors to your site can send customer service inquiries. This field has been pre-populated for your convenience. If the email address displayed is not correct, type the correct email address in the field. The customer service organization is typically the recipient of service requests.</td></tr></table><p>The Wizard <b>Checklist</b> is displayed on the left. From the checklist you can access any of the Wizard screens. Click <b>Save current settings</b> to save your work to this point.
-404	Help Topic Not Found	<p>
The help topic you requested does not exist.
Explore the list of help topics below to find the information you are looking for.
</p>

~~HELP_TOPICS~~
-create.new.affiliate	Create New Affiliate	<p>
The <b>Create New Affiliate</b> page allows you to create an Affiliate. The following is a list of attributes that you can specify.
<p>
<h2>Functions</h2>

<b>Affiliate ID</b><br>
This field will contain the text "new".
<p></p>

<p>
<b>Affiliate Name</b><br>
This field contains the name of the Affiliate you are creating.
</p>

<p> <b>Campaigns</b><br>
This field is used to track traffic from advertising campaigns.
</p>
<p> <b>Coupon_amount</b><br>
This field is used to enter the coupon discount amount to be applied to a purchase made by the Affiliate you are creating.
<p>
<b>Join Date</b><br>
The value in this field can be used to keep track of when the Affiliate signed with you.
</p>

<p>
<b>URL</b><br>
The value in this field is used to direct visitors coming from the Affiliate you are creating to your home page or a page designed specifically for visitors from that Affiliate's site. <br>
This should <i>not</i> be the URL of the Affiliate's home site.
</p>

<p> <b>Timeout Delay</b><br>
The value in this field is used to specify the amount of time a customer has to place an order and still give the Affiliate credit for it. If the customer goes over this amount of time, the Affiliate doesn't get credit for the customer visit. The timeout delay is measured in seconds, with the value of 0 (zero) disabling it. It is recommended that you use a value in the thousands to be sure the customer has enough time to shop.
<p>
<b>OK</b><br>
To commit your changes, click <b>OK</b>.
<i><b>Hint:</b> Using the browser's back button to exit the screen will not commit the changes you have made. </i>
<p>
<b>Cancel</b><br>
To abandon the changes you have made, click this button.
-item.edit	Items: Edit/Create	<p>
The <b>Items: Edit/Create</b> page allows you to create or edit an item by filling in it's fields.
Common fields include <b>Short Description</b>, <b>Long Description</b>, and <b>Image</b>, that are used when displaying an item on a catalog page, and <b>Product Price</b> and <b>Weight in Pounds</b>, that are used when calculating charges in the shopping basket.
</p>

<p>
The <b>Category</b> field can be used to select which category pages the item
will appear on. Multiple categories can be selected. For more control
of product categories, choose <b>Site Layout</b> from the quicklinks menu.
</p>

<p>
The <b>meta</b> link, which is only visible to the Site Administrator or Super User, is displayed below each field name. This link allows the Site Administrator or Super User to change the parameters for each field. For more information on <b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a> page.
</p>
-shipping	Shipping	<p>
You can give your customers as many different shipping options as you want.
Shipping by weight, quantity, price, and volume are available, as well as
automatic lookup in UPS shipping rate databases.
</p>

<p>
You can create new methods, edit existing methods, configure pricing levels
for non-UPS based shipping, or delete existing methods from this screen.
</p>
+prefs.main	Preferences	<p>
This feature allows you to change the colors of the administration interface. Changing the color does not affect system functionality.
</p>
 pricing	Pricing	<p>
The <b>Pricing</b> page is used to specify special pricing or quantity pricing. The fields displayed on this page is dependent on how the Site Administrator or Super User set up Interchange Administor and how your special or quantity pricing is calculated. For assistance with completing these pages, see your Site Administrator or Super User.
<p>
<h2>Functions</h2>
<b>OK</b><br>
After entering the necessary special or quantity pricing parameters, click <b>OK</b> to commit your changes. The <a href="something.html">Edit Item</a> page is displayed.
<p>
<b>Cancel</b><br>
To abandon entered changes without committing them, click <b>Cancel</b>. The <a href="something.html">Edit Item</a> page is displayed.
<p>
<b>Auto-Export</b><br>
Click this checkbox to enable the Auto-Export feature. The Auto-Export feature exports the changes you are committing to the tables described on these pages to the original flat text file. This feature allows you to keep your original files up-to-date and portable. However, while this feature may not hinder the system's performance when exporting a small table, exporting a large table may slow your system.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super User, is displayed below each field name. This link allows the Site Administrator or Super User to change the parameters for each field. For more information on <b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a> page.
+promotion	Promotion	<p>
The <b>Promotion</b> page is used to exercise the Promotion marketing feature. The Cross Sell feature allows you to display an item or items that compliment the item the customer has chosen and give the customer the choice of adding the complimentary item. For example, you may choose to display a paintbrush as a Cross Sell item to a customer that is purchasing paint.

<!--reference the page where the graphics are posted or parameters for display are set-->
<p>
<h2>Functions</h2>
<b>OK</b><br>
After completing the necessary Cross Sell information, click <b>OK</b> to export the Cross Sell connection.<!--what is the result of this action?-->
<p>
<b>Cancel</b><br>
To abandon the Cross Sell task you started without saving the change.
<p>
<b>Auto-Export</b><br>
Click this checkbox to enable the Auto-Export feature. The Auto-Export feature exports the changes you are committing to the tables described on these pages to the original flat text file. This feature allows you to keep your original files up-to-date and portable. However, while this feature may not hinder the system's performance when exporting a small table, exporting a large table may slow your system.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super User, is displayed below each field name. This link allows the Site Administrator or Super User to change the parameters for each field. For more information on <b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a> page.
+reconfig	Reconfigure	<p>
<b>Apply Changes</b> commits all changes that the Interchange Administration Site doesn't commit automatically. It is good practice to occasionally click <b>Apply Changes</b> when administering the Administration Site to make sure your changes are implemented.
</p>
+regen.main	Regenerate	<p>
After you have made changes to your Interchange site's data, you must use the <b>Regenerate</b> function to create (or re-create) your site's pages based on the new data. Until you regenerate, your Web site will not be changed as you work with Interchange.
</p>
+search_builder	Search Builder	<p>
The <b>Search Builder</b> page allows you to generate very complex reports on the database, or to help in the construction of ITL templates.
</p>

<p>
Select a <b>Base Table</b> to be the foundation for the report. Specify the maximum number of rows to be returned at once, and if you want the table to show only
unique entries.
</p>

<p>
The <b>Search Filter</b> then allows you to narrow down the list of rows returned
by matching columns of the table based on various criteria. Up to three
separate conditions can be specified. The returned rows must match all criteria.
</p>

<p>
Finally, select any sorting options you wish the results to be displayed by and decide the list of columns you want returned.
</p>

<p>
Click <b>Run</b> to run the search immediately and display the results.
<b>Generate Definition</b> will display an ITL tag which can be placed in a template
and which will return the results when executed.
</p>
+shipping	Shipping	<p>
You can give your customers as many different shipping options as you want.
Shipping by weight, quantity, price, and volume are available, as well as
automatic lookup in UPS shipping rate databases.
</p>

<p>
You can create new methods, edit existing methods, configure pricing levels
for non-UPS based shipping, or delete existing methods from this screen.
</p>
+shipping.data	Shipping: Edit Data Table	<p>
Once you've created a shipping method, you can fine tune the calculation
based on the weight of the order. Use the "+" button to add new ranges
and specify which ranges will apply to which calculations. Choose a type
of calculation to perform for each weight range, such as a number (flat charge),
formula (arbitrary calculation based on the weight), UPS lookup (internal
or via their Web site), multiply by (simple rate), or select <b>Message</b> to
generate an error message. If you specify a formula, you can include the
string "@@TOTAL@@" to represent the total weight of the order. For example,
"8 + @@TOTAL@@ + 2.50".
</p>
 shipping.edit	Shipping: Create/Edit	<p>
<b>Name of this Method</b><br>
This is the internal name used for the shipping method, and should be a single word, like "air1." The order you enter the shipping methods is the order in which they will be presented to the customer. We recommend starting with the most common or least expensive method first. Here are some commonly used names for various shipping methods: standard ground shipping, standard flat rate shipping, three day shipping, second day shipping, next day air shipping, International shipping, U.S. Mail shipping, etc.
</p>

<p>
<b>Label for this Method</b><br>
The name you specify here will appear in the list of available shipping
methods shown to shoppers when they place orders. Take care to make
them easy-to-understand. The name you enter should reflect the shipping
algorithm you choose.
</p>

<p>
<b>Calculate Based on this Algorithm</b></br>
</p>

<p>
<ul>
<li>
<A href="shipping.price.html">Standard Shipping by Price:</a>
shipping total based on the total price of the order. This can also be
used to calculate a flat shipping price ($0 - infinity = $4.95) or a flat
rate with big orders shipped free ($0 - 500 = $4.95 and $500 - infinity =
free). The shipping charge can either be a flat charge or a percentage.
<li>
<a href="shipping.weight.html">Standard Shipping by Weight:</a>
calculates shipping by total weight. To use this method, you must enter a
weight for each item in your inventory. You can use any unit of measure
you wish as long as you are consistent: if you enter your item prices
in grams then configure shipping with pounds, your customers will not
be happy when they are quoted huge shipping rates.
<li>
<a href="shipping.quantity.html">Standard by Quantity:</a>
charges an amount according to how many items are ordered.
<li>
<a href="shipping.ups.html">UPS Zones-Based:</a>
Interchange is pre-configured with UPS zones tables for ground, three day
select, second day air, and next day air. If you require zones support
for Fedex, DHL, or USPS, please <
m">contact Akopia</a>.
</ul>
</p>

<p>
<b>Minimum Shipping Charge</b><br>
The amount you enter into this field will be the minimum allowed quote for
that particular shipping method. For example, if you want to charge no less
than $4.50 for ground shipping, enter "4.5" or "4.50" into this field.
Remember, you must set the minimum for each of your shipping methods, if you
want each to have a minimum charge.
</p>

<p>
<a name="additional"><b>Additional Shipping Calculation</b><br></a>
Here, you can enter any additional calculation you would like to apply to
the shipping calculation. This is especially useful for the zones-based
shipping calculations. Very few merchants pay the full rates for UPS
shipping, and some merchants want to slightly mark up their shipping
charges for handling. Other merchants may want to discount them slightly
to promote goodwill. This feature would allow you to discount your UPS
ground shipping quote by 25% to match your discount, then add $2.50
to cover a packaging and handling charge. Tip: if you're currently not
receiving a discount on your shipping rates, call UPS and ask for one.
</p>

<p>
Although the shipping calculation engine that comes with Interchange is
flexible and versatile, we realized that it still might not meet the
needs of all users. We decided to include a feature that would allow
Interchange administrators to modify the shipping charges that were
calculated in a simple way. The "additional shipping calculation" field
can be used to enter a mathematical expression that will be applied to
a calculated shipping charge. Here's how it works.
</p>

<p>
Every shipping method needs to have a shipping algorithm
associated with it. The algorithm could be "shipping by total cost,"
"shipping by quantity," or even a UPS weight based calculation.
The administrator will typically have the option to set up several
parameters that the algorithm uses. The administrator then names
the shipping method whatever he/she wants. All available shipping
methods are presented to the customer when 
sen, a shipping charge is calculated.
</p>

<p>
The shipping algorithm calculates a "base shipping charge." That charge
may be modified by using the "additional shipping calculation" field.
</p>

<p>
Let's look at an example. Suppose that I want to implement a UPS based
shipping system. I create three shipping methods, and call them "Regular",
"Second Day Air," and "Next Day Air." Each method uses a corresponding UPS
algorithm that calculates the shipping charge based on the weight of the
customer's order, the UPS rate and zone tables. Easy enough, but suppose
that I have a special deal with UPS that gives me a 10 percent discount off the
standard rate tables, because I ship a large volume of goods. Obviously,
I don't want have to manually edit the rate tables. Instead I can use
the "additional shipping calculation" field to automatically apply a 10%
discount to whatever the UPS rate would have calculated.
</p>

<p>
In the "additional shipping calculation" field, I would enter the following:
</p>

<p>
x = x - (x * .1)
</p>

<p>
The character "x" represents the shipping charge as calculated by the
UPS algorithm. Interchange will automatically apply the above formula
to the shipping charge, and charge the customer the new total.
</p>

<p>
Here's how it would work for a real customer. Customer A enters the site
and orders 50 lbs. of goods to be shipped to Alaska by "Next Day Air." The
UPS algorithm determines that the cost would be $400. Interchange thensubstitutes 400 for "x" in your formula:
</p>

<p>
new charge = 400 - (400 * .1)
</p>

<p>
The resultant charge is 400 - 40 dollars, or $360.
</p>

<p>
Of course, we could have also written the formula this way:
</p>

<p>
x = x * .9
</p>

<p>
which would have had exactly the same effect. If you're a Perl
guru, you'll be happy to know that you could also have written:
</p>

<p>
x *= .9
</p>

<p>
It is important to note that you must specify some sort of equality
on the left hand side of the equation.
</p>

<p>
You can enter any valid mathematical expression and you ca
 need to. Interchange validates the
expression you enter, so if you make a mistake it will inform you,
and the additional shipping calculation field will not be updated.
</p>

<p>
All invalid characters are stripped out before Interchange processes
your equation. This means that if you type in something like:
</p>

<p>
x = x * y + 300
</p>

<p>
the "y" will be removed, and Interchange will see:
</p><p>
x = x * + 300
</p>

<p>
which is an invalid equation.
</p>

<p>
Valid expressions include (but are not limited to) such things as:

<pre>
x = x + 5
x = x + 5 + (x * .1)
x = x - .75
x += 2
x -= (x * .25)
</pre>

etc.
</p>

<p>
As you can see, there's more than one way to enter any given expression.
</p>

<p>
Valid characters are x+-/*.()0123456789
</p>

<p>
If for any reason a shipping algorithm fails, the additional shipping
calculation will not be executed.
</p>
-faq	Frequently Asked Questions	<p> <i><b>Does Interchange do real-time credit card processing?</b></i> <br>
No, but it does interface with real-time payment processing systems, along with transaction management and order management systems of all kinds. Please <a href="mailto:info@akopia.com">contact Akopia</a> for more information.
</p>

<p> <i><b>Interchange is open source, but I don't know how to do computer programming.
  What can I do if I want to add features?</b></i> <br>
Akopia's consulting group provides an array of installation, customization, and custom programming services. Contact them at <a href="mailto:consulting@akopia.com">consulting@akopia.com</a>.
</p>
-wizard.launch	Wizard : Launch	<p><font size=2>Set your preferences for taking your site live. This is the final step before your site is publicly accessible. The required fields are displayed in bold.</p><p>The table below describes the options displayed on the Launch page.<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><font size=2><b>Field</b></td><td bgcolor="E0DCE0"><font size=2><b>Description</b></td></tr><tr><td><font size=2>Delete sample order data</td><td><font size=2>Choose <b>Yes</b> to purge the database of sample order data. It is strongly recommended that you do this before going live.</td></tr><tr><td><font size=2>Deletesample user data</td><td><font size=2>Choose <b>Yes</b> to purge the database of sample user data. It is strongly recommended that you do this before going live.</td></tr><tr><td><font size=2>Starting order number</td><td><font size=2>Enter the order number that should be used in taking the first customer order. The default is 01000.</td></tr><tr><td><font size=2>Enable Secure (SSL)</td><td><font size=2>Choose <b>Yes</b> to enable your SSL certificate. This is strongly recommended if you are processing payment online.</td></tr><tr><td><font size=2>Launch</td><td><font size=2>Click to launch your site.</td></tr></table>
-merchandising	Merchandising	<p>
The <b>Merchandising</b> page allows you to edit how the product items displayed are promoted. For example, you might notice the trend that customers who buy hammers also buy nails. Because of this, you might decide to use the cross-sell feature on this page to have nails displayed on the same page as hammers. You also might want to offer a discount to customers purchasing a certain quantity of one item.
<p>
<h2>Features</h2>
<b>Limit with search</b><br>
Type the paramater by which you want to search the Item list. For example, you can type a portion of a SKU to perform a search for items containing that value. Only the items containing the search parameter will be displayed.
<p>

<h2>Functions</h2>

You can sort the item directory by clicking the heading of the column by which you want to sort. For example, to sort by SKU, click the <b>SKU</b> heading. This displays the orders by SKU in ascending or decending order. To sort in reverse order, click the <b>SKU</b> heading again.

Click a value listed in one of the following columns to access specific information about that value:<p>
<ul>
<li>SKU-click a SKU value in this column to access the <b>Edit Item</b> page for that item.
<li>Qty pricing-click the value in this column to access the <b>Edit Item</b> page for that item.
<li>Up-sell-click the value in this column to access the <b>Up-sell</b> page for that item.

<li>Cross-sell-click the value in this column to access the <b>Cross-sell</b> page for that item.
<li>Promotion-click the value in this column to access the <b>Feature</b> page for that item.
</ul>
-change.password	Change Password	<p>
The <b>Change Password</b> page allows you to change the password for a user. This should typically be done by the Site Administrator or super user.
<p>
<h2>Functions</h2>
<b>New Password</b><br>
Enter the new password.
<p>
<b>Verify Password</b><br>
Confirm the new password.
<p>
<b>OK</b><br>
To commit the new password, click this button.
<p>
<b>OK</b><br>
To abandon the changes you made, click this button.
</p>
-edit.item	Edit/Create Item	<p> The <b>Edit Item</b> page is used to create or edit a product item. The fields
  displayed on this page are dependant on how the page was set up by your Site
  Administrator or Super User. For more information on the fields displayed on
  this page, see your Site Administrator or Super User.
<p>
<h2>Function</h2>
<b>OK</b><br>
After completing the necessary information on the page, click <b>OK</b> to commit your changes/additions. The page is refreshed and the changes are committed.
<p>
<b>Cancel</b><br>
Abandon entered changes without committing them. The page is refreshed, displaying only the original information.
<p> <b>Auto-Export</b><br>
  Click this checkbox to enable the Auto-Export feature. The Auto-Export feature
  exports the changes you are committing to the tables described on these pages
  to the original flat text file. This feature allows you to keep your original
  files up-to-date and portable. However, while this feature may not hinder the
  system's performance when exporting a small table, exporting a large table may
  slow your system.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super
User, is displayed below each field name. This link allows the Site Administrator
or Super User to change the parameters for each field. For more information on
<b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a> page.
-layout.main	Layout Manager	<p>
The site layout manager is the interface that a designer or product manager uses to assign products to a page, manage elements on the page such as links, do merchandizing like specifying featured products, and rearranging elements on the pages.
</p>

<p>
When you enter this page, you see first a listing of the main pages linked on the front page of your Web site and other elements on that page such as featured products or navigation bars. We call these the "children" of the front page. If you click on the name of one of these children, the list will expand to show you the children of that element, and so on. Next to the name of each child is a radio button. Select the button of the element you want to work with before clicking any of the buttons at the bottom of the page.
</p>

<p>
<b>Add as Child</b><br>
You can add three types of children to any particular element: items, groups, and pages. The pull-down menus below the list display the available children. To add children to a page, first click the radio button next to that page's name in the list, then select either a group, page, or item from the pull-down menus. Click on the "Add as Child" button. You should see the new child appear under its parent automatically.
</p>

<p>
<img src="images/layout.add.child.jpg" alt="" width="350" height="254">
</p>

<p>
<b>Rearrange Children</b><br>
The order that the children appear in this list is important, as it determines the order in which they will be displayed on the site. The "Rearrange Children" feature lets you place them in the correct order. First, click the radio button next to the parent whose children you want to arrange, then click on the "Rearrange Children" button. That will take you to a new screen with a list of all the children in order. Select each child that you want to move, then click the "up" or "down." Continue this process until they're in the right order, then click "ok." Clicking "cancel" will take you back without making any changes, even if you've already rear
d some of your products.
</p>

<p>
<b>Move Some Children/Move All Children</b><br>
If you want to move children out from under one parent over to another, these two functions will do that. "Move Some Children" allows you to choose which of the children in the list you would like to move, then asks you which new parent to assign them under. "Move All Children" simply moves them all. Below, see the "Move Children" screen. Notice you can "control click" to select more than one child to move.
</p>

<p>
<img src="images/layout.move.child.jpg" alt="" width="200" height="210">
</p>

<p>
<b>Hide All</b><br>
Just as clicking on the name of an element will make its children appear, clicking on the name again will make them disappear. If you have a lot of different parents' children showing, the "Hide All" button will make them all disappear.
</p>

<p>
<b>Delete</b><br>
The delete button allows you to remove a child from the parent. Select the child you would like to remove by clicking the button next to its name, then click on the delete button.
</p>
-upsell	Up-Sell	<p>
The <b>Up-Sell</b> page is used to exercise the Up-Sell marketing feature. The Up-Sell feature allows you to display an item of better quality and/or price than the one the customer has chosen and give the customer the choice of upgrading to this item. For example, you may choose to display a deluxe toolbox to a customer that is purchasing a standard toolbox.

<!--reference the page where the graphics are posted or parameters for display are set-->
<p>
<h2>Functions</h2>
<b>OK</b><br>
After choosing the item you want to up-sell to from the <b>Up-sell_to</b> list, click <b>OK</b> to export the Up-Sell connection.<!--what is the result of this action?-->
<p>
<b>Cancel</b><br>
To abandon the Up-Sell task you started without saving the change.
<p>
<b>Auto-Export</b><br>
Click this checkbox to enable the Auto-Export feature. The Auto-Export feature exports the changes you are committing to the tables described on these pages to the original flat text file. This feature allows you to keep your original files up-to-date and portable. However, while this feature may not hinder the system's performance when exporting a small table, exporting a large table may slow your system.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super User, is displayed below each field name. This link allows the Site Administrator or Super User to change the parameters for each field. For more information on <b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a> page.
-order_entry.main	Enter Order	<p>

This section allows you to manually enter an order for a new or existing customer.
<p>
<h2>Functions</h2>
<p>
<b>Enter/Recalculate</b><br>
Click this button after entering the SKU, description, and quantity of the item to be ordered. The order information is displayed.<br> <i><b>Hint:</b> To remove this item from the order, click the <b>Remove</b> checkbox beside the item.</i> <i>When entering an item, only the SKU number is necessary. The description field can be left blank. If the quantity field is left blank, the system defaults to one item.</i>
<p>
<b>Find</b><br>
After completing all or a portion of the <b>Shipping Address</b> information, click this button to display a list of possible customers. For instance, entering only <b>CA</b> in the <b>State</b> field before clicking <b>Find</b> will display all customers shipping to California. From the displayed customer list, highlight the desired customer and click <b>Select</b>. The fields in the <b>Shipping Address</b> area are automatically populated with the desired customer's information.
<p>
<b>Clear</b><br>
Click this button to clear all shipping address information.
<p>
<b>Place Order</b><br>
After entering the necessary payment, billing address, and email preference information; click this button to place the order.
<p>
<h2>Features</h2>
<p>
Use the <b>Gift Note</b> or <b>Special Instructions</b> field to enter additional information.
+shipping.main	Shipping Options	<p>
The <b>Shipping Options</b> page allows you to specify and configure the shipping methods and costs for your online store. Before you begin here, you need to decide how you want to charge for shipping. We support all the most common shipping options:
</p>

<p>
<a href="shipping.price.html">By Price:</a> shipping total based on the total price of the order. This can also be used to calculate a flat shipping price ($0 - infinity = $4.95) or a flat rate with big orders shipped free ($0 - 500 = $4.95 and $500 - infinity = free). The shipping charge can either be a flat charge or a percentage.
</p>

<p>
<a href="shipping.weight.html">Standard by Weight: </a> calculates shipping by total weight with no regard to zones. To use this method, you must enter a weight for each item in your inventory. You can use any unit of measure you wish as long as you are consistent. If you enter your item prices in grams, then configure shipping with pounds, your customers will not be happy when they are quoted huge shipping rates.
</p>

<p>
<a href="shipping.quantity.html">Standard by Quantity:</a> this is identical to shipping by price, but the shipping charge will be multiplied by the total number of items ordered.
</p>

<p>
<a href="shipping.ups.html">UPS Zones-Based:</a> Interchange is pre-configured with UPS zones tables for ground, three day select, second day air, and next day air.
</p>

<p>
If you require zones support for Fedex, DHL, or USPS, please <a href="mailto:info@akopia.com">contact Akopia</a>.
</p>

<p>
Keep in mind that you can choose a variety of these shipping methods, giving the customer a choice. Many companies use flat shipping for ground orders and use UPS zones shipping for second day and next day orders.
</p>

<p>
<b>Create New Method</b><br>
Once you've decided what shipping options you are going to offer your customers, click the "Create New Method" button and configure each option. You will be able to name and configure each option from the "Create New Method" screen. See

</p>

<p>
<b><a href="shipping.edit.html">Edit Method</a></b><br>
Select one of the currently existing shipping methods from the list and click "edit method" to change its name, enable or disable it, change the calculation method, or set a minimum charge. The "edit method" button takes you to the same screen as "create new method" button, but already filled out. To edit the individual charges for different prices or weights, use the "edit data table" function.
</p>

<p><b><a href="shipping.data.html">Edit Data Table</a></b><br>
The process of creating a new method is usually a two-step process. In the first step, you name the shipping method and devide on a calculation algorithm (by price, by weight/zone, etc). The second stage involves configuring your chosen method. The "edit data table" function allows you to change the particular settings for an already-created method.
</p>

<p>
<b>Delete Method</b><br>
Select a method from the list and click on this button to delete it. You will be asked to confirm your choice. If you choose yes, it will be deleted permanently. If you merely want to temporarily disable a particular shipping method and remove it from the list your customers see, edit the method and un-check the box next to "enable this method." That way, if you want to enable it later, you won't have to re-configure it.
</p>
+shipping.price	Shipping by Price	<p>
Shipping total based on the total price of the order. This can also be used to calculate a flat shipping price ($0 - infinity = $4.95) or a flat rate with big orders shipped free ($0 - 500 = $4.95 and $500 - infinity = free). The shipping charge can either be a flat charge or a percentage.
</p>

<p>
To begin, click on the plus sign once for each range you would like to enter. You can add or subtract more fields at any time, so don't worry. <i><b>Hint</b>: On some browsers, when you click the plus sign more than once, it won't register. In that case, click the "reload" button on your browser to make more fields appear. The first range will automatically start with zero and the last range will automatically end with infinity.</i><p> If you want one flat rate charge, only create one range, from zero to infinity and give it a charge amount. Otherwise, create all the ranges you need and give each range an amount. In case you would like to charge a percentage of the order total as the shipping and handling charge, you have the option of specifying a percentage for any of the ranges. Note: Interchange automatically bases the beginning point of each range on the end of the last. If you end one range at $50.00, the next range will begin at $50.01.
</p>
+shipping.quantity	Shipping by Quantity	<p>
Charges an amount according to how many items are ordered. This rate is especially suited for stores that sell all items which are similar in weight and size, such as CDs or DVDs.
</p>

<p>
To begin, click on the plus sign once for each range you would like to enter. You can add or subtract more fields at any time, so don't worry. <i><b>Hint</b>: On some browsers, when you click the plus sign more than once, it won't register. In that case, click the "reload" button on your browser to make more fields appear.</i>
</p>

<p>
The first range will automatically start with zero and the last range will automatically end with infinity. Note: Interchange automatically bases the beginning point of each range on the end of the last. If you end one range at five items, the next range will begin at six.
</p>
+shipping.ups	UPS Zones-Based Shipping	<p>
Interchange is pre-configured with UPS zones tables for Ground, Three Day Select, Second Day Air, Second Day Air AM, Next Day Air Saver, and Next Dday Air.
</p>

<p>
If you require zones support for FedEx, DHL, or USPS, please <a href="mailto:info@akopia.com">contact Akopia</a>.
</p>

<p>
There are no tables to configure if you select these options, but to use zones-based shipping, you need to enter the zip code of your shipping location. Interchange will automatically generate zones charts based on your zip code.
</p>

<p>
[Coming Soon: Information on how to enter your zip code]
</p>
+shipping.weight	Shipping by Weight	<p>
<b>Standard Shipping by Weight:</b> This calculates shipping by total weight with no regard to zones. Weight-based shipping with zones are marked by the company whose zones the algorithm calculates by, i.e., <a href="shipping.ups.html">UPS</a>. To use this method, you must enter a weight for each item in your inventory.
</p>

<p>
<blockquote>
<i>Note: You can use any unit of measure you wish as long as you are consistent: if you enter your item prices in grams then configure shipping with pounds, your customers will not be happy when they are quoted huge shipping rates.</i>
</blockquote>
</p>

<p>
To begin, click on the plus sign once for each range you would like to enter. You can add or subtract more fields at any time, so don't worry. <i><b>Hint</b>: on some browsers, when you click the plus sign more than once, it won't register. In that case, click the "reload" button on your browser to make more fields appear. The first range will automatically start with zero and the last range will automatically end with infinity.</i>

<p>
Create all the ranges you need and give each range a charge amount. In case you would like to charge a percentage of the order total as the shipping and handling charge, you have the option of specifying a percentage for any of the ranges. Note: Interchange automatically bases the beginning point of each range on the end of the last. If you end one range at 5 kg, the next range will begin at 5.00001 kg.
</p>
 stats.order	Order Statistics	<p>
The <b>Order Statistics</b> feature helps you see at a glance how your store is doing. You can view your stats for any day or range of days. In addition to menus that allow you to pick a particular range of days, we have shortcut buttons that show you the stats for yesterday, the last seven days, and the last 30 days. You can either view stats as an overview or see the individual orders for that time period. By default, it will show you yesterday's stats.
</p>
-flex.meta	Meta information edit	<p> The <b>Meta Information Edit</b> page allows a user to edit the parameters
  of a displayed field. For example, if you click the <b>meta</b> link for the
  <b>Last Name</b> field, the <b>Meta Information Edit</b> page is displayed for
  that field. Editing the parameters in the <b>Meta Information Edit</b> page
  effects the values that will be accepted for the <b>Last Name</b> field. You
  could specify the width of this field, meaning the number of characters accepted,
  as 30 using the <b>Meta Information Edit</b> page. This would limit the length
  of any value entered in the <b>Last Name</b> field to 30 characters.
<p> The <b>Meta Information Edit</b> field is displayed only to Super Users. Exercise
  caution when editing this page.
<p><h2>Features</h2>
<b>OK</b><br>
After entering the necessary values, click <b>OK</b>. The following is a description of some of the displayed fields.
<ul>
<p>
  <li>"Widget Type" specifies the HTML INPUT tag type to use when displaying the
    field in, say, the item editor.
    <p></p>

<p>
  <li>"Width" and "Height" only apply to some of the "Widget Type" options, for
    instance the "Textarea" widget.
    <p></p>

<p>
  <li>"label" is displayed instead of the internal column name. For example, the
    "category" column of the "products" table might have a label of "Product Category."
    <p></p>

<p>
<li>"help" is displayed below the column label, and helps describe the purpose of
the field to the user.
<p></p>

<p>
<li>"help url" can be used to link to a page giving more information on the field.
<p></p>

<p>
  <li>"lookup" can be used when a field is acting like a foreign key into another
    table. In that case, you'll probably want to use some sort of select box as
    the widget type, and if you want to reference multiple rows in the destination
    table, you'll probably want to use a multi-select box, with "colons_to_null"
    as the pre_filter, and "::" as the lookup_exclude.
    <p></p>

<p>
<li>"filter" and "pre_filter" can be
for that field
or data read from that field, respectively.
<p></p>
</ul>
-glossary.main	Glossary	<p>
<b>Akopia</b><br>
  Developer of Interchange, open source e-commerce storefront management system.
  Akopia also offers a wide array of e-commerce consulting services. For more
  information please see <a href="http://www.akopia.com/">Akopia's Web page</a>.
</p>

<p>
<b>Algorithm</b><br> A step-by-step problem-solving procedure, especially an established, recursive computational procedure for solving a problem in a finite number of steps.
</p>

<p>
<b>AOL</b><br> The largest Internet service provider in the United States.
</p>

<p>
<b>Apache</b><br> The most widely used web server. One of the most successful free software packages.
</p>

<p>
<b>API</b><br> Application Program Interface. A set of routines, protocols, and tools for building software applications. A good API makes it easier to develop a program by providing many building blocks for the programmer, who puts them together. Although APIs are designed for programmers, they are ultimately good for users because they help all programs using a common API will have similar interfaces.
</p>

<p> <b>Archiving Orders</b><br>
   A process through which you can remove your orders from immediate view on your management administrator without deleting the record.
</p>

<p>
<b>Browser</b><br> Short for Web browser, a software application used to locate and display Web pages. You're likely familiar with one if you're reading this, right?
</p>

<p> <b>Business to Business</b><br>
   Also seen as B2B. A B2B company offers goods and services to other businesses.
</p>

<p> <b>Business to Consumer</b><br>
   Also seen as B2C. These are companies that offer goods and services to consumers.
</p>

<p>
<b>Cell</b><br> An area in which data is entered.
</p>

<p>
<b>CGI</b><br> Common Gateway Interface. A specification for transferring information between a World Wide Web server and a program. A CGI program is any program designed to accept and return data that conforms to the CGI specification. The program could be written in any programming languag
re a common way for Web servers to interact dynamically with users.
</p>

<p>
<b>Cookie</b><br> A chunk of information transmitted to a Web browser by a Web server. The browser stores the information on the user's local computer (either in memory or on the hard disk). The message is then sent back to the server each time the browser requests a page from the server. The main purpose of cookies is to identify users and possibly prepare customized Web pages for them.
</p>

<p> <b>E-Commerce</b><br>
   The specific business of selling goods and services via the Internet.
</p>

<p> <b>Electronic Catalog</b><br>
   An Internet site that offers goods and services for sale. Much like the magazine catalogs.
</p>

<p>
<b>Embedded Perl</b><br> When the programming language Perl can be found within the context of another language, it is said that it is embedded. Interchange supports embedding Perl right into its HTML templates.
</p>

<p>
<b>FAQ</b><br> Frequently Asked Questions. (Usually including the answers to those questions!)
</p>

<p>
<b>HTML</b><br> Abbreviation for Hypertext Markup Language. The language of codes used to format plain text, most often for viewing in a web browser.
</p>

<p>
<b>HTTP</b><br>
  Abbreviation for Hypertext Transfer Protocol. The primary mechanism (or protocol)
  of transfering information over the Internet from a Web server to a user's computer.
</p>

<p>
<b>httpd</b><br>
  Hypertext transfer protocol daemon: a Web server. </p>

<p>
<b>Internationalization</b><br> (Also known as I18N.) The adaptation of Interchange for multiple languages and currencies.
</p>

<p>
<b>Item</b><br> A single product in your on-line store.
</p>

<p>
<b>Java</b><br> A general purpose programming language used both on servers and clients (Web browsers).
</p>

<p>
<b>JavaScript</b><br> A scripting language developed by Netscape to enable Web authors to design interactive sites. Although it shares many of the features and structures of the full Java language, it was developed independently.
</p>

<p>
<b>Interchange
e flagship e-commerce platform developed by Akopia. Interchange is an open
  source program that has thousands of implementations throughout the world. For
  more information on Interchange please visit the <a href="http://www.akopia.com/">Akopia
  Web site</a>. </p>

<p>
<b>Linux</b><br>
  The UNIX-like kernel developed by Linus Torvalds, which forms the basis of many
  open source computer operating systems. </p>

<p>
<b>Matrix</b><br> A table of all the possible combinations of options available for an item.
</p>

<p>
<b>Netscape Navigator (or Communicator)</b><br> A popular web browser.
</p>

<p>
<b>Open Source</b><br> Software with source code that is freely viewed and altered by its users. Often the software is released under the license of the GNU General Public License which requires further distribution be free of cost or usage restrictions, and that program source code be made available.
</p>

<p>
<b>Perl</b><br> Amazing, powerful, flexible, expressive, free programming language by Larry Wall. See <a href="http://www.perl.com/">perl.com</a> for all sorts of information on Perl.
</p>

<p> <b>Product Matrix</b><br>
   The complete list of possible descriptors for a product. This includes size, color, etc.
</p>

<p>
<b>Regeneration</b><br> After making changes to a site or page, commanding Interchange to regenerate means to update the changes for general use.
</p>

<p>
<b>Search Engine</b><br> A program that is designed to search through a database to answer queries.
</p>

<p> <b>Shipping Algorithm</b><br>
   The equations used to calculate shipping costs.
</p>

<p>
<b>SKU</b><br> Stock Keeping Unit. A unique code associated with each product for inventory purposes.
</p>

<p>
<b>SQL</b><br> Structured Query Language. SQL is a standardized query language for requesting information from a database.
</p>

<p>
<b>SSL</b><br>
  Secure Sockets Layer. A transport-layer technology, developed by Netscape, that
  allows secure transactions among compliant browsers and Web servers. </p>

<p>
<b>Template</b><br> With 
to Akopia's software, templates are pre-designed formats that a business can use to create a ready Interchange implementation.
</p>

<p> <b>Web Server</b><br>
   The computer and/or software that delivers Internet information to the user's computer.
</p>

<p> <b>Zone-Based Shipping</b><br>
   The calculation of shipping charges based on the region of destination.
</p>
-promotion	Promotion	<p>
The <b>Promotion</b> page is used to exercise the Promotion marketing feature. The Cross Sell feature allows you to display an item or items that compliment the item the customer has chosen and give the customer the choice of adding the complimentary item. For example, you may choose to display a paintbrush as a Cross Sell item to a customer that is purchasing paint.

<!--reference the page where the graphics are posted or parameters for display are set-->
<p>
<h2>Functions</h2>
<b>OK</b><br>
After completing the necessary Cross Sell information, click <b>OK</b> to export the Cross Sell connection.<!--what is the result of this action?-->
<p>
<b>Cancel</b><br>
To abandon the Cross Sell task you started without saving the change.
<p>
<b>Auto-Export</b><br>
Click this checkbox to enable the Auto-Export feature. The Auto-Export feature exports the changes you are committing to the tables described on these pages to the original flat text file. This feature allows you to keep your original files up-to-date and portable. However, while this feature may not hinder the system's performance when exporting a small table, exporting a large table may slow your system.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super User, is displayed below each field name. This link allows the Site Administrator or Super User to change the parameters for each field. For more information on <b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a> page.
-home	Interchange Administration Tool Help	<p>
The Interchange context-sensitive help system is easy to use.
Simply click the <b>Help</b> link in the upper right-hand section of
any page of the Interchange Administration Tool.
A small popup window will appear offering help for that page.</p>

<p><b>Using the Interchange Administration Site</b></p>

<p>Some shortcut functions are accessible on each page of the Interchange Administration Tool:</p>
<ul>
<li><b>Red Hat logo</b><br>
The <b>Red Hat</b> link is located in the upper left-hand and lower right-hand section of each page. Clicking this button takes you to the Red Hat web site.
<p>
<li><b>About</b><br>
The <b>About</b> link is located in the upper middle section of each page. Clicking this button takes you to the Interchange product web site, which has the most current Interchange information.
<p>
<li><b>Interchange</b><br>
The <b>Interchange</b> link is located in the bottom left-hand section of each page. Clicking this link takes you to the Interchange Developers Resource web site. There you will find up-to-date product information, documentation, mailing lists, services, and more.
<p>
<li><b>Store ID</b><br>
Your <b>Store ID</b> is located in the bottom left-hand section of each page. Clicking this link takes you to your store's web site. This allows you to instantly view site changes implemented through the Administration Tool.
<p>
<li><b>Tables</b><br>
The <b>Tables</b> link is located in the lower middle section of each page. Clicking this link takes you to the <b>Database Tables</b> page of the Interchange Administration Tool. This shortcut function allows you to quickly access table information.
<p>
<li><b>Quicklinks</b><br>
The <b>Quicklinks</b> link is located in the lower middle section of each page. Clicking this link displays a window containing shortcut links to commonly used pages in the Interchange Administration Tool.
<p>
<li><b>Apply Changes</b><br>
The <b>Apply Changes</b> link is located in the lower middle section of each page. Clicking t
anges.
<p>
<li><b>Log Out</b><br>
The <b>Log Out</b> link is located in the lower center section of each page. Clicking this link logs you out of the Administration Tool. You can log back in as a different user if you wish.

</ul>

<p>
Here are the available help topics:
</p>

~~HELP_TOPICS~~
-wizard.aboutus	Wizard : About Us	This page allows you to enter text to be displayed on your company's <b>About Us</b> page. The <b>About Us</b> page is typically used to provide background information on your company including location, contact information, and so on. <p> In the <b>Title</b> field, enter the title of your <b>About Us</b> page. The <b>Content</b> field has already been prepopulated with generic information that has been formatted in HTML. If you are unfamiliar with HTML, it is recommended that you leave the HTML coding in place and simply replace the existing text with text relating to your store. If you are familiar with using HTML, you can choose to delete the prepopulated text and construct this page using your own text and HTML coding.
-orderstats.view	Statistics: View	<p>
Statistics can be viewed in several levels of detail, showing overall
totals and breakdowns by various criteria.
</p>
 stats.traffic	Traffic Statistics	<p>
The <b>Traffic Statistics</b> feature displays information about the visitors to your site. The interface is similar to that of the Order Statistics.
</p>
-gensql.main	Direct SQL utility	<p> The <b>Direct SQL Utility</b> should only be used by the Site Administrator
  or Super User that is familiar with the utility. </p>
+survey.main	Surveys and mailforms	The Surveys editor can produce:<br>
<br>
<ul>
  <li>Feedback forms</li>
  <li>Other mailed forms</li>
  <li>Surveys</li>
  <li>Polls</li>
</ul>
There are some example forms provided with the Foundation demo. <br>
<br>
<h3>Edit an existing survey</h3>
Follow the link with the survey's name. You will see a list of
questions on the left, broken down into one or more areas. The areas
correspond to a screen -- all questions in the group will be presented
on one screen to the user.<br>
<br>
You should run the survey first to familiarize yourself with its flow -- there is a <span style="font-weight: bold;">(run)</span> link at the top of the editor content area.<br>
<br>
<h3>Create a new survey</h3>
To create a new survey, fill in its identifier in the box labeled <span style="font-weight: bold;">New survey name</span>. If you want to start it with the questions/fields from an already-existing survey, pull down the <span style="font-weight: bold;">Clone from</span> box to the name of the survey to duplicate. When you are ready, press the <span style="font-weight: bold;">Create</span> button.<br>
<br>
<h3>Access Survey Results</h3>
<br>
In the standard survey log output mode, each time a survey or mailform
is filled out the results are saved to a TAB-delimited file. You can
download this file and use it in a spreadsheet or other tool for
analysis.<br>
<br>
+survey.overall	Survey/Poll/Mailform Creation	<p> Questions in the survey are presented on the left, the general survey
parameters are in the form on the right.&nbsp;<br>
</p>
<h3>General tab</h3>
<dl>
  <dt><b>Main Title</b></dt>
  <dd>The title for the survey, used on intro page.<br>
    <br>
  </dd>
  <dt><b>Display Type</b>  </dt>
  <dd> Selects one of several display types for the question.<br>
    <br>
  </dd>
  <dt><b>Intro Text</b></dt>
  <dd>Optional message to be displayed only on first page of form.<br>
  </dd>
</dl>
<h3>Questions Tab</h3>
<dl>
  <dt><b>Question Fields</b></dt>
  <dd>This is where the questions for the form are defined. The format is
the same as Interchange page layout descriptions for the table editor:  
                    
    <blockquote>                                  
      <pre>=Title of the page<br><br>field1<br>field2<br><br>=Title of the next page<br><br>field3<br>field4<br></pre>
    </blockquote>
The field names determine which questions will be displayed on the left.
  <br>
  </dd>
</dl>
<h3>Display Page Tab</h3>
<dl>
  <dt><b> Width specification for editor table</b></dt>
  <dd>Pixels or other valid width definition for the form.<br>
    <br>
  </dd>
  <dt><b> Width specification for label column</b></dt>
  <dd>Pixels or other valid width definition for the label column, doesn't
apply if using the question-above answer-below format.<br>
  </dd>
</dl>
<h3>HTML Classes Tab</h3>
<dl>
  <dt><b>ALL</b></dt>
  <dd>CSS class names for the various parts of the form.<br>
  </dd>
</dl>
<h3>Output Tab</h3>
<dl>
  <dt><b>Output Type</b></dt>
  <dd>Which general type of output you desire.          
    <ul>
        <li> Standard survey log -- outputs to a file in logs/survey directory,
named  for the name of the survey/poll.         </li>
      <li> Automatic bounce to page -- uses the forward-to page, the forward-to
ext ra parameters, and the parameters collected via the form to create a URL
to bounce to .         </li>
      <li> none -- generates a template on the final page with
nk to a
page usi ng the URL as with Automatic bounce     </li>
    
    </ul>
    <br>
  </dd>
  <dt><b>Forward-to page or URL</b></dt>
  <dd>The URL or Interchange page you want to bounce or link to. If it is
to be internal to Interchange, just use the normal Interchange page specification
(i.e. ord/basket). For an external URL, supply the complete URL with http://.
    <br>
    <br>
  </dd>
  <dt><b>Forward-to extra parameters</b></dt>
  <dd>Extra parameters besides those collected in the form. For example, you
might       want to specify "mv_action=return" to make the collected values
stick in the user space.<br>
    <br>
    Entered one per line, in key=value format.<br>
  </dd>
</dl>
<br>
+table.searchreplace	Database: Search and Replace	This feature allows you to mass-change a field in the database.

<P>
Select the table to operate on, then the column, from the dropdowns. (This page requires JavaScript enabled.) Enter the string to be searched for, and the string to replace it. Click <b>Search and Replace</b>.
<P>
The search string is a regular expression. If the string is a partial match for the field, only the matching text will be replaced. You may parenthesize one part of the search expression, in which case only the parenthesized part will be replaced and the rest of the matching text will be kept in place.
<P>
The replacement string is the literal text that will be inserted instead of the search text.
<P>
If the regular expression is incorrect, you will be returned to the page and the message "Error: Compiling regex" will be displayed.
<P>
If the operation is successful, you will be sent to the edit select list for the table you operated on, and a message indicating how many rows (if any) were changed.
+tax.main	Tax	<p>
The <b>Tax Manager</b> allows you to set up multiple sales tax rates that might apply
to your customers. The simplest example, which would apply to most merchants,
is one tax rate for those people in your state and one tax rate (0%) for those
outside the state. Of course, your business might have multiple locations or
your state might have different tax rates by city, so you have the option of
creating an unlimited number of tax rate choices.
</p>

<p>
To begin, specify the location to which the tax rate will apply. To create
a new entry, click on the red <b>+</b>, then enter the amount of tax to
be applied to orders which specify that location during checkout.
</p>

<p>
If you're done, click on the <b>OK</b> button. Otherwise, click the plus sign and
continue until you've created all the rates you need.
</p>

<p>
If you need to delete any of the rates, of if you accidentally created too
many fields, click the red <b>X</b> next to that rate.
</p>

<p>
If your company has many locations or your sales tax needs are very
complicated, Interchange can be set up to work with third party tax software.
<a href="mailto:info@akopia.com">Contact Akopia</a> for more information.
</p>
+template.edit	Edit Interchange Templates	If you use the Interchange Foundation templating style, you will have
several templates defined that determine the structure of an individual
page.<br>
<br>
Select the template to edit.<br>
<br>
<h3>In-process edits</h3>
If you have edited a template, but not yet published it, it will be "in
process". It will be used for previews of pages, but not for the
customer-facing side until you <span style="font-weight: bold;">Publish</span> the template in the editor. Click on the <span style="font-weight: bold;">cancel</span> link to cancel the change.<br>
<br>
If you want to purge all in-process edits of pages, click <span style="font-weight: bold;">Purge all in process edits</span> and confirm your choice.<br>
<br>
+upload.main	File Transfer	<p>
The <b> File Transfer</b> page allows you to easily transfer pages, templates, and configuration files to and from a server to your computer. The following is a list of the types of files you can upload and download.
<p>
<ul>
<li><b>Pages</b><br>
The <b>Pages</b> link allows you to access the <b>Upload/Download Pages</b> page. This page makes it easy for you to view, download, upload, or edit your Web pages.<!--upload from where? download from where?-->
<p>
<li><b>Configuration (catalog.cfg)</b><br>
The <b>Configuration (catalog.cfg)</b> link allows you to access the <b>Configuration Upload/Download</b> page. This page makes it easy for you to view, download, upload, or edit your configuration file. <!--upload and download from where? what's the configuration file?-->
<p>
<li><b>Any File</b><br>
The <b>Any File</b> link allows you to access the <b>File Upload</b> page. This page makes it easy for you to view, download, upload, or edit any file on your system. <!--from where?-->
</ul>
+upsell	Up-Sell	<p>
The <b>Up-Sell</b> page is used to exercise the Up-Sell marketing feature. The Up-Sell feature allows you to display an item of better quality and/or price than the one the customer has chosen and give the customer the choice of upgrading to this item. For example, you may choose to display a deluxe toolbox to a customer that is purchasing a standard toolbox.

<!--reference the page where the graphics are posted or parameters for display are set-->
<p>
<h2>Functions</h2>
<b>OK</b><br>
After choosing the item you want to up-sell to from the <b>Up-sell_to</b> list, click <b>OK</b> to export the Up-Sell connection.<!--what is the result of this action?-->
<p>
<b>Cancel</b><br>
To abandon the Up-Sell task you started without saving the change.
<p>
<b>Auto-Export</b><br>
Click this checkbox to enable the Auto-Export feature. The Auto-Export feature exports the changes you are committing to the tables described on these pages to the original flat text file. This feature allows you to keep your original files up-to-date and portable. However, while this feature may not hinder the system's performance when exporting a small table, exporting a large table may slow your system.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super User, is displayed below each field name. This link allows the Site Administrator or Super User to change the parameters for each field. For more information on <b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a> page.
+wizard.aboutus	Wizard : About Us	This page allows you to enter text to be displayed on your company's <b>About Us</b> page. The <b>About Us</b> page is typically used to provide background information on your company including location, contact information, and so on. <p> In the <b>Title</b> field, enter the title of your <b>About Us</b> page. The <b>Content</b> field has already been prepopulated with generic information that has been formatted in HTML. If you are unfamiliar with HTML, it is recommended that you leave the HTML coding in place and simply replace the existing text with text relating to your store. If you are familiar with using HTML, you can choose to delete the prepopulated text and construct this page using your own text and HTML coding.
+wizard.authorizenet	Wizard : Authorize.net Payment Preferences	Enter the values you recieved when you registered for payment processing through Authorize.net. If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold</b>.
+wizard.batchupload	Upload Products	<p><font size=2>This page allows you to enter your products into the Interchange e-commerce platform using the Wizard spreadsheet. The spreadsheet has been created with all the necessary product descriptor fields and is the recommended method for entering products. <p>To use the Wizard spreadsheet, download it to your hard drive. Then, add your products and categories, save it, and upload it again using the <b>Browse...</b> button to locate the file. Five sample field categories are displayed in the spreadsheet for your reference. Once the file has been uploaded your product information is entered into Interchange and populated into the Administration Tool.<p>If you have not yet established your product line, or you would rather use sample product information to test how the products will be displayed, you can use one of the sample sets of data. The sample sets of data are:<p><ul><li>Hardware and Construction Tool Store-contains construction products.<li>Computer Store-contains computer hardware products.<li>Marketing Report Store-contains digital products.</ul><p>To use these sample data sets, click the set you want to use and save it to your hard drive. Then upload it again by using the <b>Browse...</b> button to locate the file. <p><b>Note:</b> It is recommended that you have a few products in the system before you launch to see how they are displayed.
+wizard.companyinfo	Wizard : Your Company Info	Enter your company information in the fields provided. This information will be entered into Interchange and populated into the Administration tool. The required fields are displayed in bold.<p>The following are descriptions of the fields displayed on the page:<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><b>Field</b></td><td bgcolor="E0DCE0"><b>Definition</b></td></tr><tr><td>Your Company Name</td><td>The legal name of your company, used in correspondence.</td></tr><tr><td>Main Domain Name</td><td>The URL of your company's web site. For example, www.yourdomain.com.</tr><tr><td>Street Address</td><td>The postal address of your company's headquarters.</td></tr><tr><td>City</td><td>The city of your company's headquarters.</td></tr><tr><td>State</td><td>The state of your company's headquarters.</td></tr><tr><td>ZIP/Postal Code</td><td>The ZIP or postal code of your company's headquarters.</td></tr><tr><td>Country</td><td>The country of your company's headquarters. Select from the drop-down list.</td></tr><tr><td>Telephone Number</td><td>The telephone number where a representative of your company can be reached.</td></tr><tr><td>Fax Number</td><td>The number to which a fax can be sent.</td></tr><tr><td>Toll Free Number</td><td>The toll free telephone number where a representative of your company can be reached.</td></tr></table> 
+wizard.cybercash	Wizard : CyberCash Payment Preferences	Enter the values you recieved when you registered for payment processing through CyberCash. If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold. </b>
+wizard.email	Wizard : Company E-mail Information	Enter the email addresses to be used for information routing in the fields provided. This information will be entered into Interchange and populated in the Administration tool. The required fields are displayed in bold.<p>The following are descriptions of the fields displayed on the page:<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><b>Field</b></td><td bgcolor="E0DCE0"><b>Definition</b></td></tr><tr><td>Orders sent to</td><td>The email address where customer orders will be sent. This field has been pre-populated for your convenience. If the email address displayed is not correct, type the correct email address in the field.</td></tr><tr><td>Info requests sent to</td><td>The email address where visitors to your site can send inquiries for more information. This field has been pre-populated for your convenience. If the email address displayed is not correct, type the correct email address in the field. The sales organization is typically the recipient of requests for more information.</td></tr><tr><td>Service requests sent to</td><td>The email address where visitors to your site can send customer service inquiries. This field has been pre-populated for your convenience. If the email address displayed is not correct, type the correct email address in the field. The customer service organization is typically the recipient of service requests.</td></tr></table><p>The Wizard <b>Checklist</b> is displayed on the left. From the checklist you can access any of the Wizard screens. Click <b>Save current settings</b> to save your work to this point.
+wizard.fedex	Wizard : Shipping Configuration for Federal Express 	This screen allows you to choose the Federal Express shipping options that you want to offer. If you are unsure of what a shipping option means, contact Federal Express for further explaination. The <b>Handling fee</b> allows you to enter a fee for handling the delivery for the customer. Most e-commerce sites charge a handling fee depending on how big or how fragile a product is. This value should be entered in decimal format. For example, if you are charging a handling fee of $3.00, enter 3.00 in the <b>Handling fee</b> field.<p> The Wizard <b>Checklist</b> is displayed on the left. From the checklist you can access any of the Wizard screens. Click <b>Save current settings</b> to save your work to this point.
+wizard.index	Wizard : Welcome 	<font size=-1>The Catalog Wizard gets you started with the Interchange e-commerce platform. It will lead you through the process of configuring the fundamentals of your store. When you finish you will have a fully functioning e-commerce site!  <br><br>The checklist at the left side of the page shows your progress in the Catalog Wizard. You can complete the sections in any order and you can go back to any section at any time. At any point in the Catalog Wizard process you can choose to stop, save your settings, and continue later.
+wizard.indexpage	Wizard : Index Page	<p><font size=2>This page allows you to create an index page. The index page is the first page of your site, and is ususally the first page that your customers see.<p><font size=2>In the <b>Page Title</b> field, enter the title for your index page. Typically the index page title contains the name of your store. The <b>Content</b> field has been pre-populated with sample information that has been formatted in HTML. If you are unfamiliar with HTML, it is recommended that you leave the HTML coding in place and simply replace the existing text with text relating to your store. If you are familiar with using HTML, you can choose to delete the prepopulated text and construct this page using your own text and HTML coding.
+wizard.itransact	Wizard : iTransact Payment Preferences	Enter the values you recieved when you registered for payment processing through Authorize.net. If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold</b>.
+wizard.launch	Wizard : Launch	<p><font size=2>Set your preferences for taking your site live. This is the final step before your site is publicly accessible. The required fields are displayed in bold.</p><p>The table below describes the options displayed on the Launch page.<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><font size=2><b>Field</b></td><td bgcolor="E0DCE0"><font size=2><b>Description</b></td></tr><tr><td><font size=2>Delete sample order data</td><td><font size=2>Choose <b>Yes</b> to purge the database of sample order data. It is strongly recommended that you do this before going live.</td></tr><tr><td><font size=2>Deletesample user data</td><td><font size=2>Choose <b>Yes</b> to purge the database of sample user data. It is strongly recommended that you do this before going live.</td></tr><tr><td><font size=2>Starting order number</td><td><font size=2>Enter the order number that should be used in taking the first customer order. The default is 01000.</td></tr><tr><td><font size=2>Enable Secure (SSL)</td><td><font size=2>Choose <b>Yes</b> to enable your SSL certificate. This is strongly recommended if you are processing payment online.</td></tr><tr><td><font size=2>Launch</td><td><font size=2>Click to launch your site.</td></tr></table>
+wizard.payment	Wizard : Setting Up Payment Information	This section helps you to set up your payment acceptance and processing information and is intended only to get you started. It offers a choice of processing options and payment methods. This information will be entered into Interchange and populated into the Administration tool. The required fields are displayed in bold.<p>The following are descriptions of the fields displayed on the page:<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><b>Field</b></td><td bgcolor="E0DCE0"><b>Definition</b></td></tr><td>Payment gateway</td><td>The payment gateway that is processing your payments. Choose your payment processor from the drop-down list. If you don't have a payment processor, you can choose one now, or choose no credit cards. Your choices are:<br><ul><li><b>no credit cards</b>-select if you are not processing payment information, or if you are processing payments manually (over the phone or using a Magnetic Stripe Reader). You can also select this if you are unsure of how you will process your payments.</li><li>PGP sent credit cards-select if you are using Pretty Good Protection (PGP) to process your payments. For more information on PGP, see <a href="http://www.pgpi.org">www.pgpi.org</a>.</li><li><b>CyberCash</b>-select if you are using CyberCash to process your payments. For more information on CyberCash, see <a href="http://www.cybercash.com">www.cybercash.com</a>.</li><li><b>Verisign</b>-select if you are using Verisign to process your payments. For more information on Verisign, see <a href="http://www.verisign.com">www.verisign.com</a>.</li></ul></td></tr></table>
+wizard.pgp	Wizard : PGP Payment Preferences	Enter the values you recieved when you registered for payment processing through Pretty Good Protection (PGP). If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold</b>. 
+wizard.preview	Wizard : Preview	<p><font size=2>The preview page allows you to view and test your newly created site before launch. After you preview your site you can go back to any point in the Wizard and make changes to your settings. You can preview and make changes as many times as necessary. <p>The following table describes the options displayed on this page.<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><font size=2><b>Field</b></td><td bgcolor="E0DCE0"><font size=2><b>Description</b></td></tr><tr><td><font size=2>Insert products data</td><td><font size=2>Enters into Interchange the product spreadsheet you uploaded. Choose <b>Yes</b> if you already uploaded sample product information or your own product information and want to enter it into Interchange. <br>Choose <b>No</b> if you entered products using the Manual Product Entry page.</td></tr><tr><td><font size=2>Insert sample order data</td><td><font size=2>Choose <b>Yes</b> to insert sample order and user data. This will help you to see how the Administration Tool works by providing sample orders and customers for view. You can purge this information before launch.</td></tr><tr><td><font size=2>Enable Secure (SSL)</td><td><font size=2>Choose <b>Yes</b> to enable your SSL certificate. This is not necessary to preview your site, but is strongly recommended for launch if you are processing payments online.</td></tr><tr><td><font size=2>Finish</td><td><font size=2>Click to preview your site.</td></tr></table>
+wizard.security	Wizard : Security Preferences	This section allows you to enter the security preferences for your site. It is important that you keep all user names and passwords in a safe place to ensure the safety of your site and sensitive customer information. The following table describes the fields displayed on this page.<table><tr><td>Administrator user name</td><td>Enter the user name for the administrator of your site. The administrator has access to all aspects of the website including customer, product, administration, and merchandising information. The administrator sets and oversees all <b>shop user</b> access preferences.</td></tr><tr><td>Administrator password</td><td>Enter the password for the administrator of your site. This password should be kept in a safe place.</td></tr><tr><td>Shop user name</td><td>Enter the user name for the shop associate for your site. The shop associate has limited access to sections of the Administration Tool as established by the administrator. You can use the Administration Tool to set up more than one shop associate.</td></tr><tr><td>Shop user password</td><td>Enter the password for the shop associate for your site. This password should be kept in a safe place.</td></tr><tr><td>Enable Web Security</td><td>Click this if you have your Secure Socket Layer (SSL) web server enabled. This is needed to establish a secure internet connection for processing payment information. This is required for launching your site.</td></tr></table><p>The Wizard <b>Checklist</b> is displayed on the left. From the checklist you can access any of the Wizard screens. Click <b>Save current settings</b> to save your work to this point.</td></tr></table>
 wizard.ship_flat	Wizard : Flat-rate Shipping Configuration	This screen allows you to choose the flat-rate shipping options that you want to offer.<p> Flat-rate per item shipping charges a fixed amount per item ordered. If the customer doubles the number ordered, even if it is the same SKU, the shipping cost will be doubled.  <P> Flat-rate per order shipping charges one fixed fee for shipping for the entire order, no matter how many units are ordered.  <p> You can select one type for domestic shipments and one for international shipments, but you cannot use both methods for domestic or international.
+wizard.shipping	Wizard : Set Up Shipping Information	This section helps you to set up your shipping information and is intended only to get you started with shipping calculation. It offers choice of three shipping methods and does not allow for multiple delivery options. This information will be entered into Interchange and populated into the Administration tool. The Administration tool allows you to enter more complex shipping options. The required fields are displayed in bold.<p>The following are descriptions of the fields displayed on the page:<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><b>Field</b></td><td bgcolor="E0DCE0"><b>Definition</b></td></tr><tr><td>Shipping Method</td><td>The method by which you will ship your products. Choose from the drop-down menu. Your choices are:<br><ul><li>Federal Express (FedEx)</li><li>United Postal Service (UPS)</li><li>United States Postal Service (USPS)</li></ul></td></tr><tr><td>Warehouse ZIP code</td><td>The ZIP code of the location from which you will be shipping. This, combined with with the <b>Shipping Method</b>, are compared against an internal table to determine the correct shipping cost.</td></tr></table>
+wizard.skipjack	Wizard : Skipjack Payment Preferences	Enter the values you recieved when you registered for payment processing through Authorize.net. If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold</b>.
+wizard.tax	Wizard : Set Up Tax Information	This section helps you to set up your tax information. This information will be entered into Interchange and populated into the Administration tool. This screen is intended only to get you started with tax calculation. It offers a simple calculation method and does not account for multiple delivery locations. The Administration tool allows you to upload tax calculation tables or enter specific tax application rules. The required fields are displayed in bold.<p>The following are descriptions of the fields displayed on the page:<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><font size=2><b>Field</b></td><td bgcolor="E0DCE0"><font size=2><b>Definition</b></td></tr><tr><td><font size=2>Tax location</td><td><font size=2>The State in which you will be selling your products. If you will be selling in more than one state, enter the primary state. You can make adjustments using the administration tool later.</td></tr><tr><td><font size=2>Tax rate</td><td><font size=2>The percentage that should be used when calculating tax. This is typically the default sales tax for the state you are selling in. If you are unsure of what percentage to use, contact your local Better Business Bureau.</td></tr><tr><td><font size=2>Tax shipping?</td><td><font size=2>If the tax percentage should be applied to the total cost, including shipping. Click the appropriate response from the drop-down menu. Clicking <b>Yes</b> applies the tax after the shipping cost has been added to the order.</td></tr></table>
 wizard.ups	Wizard : Shipping Configuration for UPS	This screen allows you to choose the UPS shipping options that you want to offer. If you are unsure of what a shipping option means, contact UPS for further explaination. The <b>Handling fee</b> allows you to enter a fee for handling the delivery for the customer. Most e-commerce sites charge a handling fee depending on how big or how fragile a product is. This value should be entered in decimal format. For example, if you are charging a handling fee of $3.00, enter 3.00 in the <b>Handling fee</b> field.<p>The Wizard <b>Checklist</b> is displayed on the left. From the checklist you can access any of the Wizard screens. Click <b>Save current settings</b> to save your work to this point.
-wizard.security	Wizard : Security Preferences	This section allows you to enter the security preferences for your site. It is important that you keep all user names and passwords in a safe place to ensure the safety of your site and sensitive customer information. The following table describes the fields displayed on this page.<table><tr><td>Administrator user name</td><td>Enter the user name for the administrator of your site. The administrator has access to all aspects of the website including customer, product, administration, and merchandising information. The administrator sets and oversees all <b>shop user</b> access preferences.</td></tr><tr><td>Administrator password</td><td>Enter the password for the administrator of your site. This password should be kept in a safe place.</td></tr><tr><td>Shop user name</td><td>Enter the user name for the shop associate for your site. The shop associate has limited access to sections of the Administration Tool as established by the administrator. You can use the Administration Tool to set up more than one shop associate.</td></tr><tr><td>Shop user password</td><td>Enter the password for the shop associate for your site. This password should be kept in a safe place.</td></tr><tr><td>Enable Web Security</td><td>Click this if you have your Secure Socket Layer (SSL) web server enabled. This is needed to establish a secure internet connection for processing payment information. This is required for launching your site.</td></tr></table><p>The Wizard <b>Checklist</b> is displayed on the left. From the checklist you can access any of the Wizard screens. Click <b>Save current settings</b> to save your work to this point.</td></tr></table>
-env_vars	Environment Variables	<p>Here you can view the environment of the running Interchange daemon.
Useful only for debugging purposes.
</p>
-affiliate.edit	Edit Affiliate	<p>The <b>Edit Affiliate</b> page allows you to edit specific attributes for an Affiliate. The following is a list of some of the most common attributes that you can edit.
<p>
<h2>Functions</h2>

<b>Affiliate ID</b><br>
This field contains the <b>Affiliate ID</b> for the Affiliate you are editing.
<p></p>

<p>
<b>Affiliate Name</b><br>
This field contains the name of the Affiliate you are editing.
</p>

<p> <b>Campaigns</b><br>
This field is used to track traffic from advertising campaigns.
</p><p> <b>Coupon_amount</b><br>
This field is used to enter the coupon discount amount to be applied to a purchase made by the Affiliate you are editing.
<p>
<b>Join Date</b><br>
The value in this field can be used to keep track of when the Affiliate signed with you.
</p>

<p>
<b>URL</b><br>
The value in this field is used to direct visitors coming from the Affiliate you are editing to your home page or a page designed specifically for visitors from that Affiliate's site. <br>
This should <i>not</i> be the URL of the Affiliate's home site.
</p>

<p> <b>Timeout Delay</b><br>
The value in this field is used to specify the amount of time a customer has to place an order and still give the Affiliate credit for it. If the customer goes over this amount of time, the Affiliate doesn't get credit for the customer visit. The timeout delay is measured in seconds, with the value of 0 (zero) disabling it. It is recommended that you use a value in the thousands to be sure the customer has enough time to shop.
<p>
<b>OK</b><br>
To commit your changes, click <b>OK</b>.
<i><b>Hint:</b> Using the browser's back button to exit the screen will not commit the changes you have made. </i>
<p>
<b>Cancel</b><br>
To abandon the changes you have made, click this button.
-wizard.companyinfo	Wizard : Your Company Info	Enter your company information in the fields provided. This information will be entered into Interchange and populated into the Administration tool. The required fields are displayed in bold.<p>The following are descriptions of the fields displayed on the page:<p><table border=1 cellspacing=0 cellpadding=2 width=425><tr><td bgcolor="E0DCE0"><b>Field</b></td><td bgcolor="E0DCE0"><b>Definition</b></td></tr><tr><td>Your Company Name</td><td>The legal name of your company, used in correspondence.</td></tr><tr><td>Main Domain Name</td><td>The URL of your company's web site. For example, www.yourdomain.com.</tr><tr><td>Street Address</td><td>The postal address of your company's headquarters.</td></tr><tr><td>City</td><td>The city of your company's headquarters.</td></tr><tr><td>State</td><td>The state of your company's headquarters.</td></tr><tr><td>ZIP/Postal Code</td><td>The ZIP or postal code of your company's headquarters.</td></tr><tr><td>Country</td><td>The country of your company's headquarters. Select from the drop-down list.</td></tr><tr><td>Telephone Number</td><td>The telephone number where a representative of your company can be reached.</td></tr><tr><td>Fax Number</td><td>The number to which a fax can be sent.</td></tr><tr><td>Toll Free Number</td><td>The toll free telephone number where a representative of your company can be reached.</td></tr></table> 
-wizard.batchupload	Upload Products	<p><font size=2>This page allows you to enter your products into the Interchange e-commerce platform using the Wizard spreadsheet. The spreadsheet has been created with all the necessary product descriptor fields and is the recommended method for entering products. <p>To use the Wizard spreadsheet, download it to your hard drive. Then, add your products and categories, save it, and upload it again using the <b>Browse...</b> button to locate the file. Five sample field categories are displayed in the spreadsheet for your reference. Once the file has been uploaded your product information is entered into Interchange and populated into the Administration Tool.<p>If you have not yet established your product line, or you would rather use sample product information to test how the products will be displayed, you can use one of the sample sets of data. The sample sets of data are:<p><ul><li>Hardware and Construction Tool Store-contains construction products.<li>Computer Store-contains computer hardware products.<li>Marketing Report Store-contains digital products.</ul><p>To use these sample data sets, click the set you want to use and save it to your hard drive. Then upload it again by using the <b>Browse...</b> button to locate the file. <p><b>Note:</b> It is recommended that you have a few products in the system before you launch to see how they are displayed.
-create.new.customer	Create new customer	<p> The <b>Create New Customer</b> page allows you create a new customer account
  by entering the necessary customer information. The fields displayed on this
  page are dependent on how the page was set up by your Site Administrator or
  Super User.
<p>
<h2>Functions</h2>
<b>OK</b><br>
After entering the necessary information to create a new customer, click <b>OK</b> to save the information. The <b>Active Customers</b> page is displayed including the customer you created.
<p>
<b>Cancel</b><br>To return to the <b>Active Customers</b> page without saving the new customer information, click <b>Cancel</b>.
<p>
<h2>Features</h2>
The <b>meta</b> link, which is only visible to the Site Administrator or Super
User, is displayed below each field name. This link allows the Site Administrator
or Super User to change the parameters for each field. For more information on
<b>meta</b> links, see the <a href="flex.meta.html">Meta Field Information</a> page.
+wizard.verisign	Wizard : Signio/Verisign Payment Preferences	Enter the values you recieved when you registered for payment processing through Signio/Verisign. If you haven't recieved these values or you haven't signed up for this payment option yet leave these fields blank. Remember that you will not be able to launch your site without a secure payment processing solution. The required fields are displayed in <b>Bold</b>. 



1.1                  interchange/dist/lib/UI/locales/en_US.cfg


rev 1.1, prev_rev 1.0
Index: en_US.cfg
===================================================================
# These file adds strings to be translated which we
# can't derive automatically from the UI pages

Locale en_US <<EOF
{
# language name
"MV_LANG_NAME",
"English",

"Edit checked items in sequence",
"Edit checked",

"Edit checked records in sequence",
"Edit checked",

"Delete checked records",
"Delete checked",

"Delete checked items",
"Delete checked",

}
EOF



2.6       +62 -78    interchange/dist/lib/UI/pages/admin/access_permissions.html


rev 2.6, prev_rev 2.5
Index: access_permissions.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/access_permissions.html,v
retrieving revision 2.5
retrieving revision 2.6
diff -u -r2.5 -r2.6
--- access_permissions.html	18 Aug 2002 08:09:05 -0000	2.5
+++ access_permissions.html	14 Jan 2003 02:25:50 -0000	2.6
@@ -75,6 +75,7 @@
 
 <!-- ----- BEGIN REAL STUFF ----- -->
 
+[output name=top_of_form]
 <FORM METHOD=POST ACTION="[area ui]">
 <INPUT TYPE=hidden NAME=mv_session_id VALUE="[data session id]">
 <INPUT TYPE=hidden NAME=mv_doit VALUE="set">
@@ -87,21 +88,23 @@
 <INPUT TYPE=hidden NAME=mv_update_empty VALUE="1">
 <INPUT TYPE=hidden NAME=mv_data_fields VALUE="username yes_functions no_tables yes_tables table_control">
 <INPUT TYPE=hidden NAME="mv_data_function" VALUE="update">
+[output name=""]
 
-
-<table __UI_T_PROPERTIES__>
-
-<tr>
-<td colspan=6 class=rborder><img src="bg.gif" width=600 height=1></td>
-</tr>
-
-<tr>
-<td class=rnorm valign=top>&nbsp;</td>
-<td class=rnorm valign=top>[L]View list[/L]</td>
-<td class=rnorm valign=top>[L]View detail[/L]</td>
-<td class=rnorm valign=top>[L]Create[/L]</td>
-<td class=rnorm valign=top>[L]Edit[/L]</td>
-<td class=rnorm valign=top>[L]Delete[/L]</td>
+[tabbed-display
+	js-prefix="perm_"
+	width=800
+	height=800
+	]
+[tabbed-panel Editor Functions]
+<table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
+
+<tr class=rhead>
+<td class=rhead valign=top>&nbsp;</td>
+<td class=rhead valign=top>[L]View list[/L]</td>
+<td class=rhead valign=top>[L]View detail[/L]</td>
+<td class=rhead valign=top>[L]Create[/L]</td>
+<td class=rhead valign=top>[L]Edit[/L]</td>
+<td class=rhead valign=top>[L]Delete[/L]</td>
 </tr>
 
 [seti tables][list-databases][/seti]
@@ -155,27 +158,29 @@
 #DEBUG
 #	$out .= <<EOF;
 #<tr>
-#<td colspan=6 class=rnorm valign=top>
+#<td colspan=6 class=rownorm valign=top>
 #$string
 #</td>
 #EOF
 
 	my $perm;
 	my $title;
+	my $inc = 0;
 	while( $perm = shift @permissions) {
 		$title = shift @permissions;
 		my $ref = $permref->{$perm} || {};
+		my $class = $inc++ % 2 ? 'rownorm' : 'rowalt';
 		$out .= <<EOF;
-<tr>
-<td class=rnorm valign=top>
+<tr class=$class>
+<td class=$class valign=top>
 <b>$title</b>
 <input type=hidden value="$perm=" name="yes_functions">
 </td>
 EOF
 		for(@some) {
 			$out .= <<EOF;
-<td class=rnorm valign=top>
-<INPUT type=checkbox value=$_ name="yes_functions"$ref->{$_}>
+<td class=$class valign=top>
+<INPUT type=checkbox class=s3 value=$_ name="yes_functions"$ref->{$_}>
 </td>
 EOF
 		}
@@ -183,22 +188,15 @@
 	}
 	my $ref = $permref->{order};
 	$out .= <<EOF;
-<tr>
-<td colspan=6 class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
-
 </table>
- 
-<br>
+[/tabbed-panel]
 
-<table __UI_T_PROPERTIES__>
+[tabbed-panel Other Functions]
 
-<tr>
-<td colspan=2 class=rborder><img src="bg.gif" width=600 height=1></td>
-</tr>
+<table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
 
 <tr>
-<td class=rnorm valign=top>
+<td class=rownorm valign=top>
 <b>[L]Order manager[/L]:</b>
 <INPUT type=hidden value="order=" name="yes_functions">
 <li><INPUT type=checkbox value=l name="yes_functions"$ref->{l}> [L]View list[/L]
@@ -211,7 +209,7 @@
 <INPUT type=hidden value="," name="yes_functions">
 <p>
 </td>
-<td class=rnorm valign=top ROWSPAN=2>
+<td class=rownorm valign=top ROWSPAN=2>
 EOF
 	@permissions = (
 		orderstats		=> 'Order statistics utility',
@@ -245,7 +243,7 @@
 </tr>
 
 <tr>
-<td class=rnorm valign=top>
+<td class=rownorm valign=top>
 <b>[L]Customer Edit Permissions[/L]:</b>
 <INPUT type=hidden value="userdb=" name="yes_functions">
 <li><INPUT type=checkbox value=l name="yes_functions"$ref->{l}> [L]View list[/L]
@@ -262,38 +260,28 @@
 	return $out;
 [/perl]
 
-<tr>
-<td colspan=2 class=rborder><img src="bg.gif" width=600 height=1></td>
-</tr>
-
 </table>
 
-<p>
+[/tabbed-panel]
 
-<table cellpadding=3 cellspacing=0 width=100%>
+[tabbed-panel Table Permissions]
 
-<tr>
-<td colspan=9 class=rborder><img src="bg.gif" width=600 height=1></td>
-</tr>
-
-<tr>
-<td colspan=9 class=rnorm ALIGN=center><B>[L]Table Permissions[/L]</B></td>
-</tr>
+<table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
 
 <tr>
-<td colspan=9 class=rspacer><img src="bg.gif" width=600 height=1></td>
+<td colspan=9 class=rhead ALIGN=center><B>[L]Table Permissions[/L]</B></td>
 </tr>
 
 <tr>
-<td class=rnorm valign=top>&nbsp;</td>
-<td class=rnorm valign=top>[L]HIDE[/L]</td>
-<td class=rnorm valign=top>[L]View[/L]</td>
-<td class=rnorm valign=top>[L]Edit[/L]</td>
-<td class=rnorm valign=top>[L]Create[/L]</td>
-<td class=rnorm valign=top>[L]Delete[/L]</td>
-<td class=rnorm valign=top>[L]Import[/L]</td>
-<td class=rnorm valign=top>[L]Export[/L]</td>
-<td class=rnorm valign=top>[L]Owner field[/L]</td>
+<td class=rhead valign=top>&nbsp;</td>
+<td class=rhead valign=top>[L]HIDE[/L]</td>
+<td class=rhead valign=top>[L]View[/L]</td>
+<td class=rhead valign=top>[L]Edit[/L]</td>
+<td class=rhead valign=top>[L]Create[/L]</td>
+<td class=rhead valign=top>[L]Delete[/L]</td>
+<td class=rhead valign=top>[L]Import[/L]</td>
+<td class=rhead valign=top>[L]Export[/L]</td>
+<td class=rhead valign=top>[L]Owner field[/L]</td>
 </tr>
 
 [perl]
@@ -348,22 +336,24 @@
 
 	my $perm;
 	my $title;
+	my $inc = 0;
 	while( $perm = shift @permissions) {
 		$title = shift @permissions;
+		my $class = $inc++ % 2 ? 'rownorm' : 'rowalt';
 		my $ref = $permref->{$perm} || {};
 		$out .= <<EOF;
-<tr>
-<td class=rnorm valign=top>
+<tr class=$class>
+<td class=$class valign=top>
 <b>$title</b>
 <input type=hidden value="$perm=" name="yes_tables">
 </td>
-<td class=rnorm valign=top>
-<INPUT type=checkbox value="$perm" name="no_tables"$no{$perm}>
+<td class=$class valign=top>
+<INPUT type=checkbox class=s3 value="$perm" name="no_tables"$no{$perm}>
 </td>
 EOF
 		for(@all) {
 			$out .= <<EOF;
-<td class=rnorm valign=top>
+<td class=$class valign=top>
 <INPUT type=checkbox value=$_ name="yes_tables"$ref->{$_}>
 </td>
 EOF
@@ -374,7 +364,7 @@
 			$of = $tc->{$perm}{owner_field};
 		}
 		$out .= <<EOF;
-<td class=rnorm valign=top>
+<td class=$class valign=top>
 <INPUT type=hidden value="$perm=" name="owner_field">
 <INPUT type=text value="$of" name="owner_field" size=10>
 <INPUT type=hidden value="," name="owner_field">
@@ -386,27 +376,21 @@
 	return $out;
 	[/perl]
 
-<tr>
-<td colspan=9 class=rspacer><img src="bg.gif" width=600 height=1></td>
-</tr>
-
-
-<tr>
-<td colspan=9 class=rnorm>
-	<input type=submit value="[L]Ok[/L]">
-	<input type=submit name=mv_click value="[L]Cancel[/L]">
-</td>
-</tr>
-
-<tr>
-<td colspan=9 class=rborder><img src="bg.gif" width=600 height=1></td>
-</tr>
-
 </table>
+[/tabbed-panel]
+[/tabbed-display]
 
-<BR>
+[output name=top_buttons]
+	<input type=submit value="[L]Ok[/L]" class=s3 style="font-weight: bold; width: 40px; text-align: center">
+	<input type=submit name=mv_click value="[L]Cancel[/L]" class=s3>
+
+[output name=bottom_buttons]
+	<input type=submit value="[L]Ok[/L]" class=s3 style="font-weight: bold; width: 40px; text-align: center">
+	<input type=submit name=mv_click value="[L]Cancel[/L]" class=s3>
 
+[output name=bottom_of_form]
 </form>
+[output name=""]
 @_UI_STD_FOOTER_@
 
 <!-- page: @@MV_PAGE@@ -->



2.2       +5 -7      interchange/dist/lib/UI/pages/admin/bug_report.html


rev 2.2, prev_rev 2.1
Index: bug_report.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/bug_report.html,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- bug_report.html	26 Nov 2002 15:21:56 -0000	2.1
+++ bug_report.html	14 Jan 2003 02:25:50 -0000	2.2
@@ -3,13 +3,11 @@
 [set page_perm]bug[/set]
 @@UI_STD_HEAD@@
 
-<p>
-If you are uncertain of the genesis of this problem,
-please enter a bug report in the Interchange
-<A HREF="http://www.icdevgroup.org/bugs/enter_bug.cgi">bug tracker</A>
-and include the system information below.
-</p>
-
+If you are uncertain of the genesis of this problem, 
+please highlight the following text and then press SHIFT-DELETE. Once you
+have done that, <A HREF="http://interchange.redhat.com/bugs/enter_bug.cgi">login to Bugzilla</A>
+and enter a bug report, using SHIFT-INSERT to place the text in the 
+Description section.
 <FORM>
 <TEXTAREA NAME=JUNK ROWS=100 COLS=80>[dump]</TEXTAREA></FORM>
 



1.6       +15 -60    interchange/dist/lib/UI/pages/admin/content.html


rev 1.6, prev_rev 1.5
Index: content.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/content.html,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- content.html	13 Sep 2002 20:46:20 -0000	1.5
+++ content.html	14 Jan 2003 02:25:50 -0000	1.6
@@ -57,12 +57,6 @@
 	return;
 [/calc]
 
-[if session content_edit]
-	<A HREF="[area href=@@MV_PAGE@@ form='ui_content_op=purge']"
-				onClick="return confirm('Are you sure you want to purge all in-process edits?')"
-	>Purge all in-process</A>
-[/if]
-
 [warnings auto=1]
 
 [if type=explicit compare="[error all=1 show_var=1 keep=1]"]
@@ -72,75 +66,36 @@
 </blockquote>
 [/if]
 
-<table border=0 __UI_T_PROPERTIES__>
-<tr>
-<td colspan=3 class=rborder><img src="bg.gif" width="100%" height=1></td>
-</tr>
+<div class=titlebox>Edit pages</div>
+
+[if session content_edit]
+	<A HREF="[area href=@@MV_PAGE@@ form='ui_content_op=purge']"
+				onClick="return confirm('Are you sure you want to purge all in-process edits?')"
+	>Purge all in-process (including page, template, component edits)</A> <br>
+[/if]
 
-<tr>
-	<td class=rnorm valign=top width="33%">
-	<h2>Pages</h2>
 	[calc] tmp_display_in_progress('page'); [/calc]
 	<A HREF="[area
 					href=__UI_BASE__/content_editor
 					form=auto
 					ui_type=page
 					new=1
-				]"><img src="layout.gif" border=0 align=textmiddle> [L]New page[/L]</A><br><br>
+				]"><img src="layout.gif" border=0 align=center> [L]New page[/L]</A><br><br>
+<table width="100%">
+[table-organize columns=3 columnize=1 interpolate=1 min-rows=15]
+
 	[file-navigator
 			initial_dir="__UI_PAGE_DIR__"
 			start_open="__UI_PAGE_DIR__"
+			top-of-tree="__UI_PAGE_DIR__"
+			template=|<TD width="33%">%s</TD>|
 			edit_only=1
 			edit_all=1
+			details=0
 			edit_page=content_editor
 			edit_form="ui_name=~RN~&ui_type=page"
 			]
-	</td>
-
-	<td class=rnorm valign=top width="33%">
-	<h2>Templates</h2>
-	[calc] tmp_display_in_progress('template'); [/calc]
-	<A HREF="[area
-					href=__UI_BASE__/content_editor
-					form=auto
-					ui_type=template
-					new=1
-				]"><img src="layout.gif" border=0 align=textmiddle> [L]New template[/L]</A><br><br>
-	[loop acclist=1 list="[content-info templates=1 no-none=1]"]
-	<A HREF="[area
-					href=__UI_BASE__/content_editor
-					form=auto
-					ui_type=template
-					ui_name="[loop-code]"
-				]"><img src="layout.gif" border=0 align=textmiddle>[loop-param label]</A><br>
-	[/loop]
-
-	</td>
-
-	<td class=rnorm valign=top width="33%">
-	<h2>Components</h2>
-	[calc] tmp_display_in_progress('component'); [/calc]
-	<A HREF="[area
-					href=__UI_BASE__/content_editor
-					form=auto
-					ui_type=component
-					new=1
-				]"><img src="layout.gif" border=0 align=textmiddle> [L]New component[/L]</A><br><br>
-	[loop acclist=1 list="[content-info components=1 no-none=1]"]
-	<A HREF="[area
-					href=__UI_BASE__/content_editor
-					form=auto
-					ui_type=component
-					ui_name="[loop-code]"
-				]"><img src="layout.gif" border=0 align=textmiddle>[loop-param label]</A><br>
-	[/loop]
-	</td>
-</tr>
-
-<tr>
-<td colspan=3 class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
-
+[/table-organize]
 </table>
 
 </form>



1.3       +126 -23   interchange/dist/lib/UI/pages/admin/content_push.html


rev 1.3, prev_rev 1.2
Index: content_push.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/content_push.html,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- content_push.html	12 Sep 2002 04:58:47 -0000	1.2
+++ content_push.html	14 Jan 2003 02:25:50 -0000	1.3
@@ -41,21 +41,29 @@
 <form action="[area @@MV_PAGE@@]" method=POST name=pushform>
 <input type=hidden name=mv_session_id value="[data session id]">
 <input type=hidden name=mv_action value=back>
-<table>
-<tr>
-	<td>
-		<b>Source</b> <select name=source onChange="doType(this)">
-			<option value=""> -- select source file --
-		</select>
-	</td>
-	<td id=messagebox style="font-size: larger">
-		Select page to clone. Only pages matching the template type of
-		the source page will be allowed.
-	</td>
+<table width="100%" cellspacing=0 cellpadding=5>
+	<tr>
+		<td colspan=2 class=titlebox>
+		Source
+		</td>
+	</tr>
+	<tr>
+		<td class=clabel>
+			<select name=source onChange="doType(this)">
+				<option value=""> -- select source file --
+			</select>
+		</td>
+		<td id=messagebox class=cdata>
+		  <span class=chelp>
+			Select page to clone. Only pages matching the template type of
+			the source page will be allowed.
+		  </span>
+		</td>
+	</tr>
 </table>
 
 <br>
-<b>Targets</b><br>
+<div class=titlebox>Targets</div><br>
 <script>
 	var files = [
 
@@ -64,18 +72,23 @@
 	my $dir = $Config->{PageDir};
 	$dir =~ s{^$Config->{VendRoot}/}{};
 	my $suf = $Config->{HTMLsuffix};
-	my @things = map { [ "$dir/$_$suf", $_ ] } @$files;
+	sub dirname {
+		my $fn = shift;
+		$fn =~ m{(.*)/} and return $1;
+		return '';
+	}
+	my @things = map { [ "$dir/$_$suf", dirname($_), $_ ] } @$files;
 
 	my @out;
 	@qualify = ();
 	for my $ref (@things) {
-		my ($fn, $lab) = @$ref;
+		my ($fn, $dir, $lab) = @$ref;
 		my $dat = $Tag->file($fn);
 		$dat =~ m{\nui_(?:page_template|template_name):\s*(.*)}
 			or next;
 		my $type = $1;
 		push @$ref, $type;
-		push @qualify, [$fn, $lab, $type];
+		push @qualify, [$fn, $lab, $dir, $type];
 		$fn =~ s/'/\\'/g;
 		$lab =~ s/'/\\'/g;
 		$type =~ s/'/\\'/g;
@@ -95,7 +108,9 @@
 		var w = document.getElementById('target' + idx);
 		var el = document.getElementById('lab' + idx);
 
-		el.style.fontWeight = weight;
+		if(el != undefined) 
+			el.style.fontWeight = weight;
+
 		if(dis) {
 			w.checked = 0;
 			w.disabled = 1;
@@ -106,6 +121,35 @@
 		return;
 	}
 
+    var current_div;
+
+	function displayDiv (classname) {
+		if(current_div != undefined)
+			current_div.style.display = 'none';
+		var el = document.getElementById( 'div_' + classname );
+		if(el != undefined) {
+			current_div = el;
+			el.style.display = 'block';
+		}
+	}
+
+	function checkClass (classname) {
+		for(var f = 0; f < document.forms.length; f++) {
+			var form = document.forms[f];
+			for(var i = 0; i < form.elements.length; i++) {
+				var el = form.elements[i];
+				if(el.className == classname) {
+					if(el.checked || el.disabled) {
+						el.checked = false;
+					}
+					else {
+						el.checked = true;
+					}
+				}
+			}
+		}
+	}
+
 	function doType (wid) {
 		if(wid == undefined)
 			return;
@@ -155,22 +199,81 @@
 	populateSelect(document.pushform.source);
 </script>
 
-<table>
-[table-organize columns=3 columnize=1 interplate=1]
+<table width="100%">
+<tr>
+	<td width="67%">
+	<table>
+	[table-organize columns=3 columnize=1 interplate=1]
 [calc]
 	my $i = 0;
+	my @out;
+	my @dirout;
+	%dirs = ();
 	for(@qualify) {
-		my ($fn, $lab, $type) = @$_;
-		push @out, <<EOF;
+		my ($fn, $lab, $dir, $type) = @$_;
+		if($dir) {
+			my $htm = $dirs{$dir};
+			my $dirclass = $dir;
+			my $levels = $dir =~ tr:/:/:;
+			my $spacer = '';
+			$spacer = '<img src="bg.gif" width=10 border=0>' x $levels
+				if $levels;
+			$dirclass =~ s/\W/_/g;
+			if( ! $htm) {
+				$htm = $dirs{$dir} = [];
+				push @dirout, <<EOF;
+<TD id=lab$i width="33%">$spacer<a href="javascript:checkClass('$dirclass')" onMouseOver="javascript:displayDiv('$dirclass')" title="toggle all files in $dir"><img src="folder.gif" border=0> $dir</a></TD>
+EOF
+
+			}
+			push @$htm, <<EOF;
+<input name=target class=$dirclass type=checkbox id=target$i value="$fn">$lab
+EOF
+		}
+		else {
+			push @out, <<EOF;
 <TD id=lab$i width="33%"><input name=target type=checkbox id=target$i value="$fn">$lab</TD>
 EOF
+		}
 		$i++;
 	}
-	return join "", @out;
+	return join "", @dirout, @out;
 [/calc]
-[/table-organize]
+	[/table-organize]
+	</table>
+	</td>
+	<td width="33%" valign=top>
+	<div style="position: relative">
+	[calc]
+		my @out;
+		for(keys %dirs) {
+			my $ary = $dirs{$_};
+			my $dirclass = $_;
+			$dirclass =~ s/\W/_/g;
+			my $elstring = join "<br>", @$ary;
+			my $out = <<EOF;
+<div	id="div_$dirclass"
+		style="
+			position: absolute;
+			left: 0;
+			top: 0;
+			display: none;
+			width: 100%;
+			height: 100%;
+			"
+>
+<div class=titlebox>Files in $_</div>
+$elstring
+</div>
+EOF
+			push @out, $out;
+		}
+		return join "\n", @out;
+	[/calc]
+		
+	</div>
+	</td>
 </table>
-
 <br>
 <input type=submit name=push value="[L]Push components[/L]">
 <br>



2.14      +42 -30    interchange/dist/lib/UI/pages/admin/customer.html


rev 2.14, prev_rev 2.13
Index: customer.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/customer.html,v
retrieving revision 2.13
retrieving revision 2.14
diff -u -r2.13 -r2.14
--- customer.html	8 Oct 2002 14:23:01 -0000	2.13
+++ customer.html	14 Jan 2003 02:25:50 -0000	2.14
@@ -146,7 +146,8 @@
 		else	   { $CGI->{ui_text_qualification} = "" }
 	}
 	return if $CGI->{ui_text_qualification};
-	return unless $Config->{Database}{transactions}{LARGE};
+	return unless
+	  $Variable->{CUSTOMER_VIEW_LARGE} or $Config->{Database}{transactions}{LARGE};
 	$Scratch->{ui_location} = $Tag->area( {
 									
 									href => '__UI_BASE__/flex_select',
@@ -183,18 +184,24 @@
 
 <!-- ----- Show the active/inactive buttons ----- -->
 
+
+[output name=search_box]
 <FORM ACTION="[area @@MV_PAGE@@]">
-<SMALL><INPUT TYPE=text NAME=ui_text_qualification VALUE="">
-[button text="[L]Search for customer[/L]"]
-mv_nextpage=@@MV_PAGE@@
-[/button]
+<INPUT TYPE=text NAME=ui_text_qualification VALUE="" class=s3>
+<input type=submit value="[L]Search for customer[/L]" class=s3>
 </form>
-</SMALL>
+
+[output name=""]
+
 <!-- ----- Show the customer list box ----- -->
 [if cgi ui_text_qualification]
-[if !cgi mv_like_spec]
-<H4>[msg arg.0="[cgi ui_text_qualification]"]Entries containing "%s"[/msg]</H4>
-[/if]
+[calc]
+	return if $CGI->{mv_like_spec};
+	$Scratch->{page_banner} ||= $Scratch->{page_title};
+	my $val = $Tag->filter('encode_entities', $CGI->{ui_text_qualification});
+	$Scratch->{page_banner} .= ' -- ' . errmsg( 'entries containing "%s"', $val);
+	return;
+[/calc]
 [/if]
 <FORM ACTION="[process]">
 <INPUT TYPE=hidden NAME=mv_nextpage VALUE="@@MV_PAGE@@">
@@ -241,34 +248,32 @@
 	return;
 [/calc]
 <br>
-<table __UI_T_PROPERTIES__>
-<tr class=rmarq>
-	<th>&nbsp;</th>
-	<TH ALIGN=left>[page extra=rmarq href=@@MV_PAGE@@ form=`
+<table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
+<tr class=rhead>
+	<td>actions</td>
+	<td class=rhead>[page extra=rhead href=@@MV_PAGE@@ form=`
 	$qual = '';
 	if($CGI->{ui_text_qualification}) {
 		$qual .= "ui_text_qualification=$CGI->{ui_text_qualification}";
 	}
     return "ui_sort_field=username\n" . sortrev('username');
-    `][L]ID[/L]</a></TH>
-	<TH ALIGN=left>[page extra=rmarq href=@@MV_PAGE@@ form=`
+    `][L]ID[/L]</a></td>
+	<td class=rhead>[page extra=rhead href=@@MV_PAGE@@ form=`
     return "$qual\nui_sort_field=lname,fname\n" . sortrev('lname');
-    `][L]Name[/L]</A></TH>
-	<TH ALIGN=left>[page extra=rmarq href=@@MV_PAGE@@ form=`
+    `][L]Name[/L]</A></td>
+	<td class=rhead>[page extra=rhead href=@@MV_PAGE@@ form=`
     return "$qual\nui_sort_field=company,lname\n" . sortrev('company');
-    `][L]Company[/L]</A></TH>
-	<TH ALIGN=left>
+    `][L]Company[/L]</A></td>
+	<td class=rhead>
 		[page
 			href=@@MV_PAGE@@
-			extra=rmarq
+			extra=rhead
 			form=`
 				return "$qual\nui_sort_field=country,state,city\n" . sortrev('country');
-			`][L]Location[/L]</A></TH>
+			`][L]Location[/L]</A></td>
 </TR>
-<tr class=rborder><td colspan=8 class=rspacer></td></tr>
-
 [search-list]
-<TR [item-alternate 2]class=rnorm[else]class=ralt[/else][/item-alternate]>
+<TR [item-alternate 2]class=rownorm[else]class=rowalt[/else][/item-alternate]>
 
 	<TD><INPUT TYPE=checkbox NAME=customer VALUE="[item-code]">
 [page href="@@MV_PAGE@@"
@@ -323,36 +328,43 @@
 	</td>
 </tr>
 [/more-list]
-<tr class=rborder><td colspan=8></td></tr>
 
 </table>
 <br>
 [on-match]
+[output name=bottom_buttons]
 [if scratch can_delete]
-[button form=batch text="[L]Delete checked customers[/L]"
+[button extra="class=s3" form=batch text="[L]Delete checked customers[/L]"
  confirm='[L]Are you sure you want to delete the checked customers?[/L]']deletecustomer=1
 [/button]
 [/if]
-&nbsp;&nbsp;&nbsp;[button form=batch text=`
+&nbsp;&nbsp;&nbsp;[button form=batch extra="class=s3" text=`
 			my $tmp = errmsg("$Scratch->{active_nm} checked customers");
 			return "\u$tmp";
 			`]
 [scratch active_nm]=1[/button]
+[output name=""]
 [/on-match]
-</FORM>
+
 [if-mm advanced userdb=e]
+[output name=top_buttons]
 	<form action="[area @@MV_PAGE@@]">
 	<input type=hidden name=mv_action value=refresh>
 	<input type=hidden name=mv_click value=MMsu>
-	Switch to a user: <select name=user>
+	<span class=s3>Switch to a user:</span> <select name=user class=s3>
 						[search-list]
 						<option>[item-code]
 						[/search-list]
-					  </select><input type=submit value="[L]Switch[/L]">
+					  </select><input type=submit value="[L]Switch[/L]" class=s3>
 	</form>
+[output name=""]
 [/if-mm]
+
 [/search-region]
 
+[output name=bottom_of_form]
+</FORM>
+[output name=""]
 
 <!-- ----- END REAL STUFF ----- -->
 



2.2       +1 -1      interchange/dist/lib/UI/pages/admin/customer_all.html


rev 2.2, prev_rev 2.1
Index: customer_all.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/customer_all.html,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- customer_all.html	24 Sep 2002 01:37:29 -0000	2.1
+++ customer_all.html	14 Jan 2003 02:25:50 -0000	2.2
@@ -33,7 +33,7 @@
 
 @_UI_STD_HEAD_@
 <P>
-[table-editor cgi=1]
+[table-editor cgi=1 output_map=1]
 
 @_UI_STD_FOOTER_@
 <!-- page: @@MV_PAGE@@



2.2       +1 -1      interchange/dist/lib/UI/pages/admin/customer_bill.html


rev 2.2, prev_rev 2.1
Index: customer_bill.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/customer_bill.html,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- customer_bill.html	24 Sep 2002 01:37:29 -0000	2.1
+++ customer_bill.html	14 Jan 2003 02:25:50 -0000	2.2
@@ -45,7 +45,7 @@
 
 @_UI_STD_HEAD_@
 <P>
-[table-editor cgi=1 no-table-meta=1]
+[table-editor cgi=1 no-table-meta=1 output_map=1]
 
 @_UI_STD_FOOTER_@
 <!-- page: @@MV_PAGE@@ -->



1.6       +1 -3      interchange/dist/lib/UI/pages/admin/customer_mailing.html


rev 1.6, prev_rev 1.5
Index: customer_mailing.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/customer_mailing.html,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- customer_mailing.html	18 Aug 2002 08:09:05 -0000	1.5
+++ customer_mailing.html	14 Jan 2003 02:25:50 -0000	1.6
@@ -226,9 +226,7 @@
 </table>
 [/else]
 [/if]
-		</td>
-	</tr>
-</table>
+<br>
 <br>
 [if cgi mail_template]<!-- update: [update values]-->[/if]
 



2.1       +34 -15    interchange/dist/lib/UI/pages/admin/customer_pref.html


rev 2.1, prev_rev 2.0
Index: customer_pref.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/customer_pref.html,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- customer_pref.html	18 Jul 2001 02:22:00 -0000	2.0
+++ customer_pref.html	14 Jan 2003 02:25:50 -0000	2.1
@@ -12,23 +12,42 @@
 		$CGI->{mv_data_table} = 'userdb';
 	}
 	if(! $CGI->{ui_data_fields}) {
-		$CGI->{ui_data_fields} = 'username company fname lname fax_order mv_shipmode dealer price_level project_id credit_limit inactive email_copy mail_list email phone_day phone_night fax db_acl file_acl';
+		$CGI->{ui_data_fields} = '
+				=General
+				
+				username
+				company
+				fname lname
+				fax_order
+				mv_shipmode
+				inactive
+
+				=Dealer Status
+
+				dealer
+				price_level
+				project_id
+				credit_limit
+
+				=Email Preferences
+
+				email
+				email_copy
+				mail_list
+
+				=Contact Info
+
+				phone_day
+				phone_night
+				fax
+
+				=Permissions
+
+				db_acl
+				file_acl';
 		$CGI->{ui_display_only} = 'company fname lname phone_day';
 					
 	}
-	if(! $CGI->{mv_blob_field}) {
-		$CGI->{mv_blob_title} = '<B>Profiles</B>';
-		$CGI->{mv_blob_field} = 'preferences';
-		$CGI->{mv_blob_label} = 'nothing';
-		$CGI->{mv_blob_pointer} = 'p_nickname';
-	}
-	if(! $CGI->{ui_break_before}) {
-		$CGI->{ui_break_before} = 'dealer email_copy email db_acl';
-		$CGI->{ui_break_before_label} = 'dealer=Dealer status,
-					email_copy=Email preferences,
-					email=Contact info,
-					db_acl=Permissions';
-	}
 	if(! $CGI->{ui_return_to}) {
 		$CGI->{ui_return_to} = join "\0",
 									'__UI_BASE__/customer_view',
@@ -50,7 +69,7 @@
 
 @_UI_STD_HEAD_@
 <P>
-[table-editor cgi=1]
+[table-editor cgi=1 output_map=1 form-name=customer_pref]
 
 @_UI_STD_FOOTER_@
 <!-- page: @@MV_PAGE@@



2.3       +1 -1      interchange/dist/lib/UI/pages/admin/customer_ship.html


rev 2.3, prev_rev 2.2
Index: customer_ship.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/customer_ship.html,v
retrieving revision 2.2
retrieving revision 2.3
diff -u -r2.2 -r2.3
--- customer_ship.html	24 Sep 2002 01:37:29 -0000	2.2
+++ customer_ship.html	14 Jan 2003 02:25:50 -0000	2.3
@@ -45,7 +45,7 @@
 
 @_UI_STD_HEAD_@
 <P>
-[table-editor cgi=1 no-table-meta=1]
+[table-editor cgi=1 no-table-meta=1 output-map=1]
 
 @_UI_STD_FOOTER_@
 <!-- page: @@MV_PAGE@@ -->



2.6       +364 -245  interchange/dist/lib/UI/pages/admin/customer_view.html


rev 2.6, prev_rev 2.5
Index: customer_view.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/customer_view.html,v
retrieving revision 2.5
retrieving revision 2.6
diff -u -r2.5 -r2.6
--- customer_view.html	20 Nov 2002 17:40:11 -0000	2.5
+++ customer_view.html	14 Jan 2003 02:25:50 -0000	2.6
@@ -1,14 +1,14 @@
-[set page_title][L]Customer manager[/L]: [L]View customer[/L][/set]
+[tmp page_title][L]Customer manager[/L]: [L]View customer[/L] [cgi customer][/tmp]
 [set ui_class]Customers[/set]
 [set page_banner][L]View customer[/L][/set]
 [set help_name]customer.view[/set]
 [set icon_name]icon_people.gif[/set]
+
 @_UI_STD_HEAD_@
+
 [calc]
 	delete $Scratch->{ui_bounce};
-	#Log("got here, customer=$CGI->{customer}, arg=$CGI->{mv_arg}");
-	return if $CGI->{customer};
-	$CGI->{customer} = $CGI->{mv_arg} 
+	$CGI->{customer} ||= $CGI->{mv_arg} 
 		or $Scratch->{ui_bounce} = '__UI_BASE__/customer';
 	return;
 [/calc]
@@ -17,267 +17,386 @@
 [/if]
 
 <!-- ----- BEGIN REAL STUFF ----- -->
-[update values]
-[loop list="[value-extended customer]"]
-
-<table border=0 __UI_T_PROPERTIES__>
-<tr>
-<td colspan=6 class=rborder><img src="bg.gif" height=1></td>
-</tr>
-
-<tr>
-<td colspan=6 align=left class=rnorm>
-<table>
-<tr><td align=right>
-<b>[L]Customer Username[/L]: </td><td>[loop-code]</b></td>
-</tr><tr>
-<td align=right><b>[L]Customer[/L]: </td><td>
-<A HREF="[area
-				href=__UI_BASE__/customer_pref
-				form=|
-					customer=[cgi customer]
-				|
-		]"><u>[loop-data userdb fname] [loop-data userdb lname]</u></A>
-		</b>
-</td>
-</tr>
-</table>
-</td>
-</tr>
-
-<tr>
-<td colspan=2 valign=top>
-
-<!-- ----- Customer information ----- -->
-
-<form>
-
-<table border=0>
-<tr><td align=right>
-<font size=2><b> [L]Company[/L]: </b></font>
-</td><td><font size=2>[loop-data userdb company]</font></td></tr>
-
-<tr><td align=right>
-<font size=2><b> [L]Home phone[/L]: </b></font>
-</td><td><font size=2>[loop-data userdb phone_night]</font></td></tr>
-
-<tr><td align=right>
-<font size=2><b> [L]Work phone[/L]: </b></font>
-</td><td><font size=2>[loop-data userdb phone_day]</font></td></tr>
-
-<tr><td align=right>
-<font size=2><b> [L]Email[/L]: </b></font>
-</td><td><font size=2> <a href="mailto:[loop-data userdb email]"><U>[loop-data userdb email]</U></a></font></td></tr>
-<tr><td align=right>
-<font size=2><b> [L]Payment type[/L]: </b></font>
-</td><td><font size=2>[display arbitrary=custview table=userdb column=fax_order key="[loop-code]"]</a></font></tr>
-
-[if-loop-data userdb project_id]
-<tr><td align=right>
-<font size=2><b>[L]PO Number[/L]:</b></font>&nbsp;
-</td><td><font size=2>[loop-data userdb project_id]</font></td></tr>
-[/if-loop-data]
-
-[if-loop-data userdb fax]
-<tr><td align=right>
-<font size=2><b>[L]FAX number[/L]:</b></font>&nbsp;
-</td><td><font size=2>[loop-data userdb fax]</font></td></tr>
-[/if-loop-data]
 
-<tr><td align=right>
-<font size=2><b>[L]Dealer[/L]:</b></font>&nbsp;
-</td><td><font size=2>[display arbitrary=custview table=userdb column=dealer key="[loop-code]"]</font></td></tr>
+[perl tables=country]### pre-open database for calcs below[/perl] 
 
-
-<tr><td align=right>
-<font size=2><b>[L]Wants email copy[/L]:</b></font>&nbsp;
-</td><td><font size=2>[display arbitrary=custview table=userdb column=email_copy key="[loop-code]"]</font></td></tr>
-
-<tr><td align=right>
-<font size=2><b>[L]Mail lists[/L]:</b></font>&nbsp;
-</td><td><font size=2>[loop-data userdb mail_list]</font></td></tr>
-
-</table>
-</form>
-
-</td><td valign=top colspan=4>
-[set bill_address]
-[loop-data userdb b_fname] [loop-data userdb b_lname]<br>
-[loop-data userdb b_address1]<br>
-[if-loop-data userdb b_address2]
-[loop-data userdb b_address2]<br>
-[/if-loop-data]
-[loop-data userdb b_city], [loop-data userdb b_state] [loop-data userdb b_zip]<br>
-[/set]
-
-[set ship_address]
-[loop-data userdb fname] [loop-data userdb lname]<br>
-[loop-data userdb address1]<br>
-[if-loop-data userdb address2]
-[loop-data userdb address2]<br>
-[/if-loop-data]
-[loop-data userdb city], [loop-data userdb state] [loop-data userdb zip]<br>
-[/set]
-
-<font size=2>
-<p>
-[if-loop-data userdb username]
-<A HREF="[area
-				href=__UI_BASE__/customer_bill
-				form=|
-					customer=[loop-data userdb username]
-				|
-		]"><b><u>[L]Bill To[/L]</u>:</b></A>
+[query list=1
+		prefix=loop
+		sql="select * from userdb where username = '[cgi customer]'"]
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+   <tr> 
+      <td> 
+         <table width="100%" border="0" cellpadding="6" cellspacing="1" class="rseparator">
+            <tr> 
+               <td width="25%" nowrap class="block4bold">User Name: &nbsp; [loop-code]</a></td>
+               <td width="25%" nowrap class="block4bold">
+			   	Account Status: &nbsp;
+					[filter uc]
+					[if-loop-param inactive]
+					[L]inactive[/L]
+					[else]
+					[L]active[/L]
+					[/else]
+					[/if-loop-param]
+					[/filter]
+					
+				</td>
+               <td width="25%" nowrap class="block4bold">
+			   		
+					Total Sales: &nbsp;
+				[query arrayref=totals sql=|
+										SELECT total_cost,status
+										FROM  transactions
+					                    WHERE username = '[loop-code]'
+										|][/query]
+					[calc]
+						my $q = $Tmp->{totals};
+						my $ary;
+						return 'no orders' unless $q and defined $q->[0];
+						my $total = 0;
+						for(@$q) {
+							next if $_->[1] eq 'canceled';
+							$total += $_->[0];
+						}
+						return $Tag->currency({ body => $total } );
+					[/calc]
+				</td>
+                <td width="25%" nowrap class="block4bold">
+			   		Last login: &nbsp; <span class="maincontent">
+						[if-loop-param !mod_time]
+						Never
+						[else]
+						[time time="[loop-param mod_time]"]%b %e, %Y %l:%M %P[/time]
+						[/else]
+						[/if-loop-param]
+					</span>
+				</td>
+            </tr>
+         </table>
+      </td>
+   </tr>
+   <tr> 
+      <td height="6"><img src="bg.gif" width="1" height="6"></td>
+   </tr>
+   <tr> 
+      <td> 
+         <table width="100%" border="0" cellspacing="0" cellpadding="0">
+            <tr> 
+               <!-- CUSTOMER DETAILS -->
+               <td width="33%" valign="top"> 
+                  <table width="100%" height="200" border="0" cellpadding="6" cellspacing="1" class="rseparator">
+                     <tr> 
+               
+                        <td height="1%" class="block4"><a href="[area href='admin/customer_view' form='customer=[loop-param username]']">Customer Details</a></td>
+                     </tr>
+                     <tr> 
+                        <td height="99%" valign="top" class="block4"> 
+                           <table width="100%" border="0" cellspacing="0" cellpadding="1">
+                              <tr> 
+                                 <td width="30%" class="block4bold">Customer:</td>
+                                 <td width="70%" class="maincontent"><a href="[area href='admin/customer_view' form='customer=[loop-param username]']">[loop-param fname] [loop-param lname]</a> 
+                                 </td>
+                              </tr>
+                              <tr> 
+                                 <td class="block4bold"> [L]Company[/L]:</td>
+                                 <td class="maincontent">[loop-param company]</td>
+                              </tr>
+                              <tr> 
+                                 <td nowrap class="block4bold">[L]Home phone[/L]:</td>
+                                 <td class="maincontent">[loop-param phone_night]</td>
+                              </tr>
+                              <tr> 
+                                 <td nowrap class="block4bold"> [L]Work phone[/L]:</td>
+                                 <td class="maincontent">[loop-param phone_night]</td>
+                              </tr>
+                              <tr> 
+                                 <td class="block4bold">[L]Email[/L]:</td>
+                                 <td class="maincontent"><a href="mailto:[loop-param email]">[loop-param email]</a></td>
+                              </tr>
+                              <tr> 
+                                 <td nowrap class="block4bold">[L]Payment type[/L]:</td>
+                                 <td class="maincontent">[loop-param payment_method]</td>
+                              </tr>
+			[if variable CUSTOMER_VIEW_DEALER]
+							  <tr>
+                                 <td nowrap class="block4bold">[L]Dealer[/L]:</td>
+                                 <td class="maincontent">
+								 	[page href=admin/customer_pref
+										  form="
+										  	customer=[loop-code]
+											start_at=dealer
+										  "][if-loop-param dealer]Yes[else]No[/else][/if-loop-param]</a>
+										  </td>
+							  </tr>
+							  <tr>
+                                 <td nowrap class="block4bold">[L]Price Level[/L]:</td>
+                                 <td class="maincontent">
+								 	[page href=admin/customer_pref
+										  form="
+										  	customer=[loop-code]
+											start_at=price_level
+										  "][display type=display table=userdb col=price_level key="[loop-code]"]</a>
+										  </td>
+							  </tr>
+		  [/if]
+                              <tr> 
+                                 <td height="15" colspan="2" class="block4bold"><img src="bg.gif" width="1" height="1"></td>
+                              </tr>
+                           </table>
+                        </td>
+                     </tr>
+                  </table>
+               </td>
+               <td width="3"><img src="bg.gif" width="3" height="1"></td>
+               <!-- BILLING DETAILS -->
+               <td width="33%" valign="top"> 
+                  <table width="100%" height="200" border="0" cellpadding="6" cellspacing="1" class="rseparator">
+                     <tr> 
+                        <td height="1%" class="block4"><a href="[area
+						
+								href="admin/customer_bill"
+								form="
+									customer=[loop-code]
+									item_id=[loop-code]
+								"
+						]">[L]Billing Details[/L]</a></td>
+                     </tr>
+                     <tr> 
+                        <td height="99%" valign="top" class="block4"> 
+[if-loop-param b_address1]
+	[loop prefix=bill list="[loop-code]"]
+                           <table width="100%" border="0" cellspacing="0" cellpadding="1">
+                              <tr> 
+                                 <td width="30%" class="block4bold">[L]Name[/L]:</td>
+                                 <td width="70%" class="maincontent"><A HREF="[area
+				href=__UI_BASE__/customer_view
+				arg="[loop-param username]"
+		]"><u>[loop-param b_fname] [loop-param b_lname]</A>
+                                 </td>
+                              </tr>
+							  [if-bill-data userdb b_company]
+                              <tr> 
+                                 <td width="30%" class="block4bold">[L]Company[/L]:</td>
+                                 <td width="70%" class="maincontent">
+								 	[loop-param b_company]
+                                 </td>
+                              </tr>
+							  [/if-bill-data]
+                              <tr> 
+                                 <td valign="top" class="block4bold">[L]Address[/L]:</td>
+                                 <td class="maincontent">
+								 [loop-param b_address1]
+								 [if-bill-data userdb b_address2]
+								 <br>
+								 [loop-param b_address2]
+								 [/if-bill-data]
+								 </td>
+                              </tr>
+							  [if-bill-data userdb b_country =~ /^US|^CA/]
+                              <tr> 
+                                 <td class="block4bold">[L]City, State, Zip[/L]:</td>
+                                 <td class="maincontent">[loop-param b_city], [loop-param state]  [loop-param zip]</td>
+                              </tr>
+							  [else]
+                              <tr> 
+                                 <td class="block4bold">[L]City[/L]:</td>
+                                 <td class="maincontent">[loop-param b_city]</td>
+                              </tr>
+							  		[if-bill-param b_state]
+                              <tr> 
+                                 <td class="block4bold">[L]State[/L]:</td>
+                                 <td class="maincontent">[loop-param b_state]</td>
+                              </tr>
+								    [/if-bill-data]
+							  		[if-bill-param b_zip]
+                              <tr> 
+                                 <td class="block4bold">[L]Postal code[/L]:</td>
+                                 <td class="maincontent">[loop-param b_zip]</td>
+                              </tr>
+								    [/if-bill-data]
+							  [/else]
+							  [/if-bill-data]
+                              <tr> 
+                                 <td class="block4bold">[L]Country[/L]:</td>
+                                 <td class="maincontent">[data table=country col=name key="[loop-param b_country]"]</td>
+                              </tr>
+                              <tr> 
+                                 <td height="15" colspan="2" class="block4bold"><img src="bg.gif" width="1" height="1"></td>
+                              </tr>
+                           </table>
+		[/loop]
 [else]
-		<b>[L]Bill To[/L]:</b>
+						<i>[L]Same as shipping address[/L]</i>
 [/else]
-[/if-loop-data]
-<blockquote>
-[if-loop-data userdb b_address1]
-[scratch bill_address]
-[else]
-[scratch ship_address]
-[/else]
-[/if-loop-data]
-</blockquote>
-
-<A HREF="[area
-				href=__UI_BASE__/customer_ship
-				form=|
-					customer=[cgi customer]
-				|
-		]"><b><u>[L]Ship To[/L]</u>:</b></A>
-<br>
-<blockquote>
-[scratch ship_address]
-</blockquote>
-</font>
-
-[set bill_address][/set]
-[set ship_address][/set]
-</td></tr>
-
-<tr>
-<td colspan=6 class=rborder><img src="bg.gif" height=1></td>
-</tr>
-
-<tr>
-<td>
-<table border=0 cellpadding=1 cellspacing=3>
-
-<tr>
-<td class=rnorm align=right>
-	<B>[L]Order number[/L]</B>
-</td>
-<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
-<td class=rnorm>
-	<B>[L]Order date[/L]</B>
-</td>
-<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
-<td class=rnorm align=right>
-	<B>[L]Order Total[/L]</B>
-</td>
-<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
-<td class=rnorm>
-	<B>[L]Status[/L]</B>
-</td>
-</tr>
-[query
-	list=1
-	st=db
-	table=transactions 
-	sql="select
-		order_number, order_date, total_cost, status
-		FROM transactions 
-		WHERE username = '[loop-code]'
-		ORDER BY order_date
-	"
-]
-<tr>
-<td align=right>
-	<A HREF="[area __UI_BASE__/order_view [sql-code]]"><U>[sql-code]</U></A>
-</td>
-<td></td>
-<td>
-	[sql-param order_date]
-</td>
-<td></td>
-<td align=right>
-	[currency][sql-param total_cost][/currency]
-</td>
-<td></td>
-<td>
-<A HREF="[area
-			href=__UI_BASE__/order_status
-			form="
-				order=[sql-code]
-			"]"><U>[msg][sql-param status][/msg]</U></A>
-</td>
-</tr>
+[/if-loop-param]
+                        </td>
+                     </tr>
+                  </table>
+               </td>
+               <td width="3"><img src="bg.gif" width="3" height="1"></td>
+               <!-- SHIPPING DETAILS -->
+               <td width="34%" valign="top"> 
+                  <table width="100%" height="200" border="0" cellpadding="6" cellspacing="1" class="rseparator">
+                     <tr> 
+                        <td height="1%" class="block4"><a href="[area
+						
+								href="admin/customer_ship"
+								form="
+									customer=[loop-code]
+									item_id=[loop-code]
+								"
+						]">[L]Shipping Details[/L]</a></td>
+                     </tr>
+                     <tr> 
+                        <td height="99%" valign="top" class="block4"> 
+                           <table width="100%" border="0" cellspacing="0" cellpadding="1">
+                              <tr> 
+                                 <td width="30%" class="block4bold">[L]Name[/L]:</td>
+                                 <td width="70%" class="maincontent"><A HREF="[area
+				href=__UI_BASE__/customer_view
+				arg="[loop-code]"
+		]"><u>[loop-param fname] [loop-param lname]</A>
+                                 </td>
+                              </tr>
+							  [if-loop-param company]
+                              <tr> 
+                                 <td width="30%" class="block4bold">[L]Company[/L]:</td>
+                                 <td width="70%" class="maincontent">
+								 	[loop-param company]
+                                 </td>
+                              </tr>
+							  [/if-loop-param]
+                              <tr> 
+                                 <td valign="top" class="block4bold">[L]Address[/L]:</td>
+                                 <td class="maincontent">
+								 [loop-param address1]
+								 [if-loop-param address2]
+								 <br>
+								 [loop-param address2]
+								 [/if-loop-param]
+								 </td>
+                              </tr>
+							  [if-loop-param country =~ /^US|^CA/]
+                              <tr> 
+                                 <td class="block4bold">[L]City, State, Zip[/L]:</td>
+                                 <td class="maincontent">[loop-param city], [loop-param state]  [loop-param zip]</td>
+                              </tr>
+							  [else]
+                              <tr> 
+                                 <td class="block4bold">[L]City[/L]:</td>
+                                 <td class="maincontent">[loop-param city]</td>
+                              </tr>
+							  		[if-loop-param state]
+                              <tr> 
+                                 <td class="block4bold">[L]State[/L]:</td>
+                                 <td class="maincontent">[loop-param state]</td>
+                              </tr>
+								    [/if-loop-param]
+							  		[if-loop-param zip]
+                              <tr> 
+                                 <td class="block4bold">[L]Postal code[/L]:</td>
+                                 <td class="maincontent">[loop-param zip]</td>
+                              </tr>
+								    [/if-loop-param]
+							  [/else]
+							  [/if-loop-param]
+                              <tr> 
+                                 <td class="block4bold">[L]Country[/L]:</td>
+                                 <td class="maincontent">[data table=country col=name key="[loop-param country]"]</td>
+                              </tr>
+                              <tr> 
+                                 <td height="15" colspan="2" class="block4bold"><img src="bg.gif" width="1" height="1"></td>
+                              </tr>
+                           </table>
+                        </td>
+                     </tr>
+                  </table>
+               </td>
+            </tr>
+         </table>
+      </td>
+   </tr>
+   <tr> 
+      <td height=6><img src="bg.gif" width=1 height=6></td>
+   </tr>
+   <tr> 
+      <td> 
+         <!-- CUSTOMERS ORDER GRID -->
+         <table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
+            <tr> 
+               <td width="14%" class=rhead style="padding: 5px">[L]Status[/L]</td>
+               <td width="14%" class=rhead style="padding: 5px">[L]Order Number[/L]</td>
+               <td width="14%" class=rhead style="padding: 5px">[L]Order Date[/L]</td>
+               <td width="14%" class=rhead style="padding: 5px; text-align: left">[L]Shipped to[/L]</td>
+               <td width="14%" class=rhead style="padding: 5px; text-align: right">[L]Number of items[/L]</td>
+               <td width="14%" class=rhead style="padding: 5px; text-align: right">[L]Subtotal[/L]</td>
+               <td width="14%" class=rhead style="padding: 5px; text-align: right">[L]Total[/L]</td>
+            </tr>
+[query list=1 sql="select * from transactions where username = '[loop-code]'"]
+            <tr class="[sql-alternate 2]rowalt[else]rownorm[/else][/sql-alternate]"> 
+               <td style="padding: 5px">[page href="admin/order_status"
+			   							 form="order=[loop-code]"
+									]
+                [display    table=transactions
+                            column=status
+                            key="[sql-code]"
+                            arbitrary=order_view
+                ]</A>
+               <td style="padding: 5px">
+			   	[page href='__UI_BASE__/order_view' form='order=[sql-code]'][sql-code]</a>
+			   	</td>
+               <td style="padding: 5px">[convert-date fmt="%b %e, %Y %H:%M"][sql-param order_date][/convert-date]</td>
+               <td align=left style="padding: 5px">
+			   	[loop-param city], [loop-param state] [loop-param country]
+               </td>
+               <td align=right style="padding: 5px">[sql-param nitems]</td>
+               <td align=right style="padding: 5px">[currency][sql-param subtotal][/currency]</td>
+			   <td align=right style="padding: 5px">[currency][sql-param total_cost][/currency]</td>
+            </tr>
 [/query]
-
+         </table>
+      </td>
+   </tr>
 </table>
-</td>
-</tr>
 
-<tr>
-<td colspan=6 class=rborder><img src="bg.gif" height=1></td>
-</tr>
+[seti page_banner][L]View Customer[/L]:
+					[if-loop-param company]
+						[loop-param company]
+					[else][loop-param fname] [loop-param lname][/else]
+					[/if-loop-param]
+				[/seti]
 
-</table>
-<SMALL>
-<form action="[area __UI_BASE__/customer]" method=post>
+[output name=bottom_buttons]
+<form action="[area __UI_BASE__/order]" method=post>
 <input type=hidden name=mv_session_id value="[data session id]">
 <input type=hidden name=mv_action value=back>
-<input type=hidden name=customer value="[loop-data userdb username]">
+<input type=hidden name=order value="[loop-data transactions order_number]">
+<input type=hidden name=archive value=false>
 <input type=hidden name=viewnext value=1>
-
-[button text="[L]Back[/L]"]
+[set [L]Return[/L]]
 viewnext=
-viewcustomer=
-[/button]
+vieworder=
+[/set]
+<input type=submit name=mv_click value="[L]Return[/L]" class=s3>
+<input type=submit name="vieworder" value="[L]View next order[/L]" class=s3>
 
-[button text="[L]Enter order[/L]"]
-mv_nextpage=__UI_BASE__/entry
-mv_todo=return
-[/button] 
-
-[if-mm advanced userdb=e]
-[if-loop-data userdb inactive]
-[button name="activate" text="[L]Activate customer[/L]"][/button]
+[if-loop-data transactions archived]
+<input type=submit name="unarchiveorder" value="[L]Un-archive order and view next[/L]" class=s3>
 [else]
-[button name="deactivate" text="[L]Deactivate customer[/L]"
-	confirm="[L]Are you sure you want to deactivate this customer?[/L]"][/button]
+<input type=submit name="archiveorder" value="[L]Archive order and view next[/L]" class=s3>
 [/else]
 [/if-loop-data]
-
-[button text="[L]Change password[/L]"]
-user_id=[loop-code]
-mv_nextpage=__UI_BASE__/customer_change_pass
-[/button]
-[/if-mm]
-
-[if-mm advanced userdb=d]
-<input type=submit name="deletecustomer" value="[L]Delete customer[/L]" 
- onClick="return confirm('[L]Are you sure you want to delete this customer?[/L]')">
+[if-mm advanced order=d]
+<input type=submit name="deleteorder" value="[L]Delete order and view next[/L]" 
+ onClick="return confirm('[L]Are you sure you want to delete this order?[/L]')" class=s3>
 [/if-mm]
-
 </form>
-</SMALL>
 
-[if type=data term="forum::code::customer-[loop-code]"]
-	[forum top="customer-[loop-code]" /]
-[else]
-	[page href=forum/submit
-			form="
-				customer=1
-				mv_arg=[loop-code]
-			"]Create forum for this user</A>
-[/else]
-[/if]
+[output]
+
+[/query]
 
-[/loop]
 <!-- ----- END REAL STUFF ----- -->
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ version: $Id: customer_view.html,v 2.5 2002/11/20 17:40:11 mheins Exp $ -->
+<!-- page: @@MV_PAGE@@ version: $Id: customer_view.html,v 2.6 2003/01/14 02:25:50 mheins Exp $ -->



2.11      +72 -36    interchange/dist/lib/UI/pages/admin/db_metaconfig.html


rev 2.11, prev_rev 2.10
Index: db_metaconfig.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/db_metaconfig.html,v
retrieving revision 2.10
retrieving revision 2.11
diff -u -r2.10 -r2.11
--- db_metaconfig.html	7 Nov 2002 19:15:54 -0000	2.10
+++ db_metaconfig.html	14 Jan 2003 02:25:50 -0000	2.11
@@ -14,9 +14,10 @@
 	&nbsp;
 	&nbsp;
 		[page href=admin/db_newview
+			  extra="class=rtitle"
 			  form="
 				ui_table=[cgi ui_table]
-			  "]Create new view</A>
+			  "][L]Create new view[/L]</A>
 
 [/tmp]
 [set ui_class]Admin[/set]
@@ -45,18 +46,18 @@
 	view=dbconfig
 	no-table-meta=1
 	tabbed=1
-	table_width=900
+	table_width=1000
 	tab_width=120
 	break_row_class=rmarq
-	panel_width=900
+	output-map=1
+	ui_style=1
+	panel_width=1000
 	panel_height=700
 	no-meta=1
 	left_width=160
 	label_cell_valign=top
 	help_cell_width=200
 	start_at="[cgi start_at]"
-
-
 	key="[scratch tmp_dbcode]"
 
 	ui_data_fields="
@@ -65,10 +66,10 @@
 
 		code
 		name
-		extended.file_upload
-		extended.tabbed
-		extended.ui_meta_specific
+		type
+		extended.tabbed extended.file_upload extended.ui_meta_specific
 		extended.restrict_allow
+		extended.filter_field
 
 		=Select page display
 
@@ -95,8 +96,12 @@
 		extended.link_label
 		extended.link_sort
 		extended.link_fields
-		extended.link_view
+		extended.link_auto_number extended.link_row_qual
+		extended.link_row_blank extended.link_view
 		extended.link_extra
+
+		=Included form
+
 		extended.include_before
 		extended.include_form
 		extended.include_form_expand
@@ -104,33 +109,26 @@
 
 		=Tabbed Display
 
-		extended.tab_width
-		extended.tab_height
-		extended.panel_width
-		extended.panel_height
-		extended.tab_horiz_offset
-		extended.tab_vert_offset
+		extended.tab_width extended.panel_width
+		extended.tab_height extended.panel_height
+		extended.tab_horiz_offset extended.tab_vert_offset
+		extended.tab_style	extended.panel_style
+		extended.panel_shade
 
 		=Edit Page HTML
 
-		extended.table_width
-		extended.left_width
-		extended.data_row_class
-		extended.break_row_class
-		extended.spacer_row_class
-		extended.combo_row_class
-		extended.label_cell_class
-		extended.data_cell_class
-		extended.widget_cell_class
+		extended.table_width extended.left_width
+		extended.widget_class extended.data_row_class
+		extended.break_row_class extended.spacer_row_class
+		extended.combo_row_class extended.label_cell_class
+		extended.data_cell_class extended.widget_cell_class
 		extended.help_cell_class
 
 		=Spreadsheet page
 
-		extended.spread_fields
-		extended.spread_height
-		extended.spread_width
+		extended.spread_height extended.spread_width
+		extended.spread_fields extended.spread_textarea_rows
 		extended.spread_textarea
-		extended.spread_textarea_rows
 		extended.spread_meta
 
 	"
@@ -141,10 +139,14 @@
 		height							=> 'Rows on select page',
 		'extended.bottom_buttons'		=> 'Buttons only on bottom',
 		'extended.restrict_allow'		=> 'Allow these ITL tags',
-		'extended.file_upload'		=> 'Allow file upload for this table',
-		'extended.left_width' => 'Width specification for label column',
+		'extended.file_upload'			=> 'Allow file upload for this table',
+		'extended.filter_field'			=> 'Import field filtering',
+		'extended.left_width'			=> 'Width specification for label column',
 		'extended.panel_height'			=> 'Panel Height',
 		'extended.panel_width'			=> 'Panel Width',
+		'extended.panel_style'			=> 'Panel CSS Style',
+		'extended.panel_shade'			=> 'Panel Lightest Shade',
+		'extended.tab_style'			=> 'Tab CSS Style',
 		'extended.spread_fields'		=> 'Fields to edit',
 		'extended.spread_height'		=> 'Number of rows',
 		'extended.spread_meta'			=> 'Fields to meta display',
@@ -157,7 +159,7 @@
 		'extended.tab_width'			=> 'Tab Width',
 		'extended.tabbed'				=> 'Use tabbed display',
 		'extended.ui_meta_specific'		=> 'Present item-specific meta for this table',
-		'extended.table_width' => 'Width specification for editor table',
+		'extended.table_width'			=> 'Width specification for editor table',
 		'extended.ui_data_fields'		=> 'Fields to edit',
 		'extended.ui_display_only'		=> 'Fields for display only',
 		'extended.view_from'			=> 'Custom view from field',
@@ -167,6 +169,9 @@
 		'extended.ui_sort_combined'		=> 'Complex sort for select page',
 		'extended.ui_special_add'		=> 'Special Additions',
 		'extended.link_table'			=> 'Table to link in cell',
+		'extended.link_row_blank'		=> 'Number of blank rows',
+		'extended.link_row_qual'		=> 'Field indicating valid row',
+		'extended.link_auto_number'		=> 'Allow auto_number in link',
 		'extended.link_before'			=> 'Column to appear before',
 		'extended.include_before'		=> 'Column for include to appear before',
 		'extended.include_form'			=> 'Custom form widget for inclusion',
@@ -178,6 +183,7 @@
 		'extended.link_fields'			=> 'Fields in table to link',
 		'extended.link_view'			=> 'View to derive link display',
 		'extended.link_extra'			=> 'HTML style info for linked cells',
+		'extended.widget_class'			=> 'HTML widget class',
 		'extended.data_row_class'		=> 'Data row class',
 		'extended.break_row_class'		=> 'Break row class',
 		'extended.spacer_row_class'		=> 'Spacer row class',
@@ -192,10 +198,29 @@
 
 	}`
 
+	override.type=table
+
 	help=`{
-		'extended.panel_height'			=> 'Default 600 pixels.',
+		'extended.panel_height'			=> 'Default 500 pixels.',
 		'extended.panel_width'			=> 'Default 800 pixels.',
-		'extended.tab_height'			=> 'Default 30 pixels.',
+		'extended.tab_height'			=> 'Default 20 pixels.',
+		'extended.filter_field'			=> q{
+			Specified one per line:
+			<blockquote>
+<pre>
+	fieldname1=filter
+	fieldname2=filter1 filter2 
+</pre>
+			</blockquote>
+			If multiple tables, must specify table as well:
+			<blockquote>
+<pre>
+	table1:fieldname1=filter
+	table2:fieldname2=filter1 filter2 
+</pre>
+			</blockquote>},
+		'extended.link_row_blank'		=> 'default 1',
+		'extended.link_row_qual'		=> 'Default is key field, needs to be different field if auto-numbering.',
 		'extended.tab_horiz_offset'		=> 'Tab Horizontal Offset',
 		'extended.tab_vert_offset'		=> 'Tab Vertical Offset',
 		'extended.tab_width'			=> 'Default 100 pixels.',
@@ -210,15 +235,20 @@
 		code							=> 'text_40',
 		name							=> 'text_40',
 		height							=> 'text_5',
+		type							=> 'hidden',
 		'extended.restrict_allow'		=> 'text_40',
 		'extended.file_upload'			=> 'yesno',
+		'extended.filter_field'			=> 'textarea_2_40',
+		'extended.tab_style'			=> 'textarea_5_40',
+		'extended.panel_style'			=> 'textarea_5_40',
+		'extended.panel_shade'			=> 'select',
 		'extended.left_width'			=> 'text_8',
 		'extended.panel_height'			=> 'text_5',
 		'extended.panel_width'			=> 'text_5',
 		'extended.spread_fields'		=> 'move_combo_8',
 		'extended.spread_height'		=> 'text_5',
-		'extended.spread_meta'			=> 'checkbox_left_4',
-		'extended.spread_textarea'		=> 'checkbox_left_4',
+		'extended.spread_meta'			=> 'multiple',
+		'extended.spread_textarea'		=> 'multiple',
 		'extended.spread_textarea_rows' => 'text_5',
 		'extended.spread_width'			=> 'text_5',
 		'extended.ui_special_add'		=> 'multiple',
@@ -245,6 +275,9 @@
 		'extended.link_label'			=> 'text_50',
 		'extended.link_fields'			=> 'text_70',
 		'extended.link_key'			=> 'text_20',
+		'extended.link_row_blank'	=> 'text_3',
+		'extended.link_row_qual'	=> 'text_12',
+		'extended.link_auto_number'	=> 'yesno',
 		'extended.top_buttons'		=> 'yesno',
 		'fieldmeta'					=> 'links',
 	}`
@@ -271,6 +304,8 @@
 		'extended.ui_show_fields'		=> 8,
 		'extended.ui_data_fields'		=> 16,
 		'extended.spread_fields'		=> 8,
+		'extended.spread_meta'			=> '10',
+		'extended.spread_textarea'		=> '10',
 	}`
 
 	width=`{
@@ -294,6 +329,7 @@
 		'extended.spread_fields'		=> 'columns',
 		'extended.spread_meta'			=> 'columns',
 		'extended.spread_textarea'		=> 'columns',
+		'extended.panel_shade'			=> 'f=white,e=Light gray,d=Medium gray,c=Dark gray',
 		'extended.link_table'			=> 'tables',
 		'extended.link_before'			=> '',
 		'extended.ui_sort_option'		=> q{=none,n=numeric,r=reverse,f=case-insensitive},
@@ -308,4 +344,4 @@
 
 ]
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ version: $Revision: 2.10 $ -->
+<!-- page: @@MV_PAGE@@ version: $Revision: 2.11 $ -->



2.2       +7 -5      interchange/dist/lib/UI/pages/admin/db_newview.html


rev 2.2, prev_rev 2.1
Index: db_newview.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/db_newview.html,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- db_newview.html	11 Oct 2002 18:42:47 -0000	2.1
+++ db_newview.html	14 Jan 2003 02:25:50 -0000	2.2
@@ -1,9 +1,9 @@
+[flag type=write table=mv_metadata]
 [set table_perms]mv_metadata[/set]
 [tmp page_title] New view for table display: [cgi ui_table] [/tmp]
-[set ui_class]Admin[/set]
-@_UI_STD_HEAD_@
+[set ui_class]Tables[/set]
 
-[flag type=write table=mv_metadata]
+@_UI_STD_HEAD_@
 
 [tmpn bounce_url][/tmpn]
 
@@ -56,7 +56,8 @@
 	ui_wizard_fields="ui_table ui_view based_on"
 	table_width="50%"
 	hidden.do_view=1
-	ui_nextpage="@@MV_PAGE@@"
+	href="@@MV_PAGE@@"
+	action=go
 	ui_prevpage=""
 	no_meta=1
 	no_top=1
@@ -82,4 +83,5 @@
 	/]
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ Revision: $Id: db_newview.html,v 2.1 2002/10/11 18:42:47 mheins Exp $ -->
+
+<!-- page: @@MV_PAGE@@ Revision: $Id: db_newview.html,v 2.2 2003/01/14 02:25:50 mheins Exp $ -->



2.5       +209 -159  interchange/dist/lib/UI/pages/admin/dbconfig.html


rev 2.5, prev_rev 2.4
Index: dbconfig.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/dbconfig.html,v
retrieving revision 2.4
retrieving revision 2.5
diff -u -r2.4 -r2.5
--- dbconfig.html	18 Aug 2002 08:09:05 -0000	2.4
+++ dbconfig.html	14 Jan 2003 02:25:50 -0000	2.5
@@ -9,7 +9,6 @@
 
 [set page_perm]dbconfig[/set]
 [set table_perm]1[/set]
-[set page_title]Configuration[/set]
 [set ui_class]Admin[/set]
 [set help_name]genconfig.main[/set]
 [set icon_name]icon_config.gif[/set]
@@ -18,6 +17,7 @@
 
 <!-- ----- BEGIN REAL STUFF ----- -->
 
+[tmp page_title]Table Configuration: [cgi mv_data_table][/tmp]
 [perl tables="[list-databases] __UI_META_TABLE__"]
 	%ignore;
 	my @ignore = qw/
@@ -95,6 +95,7 @@
 	%Misc_set = (
 		GUESS_NUMERIC => '=No numeric guess, 1=Guess numeric fields',
 		EXCEL => '=No Excel correction, 1=Correct for Excel peculiarities',
+		LARGE   => '=No, 1=Yes (prevents building select list)',
 		HOT   => '=Normal open, 1=Keep table always connected',
 		CONTINUE   => q{=No extra line processing,
 						DITTO="Ditto" line continuation,
@@ -226,23 +227,11 @@
 [/perl]
 [/if]
 
-<center>
-<FORM METHOD=POST ACTION="[area @@MV_PAGE@@]">
-<table __UI_T_PROPERTIES__>
-
-class=rnorm>
-<TABLE border=0>
-<TR>
-  <TD class=rborder COLSPAN=3><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1><CENTER>Database configuration</CENTER></TD>
-</TR>
-
-<TR>
-  <TD COLSPAN=3><input type=submit name=mv_dbconf VALUE="Save"></TD>
-</TR>
-
-<TR>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>
+[output name="top_of_form"]
+<FORM METHOD=POST ACTION="[area admin/dbconfig_save]">
+
+[output name=""]
+<table width="100%" border=0 cellpadding=2 cellspacing=0 class=rseparator>
 
 [comment] Prevent Safe object creation problems [/comment]
 [seti have_dbi][version extended=1 modtest='DBI'][/seti]
@@ -337,52 +326,44 @@
 		$dfile .= "</TT>";
 		my $obj   = $ref->{Object};
 
-		push @out, <<EOF;
-<TR>
-<TH VALIGN=TOP ALIGN=RIGHT width="15%">
-Current
-</TH>
-<td VALIGN=TOP>
-	<TABLE border=1 width="100%">
-	<tr>
-		<th valign=top align=left>Type</th>
-		<td>$text_type</td>
-	</tr>
-	<tr>
-		<th valign=top align=left width="30%">Class</th>
-		<td>$class</td>
-	</tr>
-	<tr>
-		<th valign=top align=left width="30%">Directory</th>
-		<td>$dir</td>
-	</tr>
-	<tr>
-		<th valign=top align=left width="30%">Text File</th>
-		<td>$file</td>
-	</tr>
-	<tr>
-		<th valign=top align=left width="30%">DB File</th>
-		<td>$dfile</td>
-	</tr>
-	</table>
-</TD>
-</TR>
-
-<TR>
-  class=rspacer COLSPAN=3><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></TD>
-</TR>
-EOF
+## 		push @out, <<EOF;
+## <tr class=rhead>
+## <td colspan=2 class=rhead>Current Settings</td>
+## </tr>
+## <tr class=rownorm>
+## 	<td valign=top class=clabel>Type</td>
+## 	<td class=cdata>$text_type</td>
+## </tr>
+## <tr class=rownorm>
+## 	<td valign=top width="30%" class=clabel>Class</td>
+## 	<td class=cdata>$class</td>
+## </tr>
+## <tr class=rownorm>
+## 	<td valign=top width="30%" class=clabel>Directory</td>
+## 	<td class=cdata>$dir</td>
+## </tr>
+## <tr class=rownorm>
+## 	<td valign=top width="30%" class=clabel>Text File</td>
+## 	<td class=cdata>$file</td>
+## </tr>
+## <tr class=rownorm>
+## 	<td valign=top width="30%" class=clabel>DB File</td>
+## 	<td class=cdata>$dfile</td>
+## </tr>
+## 
+## <tr class=rownorm>
+## 	<td COLSPAN=2><input type=submit name=mv_dbconf VALUE="[L]Save[/L]" class=s3></TD>
+## </tr>
+## EOF
 	}
 
 	$use_sql = 1 if $current_sql or ($new and $base_sql);
 
 	push @out, <<EOF;
-<TR>
-<TH VALIGN=TOP ALIGN=RIGHT width="15%">
+<tr class=rhead>
+<td VALIGN=TOP colspan=2 class=rhead>
 Change Settings
-</TH>
-<td VALIGN=TOP>
-	<TABLE border=1 width="100%">
+</td>
 
 EOF
 
@@ -391,37 +372,42 @@
 	# Don't allow change of table name....
 	if($new) {
 		push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>Table name</th>
-		<td><INPUT TYPE=text NAME=mv_data_table
-				onChange="
-					this.form.mv_dbconf_file.value =
-						this.form.mv_data_table.value + '.txt'
-						"
-				VALUE=""></td>
-	</tr>
+<tr class=rownorm>
+	<td valign=top class=clabel>Table name</td>
+	<td class=cdata><INPUT TYPE=text NAME=mv_data_table
+			onChange="
+				this.form.mv_dbconf_file.value =
+					this.form.mv_data_table.value + '.txt'
+					"
+			VALUE=""></td>
+</tr>
 EOF
 	}
 	else {
 		push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>Table name</th>
-		<td><INPUT TYPE=hidden NAME=mv_data_table VALUE="$tname"><INPUT TYPE=hidden NAME=mv_dbconf_file VALUE="$ref->{file}">$tname</td>
-	</tr>
+<tr class=rownorm>
+	<td valign=top class=clabel>Table name</td>
+	<td class=cdata>
+		<INPUT TYPE=hidden NAME=mv_data_table VALUE="$tname">
+		<INPUT TYPE=hidden NAME=mv_dbconf_file VALUE="$ref->{file}">
+		<INPUT TYPE=hidden NAME=mv_dbconf_db_file VALUE="$dfn">
+		$tname
+	</td>
+</tr>
 EOF
 	}
 
 	# Allow upload of new file only
 	if($new) {
 		push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>File name</th>
-		<td><INPUT TYPE=text NAME=mv_dbconf_file VALUE=""></td>
-	</tr>
-	<tr>
-		<th valign=top align=left>Upload file</th>
-		<td><INPUT TYPE=file NAME=mv_dbconf_upload_file VALUE=""></td>
-	</tr>
+<tr class=rownorm>
+	<td valign=top class=clabel>File name</td>
+	<td class=cdata><INPUT TYPE=text NAME=mv_dbconf_file VALUE=""></td>
+</tr>
+<tr class=rownorm>
+	<td valign=top class=clabel>Upload file</td>
+	<td class=cdata><INPUT TYPE=file NAME=mv_dbconf_upload_file VALUE=""></td>
+</tr>
 EOF
 	}
 
@@ -436,10 +422,10 @@
 							} );
 
 	push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>Table type</th>
-		<td>$wid</td>
-	</tr>
+<tr class=rownorm>
+	<td valign=top class=clabel>Table type</td>
+	<td class=cdata>$wid</td>
+</tr>
 EOF
 
 	$wid = $Tag->widget( { 
@@ -450,9 +436,9 @@
 							} );
 
 	push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>Delimiter type</th>
-		<td>$wid</td>
+	<tr class=rownorm>
+		<td valign=top class=clabel>Delimiter type</td>
+		<td class=cdata>$wid</td>
 	</tr>
 EOF
 
@@ -460,21 +446,21 @@
 	my $def_USER = $ref->{USER} eq $Variable->{SQLUSER} ? 'CHECKED' : '';
 	my $def_PASS = $ref->{PASS} eq $Variable->{SQLPASS} ? 'CHECKED' : '';
 	push @out, <<EOF if $use_sql;
-	<tr>
-		<th valign=top align=left>DSN</th>
-		<td><INPUT SIZE=40 NAME=mv_dbconf_DSN VALUE="$ref->{DSN}">
+	<tr class=rownorm>
+		<td valign=top class=clabel>DSN</td>
+		<td class=cdata><INPUT SIZE=40 NAME=mv_dbconf_DSN VALUE="$ref->{DSN}">
 			<INPUT TYPE=checkbox NAME=mv_dbconf_DSN_default $def_DSN> use default
 		</td>
 	</tr>
-	<tr>
-		<th valign=top align=left>USER</th>
-		<td><INPUT SIZE=40 NAME=mv_dbconf_USER VALUE="$ref->{USER}">
+	<tr class=rownorm>
+		<td valign=top class=clabel>USER</td>
+		<td class=cdata><INPUT SIZE=40 NAME=mv_dbconf_USER VALUE="$ref->{USER}">
 			<INPUT TYPE=checkbox NAME=mv_dbconf_USER_default $def_USER> use default
 		</td>
 	</tr>
-	<tr>
-		<th valign=top align=left>PASS</th>
-		<td><INPUT SIZE=40 NAME=mv_dbconf_PASS VALUE="$ref->{PASS}">
+	<tr class=rownorm>
+		<td valign=top class=clabel>PASS</td>
+		<td class=cdata><INPUT SIZE=40 NAME=mv_dbconf_PASS VALUE="$ref->{PASS}">
 			<INPUT TYPE=checkbox NAME=mv_dbconf_PASS_default $def_PASS> use default
 		</td>
 	</tr>
@@ -482,9 +468,9 @@
 
 	if($ref->{included_from}) {
 		push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>Configuration file</th>
-		<td><INPUT TYPE=hidden NAME="mv_dbconf_included_from" value="$ref->{included_from}">$ref->{included_from}</td>
+	<tr class=rownorm>
+		<td valign=top class=clabel>Configuration file</td>
+		<td class=cdata><INPUT TYPE=hidden NAME="mv_dbconf_included_from" value="$ref->{included_from}">$ref->{included_from}</td>
 	</tr>
 EOF
 	}
@@ -497,9 +483,9 @@
 							} );
 
 		push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>Configuration directory</th>
-		<td>$wid</td>
+	<tr class=rownorm>
+		<td valign=top class=clabel>Configuration directory</td>
+		<td class=cdata>$wid</td>
 	</tr>
 EOF
 	}
@@ -507,9 +493,9 @@
 	my $def_type = $ref->{DEFAULT_TYPE} || 'char(128)';
 	if($current_sql or ($new and $base_sql)) {
 		push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>Default type</th>
-		<td><INPUT TYPE=text NAME=mv_dbconf_DEFAULT_TYPE value="$def_type"></td>
+	<tr class=rownorm>
+		<td valign=top class=clabel>Default type</td>
+		<td class=cdata><INPUT TYPE=text NAME=mv_dbconf_DEFAULT_TYPE value="$def_type"></td>
 	</tr>
 EOF
 	}
@@ -522,6 +508,7 @@
 		$fdbh = $Sql{$base_sql};
 	}
 
+	my $addrow_info;
 ROWINFO: {
 
 	last ROWINFO unless $fdbh and $fdbh->can('type_info_all');
@@ -530,6 +517,7 @@
 
 	last ROWINFO unless $type_info and $ref->{NAME};
 
+	$addrow_info = 1;
 	my @types;
 
 	for(my $i = 1; $i < @{$type_info}; $i++) {
@@ -564,8 +552,8 @@
 
 	my @rows;
 	push @out, <<EOF;
-	<tr>
-		<td valign=top align=left><b>Field configuration</b><br><br>
+	<tr class=rownorm>
+		<td valign=top align=left class=clabel><b>Field configuration</b><br><br>
 <script language=JavaScript>
 function visible (index) {
 	var vis = new Array;
@@ -587,14 +575,23 @@
 }
 </script>
 EOF
+	
+	# Need this to see if field is added
+	my $orignames = join ",", @names;
+	push @out, qq{<input type=hidden name="mv_dbconf_orignames" value="$orignames">};
+
+	push @names, 'NEW FIELD';
 	for(my $i = 0; $i < @names; $i++) {
 		my $name = $names[$i];
 		push @out, qq{<A HREF="javascript:void(0)" onClick="visible($i)">$name</a><br>};
 	}
 
+	pop @names;
+	push @names, '';
+
 	push @out, <<EOF;
 		</td>
-		<td>
+		<td class=cdata>
 <div
 	style="
 			Position:Relative;
@@ -608,7 +605,6 @@
 			Left:0; Top:0; Height:100%; Width:100%;
 			Visibility:Visible;
 			z-index:0;
-			background-color: #999999
 		">&nbsp;</div>
 <div
 	style="
@@ -616,15 +612,15 @@
 			Left:2; Top:2; Height:98%; Width:98%;
 			Visibility:Visible;
 			z-index:0;
-			background-color: #EEEEEE
 		">&nbsp;</div>
 EOF
 
 	for(my $i = 0; $i <= scalar @names; $i++) {
 		my $clen = '';
 		my $rname = $names[$i];
+		my $add;
 		if(!$rname) {
-			$rname = "(add)<BR><INPUT SIZE=16 NAME=mv_dbconf_COLUMN_DEF_name>";
+			$add = "(add)<BR><INPUT SIZE=16 NAME=mv_dbconf_COLUMN_DEF_name>";
 		}
 		my $pkey	= $ref->{KEY_INDEX} == $i		? ' SELECTED' : '';
 		my $idx		= $indexed->{$names[$i]}		? ' SELECTED' : '';
@@ -662,6 +658,22 @@
 						default => $tinfo->{TYPE_NAME},
 						name => 'mv_dbconf_COLUMN_DEF_type',
 						} );
+		my $delbox = '&nbsp;';
+		if(! $add) {
+				$delbox = <<EOF;
+<INPUT type=checkbox NAME=mv_dbconf_delete_field VALUE="$rname" class=s3 onChange="
+					if(this.checked) {
+						if(confirm('Are you sure you want to delete $rname?')) {
+							// do nothing
+						}
+						else {
+							this.checked = false;
+						}
+					}
+				"> delete field $rname
+EOF
+		}
+
 		push @out, <<EOF;
 <div
 	id=dynform$i
@@ -672,35 +684,39 @@
 			z-index:2;
 		">
 	<table>
-	<tr>
-		<td>
-		<span style="font-size: larger; font-weight: bold">$rname</span><br>
+	<tr class=rownorm>
+		<td class=rownorm>
+		<span style="font-size: larger; font-weight: bold">$rname$add</span><br>
 			<table border=1 style="border-type: thin" width="98%">
-			<tr>
-				<td><small><b>type</td>
-				<td><small><b>length</td>
-				<td><small><b>default (if any)</td>
+			<tr class=rownorm>
+				<td><b>type</td>
+				<td><b>length</td>
+				<td><b>default (if any)</td>
+				<td><b>action</td>
 			</tr>
-			<tr>
-				<td><small>$wid<INPUT TYPE=hidden NAME=mv_dbconf_COLUMN_DEF_name VALUE="$rname"></td>
+			<tr class=rownorm>
+				<td>$wid<INPUT TYPE=hidden NAME=mv_dbconf_COLUMN_DEF_name VALUE="$rname"></td>
 
-				<td><small><INPUT SIZE=6 TYPE=text NAME="mv_dbconf_COLUMN_DEF_length" VALUE="$clen"></td>
-				<td><small><INPUT SIZE=8 NAME=mv_dbconf_COLUMN_DEF_default VALUE="$fdefault"></td>
+				<td><INPUT SIZE=6 TYPE=text NAME="mv_dbconf_COLUMN_DEF_length" VALUE="$clen"></td>
+				<td><INPUT SIZE=8 NAME=mv_dbconf_COLUMN_DEF_default VALUE="$fdefault" class=s3></td>
+				<td rowspan=3 valign=top nowrap>
+						$delbox
+				</td>
 			</tr>
-			<tr>
-				<td><small><b>null status</td>
-				<td colspan=2><small><b>key status</td>
+			<tr class=rownorm>
+				<td><b>null status</td>
+				<td colspan=2><b>key status</td>
 			</tr>
-			<tr>
-				<td><small><SELECT NAME=mv_dbconf_COLUMN_DEF_notnull>
+			<tr class=rownorm>
+				<td><SELECT NAME=mv_dbconf_COLUMN_DEF_notnull>
 	<OPTION VALUE=""> NULL is OK
 	<OPTION VALUE="1" $notnull> NOT NULL
 </SELECT></td>
-				<td><small><SELECT NAME=mv_dbconf_COLUMN_DEF_key>
+				<td><SELECT NAME=mv_dbconf_COLUMN_DEF_key>
 	<OPTION VALUE=""> not primary key
 	<OPTION VALUE="1"$pkey> PRIMARY KEY
 </SELECT></td>
-				<td><small><SELECT NAME=mv_dbconf_CREATE_INDEX>
+				<td><SELECT NAME=mv_dbconf_INDEX>
 	<OPTION VALUE=""> no index
 	<OPTION VALUE="$names[$i]"$idx> index
 	<OPTION VALUE="UNIQUE:$names[$i]"$uidx> unique index
@@ -727,6 +743,34 @@
 
 }
 	
+	if(! $addrow_info) {
+		my @names = $db->columns();
+		unshift @names, '=--no delete--';
+		my $dstring = join ",", @names;
+		my $sel = $Tag->display( {
+						name => "mv_dbconf_delete_field",
+						type => 'select',
+						options => $dstring,
+						} );
+		push @out, <<EOF;
+<tr class=rownorm>
+	<td class=clabel>
+		Add a field
+	</td>
+	<td class=cdata>
+		<input type=text name="mv_dbconf_COLUMN_DEF_name">
+	</td>
+</tr>
+<tr class=rownorm>
+	<td class=clabel>
+		Delete a field
+	</td>
+	<td class=cdata>
+		$sel
+	</td>
+</tr>
+EOF
+	}
 
 
 	%misc = %Misc_set;
@@ -752,13 +796,14 @@
 	$wid .= "</TABLE>";
 
 	push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>Extra settings</th>
-		<td>$wid</td>
+	<tr class=rownorm>
+		<td valign=top class=clabel>Extra settings</td>
+		<td class=cdata>$wid</td>
 	</tr>
 EOF
 
 	my $create_sql = $ref->{CREATE_SQL} || $db->create_sql();
+	$create_sql =~ s/^\s*create\s+table\s+\(/CREATE TABLE $tname (/i;
 #Debug("create_sql=$create_sql");
 	if($current_sql or ($new and $base_sql) ) {
 		my @post;
@@ -780,18 +825,18 @@
 			$extra .= "Custom create SQL</A>";
 		}
 		push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>SQL after creation$extra</th>
-		<td><TEXTAREA NAME="mv_dbconf_POSTCREATE" ROWS=3 COLS=50>$post</TEXTAREA></td>
+	<tr class=rownorm>
+		<td valign=top class=clabel>SQL after creation$extra</td>
+		<td class=cdata><TEXTAREA NAME="mv_dbconf_POSTCREATE" ROWS=3 COLS=50>$post</TEXTAREA></td>
 	</tr>
 EOF
 	}
 
 	if($CGI->{custom_table_create} and ($current_sql or ($new and $base_sql)) ) {
 		push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>Custom table creation SQL</th>
-		<td><TEXTAREA NAME="mv_dbconf_CREATE_SQL" ROWS=12 COLS=50>$create_sql</TEXTAREA></td>
+	<tr class=rownorm>
+		<td valign=top class=clabel>Custom table creation SQL</td>
+		<td class=cdata><TEXTAREA NAME="mv_dbconf_CREATE_SQL" ROWS=12 COLS=50>$create_sql</TEXTAREA></td>
 	</tr>
 EOF
 	}
@@ -807,8 +852,10 @@
 		}
 	}
 
+	my $advanced;
 	$wid = '<TABLE>';
 	for(sort keys %misc) {
+		$advanced = 1;
 		$wid .= "<TR><TD>$_</TD><TD>";
 		my $type = $misc{$_} ? 'select' : 'text';
 		$wid .= $Tag->widget( { 
@@ -821,39 +868,42 @@
 	}
 	$wid .= "</TABLE>";
 
-	push @out, <<EOF;
-	<tr>
-		<th valign=top align=left>Advanced settings<br><small>(must uncomment to set in configuration)</th>
-		<td>$wid</td>
-	</tr>
-EOF
-
-
-	push @out, <<EOF;
-		</table>
-	</TD>
-</TR>
+	push @out, <<EOF if	$advanced;
+<tr class=rownorm>
+	<td valign=top class=clabel>Advanced settings<br>(must uncomment to set in configuration)</td>
+	<td class=cdata>$wid</td>
+</tr>
 EOF
 
-
 	return join "", @out;
 [/perl]
-	</TD>
-</TR>
 
-<TR>
-  <TD class=rborder COLSPAN=3><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></TD>
-</TR>
 
 </TABLE>
 
-</td></tr>
+[output name=top_buttons]
+<input type=hidden name=mv_dbconf value="">
+<input type=button VALUE="[L]Save[/L]" class=s3 style="padding-left: 8px; padding-right: 8px; font-weight: bold"
+onClick="
+	if( confirm('This will export and change the configuration of the database. Are you sure?') ) {
+		this.form.mv_dbconf.value=1;
+		this.form.submit();
+	}"
+>
+
+[output name=bottom_buttons]
+<input type=button VALUE="[L]Save[/L]" class=s3 style="padding-left: 8px; padding-right: 8px; font-weight: bold"
+onClick="
+	if( confirm('This will export and change the configuration of the database. Are you sure?') ) {
+		this.form.mv_dbconf.value=1;
+		this.form.submit();
+	}"
+>
 
-</table>
+[output name=bottom_of_form]
 </FORM>
-</center>
-
 
+[output name=""]
 <!-- ----- END REAL STUFF ----- -->
 
 @_UI_STD_FOOTER_@



2.4       +34 -48    interchange/dist/lib/UI/pages/admin/dbinfo.html


rev 2.4, prev_rev 2.3
Index: dbinfo.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/dbinfo.html,v
retrieving revision 2.3
retrieving revision 2.4
diff -u -r2.3 -r2.4
--- dbinfo.html	18 Aug 2002 15:38:26 -0000	2.3
+++ dbinfo.html	14 Jan 2003 02:25:50 -0000	2.4
@@ -1,6 +1,6 @@
 [tmp page_perm]techadmin[/tmp]
-[tmp page_title][L]Administration[/L]: [data session arg] [L]table information[/L][/tmp]
-[tmp page_banner]<i>[calc]$Config->{CatalogName}[/calc]</i> [L]table information[/L] [if session arg]([data session arg])[/if][/tmp]
+[tmp page_title][L]Administration[/L]: [cgi name=mv_data_table filter=entities keep=1] [L]table information[/L][/tmp]
+[tmp page_banner]<i>[calc]$Config->{CatalogName}[/calc]</i> [L]table information[/L] [if cgi mv_data_table]([cgi name=mv_data_table filter=entities keep=1])[/if][/tmp]
 [set ui_class]Admin[/set]
 [tmp help_name]genconfig.main[/tmp]
 [tmp icon_name]icon_config.gif[/tmp]
@@ -9,18 +9,12 @@
 <!-- ----- BEGIN REAL STUFF ----- -->
 
 <center>
-<table __UI_T_PROPERTIES__>
-
-<tr>
-<td class=rborder COLSPAN=2><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
-<tr><td align=left class=rnorm colspan=2>
-<TABLE border=0 width="100%">
+<table width="100%" border=0 cellpadding=2 cellspacing=0 class=rseparator>
 
 [perl tables="[list-databases] __UI_META_TABLE__"]
 	my @tables;
-	if($Session->{arg}) {
-		@tables = split /[\s,\0]+/, $Session->{arg};
+	if($CGI->{mv_data_table}) {
+		@tables = split /[\s,\0]+/, $CGI->{mv_data_table};
 	}
 	else {
 		@tables = sort keys %{$Config->{Database}};
@@ -62,7 +56,7 @@
 	my $tcount = 0;
 	for (@tables) {
 		my $tname = $_;
-		my $rclass = ($tcount++ % 2) ? 'rnorm' : 'ralt';
+		my $rclass = ($tcount++ % 2) ? 'rownorm' : 'rowalt';
 		my $tinfo = '';
 		if($mdb and $mdb->record_exists($tname) ) {
 			$tinfo = $mdb->field($tname, 'label');
@@ -101,31 +95,30 @@
 		$dfile .= "</TT>";
 		my $obj   = $ref->{Object};
 		$out .= <<EOF;
-<TR>
-	<TH VALIGN=TOP ALIGN=RIGHT width="15%" class=$rclass>
-	$tname$tinfo
-	</TH>
-	<td VALIGN=TOP>
-		<TABLE border=1 width="100%">
-		<tr>
-			<th valign=top align=left>Type</th>
-			<td>$type</td>
-		</tr>
-		<tr>
-			<th valign=top align=left width="30%">Class</th>
-			<td>$class</td>
-		</tr>
-		<tr>
-			<th valign=top align=left width="30%">Directory</th>
-			<td>$dir</td>
-		</tr>
-		<tr>
-			<th valign=top align=left width="30%">Text File</th>
-			<td>$file</td>
+		<tr class=rhead>
+			<td valign=TOP align=center class=rhead colspan=2>
+			<b>$tname$tinfo</b>
+			</td>
 		</tr>
-		<tr>
-			<th valign=top align=left width="30%">DB File</th>
-			<td>$dfile</td>
+		<tr class=rownorm>
+			<th valign=top align=left class=clabel>Type</th>
+			<td class=cdata>$type</td>
+		</tr>
+		<tr class=rownorm>
+			<th valign=top align=left width="30%" class=clabel>Class</th>
+			<td class=cdata>$class</td>
+		</tr>
+		<tr class=rownorm>
+			<th valign=top align=left width="30%" class=clabel>Directory</th>
+			<td class=cdata>$dir</td>
+		</tr>
+		<tr class=rownorm>
+			<th valign=top align=left width="30%" class=clabel>Text File</th>
+			<td class=cdata>$file</td>
+		</tr>
+		<tr class=rownorm>
+			<th valign=top align=left width="30%" class=clabel>DB File</th>
+			<td class=cdata>$dfile</td>
 		</tr>
 EOF
 
@@ -137,8 +130,8 @@
 EOF
 
 		$out .= <<EOF;
-		<tr>
-			<th colspan=2>Other</th>
+		<tr class=rhead>
+			<td colspan=2 class=rhead>Parameters</th>
 		</tr>
 EOF
 		for(sort keys %{$ref}) {
@@ -146,9 +139,9 @@
 			my $key = $_;
 			my $r = $ref->{$_};
 			my $o = <<EOF;
-		<tr>
-			<th valign=top align=left width="30%">$_</th>
-			<td>
+		<tr class=rownorm>
+			<td valign=top align=left width="30%" class=clabel>$_</td>
+			<td class=cdata>
 EOF
 			if(! defined $r) {
 				$o .= "undef";
@@ -185,18 +178,11 @@
 		}
 
 		$out .= <<EOF;
-		</TABLE>
-	</TD>
-</TR>
 EOF
 
 	}
 	return $out;
 [/perl]
-
-<tr>
-<td class=rborder COLSPAN=2><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
 
 </TABLE>
 



2.1       +1 -1      interchange/dist/lib/UI/pages/admin/file_transfer.html


rev 2.1, prev_rev 2.0
Index: file_transfer.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/file_transfer.html,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- file_transfer.html	18 Jul 2001 02:22:00 -0000	2.0
+++ file_transfer.html	14 Jan 2003 02:25:50 -0000	2.1
@@ -1,6 +1,6 @@
 [set help_name]upload.main[/set]
 [set icon_name]icon_config.gif[/set]
-[set ui_class]Content[/set]
+[set ui_class]Misc[/set]
 [set page_title][L]File Upload[/L][/set]
 [set page_perm]pages[/set]
 



2.8       +4 -4      interchange/dist/lib/UI/pages/admin/flex_editor.html


rev 2.8, prev_rev 2.7
Index: flex_editor.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/flex_editor.html,v
retrieving revision 2.7
retrieving revision 2.8
diff -u -r2.7 -r2.8
--- flex_editor.html	27 Oct 2002 05:09:39 -0000	2.7
+++ flex_editor.html	14 Jan 2003 02:25:50 -0000	2.8
@@ -31,7 +31,6 @@
 		 (<b>[page href="__UI_BASE__/db_metaconfig"
 				 form='
 				 ui_table=[cgi mv_data_table]
-				 ui_view=[cgi ui_meta_view]
 				 start_at=extended.ui_data_fields
 				 '][L]standard view[/L]</A>)
 		[/if-mm]
@@ -74,11 +73,12 @@
 
 [/strip]@_UI_STD_HEAD_@
 
-[table-editor cgi=1 image_meta="__UI_IMAGE_META__"]
+[tmp tmp_item_id][cgi item_id][/tmp]
+[table-editor cgi=1 output_map="[scratch ui_style_edit]" ui_style="[scratch ui_style_edit]"]
 
 <A HREF="[area href=admin/flex_editor
 				form='
-					item_id=[cgi item_id]
+					item_id=[scratch tmp_item_id]
 					mv_data_table=[value mv_data_table]
 					page_title=Edit [value mv_data_table]: [cgi item_id]
 					help_name=genedit
@@ -91,4 +91,4 @@
 
 @_UI_STD_FOOTER_@
 
-<!-- page: @@MV_PAGE@@ version: $Id: flex_editor.html,v 2.7 2002/10/27 05:09:39 mheins Exp $ -->
+<!-- page: @@MV_PAGE@@ version: $Id: flex_editor.html,v 2.8 2003/01/14 02:25:50 mheins Exp $ -->



2.18      +123 -63   interchange/dist/lib/UI/pages/admin/flex_select.html


rev 2.18, prev_rev 2.17
Index: flex_select.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/flex_select.html,v
retrieving revision 2.17
retrieving revision 2.18
diff -u -r2.17 -r2.18
--- flex_select.html	20 Nov 2002 18:52:17 -0000	2.17
+++ flex_select.html	14 Jan 2003 02:25:50 -0000	2.18
@@ -38,12 +38,29 @@
 		[cgi page_title]
 	[or]
 		[L]Select for table edit[/L]:
-		[page href="__UI_BASE__/db_metaconfig" secure="[scratch page_secure]"
-				 form='
+		<a href="[area
+					href="__UI_BASE__/db_metaconfig"
+					secure="[scratch page_secure]"
+					form=|
+						 ui_table=[cgi mv_data_table]
+						 start_at=height
+					|
+				]"
+				title="[cgi mv_data_table] [L]edit properties[/L], standard [L]view[/L]"
+				class=rtitle>[cgi mv_data_table]</A>
+		[if cgi ui_meta_view]
+		(<a href="[area
+					href="__UI_BASE__/db_metaconfig"
+					secure="[scratch page_secure]"
+					form=|
 						 ui_view=[cgi ui_meta_view]
 						 ui_table=[cgi mv_data_table]
 						 start_at=height
-				 '][cgi mv_data_table]</A>
+					|
+				]"
+				title="[cgi mv_data_table] [L]edit properties[/L], [cgi ui_meta_view] [L]view[/L]"
+				class=rtitle>[cgi ui_meta_view] [L]view[/L]</A>)
+		[/if]
 	[/either]
 [/tmp]
 [tmp help_name][either][cgi help_name][or]flex.select[/either][/tmp]
@@ -117,16 +134,9 @@
 @_UI_STD_HEAD_@
 [update values]
 <!-- ----- BEGIN REAL STUFF ----- -->
-<FORM ACTION="[area href="[either][cgi ui_searchpage][or]@@MV_PAGE@@[/either]"]" METHOD=GET>
-<INPUT TYPE=hidden NAME=mv_session_id VALUE="[data session id]">
-<INPUT TYPE=hidden NAME=mv_data_table    VALUE="[cgi mv_data_table]">
-<INPUT TYPE=hidden NAME=mv_action        VALUE=back>
-<INPUT TYPE=hidden NAME=ui_show_fields VALUE="[cgi ui_show_fields]">
 
 [if !scratch tmp_large]
-<table>
-<tr>
-<td>
+	[tmp extra_title]
 		[loop list="[cgi mv_data_table]"]
 		 	[if-loop-data __UI_META_TABLE__ name]
 		 	<B>[loop-data __UI_META_TABLE__ name]</B>
@@ -135,16 +145,24 @@
 		 	&nbsp;&nbsp;&nbsp;<small><A HREF="[loop-data __UI_META_TABLE__ help_url]">help</A></small>
 			[/if-loop-data]
 		 	[if-loop-data __UI_META_TABLE__ help]
-		 	<BR><i>[loop-data __UI_META_TABLE__ name]</i>
+		 	<i>[loop-data __UI_META_TABLE__ name]</i>
 			[/if-loop-data]
 		[/loop]
-</td>
-<td>
-<input NAME=ui_text_qualification size=16><INPUT TYPE=submit VALUE="[L]Limit with search[/L]">
-</td>
-</tr>
-</table>
+	[/tmp]
+	[calc]
+		$Scratch->{page_title} .= $Scratch->{extra_title};
+		return;
+	[/calc]
+
+[output name=search_box]
+<FORM ACTION="[area href="[either][cgi ui_searchpage][or]@@MV_PAGE@@[/either]"]" METHOD=GET>
+<INPUT TYPE=hidden NAME=mv_session_id VALUE="[data session id]">
+<INPUT TYPE=hidden NAME=mv_data_table    VALUE="[cgi mv_data_table]">
+<INPUT TYPE=hidden NAME=mv_action        VALUE=back>
+<INPUT TYPE=hidden NAME=ui_show_fields VALUE="[cgi ui_show_fields]">
+<span class=s3>[L]Limit with search[/L]:</span> <input NAME=ui_text_qualification size=16 class=s2> 
 </FORM>
+[output]
 [/if]
 
 [if scratch ui_failure]
@@ -258,13 +276,11 @@
 			$CGI->{ui_text_qualification} .= $or ? "os=1\n" : "os=0\n";
 		}
 
-		$out_message = '<H3>' . errmsg('Entries matching "%s"', 
-			$ui_text_qualification) . '</H3>';
+		$out_message = errmsg('Entries matching "%s"', $ui_text_qualification);
 	}
 	elsif ($ui_text_qualification) {
 		$CGI->{ui_text_qualification} = "se=$CGI->{ui_text_qualification}";
-		$out_message = '<H3>' . errmsg('Entries matching "%s"', 
-			$ui_text_qualification) . '</H3>';
+		$out_message = errmsg('Entries matching "%s"', $ui_text_qualification);
 		if($Scratch->{ui_owner}) {
 			$CGI->{ui_text_qualification} = <<EOF;
 co=1
@@ -399,13 +415,15 @@
 	rf=$CGI->{ui_description_fields}
 
 EOF
-	return $out_message;
+	$Scratch->{page_banner} .= $out_message;
+	$Scratch->{page_title} .= $out_message;
+	return;
 [/perl]
 </FORM>
 
 [tmpn tmp_ncols][/tmpn]
 <!-- tq: [scratch sparams] -->
-<TABLE __UI_T_PROPERTIES__>
+<table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
 	<FORM ACTION="[area href="[either][cgi ui_searchpage][or]@@MV_PAGE@@[/either]"]" METHOD=GET>
 	<INPUT TYPE=hidden NAME=mv_data_table    VALUE="[cgi mv_data_table]">
 	[if cgi ui_meta_view]
@@ -424,47 +442,58 @@
 	[/else]
 	[/if]
 	<INPUT TYPE=hidden NAME=mv_action        VALUE=back>
-	<TR class=rmarq>
+	<tr class=rhead>
+	<td class=rhead>&nbsp;</td>
 	[loop list="[cgi ui_description_fields]"]
-	<TH[loop-calc]
-				my $extra = '';
-				$Scratch->{tmp_ncols}++;
-				while ($filter_show[ [loop-increment] - 1] =~ m/\b(v?align\s*=\w+)/gi) {
-					$extra .= " $1";
-				}
-				return $extra || ' ALIGN=LEFT';
-			[/loop-calc]>
-		[loop-change 1][condition]1[/condition]&nbsp;&nbsp;&nbsp;&nbsp;[/loop-change 1]
+	<td class=rhead>
+    <table align="left" class=rhead cellspacing=2 cellpadding=0>
+    <tr>
+      <td align="right" valign="center">
 		<A HREF="[area href='__UI_BASE__/flex_group'
 						form='
 							mv_data_table=[cgi mv_data_table]
 							ui_meta_view=[cgi ui_meta_view]
 							mv_arg=[loop-code]
 						'
-					]"><IMG ALT="select by [loop-code]" SRC="smindex.gif" BORDER=0></A></TH>
-	[/loop]
-	</tr>
-	<TR class=rmarq>
-	[loop list="[cgi ui_description_fields]"]
-	<TH ALIGN=LEFT>
-		[loop-change 1][condition]1[/condition]&nbsp;&nbsp;&nbsp;&nbsp;[/loop-change 1]
-		<A HREF="[area href='@@MV_PAGE@@'
-						form=`
-							my $f = '[loop-code]';
-							my $o = '';
-							$o .= 'r'
-								if $CGI->{ui_sort_field} eq $f
-										and
-									$CGI->{ui_sort_option} !~ /r/;
-							$o .= 'n' if $numeric{$f};
-							return qq(
-								ui_text_qualification=$ui_text_qualification
-								mv_data_table=$CGI->{mv_data_table}
-								ui_sort_field=$f
-								ui_sort_option=$o
-							);
-						`
-					]" class=rmarq>[loop-code]</TH>
+					]"
+			title="[msg arg.0='[loop-code]']Select group by %s[/msg]"
+				><img src="smindex.gif" border=0></a>
+      </td>
+      <td align="left" valign="center" class=rhead>
+	  [calc]
+			my $f = '[loop-code]';
+			my $o = '';
+			my $msg;
+			my $rmsg;
+			if ($CGI->{ui_sort_field} eq $f and $CGI->{ui_sort_option} !~ /r/) {
+				$o .= 'r';
+				$msg = "sort by %s (%s)";
+				$rmsg = errmsg('reverse');
+			}
+			else {
+				$msg = "sort by %s";
+			}
+			$o .= 'n' if $numeric{$f};
+			$Scratch->{tmp_sort_msg} = errmsg($msg, $f, $rmsg);
+			$Scratch->{tmp_url} = $Tag->area( {
+											href => '@@MV_PAGE@@',
+											form => qq(
+									ui_text_qualification=$ui_text_qualification
+									mv_data_table=$CGI->{mv_data_table}
+									ui_meta_view=$CGI->{ui_meta_view}
+									ui_sort_field=$f
+									ui_sort_option=$o
+											),
+											});
+			return;
+		[/calc]
+		<a href="[scratch tmp_url]"
+			class=rhead
+			title="[scratch tmp_sort_msg]">[either][data table="__UI_META_TABLE__" column=label key="[cgi mv_data_table]::[loop-code]"][or][loop-code][/either]</A>
+      </td>
+    </tr>
+    </table>	
+	</td>
 	[/loop]
 	</tr>
 	[tmp tmp_url]
@@ -480,11 +509,16 @@
 			ui_return_to=@@MV_PAGE@@
 		[/else]
 		[/if][/tmp]
-	[search-region more=1 form="ui_meta_specific=[cgi ui_meta_specific]" arg="[scratch sparams]"]
+	[search-region more=1
+		form="
+			ui_meta_specific=[cgi ui_meta_specific]
+			ui_meta_view=[cgi ui_meta_view]
+		" arg="[scratch sparams]"]
 	[search-list]
-	<TR [item-alternate 2]class=rnorm[else]class=ralt[/else][/item-alternate]>
+	<tr [item-alternate 2]class=rownorm[else]class=rowalt[/else][/item-alternate]>
 
-	<TD><INPUT TYPE=checkbox NAME=item_id VALUE="[item-code]">&nbsp;&nbsp;[page href=__UI_BASE__/flex_editor form=|
+	<td width="30"><INPUT TYPE=checkbox NAME=item_id VALUE="[item-code]"></td>
+	<td>[page href=__UI_BASE__/flex_editor form=|
 								[scratch tmp_url]
 							item_id=[item-code]
 						|][item-code]</A></TD>
@@ -553,21 +587,47 @@
 
 [on-match]
 [if !cgi ui_meta_view]
-[button text="[L]Edit checked records in sequence[/L]"]
+
+[output name=top_buttons]
+[button text="[L]Edit checked records in sequence[/L]" extra=" class=s2"]
+ui_sequence_edit=1
+mv_nextpage=__UI_BASE__/flex_editor
+mv_todo=return
+[/button]
+
+[output name=bottom_buttons]
+[button text="[L]Edit checked records in sequence[/L]" extra=" class=s2"]
 ui_sequence_edit=1
 mv_nextpage=__UI_BASE__/flex_editor
 mv_todo=return
 [/button]
+
+[output]
 [/if]
 
 [if-mm function="tables" table="[cgi mv_data_table]=d"]
+
+[output name=top_buttons]
 &nbsp;&nbsp;&nbsp;&nbsp;
 [button text="[L]Delete checked records[/L]"
+		extra="class=s2"
 		confirm="[L]Are you sure you want to delete the checked records?[/L]"]
 [flag type=write table="[cgi mv_data_table]"]
 deleterecords=1
 mv_click=db_maintenance
 [/button]
+
+[output name=bottom_buttons]
+&nbsp;&nbsp;&nbsp;&nbsp;
+[button text="[L]Delete checked records[/L]"
+		extra="class=s2"
+		confirm="[L]Are you sure you want to delete the checked records?[/L]"]
+[flag type=write table="[cgi mv_data_table]"]
+deleterecords=1
+mv_click=db_maintenance
+[/button]
+[output]
+
 [/if-mm]
 
 [/on-match]
@@ -578,4 +638,4 @@
 [update values]
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ Revision: $Id: flex_select.html,v 2.17 2002/11/20 18:52:17 mheins Exp $ -->
+<!-- page: @@MV_PAGE@@ Revision: $Id: flex_select.html,v 2.18 2003/01/14 02:25:50 mheins Exp $ -->



2.8       +148 -146  interchange/dist/lib/UI/pages/admin/genconfig.html


rev 2.8, prev_rev 2.7
Index: genconfig.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/genconfig.html,v
retrieving revision 2.7
retrieving revision 2.8
diff -u -r2.7 -r2.8
--- genconfig.html	26 Sep 2002 04:35:02 -0000	2.7
+++ genconfig.html	14 Jan 2003 02:25:50 -0000	2.8
@@ -11,36 +11,38 @@
 
 [if !scratch ui_old_browser]
 [tabbed-display
-	panel-prepend="<table>"
+	ui-style=1
+	panel-prepend="<table cellpadding=3 cellspacing=0>"
 	panel-append="</table>"
 	start-at-index="[cgi start_at_index]"
+	panel-shade=f
 	panel-width="[either][cgi panel_width][or]800[/either]"
 	panel-height="[either][cgi panel_height][or]500[/either]"
 	tab-width=160]
 [tabbed-panel [L]Catalog Information[/L]]
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Catalog URL[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[calc]$url=$Scratch->{ui_catalog_url};$url=~s%/index[^/]*%%;return qq{<A HREF="$url">$url}[/calc]</A></TD>
+	</th>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[calc]$url=$Scratch->{ui_catalog_url};$url=~s%/index[^/]*%%;return qq{<A HREF="$url">$url}[/calc]</A></TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Secure URL[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[calc]return qq{<A HREF="$Config->{SecureURL}">$Config->{SecureURL}}[/calc]</A></TD>
+	</td>
+	<TD class=clabel>&nbsp; &nbsp;</TD>
+	<TD class=cdata>[calc]return qq{<A HREF="$Config->{SecureURL}">$Config->{SecureURL}}[/calc]</A></TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Location of Error Logs[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>
 		[L]Global[/L]: [version extended=1 global_error=1]<br>
 		[L]Local[/L]: [version extended=1 local_error=1]
 	</TD>
@@ -48,7 +50,7 @@
 
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Active sessions[/L]
 	[if cgi list_sessions]<br><i>
 	([L]last[/L]
@@ -58,9 +60,9 @@
 				)
 				 [/calc] [L]minutes[/L])</I>
 	[/if]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>
 	[if cgi list_sessions]
 		[loop list="[dump-session find=1]"]
 				<A HREF="[area
@@ -98,11 +100,11 @@
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Last order number[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>
 		[calc]
 			my $cfn = $Variable->{MV_ORDER_COUNTER_FILE} || 'etc/order.number';
 			$Values->{new_order_number} = $Tag->file($cfn);
@@ -117,74 +119,74 @@
 [tabbed-panel[L]Interchange Server Information[/L]]
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Interchange version[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Server hostname[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 hostname=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 hostname=1]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Interchange PID[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 pid=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 pid=1]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Interchange SUID User[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 uid=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 uid=1]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Server mode[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 mode=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 mode=1]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Last time server restarted[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[calc] scalar localtime([file-info conf=1 name="interchange.pid" time=1])[/calc]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[calc] scalar localtime([file-info conf=1 name="interchange.pid" time=1])[/calc]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Last time changes applied[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[file name=`"etc/status.$Config->{CatalogName}"`] ([page __UI_BASE__/reconfig @@MV_PAGE@@][L]apply now[/L]</A>)</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[file name=`"etc/status.$Config->{CatalogName}"`] ([page __UI_BASE__/reconfig @@MV_PAGE@@][L]apply now[/L]</A>)</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[msg arg.0='<A HREF="[area __UI_BASE__/env_vars]">' arg.1="</A>"]%sEnvironment%s variables passed[/msg]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 env=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 env=1]</TD>
 </TR>
 
 [/tabbed-panel]
 [tabbed-panel [L]Perl Information[/L]]
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	<A HREF="[area href="@@MV_PAGE@@"
 		form="
 			more_perl=1
@@ -192,17 +194,17 @@
 			panel_width=1000
 			panel_height=800
 		"]">[L]Perl Version[/L]</A>
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>Perl [version extended=1 perl=1 perl_config="[cgi more_perl]"]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>Perl [version extended=1 perl=1 perl_config="[cgi more_perl]"]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Optional Module Information[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>
 		<table>
 		[table-organize columns=2 columnize=1 td='width="50%"']
 		<td>[version extended=1 modules=1 joiner="</td><td>"]</TD>
@@ -212,11 +214,11 @@
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Safe operations untrapped[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 safe=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 safe=1]</TD>
 </TR>
 
 <TR>
@@ -227,26 +229,26 @@
 [tabbed-panel [L]Database Information[/L]]
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Database Interfaces[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD VALIGN=top>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>
 		[version extended=1 db=1]
 	</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Database Tables[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD VALIGN=top>	
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>	
 		<table width="400">
 		[table-organize cols=3 columnize=1]
 			[loop list="[list-databases]"]
 		<TD>
-				<A HREF="[area __UI_BASE__/dbinfo [loop-code]]">[loop-code]</A><br>
+				<A HREF="[area href=admin/dbinfo form='mv_data_table=[loop-code]']">[loop-code]</A><br>
 		</TD>
 			[/loop]
 		[/table-organize]
@@ -267,27 +269,27 @@
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Catalog URL[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[calc]$url=$Scratch->{ui_catalog_url};$url=~s%/index[^/]*%%;return qq{<A HREF="$url">$url}[/calc]</A></TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[calc]$url=$Scratch->{ui_catalog_url};$url=~s%/index[^/]*%%;return qq{<A HREF="$url">$url}[/calc]</A></TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Secure URL[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[calc]return qq{<A HREF="$Config->{SecureURL}">$Config->{SecureURL}}[/calc]</A></TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[calc]return qq{<A HREF="$Config->{SecureURL}">$Config->{SecureURL}}[/calc]</A></TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Location of Error Logs[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>
 		[L]Global[/L]: [version extended=1 global_error=1]<br>
 		[L]Local[/L]: [version extended=1 local_error=1]
 	</TD>
@@ -295,7 +297,7 @@
 
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Active sessions[/L]
 	[if cgi list_sessions]<br><small><i>
 	([L]last[/L]
@@ -305,9 +307,9 @@
 				)
 				 [/calc] [L]minutes[/L])</I></small>
 	[/if]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[if cgi list_sessions][loop list="[dump-session find=1]"]<A HREF="[area
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[if cgi list_sessions][loop list="[dump-session find=1]"]<A HREF="[area
 														href='@@MV_PAGE@@'
 														form='show_session=[loop-code]'
 														]">[loop-code]</A><BR>[/loop]
@@ -333,11 +335,11 @@
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Last order number[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>
 		[calc]
 			my $cfn = $Variable->{MV_ORDER_COUNTER_FILE} || 'etc/order.number';
 			$Values->{new_order_number} = $Tag->file($cfn);
@@ -358,67 +360,67 @@
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Interchange version[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Server hostname[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 hostname=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 hostname=1]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Interchange PID[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 pid=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 pid=1]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Interchange SUID User[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 uid=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 uid=1]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Server mode[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 mode=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 mode=1]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Last time server restarted[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[calc] scalar localtime([file-info conf=1 name="interchange.pid" time=1])[/calc]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[calc] scalar localtime([file-info conf=1 name="interchange.pid" time=1])[/calc]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Last time changes applied[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[file name=`"etc/status.$Config->{CatalogName}"`] ([page __UI_BASE__/reconfig @@MV_PAGE@@][L]apply now[/L]</A>)</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[file name=`"etc/status.$Config->{CatalogName}"`] ([page __UI_BASE__/reconfig @@MV_PAGE@@][L]apply now[/L]</A>)</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[msg arg.0='<A HREF="[area __UI_BASE__/env_vars]">' arg.1="</A>"]%sEnvironment%s variables passed[/msg]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 env=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 env=1]</TD>
 </TR>
 
 <TR>
@@ -430,27 +432,27 @@
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	<A HREF="[area href="@@MV_PAGE@@" form="more_perl=1"]">[L]Perl Version[/L]</A>
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>Perl [version extended=1 perl=1 perl_config="[cgi more_perl]"]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>Perl [version extended=1 perl=1 perl_config="[cgi more_perl]"]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Optional Module Information[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 modules=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 modules=1]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Safe operations untrapped[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD>[version extended=1 safe=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 safe=1]</TD>
 </TR>
 
 <TR>
@@ -462,19 +464,19 @@
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Database Interfaces[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD VALIGN=top>[version extended=1 db=1]</TD>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>[version extended=1 db=1]</TD>
 </TR>
 
 <TR>
-	<TH VALIGN=TOP ALIGN=RIGHT>
+	<td class=rhead>
 	[L]Database Tables[/L]
-	</TH>
-	<TD>&nbsp; &nbsp;</TD>
-	<TD VALIGN=top>	<small>
+	</td>
+	<td class=clabel>&nbsp; &nbsp;</TD>
+	<td class=cdata>	<small>
 	<blockquote><div align=left>
 		[loop list="[list-databases]"]
 			<A HREF="[area __UI_BASE__/dbinfo [loop-code]]">[loop-code]</A><br>



2.5       +124 -41   interchange/dist/lib/UI/pages/admin/gentable.html


rev 2.5, prev_rev 2.4
Index: gentable.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/gentable.html,v
retrieving revision 2.4
retrieving revision 2.5
diff -u -r2.4 -r2.5
--- gentable.html	18 Aug 2002 08:09:05 -0000	2.4
+++ gentable.html	14 Jan 2003 02:25:50 -0000	2.5
@@ -8,10 +8,38 @@
 <!-- ----- BEGIN REAL STUFF ----- -->
 
 <!-- touch metatable [data __UI_META_TABLE__ test test] -->
-<table cellpadding=2 cellspacing=0 width="60%">
+[perl tables="__UI_META_TABLE__"]
+	my $db = $Db{__UI_META_TABLE__};
+	my $q = "select code from __UI_META_TABLE__ where type = 'table'";
+	my $ary = $db->query($q);
+	for(@$ary) {
+		my($code) = @$_; 
+		my ($view,$tab) = split /:+/, $code, 2;
+		if(! $tab) {
+			$tab = $view;
+			undef $view;
+		}
+		## $db->set_field($code, 'lookup', $tab);
+		## $db->set_field($code, 'attribute', $view);
+		## push @out, "set code=$code tab=$tab view=$view lookup=$tab attribute=$view";
+		next unless $view;
+		$views{$tab} ||= [];
+		push @{$views{$tab}}, $view;
+	}
+	for(keys %views) {
+		my $ary = $views{$_};
+		@$ary = sort @$ary;
+	}
+	return;
+[/perl]
+
+<table width="100%" border=0 cellspacing=0 cellpadding=0>
+  <tr>
+		<td>
+			<table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
+			  <tr class=rhead> 
 [loop list="[list-databases]"]
 [loop-sub db_action]
-
 sub {
 #Log("args=" . $Tag->uneval({ ref => \@_ }));
 	my $name = shift;
@@ -37,7 +65,7 @@
 	};
 	my $ref = {
 		upload => { 
-						img => 'up.gif',
+						img => 'ico_upload.gif',
 						url => $Tag->area(
 									'__UI_BASE__/upload_file',
 									$froot->(join "/",
@@ -51,7 +79,7 @@
 									
 					},
 		download => { 
-						img => 'down.gif',
+						img => 'ico_download.gif',
 						url => $Tag->area( 
 									{
 										href => 'ui_download/' .
@@ -64,11 +92,12 @@
 												$Config->{Database}{$tab}{file}
 											 ),
 										 form => 'filler=1',
+										 add_dot_html => 0,
 									},
 								),
 					},
 		import => { 
-						img => 'left.gif',
+						img => 'ico_import.gif',
 						url => $Tag->area(
 									{
 										href => '__UI_BASE__/import_table',
@@ -77,7 +106,7 @@
 									),
 					},
 		export => { 
-						img => 'right.gif',
+						img => 'ico_export.gif',
 						url => $Tag->area(
 									{
 										href => '__UI_BASE__/export_table',
@@ -106,72 +135,126 @@
 	};
 	my $out = '';
 	my @litems = (
-				'[L]edit[/L]',
+				$title_thing || '[L]Table name[/L] ([L]description[/L]) -- [L]click to edit[/L]',
+				'[L]views[/L]',
 				'[L]import[/L]',
 				'[L]export[/L]',
 				'[L]upload[/L]',
 				'[L]download[/L]',
 			);
-	push @litems, '[L]config[/L]' if $Variable->{UI_DBCONFIG};
-	push @litems, '[L]Table name[/L] ([L]description[/L])';
+	if ($Variable->{UI_DBCONFIG}) {
+		push @litems, '[L]config[/L]';
+	}
 	
 	if(! $dblist_done_one++) {
-		$out .= '<tr>';
+		$out .= '<tr class=rhead>';
 		my $i = 0;
 		for(@litems) {  # Add "report"
-			my $align = $i++ == $#litems ? 'left' : 'center';
-			$out .= qq{<td class=rmarq align=$align>$_</td>};
+			my $align = $i++ == 0 ? 'left' : 'center';
+			$out .= qq{<td class=rhead align=$align>$_</td>};
 		}
 		$out .= "</tr>";
 	}
-	$out .= '<tr class=rnorm>';
 
-	my @mitems = (qw/edit import export upload download/);
+	my $class;
+	if($dblist_done_one % 2) {
+		$class = 'rownorm';
+	}
+	else {
+		$class = 'rowalt';
+	}
+
+	my $desc = tag_data('__UI_META_TABLE__', 'name', $name);
+	my $totdesc = $name;
+	$totdesc .= " ($desc)" if $desc;
+	my $titdesc = errmsg('edit table %s', $totdesc);
+	$titdesc = $Tag->filter('encode_entities', $titdesc);
+	
+	my $mainwidth = $Variable->{UI_DBCONFIG} ? '30%' : '40%';
+
+	my $mref = $ref->{edit};
+	$out .= <<EOF;
+<tr class=$class>
+	<td class=$class width="$mainwidth">
+		<a href="$mref->{url}" title="$titdesc" class=$class>$totdesc</a>
+	</td>
+EOF
+
+	$out .= <<EOF;
+	<td class=$class width="20%">
+EOF
+	if(my $ary = $views{$name}) {
+		for(sort @$ary) {
+			my $tit = errmsg("edit %s with view %s", $tab, $_);
+			my $url = $Tag->area(
+								{
+									href => '__UI_BASE__/flex_select',
+									form => qq{
+												mv_data_table=$tab
+												ui_meta_view=$_
+											},
+								}
+							);
+			$out .= qq{<a href="$url" title="$tit">$_</a> };
+		}
+	}
+	else {
+		$out .= '&nbsp;';
+	}
+
+	$out .= "\n\t</td>\n";
+	my @mitems = (qw/import export upload download/);
+
 	if($Variable->{UI_DBCONFIG}) {
 		push @mitems, 'config';
 	}
 
 	for(@mitems) {  # Add "report"
 		my $line = $ref->{$_};
-		$out .= <<EOF;
-<td ALIGN=center><A HREF="$line->{url}"><img src="$line->{img}" border=0 alt="$_ $tab" title="$_ $tab" align=top></A></td>
+		if($_ eq 'config' and $Config->{Database}{$tab}{type} > 7) {
+			$out .= qq{<td class=$class align=center width="12%">&nbsp;</td>};
+		}
+		else {
+			$out .= <<EOF;
+<td class=$class align=center width="12%"><a href="$line->{url}" title="$_ $tab"><img src="$line->{img}" border=0 alt="$_ $tab" title="$_ $tab" align=top></A></td>
 EOF
+		}
 	}
-	$out .= qq{<td>&nbsp;<FONT SIZE="+1">$name</FONT>};
-	my $desc = tag_data('__UI_META_TABLE__', 'name', $name);
-	$out .= qq{ ($desc)} if $desc;
-	$out .= q{</td></tr>};
+	$out .= q{</tr>};
 	return $out;
 }
 [/loop-sub]
 [loop-exec db_action][loop-data __UI_META_TABLE__ label][/loop-exec]
 [/loop]
-<tr class=rborder>
-	<td colspan=6><img src="bg.gif" height=1></td>
+
+[if-mm super]
+[calc]
+	%admin = ();
+	undef $dblist_done_one;
+	$title_thing = q{[L]Hidden Admin Tables[/L]};
+	return;
+[/calc]
+
+</table>
+</td>
 </tr>
 </table>
 
-[if-mm super]
-<blockquote>
-	[L]Hidden admin tables[/L]:
-<blockquote>
-	[calc]
-		return
-			join ', ',
-			map {
-				$Tag->page( {
-					href => '__UI_BASE__/flex_select',
-					form => "mv_data_table=$_",
-				} ) .
-				$_ .
-				'</a>'
-			} split / /, $Scratch->{ui_tmp_admin}
-		;
-	[/calc]
-</blockquote>
-</blockquote>
+<table width="100%" border=0 cellspacing=0 cellpadding=0>
+  <tr>
+		<td>
+			<br><br>
+			<table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
+			  <tr class=rhead> 
+[loop list="[scratch ui_tmp_admin]"]
+[loop-exec db_action][loop-data __UI_META_TABLE__ label][/loop-exec]
+[/loop]
 [/if-mm]
 
+</table>
+</td>
+</tr>
+</table>
 
 <!-- ----- END REAL STUFF ----- -->
 



2.6       +99 -70    interchange/dist/lib/UI/pages/admin/help.html


rev 2.6, prev_rev 2.5
Index: help.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/help.html,v
retrieving revision 2.5
retrieving revision 2.6
diff -u -r2.5 -r2.6
--- help.html	17 Apr 2002 17:55:49 -0000	2.5
+++ help.html	14 Jan 2003 02:25:50 -0000	2.6
@@ -49,108 +49,137 @@
 [/tmp]
 
 [calc]
-	if ($Scratch->{help_text} =~ /~~HELP_TOPICS~~/) {
-		my $help_index = <<EOF;
-<ul>
-[search-region more=1
-               form="topic=[scratch help_key]"
-	       search="
-	fi=@_UI_HELP_TABLE_@
-	ra=yes
-	rf=code,title
-	tf=title
-	ml=20
-	sp=@@MV_PAGE@@
-"]
-[search-list]
-[if type=explicit compare="q{[item-code]} !~ m{^(?:faq|home|404|\Q[scratch help_key]\E)$}"]
-	<li>[page href="@@MV_PAGE@@" form="topic=[item-code]"][item-pos 1]</a>
-[/if]
-[/search-list]
-</ul>
-[more-list]More help topics: [more][/more-list]
-[/search-region]
-
-EOF
-		$Scratch->{help_text} =~ s/~~HELP_TOPICS~~/$help_index/g;
+	if ($CGI->{help_search}) {
+		$Scratch->{help_text} =~ s/~~HELP_TOPICS~~//;
+	}
+	else {
+		$Scratch->{help_text} =~ m/~~HELP_TOPICS~~/
+			and $CGI->{do_index} = 1;
 	}
+	$Scratch->{help_text} =~ s{(<a\s+.*?href=")([-\w.]+)(?:\.html?)"}
+							  { $1 . $Tag->area({
+							  						href => '@@MV_PAGE@@', 
+													form => "topic=$2"
+												}) . '"'}gies;
+													
 	return;
 [/calc]
 
+@_UI_STD_INIT_@
 <html>
 <head>
 <title>[L]Interchange Help:[/L] [scratch help_title]</title>
-<style type="text/css">
-<!--
-BODY { font-family: [scratch fontface] }
-P    { font-family: [scratch fontface] }
-H1   { font-family: [scratch fontface] }
-H2   { font-family: [scratch fontface] }
-H3   { font-family: [scratch fontface] }
-B    { font-family: [scratch fontface] }
-I    { font-family: [scratch fontface] }
-TD   { font-family: [scratch fontface] }
-
-A:link    { text-decoration: none } 
-A:visited { text-decoration: none } 
-A:active  { text-decoration: none }
-A:hover   { color: #663333; text-decoration: none }
--->
-</style>
+<link href="[var UI_IMG]interchange.css" rel="stylesheet" type="text/css">
 </head>
-<body bgcolor="#ffffff" link="#660000" alink="#660000" vlink="#660000">
+<body class=rownorm>
 
-<div align=center>
-
-<table width="100%" border=0 cellspacing=0 cellpadding=0>
-<tr>
-<td height=23 bgcolor="CC0000" valign=middle>
+<div class=titlebox>
 <table width="100%" border=0 cellpadding=0 cellspacing=0>
+<form action="[area @@MV_PAGE@@]">
 <tr>
-<td valign=middle width=530>
-<img src="cleardot.gif" height=1 width=12>
+<td valign=middle>
+<img src="bg.gif" height=1 width=12>
 [if scratch help_key ne 'home']
 	[page href="@@MV_PAGE@@" form="topic=home"]<font face="[scratch fontface]" size=2>Home</font></a>
-	<img src="cleardot.gif" height=1 width=12>
+	<img src="bg.gif" height=1 width=12>
 [/if]
 [if scratch help_key ne 'faq']
 	[page href="@@MV_PAGE@@" form="topic=faq"]<font face="[scratch fontface]" size=2>FAQ</font></a>
-	<img src="cleardot.gif" height=1 width=12>
+[/if]
+	<img src="bg.gif" height=1 width=12>
+[if scratch help_orig =~ /\S/]
+[page href=admin/flex_editor
+	  form="
+	  	mv_data_table=ichelp
+		item_id=[scratch help_orig]
+		display_class=type5
+		ui_return_to=admin/help
+		ui_return_to=topic=[scratch help_orig]
+	  "]edit this help topic ([scratch help_orig])</A>
 [/if]
 </td>
-<td align=right valign=middle width=40>
-<a href="javascript:history.go(-1)" target="Help" onmouseover="window.status='Help';return true;" onmouseout="window.status='';return true;"><font face="[scratch fontface]" size=2>Back</font></a><img src="cleardot.gif" height=1 width=12>
-</td>
-</tr>
-</table>
+<td align=right valign=center>
+<input name=topic type=hidden value="[cgi topic]">
+<input name=help_search size=10 class=s3>
+<input type=submit value="[L]Search Help[/L]" class=s3>
+&nbsp;
+&nbsp;
+&nbsp;
+<a href="javascript:history.go(-1)" target="Help" onmouseover="window.status='Help';return true;" onmouseout="window.status='';return true;"><font face="[scratch fontface]" size=2>[L]Back[/L]</font></a><img src="bg.gif" height=1 width=12>
+<a href="javascript:window.close()"><font face="[scratch fontface]" size=2>[L]Close[/L]</font></a><img src="bg.gif" height=1 width=12>
 </td>
 </tr>
+</form>
 </table>
+</div>
 
-<table border=0 cellspacing=0 cellpadding=2 width=450>
-<tr>
-<td>
+<div class=rownorm
+		style="
+			width: 100%;
+			text-align: left;
+		">
+[if cgi help_search]
+[loop search="
+				fi=ichelp.txt
+				st=text
+				se=[cgi help_search]
+				rf=code,title
+				ml=10
+			"
+			form="help_search=1"
+			more=1]
+<ol>
+[list]
+<li> [page href="@@MV_PAGE@@" form="topic=[loop-code]"][loop-param title]</a>
+[/list]
+</ol>
+[no-match]
+  No help found for [cgi name=help_search filter=entities].
+[/no-match]
+[more-list] [more] [/more-list]
+[/loop]
+[/if]
+
+[if cgi do_index]
+[tmp help_topics]
+<ul>
+[search-region more=1
+               form="topic=[scratch help_key]"
+	       search="
+	fi=@_UI_HELP_TABLE_@
+	ac=0
+	ne=1
+	se=^(faq|home|404|[scratch help_key])$
+	rf=code,title
+	tf=title
+	ml=20
+	sp=@@MV_PAGE@@
+"]
+[search-list]
+	<li>[page href="@@MV_PAGE@@" form="topic=[item-code]"][item-param title]</a>
+[/search-list]
+</ul>
+[more-list]More help topics: [more][/more-list]
+[/search-region]
+[/tmp]
+	[calc] $Scratch->{help_text} =~ s/~~HELP_TOPICS~~/$Scratch->{help_topics}/g; return; [/calc]
+[/if]
 
-<h2>&nbsp;<br>
-[scratch help_title]
-</h2>
+<h2> [scratch help_title] </h2>
 
-<hr noshade size=2 width="100%">
+<hr noshade size=1>
 
 [scratch help_text]
 
 <br>
 
-<hr noshade size=2 width="100%">
+<hr noshade size=1>
+
 
 <p><font face="[scratch fontface]" size=1>
 <b><a href="@_INTERCHANGE_URL_@" target="_new">Interchange</a> -
-&copy; 2000-2002 <a href="http://www.redhat.com/" target="_new">Red Hat, Inc.</a></b>
-</font></p>
-
-</td>
-</tr>
-</table>
+&copy; 2002-2003 <a href="http://www.icdevgroup.org/" target="_new">Interchange Development Group</a></b>
+</font>&nbsp;&nbsp;&nbsp;<a href="javascript:window.close()">close this window</A></p>
 
 </div>
 



2.6       +38 -5     interchange/dist/lib/UI/pages/admin/import_table.html


rev 2.6, prev_rev 2.5
Index: import_table.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/import_table.html,v
retrieving revision 2.5
retrieving revision 2.6
diff -u -r2.5 -r2.6
--- import_table.html	18 Aug 2002 08:09:05 -0000	2.5
+++ import_table.html	14 Jan 2003 02:25:50 -0000	2.6
@@ -73,10 +73,12 @@
 					autonumber="[cgi ui_autonumber]"
 					convert="[cgi ui_import_convert]"
 					delete="[cgi ui_allow_delete]"
+					filter_field="[cgi ui_filter_field]"
 					dir=backup
 					file="upload/[cgi ui_upload_filename]"
 					move=1
 					multiple="[cgi ui_allow_multiple]"
+					transactions="[cgi ui_import_transactions]"
 					quiet="[cgi ui_import_quiet]"
 					table="[cgi mv_data_table]"
 	]
@@ -89,8 +91,10 @@
 					file="upload/[cgi ui_upload_filename]"
 					move=1
 					multiple="[cgi ui_allow_multiple]"
+					transactions="[cgi ui_import_transactions]"
 					quiet="[cgi ui_import_quiet]"
 					table="[cgi mv_data_table]"
+					filter_field="[cgi ui_filter_field]"
 	]
 	[/elsif]
 	[elsif cgi ui_upload_ext eq cleanse]
@@ -103,8 +107,10 @@
 					file="upload/[cgi ui_upload_filename]"
 					move=1
 					multiple="[cgi ui_allow_multiple]"
+					transactions="[cgi ui_import_transactions]"
 					quiet="[cgi ui_import_quiet]"
 					table="[cgi mv_data_table]"
+					filter_field="[cgi ui_filter_field]"
 	]
 	[/elsif]
 	[/if]
@@ -121,7 +127,7 @@
 <INPUT TYPE=hidden NAME=ui_return_to VALUE="__UI_BASE__/gentable">
 <table __UI_T_PROPERTIES__>
 <tr>
-	<td colspan=2 class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
+	<td colspan=3 class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
 </tr>
 
 <tr class=rnorm>
@@ -145,18 +151,19 @@
 </tr>
 
 <tr>
-	<td colspan=2 class=rspacer><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
+	<td colspan=3 class=rspacer><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
 </tr>
 
 <tr class=rnorm>
-	<td colspan=2>
+	<td colspan=2 valign=top>
 <br>
 <SELECT NAME=ui_upload_ext>
 	<OPTION VALUE=add> [L]Add new items if present[/L]
 	<OPTION VALUE=cleanse> [L]Replace existing items[/L]
 	<OPTION VALUE=update> [L]Ignore new items[/L]
 </SELECT>&nbsp;&nbsp;&nbsp;<SMALL><INPUT TYPE=checkbox NAME=ui_allow_delete VALUE=1> [L]Allow delete[/L]
-&nbsp;&nbsp;<INPUT TYPE=checkbox NAME=ui_autonumber VALUE=1 CHECKED> [L]Autonumber if no key[/L]</SMALL>
+&nbsp;&nbsp;<INPUT TYPE=checkbox NAME=ui_autonumber VALUE=1 CHECKED> [L]Autonumber if no key[/L]
+<INPUT TYPE=checkbox NAME=ui_import_transactions VALUE=1> [L]Use transactions[/L]</SMALL>
 <BR><select NAME=ui_import_convert>
 		<OPTION VALUE=0> [L]Single table[/L]
 		<OPTION VALUE=1> [L]Gnumeric simple tex[/L]
@@ -169,11 +176,37 @@
 <BR><INPUT TYPE=radio NAME=ui_import_quiet VALUE=1 [checked name=ui_import_quiet value=1 default=1]> [L]Show summary messages only[/L]
 <BR><INPUT TYPE=radio NAME=ui_import_quiet VALUE=2 [checked name=ui_import_quiet value=2]> [L]Show *no* messages[/L]
 </td>
+	
+	<td valign=top>
+		<b>Field filters</b><br>
+		<textarea name=ui_filter_field cols=30 rows=3>[data
+												table="mv_metadata"
+												field="extended.filter_field"
+												serial=1
+												key="[cgi mv_data_table]"]</textarea>
+		<br>
+		<i>
+			Specified one per line:
+			<blockquote>
+<pre>
+	fieldname1=filter
+	fieldname2=filter1 filter2 
+</pre>
+			</blockquote>
+			If multiple tables, must specify table as well:
+			<blockquote>
+<pre>
+	table1:fieldname1=filter
+	table2:fieldname2=filter1 filter2 
+</pre>
+			</blockquote>
+		</i>
+	</td>
 
 </tr>
 
 <tr>
-<td colspan=2 class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
+<td colspan=3 class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
 </tr>
 
 </table>



2.10      +50 -3     interchange/dist/lib/UI/pages/admin/index.html


rev 2.10, prev_rev 2.9
Index: index.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/index.html,v
retrieving revision 2.9
retrieving revision 2.10
diff -u -r2.9 -r2.10
--- index.html	10 Jan 2003 21:10:50 -0000	2.9
+++ index.html	14 Jan 2003 02:25:50 -0000	2.10
@@ -60,7 +60,7 @@
 ">
 <br><br><br>
 <div align=center>
-<table width="90%" border="1" cellspacing=0 cellpadding="0">
+<table width="90%" border="1" cellspacing=0 cellpadding="0" bgcolor="#FFFFFF">
 <tr class=ralt>
 <td>
 <br>						
@@ -112,6 +112,55 @@
 	return $out;
 [/calc]
 
+[perl tables="__UI_META_TABLE__ mv_metadata"]
+	delete $Scratch->{merge_complete};
+	delete $Scratch->{do_merge};
+	my $tab = q{__UI_META_TABLE__} || 'mv_metadata';
+	my $db = $Db{$tab}
+		or do {
+			$Scratch->{merge_complete}
+				= errmsg("Cannot merge: no meta table '%s'", $tab);
+			return;
+		};
+
+	my $newver = $Tag->version();
+	$Scratch->{newver} = $newver;
+	my $compnew = $newver;
+	$compnew =~ s/\D+//g;
+
+	my $curver = 0;
+	if($db->record_exists('ui-version')) {
+		$curver = $db->field("ui-version", 'label');
+	}
+
+	$Scratch->{curver} = $curver;
+	my $compcur = $curver;
+	$compcur =~ s/\D+//g;
+
+	if ($curver eq $newver) {
+		## All is copasetic
+	}
+	elsif($compcur gt $compnew) {
+		## I guess this is OK
+	}
+	else {
+		return qq{
+<TR>
+<TD COLSPAN=3>
+<blockquote class=titlebox>
+UI update appears to have been done and metadata has not
+been updated for this catalog...
+	<blockquote>
+		[page href=admin/merge_meta extra=class=titlebox]Merge Metadata</a>
+	</blockquote>
+</blockquote>
+</TD>
+</TR>
+		};
+	}
+	return;
+[/perl]
+
 [menu
 	  name=Top
 	  superuser=super
@@ -126,9 +175,7 @@
 	  {/IMG_ICON?}
 </td>
 <td valign="top">
-<b>
 &nbsp;<a href="{HREF}">{NAME}</a>
-</b>
 </td>
 <td valign="top">
 {DESCRIPTION}



2.14      +42 -39    interchange/dist/lib/UI/pages/admin/item.html


rev 2.14, prev_rev 2.13
Index: item.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/item.html,v
retrieving revision 2.13
retrieving revision 2.14
diff -u -r2.13 -r2.14
--- item.html	17 Oct 2002 04:46:23 -0000	2.13
+++ item.html	14 Jan 2003 02:25:50 -0000	2.14
@@ -87,26 +87,13 @@
 [/if]
 
 <!-- ----- BEGIN REAL STUFF ----- -->
-<table>
-<tr>
-[if scratch ui_message]
-<td>
-[L]Message[/L]:
-<BLOCKQUOTE>
-	[scratchd ui_message]
-</BLOCKQUOTE>
-<p>
-&nbsp;
-</td>
-[/if]
-<td>
-<FORM ACTION="[area @@MV_PAGE@@]" name=itemlist>
-<INPUT NAME=ui_text_qualification>
-<INPUT TYPE=submit VALUE="[L]Limit with search[/L]">
+[output name=search_box]
+<FORM ACTION="[area @@MV_PAGE@@]">
+<INPUT NAME=ui_text_qualification type=text class=s3>
+<INPUT TYPE=submit VALUE="[L]Limit with search[/L]" class=s3>
 </FORM>
-</td>
-</tr>
-</table>
+
+[output name=""]
 [if-mm !super]
 [tmp ui_owner][db-hash
 				table="__UI_ACCESS_TABLE__"
@@ -193,13 +180,11 @@
 			$CGI->{ui_text_qualification} .= $or ? "os=1\n" : "os=0\n";
 		}
 
-		$out_message = '<H3>' 
-			. errmsg('Entries matching "%s"', $ui_text_qualification) . '</H3>';
+		$out_message = errmsg('entries matching "%s"', $ui_text_qualification);
 	}
 	elsif ($ui_text_qualification) {
 		$CGI->{ui_text_qualification} = "se=$CGI->{ui_text_qualification}";
-		$out_message = '<H3>' 
-			. errmsg('Entries matching "%s"', $ui_text_qualification) . '</H3>';
+		$out_message = errmsg('entries matching "%s"', $ui_text_qualification);
 		if($Scratch->{ui_owner}) {
 			$CGI->{ui_text_qualification} = <<EOF;
 co=1
@@ -281,9 +266,19 @@
 	}
 	$CGI->{changed_qual} = 1 if delete $Scratch->{item_list_clicked};
 
-	return $out_message;
+	$Scratch->{ui_text_qualification} = $out_message;
+	return;
 [/perl]
 
+[if scratch ui_text_qualification]
+[calc]
+	return if $CGI->{mv_like_spec};
+	$Scratch->{page_banner} ||= $Scratch->{page_title};
+	$Scratch->{page_banner} .= ' -- ' . $Scratch->{ui_text_qualification};
+	return;
+[/calc]
+[/if]
+
 <!-- existing item_sparams: '[scratch item_sparams]'
 		tq: '[cgi ui_text_qualification]' -->
 
@@ -294,6 +289,7 @@
 			fi=[cgi mv_data_table]
 			st=db
 			[cgi ui_text_qualification]
+			nh=[cgi showinactive]
 			su=1
 			md=1
 			ml=[cgi ui_list_size]
@@ -308,6 +304,7 @@
 			st=db
 			ra=yes
 			md=1
+			nh=[cgi showinactive]
 			ml=[cgi ui_list_size]
 			tf=[cgi ui_sort_field]
 			to=[cgi ui_sort_option]
@@ -346,17 +343,17 @@
 
 <FORM ACTION="[area __UI_BASE__/item_edit]" METHOD=POST>
 <INPUT TYPE=hidden NAME=mv_action VALUE=back>
-<TABLE border=0 CELLSPACING=0 width="90%">
+<table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
 
-<TR class=rtitle><TD>&nbsp;</TD>
+<tr class=rhead><TD>&nbsp;</TD>
 [loop list="[cgi ui_description_fields]"]
-<TH[loop-calc]
+<th[loop-calc]
 			my $extra = '';
 			while ($filter_show[ [loop-increment] - 1] =~ m/\b(v?align\s*=\w+)/gi) {
 				$extra .= " $1";
 			}
 			return $extra || ' ALIGN=LEFT';
-		[/loop-calc]>
+		[/loop-calc] class=rhead>
 
     <table align="left">
     <tr>
@@ -368,7 +365,7 @@
 		']"><IMG ALT="select by [loop-code]" SRC="smindex.gif" BORDER=0></A>
 
       </td>
-      <td align="left" valign="center">
+      <td align="left" valign="center" class=rhead>
 	<A HREF="[area href='@@MV_PAGE@@'
 					form=`
 						my $f = '[loop-code]';
@@ -385,11 +382,11 @@
 							ui_sort_option=$o
 						);
 					`
-				]" class=ctitle>[either][data table="__UI_META_TABLE__" column=label key="[cgi mv_data_table]::[loop-code]"][or][loop-code][/either]</A>
+				]" class=rhead>[either][data table="__UI_META_TABLE__" column=label key="[cgi mv_data_table]::[loop-code]"][or][loop-code][/either]</A>
       </td>
     </tr>
     </table>	
-  </TH>
+  </th>
 [/loop]
 [calc]
 	my $out = '';
@@ -418,7 +415,7 @@
 			}
 			my $url = $Tag->page({
 						href => '@@MV_PAGE@@',
-						extra => 'class=ctitle',
+						extra => 'class=rhead',
 						form => "
 									ui_text_qualification=$ui_text_qualification
 									mv_data_table=$CGI->{mv_data_table}
@@ -428,7 +425,7 @@
 			$display = "$url$display</A>";
 		}
 		$out .= <<EOF;
-<td class=ctitle ALIGN=CENTER><small class=ctitle>$display</small></td>
+<td class=rhead ALIGN=CENTER><small class=rhead>$display</small></td>
 EOF
 	}
 	return $out;
@@ -436,7 +433,7 @@
 </tr>
 [/on-match]
 [search-list]
-<tr class=[item-alternate 2]ralt[else]rnorm[/else][/item-alternate]>
+<tr class=[item-alternate 2]rowalt[else]rownorm[/else][/item-alternate]>
 
 <TD><INPUT TYPE=checkbox NAME=item_id VALUE="[item-code]"></TD><TD>[page href=__UI_BASE__/item_edit form="item_id=[item-code]"][item-code]</A></TD>
 [item-sub show_line]
@@ -534,7 +531,12 @@
 </tr>
 [/more-list]
 </table>
-[button text="[L]Edit checked items in sequence[/L]"]
+
+[/search-region]
+
+[output name="bottom_buttons"]
+
+[button text="[L]Edit checked items in sequence[/L]" extra="class=s3"]
 ui_sequence_edit=[calc]
 	$CGI->{item_id_left} = $CGI->{item_id};
 	$CGI->{item_id_left} =~ s/\0+/,/g;
@@ -554,7 +556,7 @@
 
 &nbsp;&nbsp;&nbsp;&nbsp;
 
-[button text="[L]Delete checked items[/L]"
+[button text="[L]Delete checked items[/L]" extra="class=s3"
 		confirm="Are you sure you want to delete the checked items\n__UI_ITEM_TABLES__?"
 ]
 [flag type=write table="[cgi mv_data_table]"]
@@ -565,10 +567,11 @@
 mv_nextpage=@@MV_PAGE@@
 [/button]
 <INPUT TYPE=hidden NAME=mv_data_table VALUE="[cgi mv_data_table]">
-</FORM>
 
-[/search-region]
+[output name="bottom_of_form"]
+</FORM>
+[output name=""]
 <!-- ----- END REAL STUFF ----- -->
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ Revision: $Id: item.html,v 2.13 2002/10/17 04:46:23 mheins Exp $ -->
+<!-- page: @@MV_PAGE@@ Revision: $Id: item.html,v 2.14 2003/01/14 02:25:50 mheins Exp $ -->



2.1       +1 -15     interchange/dist/lib/UI/pages/admin/item_cross.html


rev 2.1, prev_rev 2.0
Index: item_cross.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/item_cross.html,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- item_cross.html	18 Jul 2001 02:22:00 -0000	2.0
+++ item_cross.html	14 Jan 2003 02:25:50 -0000	2.1
@@ -32,21 +32,7 @@
 
 @_UI_STD_HEAD_@
 <P>
-[table-editor cgi=1]
-
-[if-mm super]
-<A HREF="[area href=admin/flex_editor
-				form='
-					item_id=[cgi item_id]
-					mv_data_table=__ProductFiles_0__
-					page_title=Edit items: [cgi item_id]
-					help_name=inventory.edit
-					ui_no_meta_display=1
-					ui_hide_key=1
-					ui_return_to=admin/item
-					icon_name=icon_item.gif
-					']">No meta display</A>
-[/if-mm]
+[table-editor cgi=1 output_map=1]
 
 @_UI_STD_FOOTER_@
 <!-- page: @@MV_PAGE@@ -->



2.6       +2 -2      interchange/dist/lib/UI/pages/admin/item_edit.html


rev 2.6, prev_rev 2.5
Index: item_edit.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/item_edit.html,v
retrieving revision 2.5
retrieving revision 2.6
diff -u -r2.5 -r2.6
--- item_edit.html	20 Nov 2002 18:52:17 -0000	2.5
+++ item_edit.html	14 Jan 2003 02:25:50 -0000	2.6
@@ -59,7 +59,7 @@
 
 @_UI_STD_HEAD_@
 <P>
-[table-editor file_upload=1 cgi=1]
+[table-editor cgi=1 output_map="[scratch ui_style_edit]" ui_style="[scratch ui_style_edit]"]
 
 [if-mm super]
 <A HREF="[area href=admin/flex_editor
@@ -76,4 +76,4 @@
 [/if-mm]
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ version: $Revision: 2.5 $ -->
+<!-- page: @@MV_PAGE@@ version: $Revision: 2.6 $ -->



2.1       +1 -15     interchange/dist/lib/UI/pages/admin/item_feature.html


rev 2.1, prev_rev 2.0
Index: item_feature.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/item_feature.html,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- item_feature.html	18 Jul 2001 02:22:00 -0000	2.0
+++ item_feature.html	14 Jan 2003 02:25:50 -0000	2.1
@@ -42,21 +42,7 @@
 
 @_UI_STD_HEAD_@
 <P>
-[table-editor cgi=1]
-
-[if-mm super]
-<A HREF="[area href=admin/flex_editor
-				form='
-					item_id=[cgi item_id]
-					mv_data_table=__ProductFiles_0__
-					page_title=Edit items: [cgi item_id]
-					help_name=inventory.edit
-					ui_no_meta_display=1
-					ui_hide_key=1
-					ui_return_to=admin/item
-					icon_name=icon_item.gif
-					']">No meta display</A>
-[/if-mm]
+[table-editor cgi=1 output-map=1]
 
 @_UI_STD_FOOTER_@
 <!-- page: @@MV_PAGE@@ -->



2.1       +1 -8      interchange/dist/lib/UI/pages/admin/item_inventory.html


rev 2.1, prev_rev 2.0
Index: item_inventory.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/item_inventory.html,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- item_inventory.html	18 Jul 2001 02:22:00 -0000	2.0
+++ item_inventory.html	14 Jan 2003 02:25:50 -0000	2.1
@@ -6,13 +6,6 @@
 		$CGI->{ui_hide_key} = 1;
 		$CGI->{mv_data_table} = 'inventory';
 	}
-	if(! $CGI->{ui_data_fields}) {
-		$CGI->{ui_data_fields} = '__ProductFiles_0__:__DescriptionField__ [db-columns name=inventory]';
-		$CGI->{ui_display_only} = '__ProductFiles_0__:__DescriptionField__';
-	}
-	if(! $CGI->{ui_break_before}) {
-		$CGI->{ui_break_before} = 'account';
-	}
 	if(! $CGI->{ui_return_to}) {
 		my @args = (
 			 '__UI_BASE__/item_edit',
@@ -33,7 +26,7 @@
 
 @_UI_STD_HEAD_@
 <P>
-[table-editor cgi=1]
+[table-editor cgi=1 output-map=1]
 
 [if-mm super]
 <A HREF="[area href=admin/flex_editor



2.2       +25 -19    interchange/dist/lib/UI/pages/admin/item_price.html


rev 2.2, prev_rev 2.1
Index: item_price.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/item_price.html,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- item_price.html	2 Aug 2001 13:03:47 -0000	2.1
+++ item_price.html	14 Jan 2003 02:25:50 -0000	2.2
@@ -2,17 +2,37 @@
 	[bounce page="__UI_BASE__/item"]
 [/if]
 [calc]
+	if($CGI->{merchandising}) {
+		$Scratch->{mv_logical_page} = 'admin/merchandising';
+		$Scratch->{ui_class} = 'Merchandising';
+	}
+	else {
+		$Scratch->{ui_class} = 'Items';
+	}
 	if(! $CGI->{mv_data_table}) {
 		$CGI->{ui_hide_key} = 1;
 		$CGI->{mv_data_table} = 'pricing';
 	}
 	if(! $CGI->{ui_data_fields}) {
-		$CGI->{ui_data_fields} = '__ProductFiles_0__:price __ProductFiles_0__:__DescriptionField__ [db-columns name=pricing]';
+		@cols = split /\s+/, q{[db-columns name=pricing]};
+		@cols = grep $_ ne 'sku' && $_ ne 'price_group', @cols;
+		my $colstring = join "\n", @cols;
+		$CGI->{ui_data_fields} = qq{
+
+=Base Pricing
+
+price_group
+sku
+__ProductFiles_0__:__DescriptionField__
+__ProductFiles_0__:price
+__ProductFiles_0__:wholesale
+
+=Quantity Pricing
+
+$colstring
+};
 		$CGI->{ui_display_only} = '__ProductFiles_0__:__DescriptionField__';
 	}
-	if(! $CGI->{ui_break_before}) {
-		$CGI->{ui_break_before} = 'price_group q2';
-	}
 	if(! $CGI->{ui_return_to}) {
 		my @args = (
 			 '__UI_BASE__/item_edit',
@@ -32,21 +52,7 @@
 
 @_UI_STD_HEAD_@
 <P>
-[table-editor cgi=1]
-
-[if-mm super]
-<A HREF="[area href=admin/flex_editor
-				form='
-					item_id=[cgi item_id]
-					mv_data_table=__ProductFiles_0__
-					page_title=[L]Edit items[/L]: [cgi item_id]
-					help_name=inventory.edit
-					ui_no_meta_display=1
-					ui_hide_key=1
-					ui_return_to=admin/item
-					icon_name=icon_item.gif
-					']">[L]No meta display[/L]</A>
-[/if-mm]
+[table-editor cgi=1 output-map=1]
 
 @_UI_STD_FOOTER_@
 <!-- page: @@MV_PAGE@@ -->



2.2       +1 -15     interchange/dist/lib/UI/pages/admin/item_up.html


rev 2.2, prev_rev 2.1
Index: item_up.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/item_up.html,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- item_up.html	2 Aug 2001 21:38:52 -0000	2.1
+++ item_up.html	14 Jan 2003 02:25:50 -0000	2.2
@@ -32,21 +32,7 @@
 
 @_UI_STD_HEAD_@
 <P>
-[table-editor cgi=1]
-
-[if-mm super]
-<A HREF="[area href=admin/flex_editor
-				form='
-					item_id=[cgi item_id]
-					mv_data_table=__ProductFiles_0__
-					page_title=[L]Edit items[/L]: [cgi item_id]
-					help_name=inventory.edit
-					ui_no_meta_display=1
-					ui_hide_key=1
-					ui_return_to=admin/item
-					icon_name=icon_item.gif
-					']">[L]No meta display[/L]</A>
-[/if-mm]
+[table-editor cgi=1 output-map=1]
 
 @_UI_STD_FOOTER_@
 <!-- page: @@MV_PAGE@@ -->



2.4       +0 -15     interchange/dist/lib/UI/pages/admin/layout.html


rev 2.4, prev_rev 2.3
Index: layout.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/layout.html,v
retrieving revision 2.3
retrieving revision 2.4
diff -u -r2.3 -r2.4
--- layout.html	18 Aug 2002 08:09:05 -0000	2.3
+++ layout.html	14 Jan 2003 02:25:50 -0000	2.4
@@ -34,10 +34,6 @@
 [set Delete section]
 [/set]
 
-<tr class=rtitle>
-<td [if value area]colspan=3[/if] class=ctitle><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1>[page href=__UI_BASE__/layout_auto extra=rmarq]auto-populate</A></td>
-</tr>
-
 <tr>
 <td valign=top class=rnorm>
 
@@ -1116,22 +1112,11 @@
 <!--- END CATEGORY PROPERTIES -->
 </tr>
 
-<tr>
-<td colspan=3 class=rspacer><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
-
-<tr>
-<td colspan=3 class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
-
 [/then]
 [else]
 <!-- wait for them to select a category first -->
 </tr>
 
-<tr>
-<td [if value area]colspan=2[/if] class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
 [/else]
 [/if]
 



2.6       +18 -25    interchange/dist/lib/UI/pages/admin/layout_auto.html


rev 2.6, prev_rev 2.5
Index: layout_auto.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/layout_auto.html,v
retrieving revision 2.5
retrieving revision 2.6
diff -u -r2.5 -r2.6
--- layout_auto.html	18 Aug 2002 08:09:05 -0000	2.5
+++ layout_auto.html	14 Jan 2003 02:25:50 -0000	2.6
@@ -30,18 +30,15 @@
 <input type=hidden name=mv_action value=back>
 
 <table border=0 __UI_T_PROPERTIES__ width="70%">
-<tr>
-<td colspan=3 class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
 
-<tr class=rnorm>
+<tr class=rownorm>
 <td class=clabel>1.</td>
 <td class=clabel width="25%">
 
 Choose a table as the source:
 
 </td>
-<td>
+<td class=cdata>
 [if !value area_table]
 	[value name=area_table set=products hide=1]
 	[value name=area_column set=prod_group hide=1]
@@ -67,12 +64,12 @@
 </select>
 </td>
 </tr>
-<tr class=rnorm>
+<tr class=rownorm>
 <td class=clabel>2.</td>
 <td class=clabel>
 Choose a column to populate areas:
 </td>
-<td class=clabel>
+<td class=cdata>
 <select name="area_column">
 <option value=""> -- none --
 [loop list="[db-columns table='[value area_table]']" option=area_column]
@@ -81,12 +78,12 @@
 </select>
 </td>
 </tr>
-<tr class=rnorm>
+<tr class=rownorm>
 <td class=clabel>3.</td>
 <td class=clabel>
 Choose a column to populate categories:
 </td>
-<td>
+<td class=cdata>
 <select name="cat_column">
 <option value=""> -- none --
 [loop list="[db-columns table='[value area_table]']" option=cat_column]
@@ -95,12 +92,12 @@
 </select>
 </td>
 </tr>
-<tr class=rnorm>
+<tr class=rownorm>
 <td class=clabel>4.</td>
 <td class=clabel>
 Choose a search type:
 </td>
-<td>
+<td class=cdata>
 <select name="cat_type" onChange="change_ta(this.form.search_code,this.form.cat_type.value)">
 <option value="narrow"> Narrow search (area and category match)
 <option value="simple"> Simple search (only category matches)
@@ -108,12 +105,12 @@
 </select>
 </td>
 </tr>
-<tr class=rnorm>
+<tr class=rownorm>
 <td class=clabel valign=top>5.</td>
 <td valign=top class=clabel>
 Complex search code:
 </td>
-<td>
+<td class=cdata>
 NOTE: Not active unless complex search selected above.<br>
 <textarea rows=1 cols=50 name=search_code disabled=true>
 	fi=products
@@ -138,39 +135,39 @@
 </textarea>
 </td>
 </tr>
-<tr class=rnorm>
+<tr class=rownorm>
 <td class=clabel>6.</td>
 <td class=clabel>
 Select the page class:
 </td>
-<td>
+<td class=cdata>
 <INPUT NAME=which_page VALUE=all>
 </td>
 </tr>
-<tr class=rnorm>
+<tr class=rownorm>
 <td class=clabel>7.</td>
 <td class=clabel>
 Select the page area:
 </td>
-<td>
+<td class=cdata>
 <INPUT NAME=sel VALUE=left>
 </td>
 </tr>
-<tr class=rnorm>
+<tr class=rownorm>
 <td class=clabel>8.</td>
 <td class=clabel>
 Decide whether to remove previous settings:
 </td>
-<td>
+<td class=cdata>
 <SELECT NAME=nuke><OPTION VALUE=0>No <OPTION VALUE=1>Yes</SELECT>
 </td>
 </tr>
-<tr class=rnorm>
+<tr class=rownorm>
 <td class=clabel>9.</td>
 <td class=clabel>
 Click this button to populate:
 </td>
-<td>
+<td class=cdata>
 [button text="Populate"]
 [flag type=write table="area"]
 [flag type=write table="cat"]
@@ -298,10 +295,6 @@
 [/button]
 <BR>
 </td>
-</tr>
-
-<tr>
-<td colspan=3 class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
 </tr>
 
 </table>



2.6       +2 -3      interchange/dist/lib/UI/pages/admin/login.html


rev 2.6, prev_rev 2.5
Index: login.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/login.html,v
retrieving revision 2.5
retrieving revision 2.6
diff -u -r2.5 -r2.6
--- login.html	18 Aug 2002 08:09:05 -0000	2.5
+++ login.html	14 Jan 2003 02:25:50 -0000	2.6
@@ -14,9 +14,8 @@
 [set mv_no_count][/set]
 [set mv_no_session_id][/set]
 [set no_login_required]1[/set]
-[set ui_class]None[/set]
-[set page_title]Welcome to Interchange[/set]
-[set page_banner]&nbsp;[/set]
+[set ui_class]Login[/set]
+[set page_title]Interchange: Log in to Administration[/set]
 [set help_name]logout.main[/set]
 @_UI_STD_HEAD_@
 



2.19      +1245 -1145interchange/dist/lib/UI/pages/admin/menu_editor.html


rev 2.19, prev_rev 2.18
Index: menu_editor.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/menu_editor.html,v
retrieving revision 2.18
retrieving revision 2.19
diff -u -r2.18 -r2.19
--- menu_editor.html	1 Dec 2002 16:38:39 -0000	2.18
+++ menu_editor.html	14 Jan 2003 02:25:50 -0000	2.19
@@ -8,9 +8,15 @@
 [set page_title]Menu construction[/set]
 [tmpn dhtml_required]1[/tmpn]
 [set ui_class]Design[/set]
+[if cgi qmenu_name]
+[set page_banner]Edit the <i>[cgi qmenu_name]</i> menu[/set]
+[else]
 [set page_banner]Menu constructor: Make a quick menu[/set]
+[/else]
+[/if]
+[tmpn check_publish]1[/tmpn]
 [set page_perm]layout=e[/set]
-[set help_name]layout.edit[/set]
+[set help_name]menu.edit[/set]
 [set icon_name]icon_pages.gif[/set]
 [seti ui_body_extra][/seti]
 [tmp meta_header]
@@ -51,6 +57,10 @@
 __UI_META_TABLE__
 [/seti]
 
+<script>
+	var is_form_unpublished = 0;
+</script>
+
 [perl tables="[scratch medit_tables]"]
 	my $menupath = $Variable->{MV_MENU_DIRECTORY} || 'include/menus';
 	@menufields = qw/
@@ -75,6 +85,8 @@
 		my %opt = (
 			table => $CGI->{qmenu_products},
 			comb_field => $CGI->{qmenu_comb_field},
+			sort_string => $CGI->{qmenu_sort_string},
+			sort_order => $CGI->{qmenu_sort_order},
 			type => 'comb_category',
 			even_large => $CGI->{qmenu_even_large},
 		);
@@ -378,1263 +390,1334 @@
 	return;
 [/perl]
 
-<p style="font-size: larger">
-
 [tmp qmenu_options]
 [loop head-skip=1 lr=1 list="[scratch qmenu_fdata]" cgi=1 option=qmenu_name]
 <option value="[loop-code]">[loop-code]</option>
 [/loop]
 [/tmp]
 
-<table width="95%">
-<tr>
-	<td width="30%">
-[if scratch qmenu_options =~ /\S/]
-	<form action="[area @@MV_PAGE@@]">
-	<input name=mv_action type=hidden value="back">
-	<B>Menu name:</B>
-	<select name=qmenu_name><option value="">--select--</option>[scratch qmenu_options]</select>
-	<input type=submit value="[L]Load[/L]">
-	[page href="__UI_BASE__/file_transfer"
-			form="
-				initial_dir=include/menus
-			"]Delete/Manage</A>
-	</form>
-[/if]
-	</td>
-	<td width="40%">
-	<span class=cmessage>[warnings auto=1]</span>
-	[error all=1 text="<ul class=cerror><li>%s</ul>" joiner="<li>"]
-	</td>
-	<td width="30%" rowspan=2>
+[output name=search_box]
+<form action="[area @@MV_PAGE@@]" style="margin: 0px; padding: 0px">
+[tmp delete_loc][area href=admin/file_transfer form=| initial_dir=include/menus |][/tmp]
+<input	type=button
+		onClick="if(check_publish()) { location='[scratch delete_loc]' }"
+		value="[L]Delete/Manage[/L]"
+		class=s3>
+<input name=mv_action type=hidden value="back">
+&nbsp;
+&nbsp;
+<span class=s3>Menu name</span>
+<select name=qmenu_name
+		onChange="if(check_publish()) { this.form.submit() }"
+		class=s3><option value="" class=s3>--select--</option>[scratch qmenu_options]</select>
+<input	type=button
+		name=submittor
+		value="[L]Load[/L]"
+		onClick="if(check_publish()) { this.form.submit() }"
+		class=s3>
+</form>
+[output name=""]
 
-Build menu tree from database table(s):<br>
-[tabbed-display panel-width=300 panel-height=100
-        js-prefix=mvtb_
-		panel_style="
-			font-family: sans-serif;
-			font-size: 10px;
-			border: 2px;
-			border-color:#999999;
-			border-style:outset;" 
-
-				tab-width=150 
-				tab-height=20
-				panel_id=mvspan2
-				tab_style="
-    font-size:10px;
-    text-align:center;
-    font-family: sans-serif;
-    line-height:150%;
-    border:2px;
-    border-color:#999999;
-    border-style:outset;
-    border-bottom-style:none;"]
-[tabbed-panel Comb_category field]
-                <form action="[process href=@@MV_PAGE@@]" style="margin-bottom:0px;">
-                <input type=hidden name=mv_session_id value="[data session id]">
-                <input type=hidden name=mv_action value="back">
-
-[if !cgi qmenu_products]
-        [cgi name=qmenu_products set=products hide=1]
-        [cgi name=qmenu_comb_field set=comb_category hide=1]
-        [cgi name=qmenu_toplevel_field set=prod_group hide=1]
-        [cgi name=qmenu_sublevel_field set=category hide=1]
-[/if]
-		<select name="qmenu_products"
-        		onChange="
-                		populateTable(
-            				this.form.qmenu_products.options,
-            				this.form.qmenu_comb_field.options,
-            				this.form.qmenu_products.options[this.form.qmenu_products.selectedIndex].value
-            				);
-                		populateTable(
-            				this.form.qmenu_products.options,
-            				this.form.qmenu_toplevel_field.options,
-            				this.form.qmenu_products.options[this.form.qmenu_products.selectedIndex].value
-            				);
-                		populateTable(
-            				this.form.qmenu_products.options,
-            				this.form.qmenu_sublevel_field.options,
-            				this.form.qmenu_products.options[this.form.qmenu_products.selectedIndex].value
-            				);
-        			"
-		size=1 style="width:130px;">
-			[loop list="[list-databases]" option=qmenu_products cgi=1]
-			<OPTION VALUE="[loop-code]">[loop-code]</OPTION>
-			[/loop]
-		</select> <input type=submit value=Go><br>
-<div id=combfield style="visibility:[if cgi qmenu_use_comb_field]Visible[else]Hidden[/else][/if];">
-		<select name="qmenu_comb_field" style="width:130px;">
-			<option value=""> -- none --
-			[loop list="[db-columns table='[cgi qmenu_products]']" option=qmenu_comb_field cgi=1]
-			<option>[loop-code]
-			[/loop]
-		</select> Field (Default: comb_category)
-</div>
-<div id=nocombfield style="visibility:[if cgi qmenu_use_comb_field]Hidden[else]Visible[/else][/if];">
-		<select name="qmenu_toplevel_field" style="width:130px;">
-			<option value=""> -- none --
-			[loop list="[db-columns table='[cgi qmenu_products]']" option=qmenu_toplevel_field cgi=1]
-			<option>[loop-code]
-			[/loop]
-		</select> Top Level Field<br>
-		<select name="qmenu_sublevel_field" style="width:130px;">
-			<option value=""> -- none --
-			[loop list="[db-columns table='[cgi qmenu_products]']" option=qmenu_sublevel_field cgi=1]
-			<option>[loop-code]
-			[/loop]
-		</select> Sub Level Field
-</div>
-                <input type=checkbox name="qmenu_use_comb_field" value=1 onClick="toggle_comb(this.form.qmenu_use_comb_field.checked);" [checked name=qmenu_use_comb_field value=1 cgi=1]> Use comb_field&nbsp;&nbsp;
-                <input type=checkbox name="qmenu_even_large" value=1  [checked name=qmenu_even_large value=1 cgi=1]> Override, build even if large &nbsp;
-                </form>
-[/tabbed-panel]
-[tabbed-panel Top&Sub Level Tables]
-                <form action="[process href=@@MV_PAGE@@]" style="margin-bottom:0px;">
-                <input type=hidden name=mv_session_id value="[data session id]">
-                <input type=hidden name=mv_action value="back">
-                <input type=hidden name=qmenu_cat value=1>
-
-				<table style="font-size: 10px">
-					<tr>
-						<td>
-					<select name=qmenu_toplevel>
-					[loop list="area [list-databases]" option=qmenu_toplevel cgi=1]
-					<option> [loop-code][/loop]
-					</select>
-						</td>
-						<td>
-					Top Level table (Default: area)
-						</td>
-					</tr>
-					<tr>
-						<td>
-					<select name=qmenu_sublevel>
-					[loop list="cat [list-databases]" option=qmenu_sublevel cgi=1]
-					<option> [loop-code][/loop]
-					</select>
-						</td>
-						<td>
-					Sub Level table (Default: cat)
-						</td>
-					</tr>
-					<tr>
-						<td>
-					[display type=select name=qmenu_sel_value
-							 lookup_query="select distinct sel from area"
-							 options="=none" cgi=1]
-						</td>
-						<td>
-					Selector (if any)
-						</td>
-					</tr>
-				</table>
-                <input type=checkbox name="qmenu_even_large" value=1> Override, build even if large &nbsp;
-                <input type=submit value=Go>
-                </form>
-[/tabbed-panel]
-[/tabbed-display]
-	</td>
-</tr>
+<span class=cmessage>[warnings auto=1]</span>
+[error all=1 text="<ul class=cerror><li>%s</ul>" joiner="<li>"]
 
 <script language="JavaScript1.2">
-	var lines = new Array;
-	var initialized = 0;
-	var no_alert = 0;
-	var tree_mode = 0;
-	var extended;
-	var extra = new Array;
-	var label = new Array;
-	var meta = new Array;
-	var help = new Array;
-	var widget = new Array;
-	var ltitle = new Array;
-	var emodes;
-	var evalues;
-	var image_dir = '[image dir-only=1 ui=1 secure="__UI_SECURE__"]';
-	var empty_img    = image_dir + 'box_empty.gif';
-	var up_img       = image_dir + 'up.gif';
-	var down_img     = image_dir + 'down.gif';
-	var full_img     = image_dir + 'box_checked.gif';
-	var left_img     = image_dir + 'left.gif';
-	var right_img    = image_dir + 'right.gif';
-	var forward_img  = image_dir + 'forward.gif';
-	var transfer_img = image_dir + 'transfer.gif';
+var lines = new Array;
+var toggle = new Array;
+var initialized = 0;
+var no_alert = 0;
+var tree_mode = 0;
+var extended;
+var extra = new Array;
+var label = new Array;
+var meta = new Array;
+var help = new Array;
+var widget = new Array;
+var ltitle = new Array;
+var emodes;
+var evalues;
+var image_dir = '[image dir-only=1 ui=1 secure="__UI_SECURE__"]';
+var empty_img    = image_dir + 'box_empty.gif';
+var up_img       = image_dir + 'up.gif';
+var down_img     = image_dir + 'down.gif';
+var full_img     = image_dir + 'box_checked.gif';
+var left_img     = image_dir + 'left.gif';
+var right_img    = image_dir + 'right.gif';
+var plus_img     = image_dir + 'tplus.gif';
+var minus_img     = image_dir + 'tminus.gif';
+var leaf_img     = image_dir + 'bg.gif';
+var forward_img  = image_dir + 'forward.gif';
+var transfer_img = image_dir + 'transfer.gif';
+
+var plus_title = ' title="open tree branch" ';
+var minus_title = ' title="close tree branch" ';
+var up_title = ' title="Move checked tree branch or individual item up" ';
+var down_title = ' title="Move checked tree branch or individual item down" ';
+var left_title = ' title="move item (or items from here to checked item) left" ';
+var right_title = ' title="move item (or items from here to checked item) right" ';
+var transfer_title = ' title="load item into editor" ';
+var forward_title = ' title="load item into editor" ';
 
 [perl reparse=0]
-	my @out;
-	my $i = 0;
-	
-	$metabase ||= 'icmenu';
-	for(@menufields) {
-		push @out, "    var \U$_\E = $i;";
-		DOMETA: {
-			last DOMETA if $required{$_} or $_ eq 'code';
-			my $metaname = "${metabase}::$_";
-			my $mrecord = $Tag->meta_record($metaname)
-				or last DOMETA;
-			my $lab;
-			my $help;
-			if($lab = $mrecord->{label}) {
-				push @out, "    label[$i] = " . $Tag->jsq($lab) . ';';
-			}
-			if($help = $mrecord->{help}) {
-				$help = '<span style="font-size: 12pt;">' .
-						'<u>' . "$lab " . "($_)" . '</u><br>' . $help .
-						'</span>';
-				$help = $Tag->filter('encode_entities', $help);
-				push @out, "    help[$i] = " . $Tag->jsq($help) . ';';
-			}
-			if( defined $Values->{ui_meta_force} && $Values->{ui_meta_force}
-				or $Variable->{UI_META_LINK}
-			   )
-			{
-				my $u = $Tag->page({ href => '__UI_BASE__/flex_editor',
-									form => qq(
-										ui_meta_view=metaconfig
-										item_id=$metaname
-									) });
-				push @out, "    meta[$i] = " . $Tag->jsq($u . 'meta</a>');
-			}
-			if(my $type = $mrecord->{type}) {
-				$mrecord->{name} = "ext_$_";
-				$mrecord->{extra} = qq{onChange="form_changed(1)"};
-				my $wid = $Tag->display( {
-										meta => $mrecord,
-										override => 1,
-										default => '',
-										} );
-				push @out, "    widget[$i] = " . $Tag->jsq($wid) . ';';
-			}
-		}
-		$i++;
-	}
+my @out;
+my $i = 0;
 
-	for (@suggested) {
-		push @out, "    var \U$_;";
+$metabase ||= 'icmenu';
+for(@menufields) {
+	push @out, "    var \U$_\E = $i;";
+	DOMETA: {
+		last DOMETA if $required{$_} or $_ eq 'code';
+		my $metaname = "${metabase}::$_";
+		my $mrecord = $Tag->meta_record($metaname)
+			or last DOMETA;
+		my $lab;
+		my $help;
+		if($lab = $mrecord->{label}) {
+			push @out, "    label[$i] = " . $Tag->jsq($lab) . ';';
+		}
+		if($help = $mrecord->{help}) {
+			$help = '<span style="font-size: 12pt;">' .
+					'<u>' . "$lab " . "($_)" . '</u><br>' . $help .
+					'</span>';
+			$help = $Tag->filter('encode_entities', $help);
+			push @out, "    help[$i] = " . $Tag->jsq($help) . ';';
+		}
+		if( defined $Values->{ui_meta_force} && $Values->{ui_meta_force}
+			or $Variable->{UI_META_LINK}
+		   )
+		{
+			my $u = $Tag->page({ href => '__UI_BASE__/flex_editor',
+								form => qq(
+									ui_meta_view=metaconfig
+									item_id=$metaname
+								) });
+			push @out, "    meta[$i] = " . $Tag->jsq($u . 'meta</a>');
+		}
+		if(my $type = $mrecord->{type}) {
+			$mrecord->{name} = "ext_$_";
+			$mrecord->{extra} = qq{onChange="form_changed(1)"};
+			my $wid = $Tag->display( {
+									meta => $mrecord,
+									override => 1,
+									default => '',
+									} );
+			push @out, "    widget[$i] = " . $Tag->jsq($wid) . ';';
+		}
 	}
-
-	$i = scalar(@menufields);
-	push @out, "\tvar CHECK = $i;";
 	$i++;
-	push @out, "\tvar MSG = $i;";
+}
+
+for (@suggested) {
+	push @out, "    var \U$_;";
+}
 
-	push @out, "\tlines[0] = ['" . join("', '", @menufields) . "'];";
-	return join "\n", @out;
+$i = scalar(@menufields);
+push @out, "\tvar CHECK = $i;";
+$i++;
+push @out, "\tvar MSG = $i;";
+
+push @out, "\tlines[0] = ['" . join("', '", @menufields) . "'];";
+return join "\n", @out;
 [/perl]
 
 [restrict enable="perl calc scratch loop image area" log=none]
 [loop head-skip=1 lr=1 list="[scratch qmenu_data]"][loop-sub jsline]
 sub {
-	$loopname = shift;
-	my $row = shift;
-	$loopinc++;
+$loopname = shift;
+my $row = shift;
+$loopinc++;
 
-	while(@$row < @menufields) {
-		push @$row, '';
-	}
+while(@$row < @menufields) {
+	push @$row, '';
+}
 
-	if($CGI->{remap}) {
-		my $tmp = $row->[$menu_fh{mgroup}];
-		$row->[$menu_fh{mgroup}] = $row->[$menu_fh{msort}];
-		$row->[$menu_fh{msort}] = $tmp;
-	}
+if($CGI->{remap}) {
+	my $tmp = $row->[$menu_fh{mgroup}];
+	$row->[$menu_fh{mgroup}] = $row->[$menu_fh{msort}];
+	$row->[$menu_fh{msort}] = $tmp;
+}
 
-	my $i = 0;
-	for(@$row) {
-		my $foundit = '';
-		if($_ eq '0') {
-			# Do nothing
-		}
-		elsif(/^[1-9](\d*\.)?\d*$/) {
-			# Do nothing
-		}
-		elsif(! length($_) and exists $menuinit{$menufields[$i]}) {
-			$_ = $menuinit{$menufields[$i]};
-		}
-		elsif($_ !~ /'/) {
-			s/\r/\\r/g;
-			$_ = "'$_'";
+my $i = 0;
+for(@$row) {
+	my $foundit = '';
+	if($_ eq '0') {
+		# Do nothing
+	}
+	elsif(/^[1-9](\d*\.)?\d*$/) {
+		# Do nothing
+	}
+	elsif(! length($_) and exists $menuinit{$menufields[$i]}) {
+		$_ = $menuinit{$menufields[$i]};
+	}
+	elsif($_ !~ /'/) {
+		s/\r/\\r/g;
+		$_ = "'$_'";
+	}
+	elsif($_ !~ /"/) {
+		s/\r/\\r/g;
+		$_ = qq{"$_"};
+	}
+	else {
+		if(s/^\s*{\s+//) {
+			s/(,?\s*\}\s*)$//;
+			$foundit = 1;
+		}
+		s/\\'/-_ESC_QUOTE_-/g;
+		s/'/\\'/g;
+		s/\r+$/' + "\\r"/g;
+		s/\r/' + "\\r" + '/g;
+		s/-_ESC_QUOTE_-/\\\\\\'/g;
+		if($foundit) {
+			$_ = "{" . $_ . "}";
 		}
-		elsif($_ !~ /"/) {
-			s/\r/\\r/g;
-			$_ = qq{"$_"};
-		}
-		else {
-			if(s/^\s*{\s+//) {
-				s/(,?\s*\}\s*)$//;
-				$foundit = 1;
-			}
-			s/\\'/-_ESC_QUOTE_-/g;
-			s/'/\\'/g;
-			s/\r+$/' + "\\r"/g;
-			s/\r/' + "\\r" + '/g;
-			s/-_ESC_QUOTE_-/\\\\\\'/g;
-			if($foundit) {
-				$_ = "{" . $_ . "}";
-			}
-			$_ = qq{'$_'};
-		}
-		$i++;
+		$_ = qq{'$_'};
 	}
-	my $line = "$loopname\[" . $loopinc  . "] = [" . join(", ", @$row) . "];";
+	$i++;
+}
+my $line = "$loopname\[" . $loopinc  . "] = [" . join(", ", @$row) . "];";
 #Debug("Final line=$line");
-	return $line;
+return $line;
 }
 [/loop-sub][loop-exec jsline]lines[/loop-exec]
 [/loop]
 [calc]
-	$loopinc++;
-	$Scratch->{lastfull} = $loopinc;
-	my $stop = $loopinc + 50;
-	my @out;
-	for(; $loopinc < $stop; $loopinc++) {
-		# do nothing
-	}
-	$Scratch->{loopinc} = $loopinc - 1;
-	return;
+$loopinc++;
+$Scratch->{lastfull} = $loopinc;
+my $stop = $loopinc + 50;
+my @out;
+for(; $loopinc < $stop; $loopinc++) {
+	# do nothing
+}
+$Scratch->{loopinc} = $loopinc - 1;
+return;
 [/calc]
 
 
-	var is_form_changed = 0;
-	var checkcur = 0;
-	var form;
+var is_form_changed = 0;
+var checkcur = 0;
+var form;
+
+function form_changed (is) {
+	is_form_unpublished = 1;
+	if(is == undefined) 
+		return is_form_changed;
 
-	function form_changed (is) {
-		if(is == undefined) 
-			return is_form_changed;
+	is_form_changed = is;
+
+	set_save_buttons(is_form_changed);
+}
 
-		is_form_changed = is;
+function check_publish () {
 
-		set_save_buttons(is_form_changed);
+	if(is_form_unpublished == 0) {
+		return true;
 	}
 
-	function check_change (wid) {
+	if( confirm("Menu has changed and not been published. Continue?") ) {
+		return true;
+	}
 
-		form.cancelsubmit.value = wid == undefined ? 0 : 1;
+	return false;
+}
 
-		if(form_changed() == 0) {
-			form.cancelsubmit.value = '';
-			return true;
-		}
+function check_change (wid) {
 
-		if( confirm("Form has changed and not been saved. Continue?") ) {
-			form.cancelsubmit.value = '';
-			return true;
-		}
+	form.cancelsubmit.value = wid == undefined ? 0 : 1;
 
-		return false;
+	if(form_changed() == 0) {
+		form.cancelsubmit.value = '';
+		return true;
 	}
 
-	function set_checked_buttons (enab) {
-		if(enab == undefined) 
-			enab = 0;
-		var dis;
-		var vis;
-		var weight;
-		var f = document.qmenuform;
-		if(enab == 0) {
-			dis = 1;
-			vis = 'Hidden';
-			weight = 'normal';
-			f.insbutton.value = "Append menu item";
-		}
-		else {
-			dis = 0;
-			vis = 'Visible';
-			weight = 'bold';
-			f.insbutton.value = "Insert menu item";
-		}
-		var buttons = [ f.delbutton, f.upbutton, f.downbutton,
-						f.loadbutton, f.copybutton ];
+	if( confirm("Form has changed and not been saved. Continue?") ) {
+		form.cancelsubmit.value = '';
+		return true;
+	}
+
+	return false;
+}
+
+function set_checked_buttons (enab) {
+	if(enab == undefined) 
+		enab = 0;
+	var dis;
+	var vis;
+	var weight;
+	var f = document.qmenuform;
+	if(enab == 0) {
+		dis = 1;
+		vis = 'Hidden';
+		weight = 'normal';
+		f.insbutton.value = "Append menu item";
+	}
+	else {
+		dis = 0;
+		vis = 'Visible';
+		weight = 'bold';
+		f.insbutton.value = "Insert menu item";
+	}
+	var singles = [ f.delbutton, f.upbutton, f.downbutton ];
+	var buttons = [ singles, f.loadbutton, f.copybutton ];
+	var j;
+	for ( j = 0; j < buttons.length; j++) {
+		var ary = buttons[j];
 		var i;
-		for( i = 0; i < buttons.length; i++) {
-			var el = buttons[i];
+		for( i = 0; i < ary.length; i++) {
+			var el = ary[i];
 			if(el != undefined) {
 				el.disabled			= dis;
 				el.style.visibility	= vis;
 				el.style.fontWeight	= weight;
 			}
 		}
-		return;
 	}
+	return;
+}
 
-	function set_save_buttons (enab) {
-		if(enab == undefined) 
-			enab = 0;
-		var color;
-		var weight;
-		if(enab == 0) {
-			color = '#666666';
-			weight = 'normal';
-		}
-		else {
-			color = '#000000';
-			weight = 'bold';
-		}
-		var f = document.qmenuform;
-		var buttons = [ f.savebutton ];
-		var i;
-		for( i = 0; i < buttons.length; i++) {
-			var el = buttons[i];
-			if(el != undefined) {
-				el.style.color			= color;
-				el.style.fontWeight	= weight;
-			}
+function set_save_buttons (enab) {
+	if(enab == undefined) 
+		enab = 0;
+	var color;
+	var weight;
+	if(enab == 0) {
+		color = '#666666';
+		weight = 'normal';
+	}
+	else {
+		color = '#000000';
+		weight = 'bold';
+	}
+	var f = document.qmenuform;
+	var buttons = f.savebutton;
+	var i;
+	for( i = 0; i < buttons.length; i++) {
+		var el = buttons[i];
+		if(el != undefined) {
+			el.style.color			= color;
+			el.style.fontWeight	= weight;
 		}
-		return;
 	}
+	return;
+}
 
 
-	function checkit(idx) {
-		var nam = 'img' + idx;
-		var i_el = document.getElementById(nam);
-		var l = lines[idx];
-
-		if(l != undefined && l[CHECK] == 1) {
-			checkcur = l[CHECK] = 0;
-			i_el.src = empty_img;
-			set_checked_buttons(0);
-			return void(0);
-		}
-		var i;
-		var uncheck = new Array;
-		var j = 0;
-		for(i = 1; i < lines.length; i++)  {
-			if(lines[i][CHECK] == 1) {
-				uncheck[j] = i;
-				j++;
-			}
+function checkit(idx) {
+	var nam = 'img' + idx;
+	var i_el = document.getElementById(nam);
+	var l = lines[idx];
+
+	if(l != undefined && l[CHECK] == 1) {
+		checkcur = l[CHECK] = 0;
+		i_el.src = empty_img;
+		set_checked_buttons(0);
+		return void(0);
+	}
+	var i;
+	var uncheck = new Array;
+	var j = 0;
+	for(i = 1; i < lines.length; i++)  {
+		if(lines[i][CHECK] == 1) {
+			uncheck[j] = i;
+			j++;
 		}
+	}
 
-		for(i = 0; i < uncheck.length; i++) {
-			var n = uncheck[i];
-			lines[n][CHECK] = 0;
-			var el = document.getElementById('img' + n);
-			el.src = empty_img;
-		}
+	for(i = 0; i < uncheck.length; i++) {
+		var n = uncheck[i];
+		lines[n][CHECK] = 0;
+		var el = document.getElementById('img' + n);
+		el.src = empty_img;
+	}
+
+	checkcur = idx;
+	lines[idx][CHECK] = 1;
+	i_el.src = full_img;
+	set_checked_buttons(1);
+	// alert("checkcur=" + checkcur);
+	return void(0);
+}
 
-		checkcur = idx;
-		lines[idx][CHECK] = 1;
-		i_el.src = full_img;
-		set_checked_buttons(1);
-		// alert("checkcur=" + checkcur);
-		return void(0);
+function escapeParams (parms) {
+	// alert("parms=" + parms);
+	parms = parms.replace(/[\r\n]+/g, "\n");
+	parms = parms.replace(/^\s+/, "");
+	parms = parms.replace(/\s+$/, "");
+	parms = parms.replace(/=/g, "-_EQUAL_X_-");
+	parms = parms.replace(/\n/g, "-_NEWLINE_X_-");
+	parms = escape(parms);
+	parms = parms.replace(/-_NEWLINE_X_-/g, '@@UrlJoiner@@');
+	parms = parms.replace(/-_EQUAL_X_-/g, '=');
+	// alert("parms=" + parms);
+	return parms;
+}
+
+function unescapeParams (parms) {
+	// alert("parms=" + parms);
+	parms = parms.replace(/=/g, "-_EQUAL_X_-");
+	parms = parms.replace(/@@UrlJoiner@@/g, "-_NEWLINE_X_-");
+	parms = unescape(parms);
+	parms = parms.replace(/-_NEWLINE_X_-/g, "\n");
+	parms = parms.replace(/-_EQUAL_X_-/g, '=');
+	// alert("parms=" + parms);
+	return parms;
+}
+
+var page_rep = '';
+var params_rep = '';
+var name_rep = '';
+var showlevel = 1;
+var toggle_bg = 'FFFFFF';
+var collapseit;
+var explodeit;
+
+function toggleShowlevel () {
+	if(showlevel != 1) {
+		showlevel = 1;
+	}
+	else {
+		showlevel = 0;
+	}
+
+	if(tree_mode == 1) {
+		for(var i = 1; i < lines.length; i++)
+			rewrite_tree(i);
+	}
+	else {
+		showlevel = 0;
 	}
+	form.showlevel.checked = showlevel;
+}
 
-    function escapeParams (parms) {
-		// alert("parms=" + parms);
-		parms = parms.replace(/[\r\n]+/g, "\n");
-		parms = parms.replace(/^\s+/, "");
-		parms = parms.replace(/\s+$/, "");
-		parms = parms.replace(/=/g, "-_EQUAL_X_-");
-		parms = parms.replace(/\n/g, "-_NEWLINE_X_-");
-		parms = escape(parms);
-		parms = parms.replace(/-_NEWLINE_X_-/g, '@@UrlJoiner@@');
-		parms = parms.replace(/-_EQUAL_X_-/g, '=');
-		// alert("parms=" + parms);
-		return parms;
-	}
-
-    function unescapeParams (parms) {
-		// alert("parms=" + parms);
-		parms = parms.replace(/=/g, "-_EQUAL_X_-");
-		parms = parms.replace(/@@UrlJoiner@@/g, "-_NEWLINE_X_-");
-		parms = unescape(parms);
-		parms = parms.replace(/-_NEWLINE_X_-/g, "\n");
-		parms = parms.replace(/-_EQUAL_X_-/g, '=');
-		// alert("parms=" + parms);
-		return parms;
-	}
-
-	var page_rep = '';
-	var params_rep = '';
-	var name_rep = '';
-	var showlevel = 1;
-	
-	function toggleShowlevel () {
-	    if(showlevel != 1) {
-			showlevel = 1;
-		}
-		else {
-			showlevel = 0;
-		}
+function reset_collapse () {
+		if(explodeit != undefined) 
+			explodeit.checked = false;
+		if(collapseit != undefined) 
+			collapseit.checked = false;
+}
 
-		if(tree_mode == 1) {
-			for(var i = 1; i < lines.length; i++)
-				rewrite_tree(i);
-		}
-		else {
-			showlevel = 0;
+function toggleItem (idx, formel, explode) {
+	toggle = new Array;
+	toggle_bg = 'FFFFFF';
+	reset_collapse();
+
+	if(formel != undefined) {
+		if(explode == 1) 
+			explodeit = formel;
+		else
+			collapseit = formel;
+
+		formel.checked = true;
+		idx = 1;
+		if(explode != 1)
+			explode = 0;
+		for(var i = 1; i < lines.length; i++) {
+			lines[ i ][0] = explode;
 		}
-		form.showlevel.checked = showlevel;
 	}
-	
-	function toggleName (form,val) {
-		if(val != undefined) {
-			val = val.replace(/\s+$/, '');
-			if (val == '') {
-				form.label.checked = 1;
-			}
-			else {
-				form.label.checked = 0;
-			}
+	else {
+		if(lines[idx] == undefined)
 			return;
-		}
+		if(lines[idx][0] == 0)
+			lines[idx][0] = 1;
+		else 
+			lines[idx][0] = 0;
+	}
+	for(var i = 1; i < lines.length; i++)
+		rewrite_tree(i, 1);
+}
 
-		if(form.label.checked) {
-			page_rep = form.page.value;
-			params_rep = form.params.value;
-			form.page.value = '';
-			form.params.value = '';
+function toggleName (form,val) {
+	if(val != undefined) {
+		val = val.replace(/\s+$/, '');
+		if (val == '') {
+			form.label.checked = 1;
 		}
 		else {
-			form.page.value = page_rep;
-			form.params.value = params_rep;
+			form.label.checked = 0;
 		}
-		set_save_buttons(form_changed);
 		return;
 	}
 
-	function toggleBreak (form,val) {
-		if(val != undefined) {
-			val = val.replace(/\s+$/, '');
-			if (val == '') {
-				form.breakline.checked = 1;
-			}
-			else {
-				form.breakline.checked = 0;
-			}
-			return;
-		}
-			
-		if(form.breakline.checked) {
-			form.label.checked = 0;
-			toggleName(form);
-			form.label.checked = 1;
-			toggleName(form);
-			name_rep = form.name.value;
-			form.name.value = '';
+	if(form.label.checked) {
+		page_rep = form.page.value;
+		params_rep = form.params.value;
+		form.page.value = '';
+		form.params.value = '';
+	}
+	else {
+		form.page.value = page_rep;
+		form.params.value = params_rep;
+	}
+	set_save_buttons(form_changed);
+	return;
+}
+
+function toggleBreak (form,val) {
+	if(val != undefined) {
+		val = val.replace(/\s+$/, '');
+		if (val == '') {
+			form.breakline.checked = 1;
 		}
 		else {
-			form.name.value = name_rep;
+			form.breakline.checked = 0;
 		}
-		set_save_buttons(form_changed);
 		return;
 	}
+		
+	if(form.breakline.checked) {
+		form.label.checked = 0;
+		toggleName(form);
+		form.label.checked = 1;
+		toggleName(form);
+		name_rep = form.name.value;
+		form.name.value = '';
+	}
+	else {
+		form.name.value = name_rep;
+	}
+	set_save_buttons(form_changed);
+	return;
+}
+
+function ext_name (str) {
+	var pos = str.indexOf('_') + 1;
+	if(pos < 1) 
+		return '';
+	str = str.substr(pos);
+	return str;
+}
 
-	function ext_name (str) {
-		var pos = str.indexOf('_') + 1;
-		if(pos < 1) 
-			return '';
-		str = str.substr(pos);
-		return str;
+function show_title (idx, msg) {
+	if(document.qmenuform.show_info == undefined ||
+		document.qmenuform.show_info.checked != true)
+		return;
+	var el = document.getElementById('titlebox');
+	if(el == undefined) 
+		return;
+	if(msg == undefined) 
+		msg = ltitle[idx];
+	if(idx == 0 || msg.length == 0) {
+		el.style.visibility = 'Hidden';
+		el.style.display = 'none';
+	}
+	else {
+		el.innerHTML = msg;
+		el.style.visibility = 'Visible';
+		el.style.display = 'block';
 	}
+}
 
-	function show_title (idx, msg) {
-	    if(document.qmenuform.show_info == undefined ||
-			document.qmenuform.show_info.checked != true)
-			return;
-		var el = document.getElementById('titlebox');
-		if(el == undefined) 
-			return;
-		if(msg == undefined) 
-			msg = ltitle[idx];
-		if(idx == 0 || msg.length == 0) {
-			el.style.visibility = 'Hidden';
-			el.style.display = 'none';
+function set_mode (mode) {
+	if(mode == 'toggle') {
+		if(tree_mode == 0) {
+			mode = 'tree';
 		}
 		else {
-			el.innerHTML = msg;
-			el.style.visibility = 'Visible';
-			el.style.display = 'block';
+			mode = 'simple';
 		}
 	}
-
-	function set_mode (mode) {
-		if(mode == 'toggle') {
-			if(tree_mode == 0) {
-				mode = 'tree';
-			}
-			else {
-				mode = 'simple';
-			}
-		}
-		var f = document.qmenuform;
-		var el = f.treebutton;
-		var ch = f.qmenu_tree;
-		var cht = f.qmenu_write_tree;
-		var tel = document.getElementById('treebox');
+	var f = document.qmenuform;
+	var el = f.treebutton;
+	var ch = f.qmenu_tree;
+	var cht = f.qmenu_write_tree;
+	var tel = document.getElementById('treebox');
 // alert("change mode, el=" + el);
-		if(mode == 'tree') {
-			tree_mode = 1;
-			lines[1][MSORT] = 0;
-			el.value = "Set simple mode";
-			ch.checked = 1;
-			cht.checked = 1;
-			tel.style.visibility = 'Visible';
-		}
-		else {
-			tree_mode = 0;
-			lines[1][MSORT] = 'x';
-			el.value = "Set tree mode";
-			ch.checked = 0;
-			cht.checked = 0;
-			tel.style.visibility = 'Hidden';
-		}
-		var i;
-		for(i = 1; i < lines.length; i++) {
-			rewrite(i);
-		}
-		return;
+	if(mode == 'tree') {
+		tree_mode = 1;
+		toggleItem(0, form.collapse, 0);
+		lines[1][MSORT] = 0;
+		el.value = "Set simple mode";
+		ch.checked = 1;
+		cht.checked = 1;
+		tel.style.visibility = 'Visible';
+		tel.style.display = 'block';
+	}
+	else {
+		toggleItem(0, form.explode, 1);
+		tree_mode = 0;
+		lines[1][MSORT] = 'x';
+		el.value = "Set tree mode";
+		ch.checked = 0;
+		cht.checked = 0;
+		tel.style.visibility = 'Hidden';
+		tel.style.display = 'none';
+	}
+	var i;
+	for(i = 1; i < lines.length; i++) {
+		rewrite(i);
 	}
+	return;
+}
 
-	function rewrite_tree (idx) {
-		var out = '';
+function rewrite_tree (idx, tog) {
+	var out = '';
 
-		var l = lines[idx];
-			
-		if(l != undefined && idx < lines.length) {
-			// out =	idx + 
-			out = ' <a href="javascript:checkit(' + idx + ');void(0)"><img ';
-			if(l[CHECK] == 1) {
-				out = out + 'src="' + checked_img + '" ';
-			}
-			else {
-				out = out + 'src="' + empty_img + '" ';
-			}
+	var l = lines[idx];
+	var next = lines[idx + 1];
 
-			var grp = l[MSORT] + '';
-// alert("rewrite grp=" + grp);
-			if(! grp.match(/^\d+$/) ) {
-				l[MSORT] = 0;
-			}
-			out = out + 'border=0 align=absbottom ' +
-					'id="img' + idx + '"></A>' + "\n" +
-					'<a href="javascript:motion(' + idx + ", 'left');void(0)" +
-					'"><img src="' + left_img + '" border=0 align=absbottom></A>' + "\n" +
-					'<a href="javascript:motion(' + idx + ", 'right');void(0)" +
-					'"><img src="' + right_img + '" border=0 align=absbottom></A>' + "\n" +
-					'<a href="javascript:loadForm(' + idx + ");void(0)" +
-					'"><img src="' + forward_img + '" border=0 align=absbottom></A>' + "\n";
-			for(i = 0; i < l[MSORT]; i++)
-				out = out + '&nbsp;&nbsp;&nbsp;'; 
-			if(showlevel == 1 && l[MSORT] > 0) {
-				out = out + l[MSORT] + '&nbsp;'
-			}
-
-			var nme = l[NAME];
-			if(nme != undefined) {
-				nme = nme.replace(/</g, '&lt;');
-			}
-			if(l[PAGE]) {
-				var i;
-				out = out + '<a href="javascript:loadForm(' +
-						idx + ');void(0)"' +
-						' onDblClick="checkit(' + idx + ')"' +
-						' title="' + l[PAGE];
-				if(l[FORM])
-					out = out + '?' + l[FORM];
-				if(l[DESCRIPTION])
-					out = out + " : " + l[DESCRIPTION];
-				out = out + '">' + nme + '</a>';
-			}
-			else {
-				out = out + '<b>' + nme + '</b>';
-			}
+	var children = 0;
 
-			if(l[MSG]) {
-				out = out + ' <i style="font-size: 8pt;">(' + l[MSG] + ')</i>';
-			}
+		
+	if(l != undefined && idx < lines.length) {
+		// out =	idx + 
+		if(next != undefined && next[MSORT] > l[MSORT] ) 
+			children = 1;
+		out = ' <a href="javascript:checkit(' + idx + ');void(0)"><img ';
+		if(l[CHECK] == 1) {
+			out = out + 'src="' + full_img + '" ';
+		}
+		else {
+			out = out + 'src="' + empty_img + '" ';
 		}
 
-		var el = document.getElementById('box' + idx);
-// alert("rewriting, el=" + el);
-		el.innerHTML = out;
-		if(l != undefined && l[CHECK] == 1)
-			checkcur = idx;
-		// alert("idx=" + idx + ", writing " + out);
-		if(lines.length > 25) 
-			document.getElementById('scrollbox').style.overflow = 'scroll';
-		if(lines.length < 25) 
-			document.getElementById('scrollbox').style.overflow = 'visible';
-		return;
-	}
+		var grp = l[MSORT] + '';
+// alert("rewrite grp=" + grp);
+		if(! grp.match(/^\d+$/) ) {
+			l[MSORT] = 0;
+		}
 
-	function rewrite (idx) {
-		if(tree_mode == 1)
-			return rewrite_tree(idx);
-
-		var out = '';
-
-		var l = lines[idx];
-			
-		if(l != undefined && idx < lines.length) {
-			// out =	idx + 
-			out = ' <a href="javascript:checkit(' + idx + ');void(0)"><img ';
-			if(l[CHECK] == 1) {
-				out = out + 'src="' + checked_img + '" ';
-			}
-			else {
-				out = out + 'src="' + empty_img + '" ';
-			}
+		toggle[l[MSORT]] = l[0];
 
-			var linktitle = '';
-			var lzero = lines[0];
-			for(var k = 1; k < lzero.length; k++) {
-				var lstring = l[k] + '';
-				if(lstring.length > 0)
-					linktitle = linktitle + '<b>' + lzero[k] + ':</b> ' + lstring + "<br>";
-			}
-			out = out + 'border=0 align=absbottom ' +
-					'id="img' + idx + '"></A>' + "\n" +
-					'<a href="javascript:motion(' + idx + ", 'up');void(0)" +
-					'"><img src="' + up_img + '" border=0 align=absbottom></A>' + "\n" +
-					'<a href="javascript:motion(' + idx + ", 'down');void(0)" +
-					'"><img src="' + down_img + '" border=0 align=absbottom></A>' + "\n" +
-					'<a href="javascript:loadForm(' + idx + ");void(0)" +
-					'"><img src="' + transfer_img + '" border=0 align=absbottom></A>' + "\n";
-
-			var nme = l[NAME];
-			if(nme.length > 30) {
-				nme=nme.substr(0,27) + '...';
-			}
-			if(l[PAGE]) {
-				out = out + '&nbsp;&nbsp;&nbsp;<a href="javascript:loadForm(' +
-						idx + ');void(0)"' +
-						' onDblClick="checkit(' + idx + ')"' +
-						' onMouseOver="show_title(' + idx + ')"' +
-						' onMouseOut="show_title(0)"' +
-						' title="' + l[PAGE];
-				if(l[FORM])
-					out = out + '?' + l[FORM];
-				out = out + '">' + nme + '</a>';
+		out = out + 'border=0 align=absbottom ' +
+				'id="img' + idx + '"></A>' + "\n" +
+				'<a href="javascript:motion(' + idx + ", 'up');void(0)" +
+				'"><img src="' + up_img + '"' + up_title + ' border=0 align=absbottom></A>' + "\n" +
+				'<a href="javascript:motion(' + idx + ", 'down');void(0)" +
+				'"><img src="' + down_img + '"' + down_title + ' border=0 align=absbottom></A>' + "\n" +
+				'<a href="javascript:motion(' + idx + ", 'left');void(0)" +
+				'"><img src="' + left_img + '"' + left_title + ' border=0 align=absbottom></A>' + "\n" +
+				'<a href="javascript:motion(' + idx + ", 'right');void(0)" +
+				'"><img src="' + right_img + '"' + right_title + ' border=0 align=absbottom></A>' + "\n" +
+				'<a href="javascript:loadForm(' + idx + ");void(0)" +
+				'"><img src="' + forward_img + '"' + forward_title + ' border=0 align=absbottom></A>' + "\n";
+		for(i = 0; i < l[MSORT]; i++)
+			out = out + '&nbsp;&nbsp;&nbsp;'; 
+		if(children == 1) {
+			var img;
+			if( l[0] != 0 ) {
+				img = minus_img;
+				htitle = minus_title;
 			}
 			else {
-				out = out + '<span style="font-weight: bold"' +
-						' onMouseOver="show_title(' + idx + ')"' +
-						' onMouseOut="show_title(0)"' + '>' +
-						nme + '</span>';
+				img = plus_img;
+				htitle = plus_title;
 			}
+			out = out + 
+				'<a href="javascript:toggleItem(' + idx + ");void(0)" +
+				'"' + htitle + '><img border=0 src="' + img + '"></A>' + "\n";
+		}
+		else {
+			out += '<img border=0 height=16 width=16 src="' + leaf_img + '">';
+		}
+		if(showlevel == 1 && l[MSORT] > 0) {
+			out = out + l[MSORT] + '&nbsp;'
+		}
 
-			if(l[MSG]) {
-				out = out + ' <i style="font-size: 8pt;">(' + l[MSG] + ')</i>';
-			}
+		var nme = l[NAME];
+		if(nme != undefined) {
+			nme = nme.replace(/</g, '&lt;');
+		}
+		if(l[PAGE]) {
+			var i;
+			out = out + '<a href="javascript:loadForm(' +
+					idx + ');void(0)"' +
+					' onDblClick="checkit(' + idx + ')"' +
+					' title="' + l[PAGE];
+			if(l[FORM])
+				out = out + '?' + l[FORM];
+			if(l[DESCRIPTION])
+				out = out + " : " + l[DESCRIPTION];
+			out = out + '">' + nme + '</a>';
+		}
+		else {
+			out = out + '<b>' + nme + '</b>';
+		}
 
-			// Set box title array
-			ltitle[idx] = linktitle.replace(/\r/g, '<br>');
+		if(l[MSG]) {
+			out = out + ' <i class=cmessage style="font-size: 8pt;">(' + l[MSG] + ')</i>';
 		}
+	}
 
-		var el = document.getElementById('box' + idx);
-// alert("rewriting idx=" + idx + ", el=" + el);
-		el.innerHTML = out;
-		if(l != undefined && l[CHECK] == 1)
-			checkcur = idx;
-		// alert("idx=" + idx + ", writing " + out);
-		if(lines.length > 25) 
-			document.getElementById('scrollbox').style.overflow = 'scroll';
-		if(lines.length < 25) 
-			document.getElementById('scrollbox').style.overflow = 'visible';
-		return;
+	var el = document.getElementById('box' + idx);
+// alert("rewriting, el=" + el);
+	
+	if(tog == 1) {
+		for(var n = 0; n < l[MSORT]; n++) {
+			if(toggle[n] == 0)
+				out = '';
+		}
+		if(out != '') {
+			el.style.background = '#' + toggle_bg;
+			el.style.display = 'block';
+			if(toggle_bg == 'FFFFFF')
+				toggle_bg = 'EEEEEE';
+			else 
+				toggle_bg = 'FFFFFF';
+		}
+		else {
+			el.style.background = '#FFFFFF';
+			el.style.display = 'none';
+		}
 	}
+	el.innerHTML = out;
+
+	if(l != undefined && l[CHECK] == 1)
+		checkcur = idx;
+	// alert("idx=" + idx + ", writing " + out);
+	if(lines.length > 25) 
+		document.getElementById('scrollbox').style.overflow = 'scroll';
+	if(lines.length < 25) 
+		document.getElementById('scrollbox').style.overflow = 'visible';
+	return;
+}
 
-	function delRow (idx) {
+function rewrite (idx) {
+	if(tree_mode == 1)
+		return rewrite_tree(idx);
 
-		if( ! check_change() )
-			return;
+	var out = '';
 
-		zeroForm;
+	var l = lines[idx];
+		
+	if(l != undefined && idx < lines.length) {
+		// out =	idx + 
+		out = ' <a href="javascript:checkit(' + idx + ');void(0)"><img ';
+		if(l[CHECK] == 1) {
+			out = out + 'src="' + full_img + '" ';
+		}
+		else {
+			out = out + 'src="' + empty_img + '" ';
+		}
 
-		if(idx == undefined || idx < 1) {
-			idx = checkcur;
-			if(idx > 0)
-				checkit(idx);
+		var linktitle = '';
+		var lzero = lines[0];
+		for(var k = 1; k < lzero.length; k++) {
+			var lstring = l[k] + '';
+			if(lstring.length > 0)
+				linktitle = linktitle + '<b>' + lzero[k] + ':</b> ' + lstring + "<br>";
+		}
+		out = out + 'border=0 align=absbottom ' +
+				'id="img' + idx + '"></A>' + "\n" +
+				'<a href="javascript:motion(' + idx + ", 'up');void(0)" +
+				'"><img src="' + up_img + '" border=0 align=absbottom></A>' + "\n" +
+				'<a href="javascript:motion(' + idx + ", 'down');void(0)" +
+				'"><img src="' + down_img + '" border=0 align=absbottom></A>' + "\n" +
+				'<a href="javascript:loadForm(' + idx + ");void(0)" +
+				'"><img src="' + transfer_img + '" border=0 align=absbottom></A>' + "\n";
+
+		var nme = l[NAME];
+		if(nme.length > 30) {
+			nme=nme.substr(0,27) + '...';
+		}
+		if(l[PAGE]) {
+			out = out + '&nbsp;&nbsp;&nbsp;<a href="javascript:loadForm(' +
+					idx + ');void(0)"' +
+					' onDblClick="checkit(' + idx + ')"' +
+					' onMouseOver="show_title(' + idx + ')"' +
+					' onMouseOut="show_title(0)"' +
+					' title="' + l[PAGE];
+			if(l[FORM])
+				out = out + '?' + l[FORM];
+			out = out + '">' + nme + '</a>';
 		}
-		if(idx == undefined || idx < 1) {
-			alert("No row selected!");
-			return;
+		else {
+			out = out + '<span style="font-weight: bold"' +
+					' onMouseOver="show_title(' + idx + ')"' +
+					' onMouseOut="show_title(0)"' + '>' +
+					nme + '</span>';
 		}
 
-		var l = lines[idx];
-		if(l == undefined) {
-			alert("deleting non-existent row!");
-			return;
+		if(l[MSG]) {
+			out = out + ' <i class=cmessage style="font-size: 8pt;">(' + l[MSG] + ')</i>';
 		}
 
-		var needs_confirm = l[PAGE].length || l[FORM].length
+		// Set box title array
+		ltitle[idx] = linktitle.replace(/\r/g, '<br>');
+	}
 
-		var i;
-		for(i = 3; i < 8; i++) {
-			if(l[i] != undefined && l[i].length) {
-				needs_confirm = 1;
-				break;
-			}
-		}
-			
-		if(needs_confirm && ! confirm("Delete row " + idx + ", '" + lines[idx][NAME] + "'?") )
-			return;
+	var el = document.getElementById('box' + idx);
+// alert("rewriting idx=" + idx + ", el=" + el);
+	el.innerHTML = out;
+	if(l != undefined && l[CHECK] == 1)
+		checkcur = idx;
+	// alert("idx=" + idx + ", writing " + out);
+	if(lines.length > 25) 
+		document.getElementById('scrollbox').style.overflow = 'scroll';
+	if(lines.length < 25) 
+		document.getElementById('scrollbox').style.overflow = 'visible';
+	return;
+}
 
-		var len  = lines.length;
-		var last = len - 2;
+function delRow (idx) {
 
-		if(tree_mode == 1) {
-			var d = lines[idx + 1];
-			if(l[MSORT] == 0 && d != undefined && d[MSORT] > 0) {
-				motion(idx + 1, 'left');
-			}
-			else {
-				var save = no_alert;
-				no_alert = 1;
-				motion(idx, 'left');
-				no_alert = save;
-			}
-		}
+	if( ! check_change() )
+		return;
 
-		for( i = idx; i <= last; i++) {
-			lines[i] = lines[i+1];
-			rewrite(i);
-		}
-		len--;
-		lines.length   = len;
-		rewrite(len);
-		for(i = idx; i <= len; i++) 
-			rewrite(i);
+	zeroForm;
+
+	if(idx == undefined || idx < 1) {
+		idx = checkcur;
+		if(idx > 0)
+			checkit(idx);
+	}
+	if(idx == undefined || idx < 1) {
+		alert("No row selected!");
 		return;
 	}
 
-	function insRow (idx) {
+	var l = lines[idx];
+	if(l == undefined) {
+		alert("deleting non-existent row!");
+		return;
+	}
 
-		if( ! check_change() )
-			return;
+	var needs_confirm = l[PAGE].length || l[FORM].length
 
-		if(idx == undefined || idx < 1) {
-			idx = checkcur;
-			if (idx > 0)
-				checkit(idx);
+	var i;
+	for(i = 3; i < 8; i++) {
+		if(l[i] != undefined && l[i].length) {
+			needs_confirm = 1;
+			break;
 		}
+	}
+		
+	if(needs_confirm && ! confirm("Delete row " + idx + ", '" + lines[idx][NAME] + "'?") )
+		return;
 
-		if(idx == undefined || idx < 1) {
-			idx = lines.length;
-		}
+	var len  = lines.length;
+	var last = len - 2;
 
-		lines.length = lines.length + 1;
-		var last = lines.length - 1;
-		
-		if(lines[idx] != undefined) {
-			var penult = last - 1;
-			var i;
-			for( i = penult; i >= idx; i--) {
-				lines[i + 1] = lines[i];
-				rewrite(i + 1);
-			}
+	if(tree_mode == 1) {
+		var d = lines[idx + 1];
+		if(l[MSORT] == 0 && d != undefined && d[MSORT] > 0) {
+			motion(idx + 1, 'left');
+		}
+		else {
+			var save = no_alert;
+			no_alert = 1;
+			motion(idx, 'left');
+			no_alert = save;
 		}
+	}
 
-		lines[idx] = new Array;
-		for (i = 0; i < CHECK; i++)
-			lines[idx][i] = '';
-		lines[idx][MSG] = 'NEW';
+	for( i = idx; i <= last; i++) {
+		lines[i] = lines[i+1];
+		rewrite(i);
+	}
+	len--;
+	lines.length   = len;
+	rewrite(len);
+	for(i = idx; i <= len; i++) 
+		rewrite(i);
+	return;
+}
 
-		if(tree_mode == 1) {
-			if(lines[idx - 1] != undefined) {
-				lines[idx][MSORT] = lines[idx-1][MSORT];
-			}
-			else {
-				lines[idx][MSORT] = 0;
-			}
-		}
+function insRow (idx) {
+
+	if( ! check_change() )
+		return;
+
+	if(idx == undefined || idx < 1) {
+		idx = checkcur;
+		if (idx > 0)
+			checkit(idx);
+	}
 
-		rewrite(idx);
+	if(idx == undefined || idx < 1) {
+		idx = lines.length;
+	}
 
-		var ch = [	form.page.value,
-					form.params.value,
-					form.description.value,
-					form.extended.value];
-		var something = 0;
+	lines.length = lines.length + 1;
+	var last = lines.length - 1;
+	
+	if(lines[idx] != undefined) {
+		var penult = last - 1;
 		var i;
-		for(i = 0; i < ch.length; i++) {
-			if(ch[i] != undefined && ch[i].length > 0) {
-				something = 1;
-				break;
-			}
+		for( i = penult; i >= idx; i--) {
+			lines[i + 1] = lines[i];
+			rewrite(i + 1);
 		}
+	}
 
-		form.lineidx.value = idx;
-		if(something > 0 && confirm("Start item out with values from form?")) {
-			saveForm(idx);
+	lines[idx] = new Array;
+	for (i = 0; i < CHECK; i++)
+		lines[idx][i] = '';
+	lines[idx][MSG] = 'NEW';
+
+	if(tree_mode == 1) {
+		if(lines[idx - 1] != undefined) {
+			lines[idx][MSORT] = lines[idx-1][MSORT];
+		}
+		else {
+			lines[idx][MSORT] = 0;
 		}
-		return;
 	}
 
-	function loadForm (idx, msg, zeromsg) {
-		if( ! check_change() )
-			return;
+	rewrite(idx);
 
-		if(idx == undefined || idx <= 0) {
-			idx = checkcur;
-			if (idx <= 0) return;
-			checkit(idx);
+	var ch = [	form.page.value,
+				form.params.value,
+				form.description.value,
+				form.extended.value];
+	var something = 0;
+	var i;
+	for(i = 0; i < ch.length; i++) {
+		if(ch[i] != undefined && ch[i].length > 0) {
+			something = 1;
+			break;
 		}
+	}
 
-		if(msg == undefined)
-			msg = 'loaded'; 
-                            
-		if(zeromsg == undefined)
-			zeromsg = 'loaded';
-
-		var l = lines[idx];
-		// alert("idx=" + idx + "\nl=" + l + "\nform=" + form);
-
-		form.name.value      = name_rep   = l[NAME];
-		form.page.value      = page_rep   = l[PAGE];
-		form.params.value    = params_rep = unescapeParams(l[FORM]);
-		form.description.value            = l[DESCRIPTION];
-		form.mgroup.value                 = l[MGROUP];
-
-		for(var x = 0; x < extra.length; x++) {
-			var el;
-			var en = extra[x];
-			var un = en.toUpperCase();
-			var eidx;
-			eval('eidx = ' + un);
-			eval ('el = form.ext_' + en );
-//			if( x < 2) {
+	form.lineidx.value = idx;
+	if(something > 0 && confirm("Start item out with values from form?")) {
+		saveForm(idx);
+	}
+	return;
+}
+
+function loadForm (idx, msg, zeromsg) {
+	if( ! check_change() )
+		return;
+
+	if(idx == undefined || idx <= 0) {
+		idx = checkcur;
+		if (idx <= 0) return;
+		checkit(idx);
+	}
+
+	if(msg == undefined)
+		msg = 'loaded'; 
+						
+	if(zeromsg == undefined)
+		zeromsg = 'loaded';
+
+	var l = lines[idx];
+	// alert("idx=" + idx + "\nl=" + l + "\nform=" + form);
+
+	form.name.value      = name_rep   = l[NAME];
+	form.page.value      = page_rep   = l[PAGE];
+	form.params.value    = params_rep = unescapeParams(l[FORM]);
+	form.description.value            = l[DESCRIPTION];
+	form.mgroup.value                 = l[MGROUP];
+
+	for(var x = 0; x < extra.length; x++) {
+		var el;
+		var en = extra[x];
+		var un = en.toUpperCase();
+		var eidx;
+		eval('eidx = ' + un);
+		eval ('el = form.ext_' + en );
+//			if( x < 2) {
 // alert('loading extra form value ' + en + '(' + un + '), eidx=' + eidx + ', value=' + l[eidx]);
 //			}
-			if(el == undefined) {
-				alert('bad extra form element: ' + en);
-				continue;
-			}
-			if(el.type == 'select') {
-				for(var j = 0; j < el.length; j++) {
-					if(el.options[j].value == l[eidx]) {
-						el.selectedIndex = j;
-						break;
-					}
+		if(el == undefined) {
+			alert('bad extra form element: ' + en);
+			continue;
+		}
+		if(el.type == 'select') {
+			for(var j = 0; j < el.length; j++) {
+				if(el.options[j].value == l[eidx]) {
+					el.selectedIndex = j;
+					break;
 				}
 			}
-			else {
-				el.value = l[eidx];
-			}
-		}
-
-		if(INACTIVE != undefined) {
-			form.inactive.disabled = 0;
-			form.inactive.checked = l[INACTIVE] ? 1 : 0;
 		}
 		else {
-			form.inactive.disabled = 1;
+			el.value = l[eidx];
 		}
+	}
 
-		if(form.page.value == '') {
-			form.label.checked = 1;
-		}
-		else {
-			form.label.checked = 0;
-		}
-		if(form.name.value == '') {
-			form.breakline.checked = 1;
-		}
-		else {
-			form.breakline.checked = 0;
-		}
-		form.lineidx.value = idx;
+	if(INACTIVE != undefined) {
+		form.inactive.disabled = 0;
+		form.inactive.checked = l[INACTIVE] ? 1 : 0;
+	}
+	else {
+		form.inactive.disabled = 1;
+	}
 
-		var j;
-		for(j = 0; j < lines.length; j++) {
-			if(lines[j] != undefined && lines[j][MSG] == zeromsg) {
-				lines[j][MSG] = '';
-				rewrite(j);
-			}
-		}
-		l[MSG] = msg;
-		rewrite(idx);
-		form_changed(0);
-		mvpan_selectTab(0);
-		return;
+	if(form.page.value == '') {
+		form.label.checked = 1;
+	}
+	else {
+		form.label.checked = 0;
+	}
+	if(form.name.value == '') {
+		form.breakline.checked = 1;
+	}
+	else {
+		form.breakline.checked = 0;
 	}
+	form.lineidx.value = idx;
 
-	function zeroForm (form) {
-		if(form == undefined) {
-			form = document.qmenuform;
+	var j;
+	for(j = 0; j < lines.length; j++) {
+		if(lines[j] != undefined && lines[j][MSG] == zeromsg) {
+			lines[j][MSG] = '';
+			rewrite(j);
 		}
-		form.page.value = '';
-		form.params.value = '';
-		form.name.value = '';
-		form.description.value = '';
-		form.mgroup.value = '';
-		if(EXTENDED != undefined)
-			form.extended.value = '';
-
-		form.inactive.checked = 0;
-		form.breakline.checked = 0;
-		form.label.checked = 0;
-		form.lineidx.value = 0;
+	}
+	l[MSG] = msg;
+	rewrite(idx);
+	form_changed(0);
+	mvpan_selectTab(0);
+	return;
+}
 
-		for(var x = 0; x < extra.length; x++) {
-			var el;
-			var en = extra[x];
-			var un = en.toUpper;
-			eval ('el = form.ext_' + en );
+function zeroForm (form) {
+	if(form == undefined) {
+		form = document.qmenuform;
+	}
+	form.page.value = '';
+	form.params.value = '';
+	form.name.value = '';
+	form.description.value = '';
+	form.mgroup.value = '';
+	if(EXTENDED != undefined)
+		form.extended.value = '';
+
+	form.inactive.checked = 0;
+	form.breakline.checked = 0;
+	form.label.checked = 0;
+	form.lineidx.value = 0;
+
+	for(var x = 0; x < extra.length; x++) {
+		var el;
+		var en = extra[x];
+		var un = en.toUpper;
+		eval ('el = form.ext_' + en );
 
-			if(el.type == 'select') {
-				el.selectedIndex = undefined;
-			}
-			else {
-				el.value = '';
-			}
+		if(el.type == 'select') {
+			el.selectedIndex = undefined;
+		}
+		else {
+			el.value = '';
 		}
+	}
 
 
-		form_changed(0);
-		mvpan_selectTab(0);
-		return;
-	}
+	form_changed(0);
+	mvpan_selectTab(0);
+	return;
+}
 
-	function boxMsg (idx, msg) {
-		
-	}
+function boxMsg (idx, msg) {
+	
+}
 
-	function saveForm (idx, msg, zeromsg) {
+function saveForm (idx, msg, zeromsg) {
 
-		if(idx == undefined || idx < 1)
-			idx = form.lineidx.value;
+	if(idx == undefined || idx < 1)
+		idx = form.lineidx.value;
 
-		if(idx <= 0) {
-			alert("Improper line index " + idx);
-			return;
-		}
-		var l = lines[idx];
+	if(idx <= 0) {
+		alert("Improper line index " + idx);
+		return;
+	}
+	var l = lines[idx];
 
-		if(msg == undefined)
-			msg = 'saved';
+	if(msg == undefined)
+		msg = 'saved';
 
-		if(zeromsg == undefined)
-			zeromsg = 'saved';
+	if(zeromsg == undefined)
+		zeromsg = 'saved';
 
-		// alert("idx=" + idx + "\nl=" + l + "\nform=" + form);
-
-		form.lineidx.value = idx;
-		l[PAGE] = form.page.value;
-		l[FORM] = escapeParams(form.params.value);
-		l[NAME] = form.name.value;
-		l[MGROUP] = form.mgroup.value;
-
-		var ttt = form.description.value;
-		ttt = ttt.replace(/\r\n/g, "\r");
-		l[DESCRIPTION] = ttt.replace(/\n/g, "\r");
-
-		for(var x = 0; x < extra.length; x++) {
-			var el;
-			var en = extra[x];
-			var un = en.toUpperCase();
-			var eidx;
-			eval('eidx = ' + un);
-			eval('el = form.ext_' + en );
-
-			if(el.type == 'select') {
-				var sel = el.options[el.selectedIndex];
-				if(sel == defined) {
-					l[eidx] = sel.value;
-				}
-				else {
-					l[eidx] = '';
-				}
+	// alert("idx=" + idx + "\nl=" + l + "\nform=" + form);
+
+	form.lineidx.value = idx;
+	l[PAGE] = form.page.value;
+	l[FORM] = escapeParams(form.params.value);
+	l[NAME] = form.name.value;
+	l[MGROUP] = form.mgroup.value;
+
+	var ttt = form.description.value;
+	ttt = ttt.replace(/\r\n/g, "\r");
+	l[DESCRIPTION] = ttt.replace(/\n/g, "\r");
+
+	for(var x = 0; x < extra.length; x++) {
+		var el;
+		var en = extra[x];
+		var un = en.toUpperCase();
+		var eidx;
+		eval('eidx = ' + un);
+		eval('el = form.ext_' + en );
+
+		if(el.type == 'select') {
+			var sel = el.options[el.selectedIndex];
+			if(sel == defined) {
+				l[eidx] = sel.value;
 			}
 			else {
-				l[eidx] = el.value;
+				l[eidx] = '';
 			}
 		}
-
-		if(INACTIVE != undefined) {
-			l[INACTIVE] = form.inactive.checked ? 1 : 0;
-		}
-
-		var j;
-		for(j = 0; j < lines.length; j++) {
-			if(lines[j] != undefined && lines[j][MSG] == zeromsg) {
-				lines[j][MSG] = '';
-				rewrite(j);
-			}
+		else {
+			l[eidx] = el.value;
 		}
+	}
 
-		l[MSG] = msg;
-		if(checkcur > 0)
-			checkit(checkcur);
-		rewrite(idx);
-		zeroForm();
-		return;
+	if(INACTIVE != undefined) {
+		l[INACTIVE] = form.inactive.checked ? 1 : 0;
 	}
 
-	function setOutput () {
-		var output = new Array;
-		var i;
-		var linelen = [calc]scalar @menufields[/calc];
-		output[0] = "[calc]join "\\t", @menufields [/calc]";
-		document.qmenuform.qmenu_text.value = output[0];
-		for(i = 1; i < lines.length; i++) {
-			var ttt = "" + i;
-			while( ttt.length < 3 )
-				ttt = '0' + ttt;
-			var tl = new Array;
-			var j;
-			tl[0] = ttt;
-			if(tree_mode != 1)
-				lines[i][MSORT] = 'x' + ttt;
-			for( j = 1; j < linelen; j++) {
-				tl[j] = lines[i][j];
-				if(tl[j] == undefined) 
-					tl[j] = '';
-			}
-			tl[DESCRIPTION] = tl[DESCRIPTION].replace(/\r/g, "\\r");
-			if(EXTENDED != undefined) 
-				tl[EXTENDED] = tl[EXTENDED].replace(/\r/g, "\\r");
-			output[i] = tl.join("\t");
+	var j;
+	for(j = 0; j < lines.length; j++) {
+		if(lines[j] != undefined && lines[j][MSG] == zeromsg) {
+			lines[j][MSG] = '';
+			rewrite(j);
 		}
-		document.qmenuform.qmenu_text.value = output.join("\n") + "\n";
-		// alert(document.qmenuform.qmenu_text.value);
-		return;
 	}
 
-	function canon_lines () {
-		for(i = lines.length - 1; i > 0; i--) {
-			if(lines[i] != undefined)
-				break;
-			lines.length = lines.length - 1;
-		}
+	l[MSG] = msg;
+	if(checkcur > 0)
+		checkit(checkcur);
+	rewrite(idx);
+	zeroForm();
+	return;
+}
+
+function setOutput () {
+	var output = new Array;
+	var i;
+	var linelen = [calc]scalar @menufields[/calc];
+	output[0] = "[calc]join "\\t", @menufields [/calc]";
+	document.qmenuform.qmenu_text.value = output[0];
+	for(i = 1; i < lines.length; i++) {
+		var ttt = "" + i;
+		while( ttt.length < 3 )
+			ttt = '0' + ttt;
+		var tl = new Array;
+		var j;
+		tl[0] = ttt;
+		if(tree_mode != 1)
+			lines[i][MSORT] = 'x' + ttt;
+		for( j = 1; j < linelen; j++) {
+			tl[j] = lines[i][j];
+			if(tl[j] == undefined) 
+				tl[j] = '';
+		}
+		tl[DESCRIPTION] = tl[DESCRIPTION].replace(/\r/g, "\\r");
+		if(EXTENDED != undefined) 
+			tl[EXTENDED] = tl[EXTENDED].replace(/\r/g, "\\r");
+		output[i] = tl.join("\t");
 	}
+	document.qmenuform.qmenu_text.value = output.join("\n") + "\n";
+	// alert(document.qmenuform.qmenu_text.value);
+	return;
+}
 
-	function do_alert (msg) {
-		if(no_alert != 1)
-			alert(msg);
+function canon_lines () {
+	for(i = lines.length - 1; i > 0; i--) {
+		if(lines[i] != undefined)
+			break;
+		lines.length = lines.length - 1;
 	}
+}
 
-	function moveit (idx, motion) {
-		var up = idx - 1;
-		var dn = idx + 1;
+function do_alert (msg) {
+	if(no_alert != 1)
+		alert(msg);
+}
 
-		var dest;
+function moveit (idx, motion) {
+	var up = idx - 1;
+	var dn = idx + 1;
 
-		if (up < 1 && motion == 'up')
-			return void(0);
-		if (dn > lines.length - 1 && motion == 'down')
-			return void(0);
-		dest = motion == 'up' ? up : dn;
+	var dest;
 
-		var tmp = lines[dest];
-		lines[dest] = lines[idx];
-		lines[idx] = tmp;
+	if (up < 1 && motion == 'up')
+		return void(0);
+	if (dn > lines.length - 1 && motion == 'down')
+		return void(0);
 
-		rewrite(idx);
-		rewrite(dest);
+	reset_collapse();
 
-		return;
-	}
+	dest = motion == 'up' ? up : dn;
 
-	function movetree (idx, motion) {
-		var up = idx - 1;
-		var dn = idx + 1;
+	var tmp = lines[dest];
+	lines[dest] = lines[idx];
+	lines[idx] = tmp;
 
-		if(up < 1) {
-			alert("Can't move first element in tree.");
-			return;
-		}
+	rewrite(idx);
+	rewrite(dest);
 
-		var end = checkcur;
+	return;
+}
 
-		if(end < idx)
-			end = idx;
-		
-		var x;
-		for(x = idx; x <= end; x++) {
-			var l = lines[x];
-			var u = lines[up];
-			var d = lines[dn];
-			u[MSORT] *= 1;
-			l[MSORT] *= 1;
-			if(isNaN(u[MSORT])) {
-				u[MSORT] = 0;
-			}
-
-			if(isNaN(l[MSORT])) {
-				l[MSORT] = 0;
-			}
-
-			if(motion == 'left') {
-				if(l[MSORT] == 0) {
-					if(x == idx) {
-						do_alert("Already at top level.");
-						break;
-					}
-				}
-				else {
-					l[MSORT] -= 1;
-				}
-				while (x >= end && d != undefined && d[MSORT] - 1 > l[MSORT]) {
-					d[MSORT] -= 1;
-					rewrite_tree(dn);
-					dn++;
-					d = lines[dn];
+function movetree (idx, motion) {
+	var up = idx - 1;
+	var dn = idx + 1;
+
+	if(up < 1) {
+		alert("Can't move first element in tree.");
+		return;
+	}
+
+	var end = checkcur;
+
+	if(end < idx)
+		end = idx;
+	
+	var x;
+	for(x = idx; x <= end; x++) {
+		var l = lines[x];
+		var u = lines[up];
+		var d = lines[dn];
+		u[MSORT] *= 1;
+		l[MSORT] *= 1;
+		if(isNaN(u[MSORT])) {
+			u[MSORT] = 0;
+		}
+
+		if(isNaN(l[MSORT])) {
+			l[MSORT] = 0;
+		}
+
+		if(motion == 'left') {
+			if(l[MSORT] == 0) {
+				if(x == idx) {
+					do_alert("Already at top level.");
+					break;
 				}
 			}
 			else {
-				if(l[MSORT] > u[MSORT]) {
-					if(x == idx) {
-						do_alert("Already at farthest right, need parent at same level or higher.");
-						break;
-					}
-				}
-				else {
-					l[MSORT] += 1;
+				l[MSORT] -= 1;
+			}
+			while (x >= end && d != undefined && d[MSORT] - 1 > l[MSORT]) {
+				d[MSORT] -= 1;
+				rewrite_tree(dn, 1);
+				dn++;
+				d = lines[dn];
+			}
+		}
+		else {
+			if(l[MSORT] > u[MSORT]) {
+				if(x == idx) {
+					do_alert("Already at farthest right, need parent at same level or higher.");
+					break;
 				}
 			}
-			dn++;
-			up++;
-			rewrite(x);
+			else {
+				l[MSORT] += 1;
+			}
 		}
-
-		return;
+		dn++;
+		up++;
+		rewrite(x);
 	}
 
-	function search_win () {
-			window.name = 'mainwindow[scratch window_name]';
-			var url = '[area
-							href="admin/search_wizard"
-							form=|
-								ui_source_form=qmenuform
-								ui_source_var=params
-							|]';
-			url += '&ui_searchblob=' + escape(form.params.value);
-			window.open(url, undefined, 'scrollbars,location=no,status=no,toolbar=no,resizable,fullsize=no,width=900,height=700');
-			return void(0);
+	return;
+}
+
+function search_win () {
+		window.name = 'mainwindow[scratch window_name]';
+		var url = '[area
+						href="admin/search_wizard"
+						form=|
+							ui_source_form=qmenuform
+							ui_source_var=params
+						|]';
+		url += '&ui_searchblob=' + escape(form.params.value);
+		window.open(url, undefined, 'scrollbars,location=no,status=no,toolbar=no,resizable,fullsize=no,width=900,height=700');
+		return void(0);
+}
+
+function movethem (idx, end, target) {
+	var tmp = new Array;
+	reset_collapse();
+
+	for (var i = target; i < idx; i++) {
+		tmp[tmp.length] = lines[i];
 	}
 
-	function motion (idx, motion, fromchecked) {
+	var j = target;
+	for(var i = idx; i <= end; i++, j++) {
+		lines[j] = lines[i];
+	}
+	for (var i = 0; i < tmp.length; i++, j++) {
+		lines[j] = tmp[i];
+	}
+	for(var i = 1; i < lines.length; i++) 
+		rewrite_tree(i, 1);
+}
 
-		if(motion == 'left' || motion == 'right') {
-			if(tree_mode != 1) {
-				alert("Not in tree mode, can't move " + motion);
-				return;
-			}
+function motion (idx, motion, fromchecked) {
 
-			return movetree(idx, motion);
-		}
-		if(fromchecked == 1) {
-			idx = checkcur;
-			if(idx == undefined || idx < 1)
-				return;
+	if(motion == 'left' || motion == 'right') {
+		if(tree_mode != 1) {
+			alert("Not in tree mode, can't move " + motion);
+			return;
 		}
 
-		var up = idx - 1;
-		var dn = idx + 1;
-
-		if( ! check_change() )
+		return movetree(idx, motion);
+	}
+	if(fromchecked == 1) {
+		idx = checkcur;
+		if(idx == undefined || idx < 1)
 			return;
+	}
+
+	var up = idx - 1;
+	var dn = idx + 1;
+
+	if( ! check_change() )
+		return;
 
-		var dest;
+	var dest;
 
-		// alert("checkcur=" + checkcur + "\nidx=" + idx + "\ndest=" + dest);
-		if (checkcur != 0 && fromchecked != 1) {
+	// alert("checkcur=" + checkcur + "\nidx=" + idx + "\ndest=" + dest);
+	if (checkcur != 0 && fromchecked != 1) {
+		if(tree_mode == 1) {
+// alert('in tree mode move');
+			var extant;
+			var m;
+			var nextpeer;
+			var prevpeer;
+			var clev = lines[checkcur][MSORT];
+			if(motion == 'down') {
+				
+				for(m=checkcur + 1; extant==undefined; m++) {
+// alert('in tree mode move, m=' + m + ', nextpeer=' + nextpeer + ', extant=' + extant + ', checkcur=' + checkcur + '');
+					if(lines[m] == undefined) {
+						if(nextpeer == undefined)
+							return void(0);
+						extant = m - 1;
+// alert('ready for tree mode move, m=' + m + ', nextpeer=' + nextpeer + ', extant=' + extant + ', checkcur=' + checkcur + '');
+					}
+					else if(lines[m][MSORT] <= clev) {
+						if(nextpeer == undefined) {
+							nextpeer = m;
+						}
+						else {
+							extant = m -1;
+// alert('ready for tree mode move, m=' + m + ', nextpeer=' + nextpeer + ', extant=' + extant + ', checkcur=' + checkcur + '');
+						}
+					}
+				}
+				movethem(nextpeer, extant, checkcur);
+				return void(0);
+			}
+			else {
+				var m;
+				for(m=checkcur + 1; extant==undefined; m++) {
+					if(lines[m] == undefined || lines[m][MSORT] == clev) {
+// alert('tree move up, extant=' + extant + ', checkcur=' + checkcur + '');
+						extant = m - 1;
+					}
+				}
+				for(m=checkcur - 1; prevpeer==undefined; m--) {
+					if(lines[m] == undefined) {
+							return void(0);
+					}
+// alert('in tree mode move, m=' + m + ',  prevpeer=' + prevpeer + ', extant=' + extant + ', checkcur=' + checkcur + '');
+					if(lines[m][MSORT] == clev) {
+						prevpeer = m;
+					}
+				}
+				movethem(checkcur, extant, prevpeer);
+				return void(0);
+			}
+		}
+		else {
 			dest = checkcur;
 			checkit(checkcur);
 			if(idx == dest) 
@@ -1658,39 +1741,47 @@
 			}
 			motion = 0;
 		}
-		else {
-			if (up < 1 && motion == 'up')
-				return void(0);
-			if (dn > lines.length - 1 && motion == 'down')
-				return void(0);
-			dest = motion == 'up' ? up : dn;
-		}
-
-		// alert("checkcur=" + checkcur + "\nidx=" + idx + "\ndest=" + dest);
-		if (motion) {
-			moveit(idx, motion);
-		}
+	}
+	else {
+		if (up < 1 && motion == 'up')
+			return void(0);
+		if (dn > lines.length - 1 && motion == 'down')
+			return void(0);
+		dest = motion == 'up' ? up : dn;
+	}
 
-		return void(0);
+	// alert("checkcur=" + checkcur + "\nidx=" + idx + "\ndest=" + dest);
+	if (motion) {
+		moveit(idx, motion);
 	}
 
+	return void(0);
+}
+
 </script>
 [/restrict]
-<tr>
+
+[output name="top_of_form"]
 <form name=qmenuform action="[process href=@@MV_PAGE@@]" method=POST>
-	<td colspan=2>
 		<input name=mv_session_id type=hidden value="[data session id]">
 		<input name=mv_action type=hidden value="back">
 		<input name=cancelsubmit type=hidden value="">
 		<input name=qmenu_name type=hidden value="[scratch qmenu_name]">
 		<input name=qmenu_text type=hidden value="">
-Save to new menu <input name=qmenu_new type=text size=20 value="[cgi qmenu_new]">
+[output name=top_buttons]
+<span class=s3>
+Save to new menu <input name=qmenu_new type=text size=20 value="[cgi qmenu_new]" class=s3>
 		<input type=submit
 				style="Visibility: Hidden;"
 				disabled=1
 				name=junksubmit
 				value=".">
-		<input type=submit name=doit style="font-weight: bold" value="Publish" onClick="check_change(1) && setOutput()">
+		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+		<input type=button
+				onClick="set_mode('toggle')"
+				name=treebutton
+				value="Set tree mode" class=s3>
+		<input type=submit name=doit style="font-weight: bold" value="Publish" onClick="check_change(1) && setOutput()" class=s3>
 		&nbsp;&nbsp;&nbsp;
 		<input type=submit
 				onClick="
@@ -1698,21 +1789,12 @@
 					this.form.qmenu_new.value='';
 					this.form.qmenu_name.value='';
 					"
-				value="Cancel">
-		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-		<input type=button
-				onClick="set_mode('toggle')"
-				name=treebutton
-				value="Set tree mode">
-		<div id=treebox>
-		<input type=checkbox
-				name=show_info
-				value=1> Show item info in flyout
-		<input type=checkbox name=qmenu_tree value=1> Tree mode
-		<input type=checkbox name=qmenu_write_tree value=1> Write tree to DB
-		<input type=checkbox name=showlevel value=1 onClick="toggleShowlevel()" CHECKED=1> Show numerical level
-		</div>
-<br>
+				value="Cancel" class=s3>
+</span>
+[output name=""]
+<table width="100%">
+<tr>
+	<td>
 		<input type=button
 				onClick="insRow()"
 				name=insbutton
@@ -1736,6 +1818,16 @@
 				onClick="motion(0,'down',1)"
 				value="Down">
 	</td>
+	<td>
+		<div id=treebox style="font-size: 10px; display: none">
+		<input type=checkbox name=show_info value=1>&nbsp;Show&nbsp;item&nbsp;info
+		<input type=checkbox name=qmenu_tree value=1>&nbsp;Tree&nbsp;mode
+		<input type=checkbox name=qmenu_write_tree value=1>&nbsp;Write&nbsp;tree&nbsp;to&nbsp;DB
+		<input type=checkbox name=showlevel value=1 onClick="toggleShowlevel()" CHECKED=1>&nbsp;Show&nbsp;numerical&nbsp;level
+		<input type=checkbox name=collapse value=1 onClick="toggleItem(0,this,0)">&nbsp;Collapse&nbsp;tree
+		<input type=checkbox name=explode value=1 onClick="toggleItem(0,this,1)">&nbsp;Explode&nbsp;tree
+		</div>
+	</td>
 </tr>
 </table>
 	<div id=titlebox style="
@@ -1776,34 +1868,11 @@
 	</td>
 	<td valign=top>
 
+	<input type=hidden name=lineidx value="0">
 	<table width="100%">
 	<tr>
-		<td>
-
-		<input type=hidden name=lineidx value="0">
-		<input type=button onClick="saveForm()" name=savebutton value="Save menu item">
-		<input type=button onClick="loadForm()" name=loadbutton
-					style="visibility: Hidden;"
-					value="Load menu item">
-		<input type=button onClick="saveForm(checkcur)" name=copybutton
-					style="visibility: Hidden;"
-					value="Copy to checked entry">
-		<br><br>
-		<input type=submit style="font-weight: bold" name=doit value="Publish" onClick="check_change(1) && setOutput()">
-		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-		<input type=submit
-				onClick="
-					this.form.qmenu_text.value='';
-					this.form.qmenu_new.value='';
-					this.form.qmenu_name.value='';
-					"
-				value="Cancel">
-		</td>
-	</tr>
-	<tr>
 	  <td>
-[tabbed-display panel-width=500 panel-height=800
-				tab-width=150]
+[tabbed-display panel-width="500" panel-height="100%" panel-shade=e tab-height=24 tab-width=150]
 [tabbed-panel General]
 		<table>
 		<tr>
@@ -1824,61 +1893,68 @@
 		</tr>
 		<tr>
 			<td class=clabel>
-				Detailed Description
+				Form values<br>
+				<input name=ui_searchblob type=hidden value="">
+				<input name=ui_source_win type=hidden value="[scratch window_name]">
+
+			<div align=right>
+			<input
+				style="font-size: smaller; font-weight: bold;"
+				type=button
+				value="Create search"
+				onClick="this.form.page.value = 'search';form_changed(1);search_win();"
+				><br><input
+							style="font-size: smaller;"
+							type=button onClick="this.form.params.value=''"
+							value="clear search">
+			</div>
 			</td>
 			<td class=cdata>
-				<textarea cols=50 rows=4 name=description onChange="form_changed(1);"></textarea>
+				<textarea cols=50 rows=4 name=params onChange="form_changed(1);"></textarea>
 			</td>
 		</tr>
 		<tr>
 			<td class=clabel>
-				Inactive
-			</td class=cdata>
+				Detailed Description
+			</td>
 			<td class=cdata>
-			<input name=inactive  type=checkbox value=1 onChange="form_changed(1);">
+				<textarea cols=50 rows=4 name=description onChange="form_changed(1);"></textarea>
 			</td>
 		</tr>
 		<tr>
 			<td class=clabel>
-				Menu Group
+				Options
 			</td>
 			<td class=cdata>
-			 <input name=mgroup  type=text onChange="form_changed(1);">
+				<input name=label type=checkbox value=1 onChange="form_changed(1);toggleName(this.form)">Label only<br>
+				<input name=breakline type=checkbox value=1 onChange="form_changed(1);toggleBreak(this.form)">Break line
 			</td>
 		</tr>
 		<tr>
 			<td class=clabel>
-				Options
-			</td>
+				Inactive
+			</td class=cdata>
 			<td class=cdata>
-				<input name=label type=checkbox value=1 onChange="form_changed(1);toggleName(this.form)">Label only<br>
-				<input name=breakline type=checkbox value=1 onChange="form_changed(1);toggleBreak(this.form)">Break line
+			<input name=inactive  type=checkbox value=1 onChange="form_changed(1);">
 			</td>
 		</tr>
-		</table>
-[/tabbed-panel]
-[tabbed-panel Form Parameters]
-		<table>
 		<tr>
 			<td class=clabel>
-				Form values<br>
-				<input name=ui_searchblob type=hidden value="">
-				<input name=ui_source_win type=hidden value="[scratch window_name]">
-
-			<div align=right>
-			<input
-				style="font-size: smaller; font-weight: bold;"
-				type=button
-				value="Create search"
-				onClick="this.form.page.value = 'search';form_changed(1);search_win();"
-				>&nbsp;<input
-							style="font-size: smaller;"
-							type=button onClick="this.form.params.value=''"
-							value="clear search">
-			</div>
+				Menu Group
 			</td>
 			<td class=cdata>
-				<textarea cols=50 rows=4 name=params onChange="form_changed(1);"></textarea>
+			 <input name=mgroup  type=text onChange="form_changed(1);">
+			</td>
+		</tr>
+		<tr>
+			<td colspan=2>
+			<input type=button onClick="saveForm()" name=savebutton value="Save menu item">
+			<input type=button onClick="loadForm()" name=loadbutton
+						style="visibility: Hidden;"
+						value="Load menu item">
+			<input type=button onClick="saveForm(checkcur)" name=copybutton
+						style="visibility: Hidden;"
+						value="Copy to checked entry">
 			</td>
 		</tr>
 		</table>
@@ -1901,6 +1977,8 @@
 		if(lines.length > 1) {
 			if(tm == 1) {
 				set_mode('tree');
+				toggleShowlevel();
+				toggleItem(0, form.collapse, 0);
 			}
 			else {
 				set_mode('simple');
@@ -1970,7 +2048,18 @@
 		}
 
 </script>
-			</table>
+		<tr>
+			<td colspan=2>
+			<input type=button onClick="saveForm()" name=savebutton value="Save menu item">
+			<input type=button onClick="loadForm()" name=loadbutton
+						style="visibility: Hidden;"
+						value="Load menu item">
+			<input type=button onClick="saveForm(checkcur)" name=copybutton
+						style="visibility: Hidden;"
+						value="Copy to checked entry">
+			</td>
+		</tr>
+	</table>
 [/tabbed-panel]
 [/tabbed-display]
 		</td>
@@ -1979,9 +2068,20 @@
 	</td>
 </tr>
 </table>
-<a href="javascript:document.qmenuform.inactive.disabled = 1; void(0)">Disable</A>
-<a href="javascript:document.qmenuform.inactive.disabled = 0; void(0)">Enable</A>
+[output name="bottom_buttons"]
+		<input type=submit name=doit style="font-weight: bold" value="Publish" onClick="check_change(1) && setOutput()" class=s3>
+		&nbsp;&nbsp;&nbsp;
+		<input type=submit
+				onClick="
+					this.form.qmenu_text.value='';
+					this.form.qmenu_new.value='';
+					this.form.qmenu_name.value='';
+					"
+				value="Cancel" class=s3>
+[output name="bottom_of_form"]
 </form>
+[output name=""]
+
 <!-- ----- END REAL STUFF ----- -->
 @_UI_STD_FOOTER_@
 



2.3       +51 -41    interchange/dist/lib/UI/pages/admin/merchandising.html


rev 2.3, prev_rev 2.2
Index: merchandising.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/merchandising.html,v
retrieving revision 2.2
retrieving revision 2.3
diff -u -r2.2 -r2.3
--- merchandising.html	18 Aug 2002 08:09:05 -0000	2.2
+++ merchandising.html	14 Jan 2003 02:25:50 -0000	2.3
@@ -19,14 +19,7 @@
 
 
 <!-- ----- BEGIN REAL STUFF ----- -->
-[if scratch ui_message]
-<BLOCKQUOTE>
-	[scratch ui_message]
-	[set ui_message][/set]
-</BLOCKQUOTE>
-<p>
-&nbsp;
-[/if]
+
 [flag type=write table=merchandising]
 [perl tables="merchandising __UI_META_TABLE__"]
 	my $db = $Db{merchandising};
@@ -55,13 +48,28 @@
 	return;
 [/perl]
 
+[output name=search_box]
 <FORM ACTION="[area @@MV_PAGE@@]">
 <INPUT NAME=ui_text_qualification>
 <INPUT TYPE=submit VALUE="[L]Limit with search[/L]">
 </FORM>
+
+
+[output name=""]
+
 [if cgi ui_text_qualification]
-<H3>[msg arg.0="[cgi ui_text_qualification]"]Entries containing "%s"[/msg]</H3>
+	[calc]
+		return if $CGI->{mv_like_spec};
+		$Scratch->{page_banner} ||= $Scratch->{page_title};
+		$Scratch->{page_banner} .= errmsg(
+																'-- entries containing "%s"',
+																$CGI->{ui_text_qualification},
+																);
+		return;
+	[/calc]
 [/if]
+
+
 [search-region more=1 arg="
 		[if cgi ui_text_qualification]
 		se=[cgi ui_text_qualification]
@@ -92,53 +100,55 @@
 	}
 	return;
 [/calc]
-<TABLE border=0 CELLSPACING=0 width="90%">
-<tr class=rborder height=1><td colspan=8></td></tr>
-<TR class=rmarq>
-<TH ALIGN=LEFT>[page href=@@MV_PAGE@@ extra=rmarq form=`
+<table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
+<tr class=rhead>
+<td align=left>[page href=@@MV_PAGE@@ extra=rhead form=`
 	return "ui_sort_field=sku\n" . sortrev('sku');
-	`][L]SKU[/L]</TH>
-<TH ALIGN=LEFT>[page href=@@MV_PAGE@@ extra=rmarq form=`
+	`][L]SKU[/L]</td>
+<td align=left>[page href=@@MV_PAGE@@ extra=rhead form=`
 	return "ui_sort_field=description\n" . sortrev('description');
-	`][L]Description[/L]</TH>
-<TH ALIGN=CENTER>[L]Qty pricing[/L]</TH>
-<TH ALIGN=CENTER>[L]Up-sell[/L]</TH>
-<TH ALIGN=CENTER>[L]Cross-sell[/L]</TH>
-<TH ALIGN=CENTER>[L]Promotion[/L]</TH>
-<TH>&nbsp;</TH>
+	`][L]Description[/L]</td>
+<td align=center>[L]Qty pricing[/L]</td>
+<td align=center>[L]Up-sell[/L]</td>
+<td align=center>[L]Cross-sell[/L]</td>
+<td align=center>[L]Promotion[/L]</td>
+<td>&nbsp;</td>
 </tr>
-<tr class=rborder height=1><td colspan=7></td></tr>
 [/on-match]
 [search-list]
-<TR [item-alternate 2]class=rnorm[else]class=ralt[/else][/item-alternate]>
-<TD>[page href=__UI_BASE__/item_edit
+<tr [item-alternate 2]class=rownorm[else]class=rowalt[/else][/item-alternate]>
+<td>[page href=__UI_BASE__/item_edit
 			form="
 				ui_return_to=@@MV_PAGE@@
 				item_id=[item-code]
-			"][item-code]</A></TD>
-<TD>[filter 30][item-description][/filter]</TD>
-<TD ALIGN=CENTER>[page href=__UI_BASE__/item_price form="
+			"][item-code]</A></td>
+<td>[filter 30][item-description][/filter]</td>
+<td align=center>[page href=__UI_BASE__/item_price form="
 	ui_return_to=@@MV_PAGE@@
+	merchandising=1
 	item_id=[item-code]
 "][if-item-data pricing sku][L]Yes[/L][else][L]No[/L][/else][/if-item-data]</A>
-</TD>
-<TD ALIGN=CENTER>[page href=__UI_BASE__/item_up form="
+</td>
+<td align=center>[page href=__UI_BASE__/item_up form="
 	ui_return_to=@@MV_PAGE@@
+	merchandising=1
 	item_id=[item-code]
 "][if-item-data merchandising upsell_to][L]Yes[/L][else][L]No[/L][/else][/if-item-data]</a>
-</TD>
-<TD ALIGN=CENTER>[page href=__UI_BASE__/item_cross form="
+</td>
+<td align=center>[page href=__UI_BASE__/item_cross form="
 	ui_return_to=@@MV_PAGE@@
+	merchandising=1
 	item_id=[item-code]
-"][if-item-data merchandising cross_sell][L]Yes[/L][else][L]No[/L][cgi ui_text_qualification][/else][/if-item-data]</a>
-</TD>
-<TD ALIGN=CENTER>[page href=__UI_BASE__/item_feature
-								form="
-									ui_return_to=@@MV_PAGE@@
-									item_id=[item-code]
-								"][if-item-data merchandising featured][item-exec do_timed][item-code][/item-exec][display table=merchandising column=featured type=display key="[item-code]"][else][L]none[/L][/else][/if-item-data]</a></td>
-<TD ALIGN=CENTER>[if-item-data merchandising timed_promotion]<font size=1>[item-exec show_exp][item-code][/item-exec]</font>[else]&nbsp;[/else][/if-item-data]
-</TD>
+"][if-item-data merchandising cross_sell][L]Yes[/L][else][L]No[/L][/else][/if-item-data]</a>
+</td>
+<td align=center>[page href=__UI_BASE__/item_feature
+		form="
+			ui_return_to=@@MV_PAGE@@
+			merchandising=1
+			item_id=[item-code]
+		"][if-item-data merchandising featured][item-exec do_timed][item-code][/item-exec][display table=merchandising column=featured type=display key="[item-code]"][else][L]none[/L][/else][/if-item-data]</a></td>
+<td align=center>[if-item-data merchandising timed_promotion]<font size=1>[item-exec show_exp][item-code][/item-exec]</font>[else]&nbsp;[/else][/if-item-data]
+</td>
 </tr>
 [/search-list]
 [no-match]
@@ -152,7 +162,7 @@
 [/no-match]
 <tr class=rborder height=1><td colspan=8></td></tr>
 [more-list]
-<tr class=rnorm>
+<tr class=rownorm>
 <td colspan=6 align=center>
 [L]More items[/L]: [decade-next][/decade-next] [more] [decade-prev][/decade-prev]
 </td>



2.5       +6 -10     interchange/dist/lib/UI/pages/admin/meta_editor.html


rev 2.5, prev_rev 2.4
Index: meta_editor.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/meta_editor.html,v
retrieving revision 2.4
retrieving revision 2.5
diff -u -r2.4 -r2.5
--- meta_editor.html	7 Nov 2002 19:15:55 -0000	2.4
+++ meta_editor.html	14 Jan 2003 02:25:50 -0000	2.5
@@ -60,9 +60,9 @@
 	return;
 [/calc]
 
-[set ui_class]Admin[/set]
+[set ui_class]Tables[/set]
 [set help_name]meta.edit[/set]
-[set icon_name][/set]
+[set icon_name]icon_config.gif[/set]
 
 @_UI_STD_HEAD_@
 
@@ -72,13 +72,10 @@
 	no-table-meta=1
 	no-meta=1
 	ui_data_fields="
-		=Label
+		=Typical
 
 		code
 		label
-
-		=Widget
-
 		type
 		filter
 		width
@@ -110,11 +107,10 @@
 	   extended
 	"
 	widget.extended="textarea_5_50"
+	ui_style=1
+	output_map=1
 	tabbed=1
-	panel_width=800
-	panel_height=700
-	table_width=800
 	][/table-editor]
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ version: $Revision: 2.4 $ -->
+<!-- page: @@MV_PAGE@@ version: $Revision: 2.5 $ -->



2.12      +178 -180  interchange/dist/lib/UI/pages/admin/order.html


rev 2.12, prev_rev 2.11
Index: order.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/order.html,v
retrieving revision 2.11
retrieving revision 2.12
diff -u -r2.11 -r2.12
--- order.html	4 Nov 2002 14:48:27 -0000	2.11
+++ order.html	14 Jan 2003 02:25:50 -0000	2.12
@@ -125,7 +125,8 @@
 		else	   { $CGI->{ui_text_qualification} = "" }
 	}
 	return if $CGI->{ui_text_qualification};
-	return unless $Config->{Database}{transactions}{LARGE};
+	return unless
+		$Variable->{ORDER_VIEW_LARGE} or $Config->{Database}{transactions}{LARGE};
 	$Scratch->{ui_location} = $Tag->area( {
 									
 									href => '__UI_BASE__/flex_select',
@@ -156,72 +157,40 @@
 
 <!-- ----- BEGIN REAL STUFF ----- -->
 
-<table border=0><tr>
-<td>
-<small>
-    <FORM ACTION="[area @@MV_PAGE@@]">
-    <INPUT NAME=order VALUE="[cgi order]">
-    <INPUT TYPE=submit VALUE="[L]Start at order number[/L]">
-    </FORM>
-</small>
-</td>
-<td valign=top><B> [L]or[/L] </B></td>
-<td>
-<small>
+[output name=search_box]
+<table align=right>
+	<tr>
+		<td class=s3>
+		<FORM ACTION="[area admin/order_view]">
+		View order: <INPUT NAME=order VALUE="[cgi order]" class=s3>
+		<INPUT TYPE=submit VALUE="[L]Go[/L]" class=s3>
+		</FORM>
+		</td>
+		<td>
     <FORM ACTION="[area @@MV_PAGE@@]">
-    <INPUT NAME=ui_text_qualification VALUE="">
-    <INPUT TYPE=submit VALUE="[L]Limit with search[/L]">
+    <INPUT NAME=ui_text_qualification VALUE="" class=s3>
+    <INPUT TYPE=submit VALUE="[L]Limit with search[/L]" class=s3>
     </FORM>
-</small>
-</td>
-</tr>
+		</td>
+	</tr>
 </table>
 
-[if !scratch old_browser]
-<script>
-	var stat_array = new Array;
-	function push_el (el, status) {
-		if(stat_array[status] == undefined) {
-			stat_array[status] = new Array;
-// alert('created ' + status + ' array');
-		}
-		var els = stat_array[status];
-		els[els.length] = el;
-	}
 
-	function checkType (type, cond) {
-		var other = false;
-		if(cond == undefined) 
-			cond = true;
-		if(cond != true) 
-			other = true;
-		if(stat_array == undefined) {
-			return;
-		}
-		var i;
-		var alerted;
-		for(i in stat_array) {
-// alert("checking status of " + i);
-			var els = stat_array[i];
-			for (var j = 0; j < els.length; j++) {
-				var el = document.getElementById(els[j]);
-				if(el != undefined) {
-					if(i == type) 
-						el.checked = cond;
-					else 
-						el.checked = other;
-				}
-			}
-		}
-	}
-</script>
-[/if]
+
+[output name=""]
 
 [if cgi ui_text_qualification]
-[if !cgi mv_like_spec]
-<H4>[msg arg.0="[cgi ui_text_qualification]"]Entries containing "%s"[/msg]</H4>
-[/if]
+	[calc]
+		return if $CGI->{mv_like_spec};
+		$Scratch->{page_banner} ||= $Scratch->{page_title};
+		$Scratch->{page_banner} .= errmsg(
+																'-- entries containing "%s"',
+																$CGI->{ui_text_qualification},
+																);
+		return;
+	[/calc]
 [/if]
+
 [search-region more=1 arg="
 		fi=transactions
 		ml=__UI_SZ_LIST_ORDER__
@@ -272,54 +241,57 @@
 	}
 	return;
 [/calc]
+
+[output name=top_of_form]
 <FORM ACTION="[process]" METHOD=POST NAME=batch>
 <INPUT TYPE=hidden NAME=mv_session_id VALUE="[data session id]">
 <INPUT TYPE=hidden NAME=mv_nextpage VALUE="@@MV_PAGE@@">
 <INPUT TYPE=hidden NAME=mv_todo VALUE=back>
-<TABLE border=0 CELLSPACING=0 width="90%">
-<tr class=rborder height=1><td colspan=8></td></tr>
-<TR class=rmarq>
-<th>&nbsp;</th>
-<TH ALIGN=LEFT>
-[page href=@@MV_PAGE@@ extra=rmarq form=`
+
+[output]
+
+<table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
+<tr class=rhead>
+<td>&nbsp;</td>
+<td class=rhead>
+[page href=@@MV_PAGE@@ form=`
 	return "ui_sort_field=code\n" . sortrev('code');
 	`][L]Order[/L]</A>
-</TH>
-<TH ALIGN=LEFT>
-[page href=@@MV_PAGE@@ extra=rmarq form=`
+</td>
+<td class=rhead>
+[page href=@@MV_PAGE@@ form=`
 	return "ui_sort_field=lname,fname\n" . sortrev('lname');
 	`][L]User[/L]</A>
-</TH>
-<TH ALIGN=LEFT>
-[page href=@@MV_PAGE@@ extra=rmarq form=`
+</td>
+<td class=rhead>
+[page href=@@MV_PAGE@@ form=`
 	return "ui_sort_field=country,state,city\n" . sortrev('country');
 	`][L]Location[/L]</A>
-</TH>
-<TH ALIGN=LEFT>
-[page href=@@MV_PAGE@@ extra=rmarq form=`
+</td>
+<td class=rhead>
+[page href=@@MV_PAGE@@ form=`
 	return "ui_sort_field=order_date\n" . sortrev('order_date');
 	`][L]Date[/L]/[L]Time[/L]</A>
-</TH>
-<TH ALIGN=LEFT>
-[page href=@@MV_PAGE@@ extra=rmarq form=`
+</td>
+<td class=rhead align=right>
+[page href=@@MV_PAGE@@ form=`
 	return "ui_sort_field=nitems\n" . sortrev('nitems', 1);
 `][L]Items[/L]</A>
-</TH>
-<TH ALIGN=CENTER>
-[page href=@@MV_PAGE@@ extra=rmarq form=`
+</td>
+<td class=rhead align=right>
+[page href=@@MV_PAGE@@ form=`
 	return "ui_sort_field=total_cost\n" . sortrev('total_cost', 1);
 `][L]Total[/L]</A>
-</TH>
-<TH ALIGN=RIGHT>
-[page href=@@MV_PAGE@@ extra=rmarq form=`
+</td>
+<td align=right class=rhead>
+[page href=@@MV_PAGE@@ form=`
 	return "ui_sort_field=status\n" . sortrev('status');
 `][L]Status[/L]</A>
-</TH>
+</td>
 </tr>
-<tr class=rborder height=1><td colspan=8></td></tr>
 [search-list]
-<TR [item-alternate 2]class=rnorm[else]class=ralt[/else][/item-alternate]>
-<TD>
+<tr [item-alternate 2]class=rownorm[else]class=rowalt[/else][/item-alternate]>
+<td>
 <INPUT TYPE=checkbox NAME=order VALUE="[item-code]"
 		[item-calc]
 			my $string = '';
@@ -348,16 +320,16 @@
 	']"
 	onClick="return confirm('Are you sure you want to delete order [item-code]?')"><IMG src="delsm.gif" ALT="DELETE [item-code]" BORDER=0></A>
 [/if]
-</TD>
-<TD>[page href=__UI_BASE__/order_view form="order=[item-code]"][item-code]</A></TD>
+</td>
+<TD>[page href=__UI_BASE__/order_view form="order=[item-code]"][item-code]</A></td>
 <TD>
 	[page href=__UI_BASE__/customer_view form="customer=[item-param username]"][item-param lname], [item-param fname][if-item-param company] -- [item-param company][/if-item-param]</A>
-</TD>
-<TD>[item-filter 30][item-param city], [item-param state] [item-param country][/item-filter]</TD>
-<TD ALIGN=LEFT>[convert-date][item-param order_date][/convert-date]</TD>
-<TD ALIGN=CENTER>[item-param nitems]</TD>
-<TD ALIGN=Right>[currency][item-param total_cost][/currency]</TD>
-<TD ALIGN=Right>[page href="__UI_BASE__/order_status" form="order=[item-code]"][loc][item-param status][/loc]</A></TD>
+</td>
+<td>[item-filter 30][item-param city], [item-param state] [item-param country][/item-filter]</td>
+<td align=left>[convert-date][item-param order_date][/convert-date]</td>
+<td align=right>[item-param nitems]</td>
+<td align=right>[currency][item-param total_cost][/currency]</td>
+<td align=right>[page href="__UI_BASE__/order_status" form="order=[item-code]"][loc][item-param status][/loc]</A></td>
 </tr>
 [/search-list]
 [no-match]
@@ -369,7 +341,6 @@
 </td>
 </tr>
 [/no-match]
-<tr class=rborder height=1><td colspan=8></td></tr>
 [more-list]
 <tr class=ralt>
 <td colspan=8 align=center>
@@ -383,31 +354,43 @@
 </table>
 [/search-region]
 
-<table>
-<tr>
-	<td>
-		[if scratch can_delete]
-		[button form=batch text="[L]Delete checked orders[/L]"
-		 src="__UI_IMG__delete.gif"
-		 link-text-too=1
-		 confirm='[L]Are you sure you want to delete the checked orders?[/L]']deleteorder=1
-		[/button]
-		[/if]
+[output name=bottom_buttons]
+
+[if scratch can_delete]
+	[button form=batch text="[L]Delete checked[/L]"
+	 no-src="__UI_IMG__delete.gif"
+		extra="class=s3"
+	 link-text-too=1
+	 confirm='[L]Are you sure you want to delete the checked orders?[/L]']deleteorder=1
+	[/button]
 &nbsp;
-	</td>
-	<td>
-		[button form=batch src="[scratch archive_img]"
-			 link-text-too=1
+[/if]
+
+[button form=batch
+			no-src="[scratch archive_img]"
+			extra="class=s3"
+			link-text-too=1
 			text=`
-			my $tmp = "$Scratch->{archive_nm} checked orders";
+			my $tmp = "$Scratch->{archive_nm} checked";
 			return errmsg("\u$tmp");
 			`]
-[scratch archive_nm]order=1[/button]
-	</td>
-	<td>
-	[button form=batch src="__UI_IMG__icon_merch.gif"
+[scratch archive_nm]order=1
+[/button]
+
+<input type=button
+		onClick="location='[area href=__UI_BASE__/spread
+													form="
+														mv_data_table=transactions
+													ui_meta_view=tracking
+													ui_text_qualification=tracking_number=
+													"]'"
+		value="[L]Enter tracking numbers[/L]" class=s3>
+
+[button form=batch
+			no-src="__UI_IMG__icon_merch.gif"
 			link-text-too=1
-			text="Ship checked orders"
+			extra="class=s3"
+			text="Ship checked"
 			]
 ui_sequence_edit=[calc]
 	$CGI->{item_id} = delete $CGI->{order};
@@ -424,78 +407,93 @@
 [/calc]
 mv_nextpage=__UI_BASE__/order_status
 [/button]
-	</td>
-[if scratch old_browser]
-	<td colspan=2>
+
 		<input
 			type=checkbox
 			name=ship_auto
-			value=1>
-				<span title="Ship all lines of all orders, archive[if variable SETTLE_TRANSACTION], settle[/if]">Ship all automatically</span>
-	</td>
-[else]
-	<td>
-		<script>
-		[calc]
-			return join "\n", @els, '';
-		[/calc]
-			function div_vis (show) {
-				var el = document.getElementById('ship_auto_help');
-				el.style.display = show ? 'block' : 'none';
-			}
-		</script>
-		<span onMouseOver="div_vis(1)" onMouseOut="div_vis(0)">
-			<input type=checkbox name=ship_auto value=1> Ship all automatically
-		&nbsp;
-		</span>
-		</td>
-		<td rowspan=2>
-			<div
-				id=ship_auto_help
-				style="
-					display: none;
-					border: 2px solid black;
-					padding: 5px;
-				">
-				Ship all lines of all orders,<br>
-				archive[if variable SETTLE_TRANSACTION], settle[/if]
-			</div>
-		</td>
-[/else]
-[/if]
-	</tr>
-[if !scratch old_browser]
-	<tr>
-		<td>
-			<A HREF="javascript:checkAll(document.batch, 'order', 0)"><img src="__UI_IMG__box_checked.gif" border=0>Check all</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-		</td>
-		<td>
-			<A HREF="javascript:checkAll(document.batch, 'order', 1)"><img src="__UI_IMG__box_empty.gif" border=0>Uncheck all</A>
+			value=1 class=s3>
+				<span title="Ship all lines of all orders, archive[if variable SETTLE_TRANSACTION], settle[/if]" class=s3>Ship all automatically</span>
 
-		</td>
-		<td>
-[page href=__UI_BASE__/spread
-	  form="
-	  	mv_data_table=transactions
-		ui_meta_view=tracking
-		ui_text_qualification=tracking_number=
-	  "]<img src="__UI_IMG__box_checked.gif" border=0>Enter tracking numbers</A>  
+[output name=""]
 
-		</td>
-	<tr>
-			[loop list="shipped pending canceled partial"]
-				<td width=100>
-					<A HREF="javascript:checkType('[loop-code]')">
-						<img src="__UI_IMG__box_checked.gif" border=0>Check all [loop-code]
-					</A>
-				</td>
-			[/loop]
-	</tr>
+[if !scratch old_browser]
+<script>
+	var stat_array = new Array;
+	function push_el (el, status) {
+		if(stat_array[status] == undefined) {
+			stat_array[status] = new Array;
+// alert('created ' + status + ' array');
+		}
+		var els = stat_array[status];
+		els[els.length] = el;
+	}
+
+	function checkType (type, cond) {
+		var other = false;
+		if(cond == undefined) 
+			cond = true;
+		if(cond != true) 
+			other = true;
+		if(stat_array == undefined) {
+			return;
+		}
+		var i;
+		var alerted;
+		for(i in stat_array) {
+// alert("checking status of " + i);
+			var els = stat_array[i];
+			for (var j = 0; j < els.length; j++) {
+				var el = document.getElementById(els[j]);
+				if(el != undefined) {
+					if( type == 'none' ) {
+						el.checked = false;
+					}
+					else {
+						if( type == 'all' ) {
+							el.checked = true;
+						}
+						else {
+							if(i == type)
+								el.checked = cond;
+							else
+								el.checked = other;
+						}
+					}
+				}
+			}
+			var image_dir = '[image dir-only=1 ui=1 secure="__UI_SECURE__"]';
+			var types = ['all', 'none', 'shipped', 'pending', 'canceled', 'partial'];
+			for(var i = 0; i < types.length; i++) {
+				var img = document.getElementById('img_check_' + types[i]);
+				if(img != undefined) 
+					img.src= image_dir + 'box_empty.gif';
+			}
+			var img = document.getElementById('img_check_' + type);
+			img.src= image_dir + 'box_checked.gif';
+		}
+	}
+	[calc]
+		return join "\n", @els, '';
+	[/calc]
+</script>
+<br>
+			<A HREF="javascript:checkType('all')"><img id="img_check_all" src="__UI_IMG__box_empty.gif" border=0>Check all</A>
+			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+			<A HREF="javascript:checkType('none')"><img id="img_check_none" src="__UI_IMG__box_empty.gif" border=0>Uncheck all</A>
+[loop list="shipped pending canceled partial"]
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+		<A HREF="javascript:checkType('[loop-code]')">
+			<img id="img_check_[loop-code]" src="__UI_IMG__box_empty.gif" border=0>Check all [loop-code]
+		</A>
+[/loop]
 [/if]
-</table>
+
+[output name=bottom_of_form]
 </FORM>
+[output]
+
 <!-- ----- END REAL STUFF ----- -->
 
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ version: $Id: order.html,v 2.11 2002/11/04 14:48:27 mheins Exp $ -->
+<!-- page: @@MV_PAGE@@ version: $Id: order.html,v 2.12 2003/01/14 02:25:50 mheins Exp $ -->



2.11      +3 -1      interchange/dist/lib/UI/pages/admin/order_status.html


rev 2.11, prev_rev 2.10
Index: order_status.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/order_status.html,v
retrieving revision 2.10
retrieving revision 2.11
diff -u -r2.10 -r2.11
--- order_status.html	4 Nov 2002 14:48:27 -0000	2.10
+++ order_status.html	14 Jan 2003 02:25:50 -0000	2.11
@@ -148,6 +148,8 @@
 [table-editor 
 	table=transactions
 	key="[cgi order]"
+	output_map=1
+	button_delete=1
 	form-name=tform
 	table-width="100%"
 	next-text="Update status only, no ship function"
@@ -179,4 +181,4 @@
 </script>
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ version: $Id: order_status.html,v 2.10 2002/11/04 14:48:27 mheins Exp $ -->
+<!-- page: @@MV_PAGE@@ version: $Id: order_status.html,v 2.11 2003/01/14 02:25:50 mheins Exp $ -->



2.9       +314 -385  interchange/dist/lib/UI/pages/admin/order_view.html


rev 2.9, prev_rev 2.8
Index: order_view.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/order_view.html,v
retrieving revision 2.8
retrieving revision 2.9
diff -u -r2.8 -r2.9
--- order_view.html	27 Oct 2002 04:36:04 -0000	2.8
+++ order_view.html	14 Jan 2003 02:25:50 -0000	2.9
@@ -1,6 +1,5 @@
 [set page_title][L]Order manager[/L]: [L]View order[/L][/set]
 [set ui_class]Orders[/set]
-[set page_banner][L]View order[/L][/set]
 [set help_name]order.view[/set]
 [set icon_name]icon_orders.gif[/set]
 @_UI_STD_HEAD_@
@@ -26,403 +25,332 @@
 	[bounce page="[scratch ui_bounce]"]
 [/if]
 
-[if scratch ui_message]
-<BLOCKQUOTE>
-	[scratch ui_message]
-	[set ui_message][/set]
-</BLOCKQUOTE>
-<p>
-&nbsp;
-[/if]
-
-
 <!-- ----- BEGIN REAL STUFF ----- -->
 [update values]
 [perl tables=country]### pre-open database for calcs below[/perl] 
-[loop list="[value-extended order]"]
-
-<table __UI_T_PROPERTIES__>
-<tr>
-<td colspan=6 class=rborder><img src="bg.gif" height=1></td>
-</tr>
-
-<tr>
-<td colspan=6 align=left class=rnorm>
-<b>[L]Order number[/L]: [loop-code] [L]Order date[/L]: [convert-date][loop-data transactions order_date][/convert-date]</b>
-</td>
-</tr>
 
-<tr>
-<td colspan=6 align=left class=rnorm>
-<b>[L]Customer[/L]: 
-[if-loop-data transactions username]
-<A HREF="[area
+[loop list="[value-extended order]"]
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+   <tr> 
+      <td> 
+         <table width="100%" border="0" cellpadding="6" cellspacing="1" class="rseparator">
+            <tr> 
+               <td width="25%" nowrap class="block4bold">User Name: &nbsp; <a href="[area href="admin/customer_view" form="customer=[loop-data transactions username]"]" title="View customer"><span class="maincontent">[loop-data transactions username]</span></a></td>
+               <td width="25%" nowrap class="block4bold">
+			   	Order Status: &nbsp;
+					[page href="admin/order_status" form="order=[loop-code]"]
+						<span class="alert">Pending</span>
+					</a>
+					[if-loop-data transactions archived == 1]
+					([L]archived[/L])
+					[/if-loop-data]
+					[if-loop-data transactions deleted == 1]
+					([L]deleted[/L])
+					[/if-loop-data]
+					
+				</td>
+               <td width="25%" nowrap class="block4bold">
+			   		
+					Affiliate: &nbsp;
+					[if-loop-data transactions affiliate]
+						[page href="admin/affiliate"
+							  form="affiliate=[loop-data transactions affiliate]"
+						]<span class="maincontent">[loop-data transactions affiliate]</span></A>
+					[else]
+							<span class="maincontent">none</span>
+					[/else]
+					[/if-loop-data]
+				</td>
+                <td width="25%" nowrap class="block4bold">
+			   		Order Date: &nbsp; <span class="maincontent">
+						[convert-date fmt="%b %e, %Y %l:%M %P"][loop-data transactions order_date][/convert-date]
+					</span>
+				</td>
+            </tr>
+         </table>
+      </td>
+   </tr>
+   <tr> 
+      <td height="6"><img src="bg.gif" width="1" height="6"></td>
+   </tr>
+   <tr> 
+      <td> 
+         <table width="100%" border="0" cellspacing="0" cellpadding="0">
+            <tr> 
+               <!-- CUSTOMER DETAILS -->
+		[loop prefix=customer list="[loop-data transactions username]"]
+               <td width="33%" valign="top"> 
+                  <table width="100%" height="160" border="0" cellpadding="6" cellspacing="1" class="rseparator">
+                     <tr> 
+               
+                        <td height="1%" class="block4"><a href="[area href='admin/customer_view' form='customer=[loop-data transactions username]']">Customer Details</a></td>
+                     </tr>
+                     <tr> 
+                        <td height="99%" valign="top" class="block4"> 
+                           <table width="100%" border="0" cellspacing="0" cellpadding="1">
+                              <tr> 
+                                 <td width="30%" class="block4bold">Customer:</td>
+                                 <td width="70%" class="maincontent"><a href="[area href='admin/customer_view' form='customer=[loop-data transactions username]']">[customer-data userdb fname] [customer-data userdb lname]</a> 
+                                 </td>
+                              </tr>
+                              <tr> 
+                                 <td class="block4bold"> [L]Company[/L]:</td>
+                                 <td class="maincontent">[customer-data userdb company]</td>
+                              </tr>
+                              <tr> 
+                                 <td nowrap class="block4bold">[L]Home phone[/L]:</td>
+                                 <td class="maincontent">[customer-data userdb phone_night]</td>
+                              </tr>
+                              <tr> 
+                                 <td nowrap class="block4bold"> [L]Work phone[/L]:</td>
+                                 <td class="maincontent">[customer-data userdb phone_night]</td>
+                              </tr>
+                              <tr> 
+                                 <td class="block4bold">[L]Email[/L]:</td>
+                                 <td class="maincontent"><a href="mailto:[customer-data userdb email]">[loop-data transactions email]</a></td>
+                              </tr>
+                              <tr> 
+                                 <td nowrap class="block4bold">[L]Payment type[/L]:</td>
+                                 <td class="maincontent">[loop-data transactions payment_method]</td>
+                              </tr>
+                              <tr> 
+                                 <td height="15" colspan="2" class="block4bold"><img src="bg.gif" width="1" height="1"></td>
+                              </tr>
+                           </table>
+                        </td>
+                     </tr>
+                  </table>
+               </td>
+		[/loop]
+               <td width="3"><img src="bg.gif" width="3" height="1"></td>
+               <!-- BILLING DETAILS -->
+               <td width="33%" valign="top"> 
+                  <table width="100%" height="160" border="0" cellpadding="6" cellspacing="1" class="rseparator">
+                     <tr> 
+                        <td height="1%" class="block4"><a href="#">Billing Details</a></td>
+                     </tr>
+                     <tr> 
+                        <td height="99%" valign="top" class="block4"> 
+[if-loop-data transactions b_address1]
+	[loop prefix=bill list="[loop-code]"]
+                           <table width="100%" border="0" cellspacing="0" cellpadding="1">
+                              <tr> 
+                                 <td width="30%" class="block4bold">[L]Name[/L]:</td>
+                                 <td width="70%" class="maincontent"><A HREF="[area
 				href=__UI_BASE__/customer_view
 				arg="[loop-data transactions username]"
-		]"><u>[loop-data transactions fname] [loop-data transactions lname]</u></A>
-[else]
-		[loop-data transactions fname] [loop-data transactions lname]
-[/else]
-[/if-loop-data]
-		</b>
-</td>
-</tr>
-
-<!-- ----- Affiliate Check ----- -->
-[if-loop-data transactions affiliate]
-<tr>
-<td colspan=6 align=left class=rnorm>
-<b>[L]Affiliate[/L]: [data table=affiliate column=name key="[loop-data transactions affiliate]"]</b>
-</td>
-</tr>
-[/if-loop-data]
-
-<tr>
-<td colspan=2 valign=top>
-
-<!-- ----- Customer information ----- -->
-
-<table>
-<tr><td align=right>
-<font size=2><b> [L]Company[/L]: </b></font>
-</td><td><font size=2>[loop-data transactions company]</font></td></tr>
-
-<tr><td align=right>
-<font size=2><b> [L]Home phone[/L]: </b></font>
-</td><td><font size=2>[loop-data transactions phone_night]</font></td></tr>
-
-<tr><td align=right>
-<font size=2><b> [L]Work phone[/L]: </b></font>
-</td><td><font size=2>[loop-data transactions phone_day]</font></td></tr>
-
-<tr><td align=right>
-<font size=2><b> [L]Email[/L]: </b></font>
-</td><td><font size=2> <a href="mailto:[loop-data transactions email]"><U>[loop-data transactions email]</U></a></font></td></tr>
-
-<tr><td align=right>
-<font size=2><b> [L]Payment type[/L]: </b></font>
-</td><td><font size=2>[loop-data transactions payment_method]</a></font></tr>
-
-[if-loop-data transactions order_id]
-<tr><td align=right>
-<font size=2><b> [L]Payment ID[/L]: </b></font>
-</td><td><font size=2>[loop-data transactions order_id]</a></font></tr>
-[/if-loop-data]
-
-<tr>
-	<td colspan=2>&nbsp;</td>
-</tr>
-
-<tr>
-	<td align=right>&nbsp;</td>
-	<td>[page href="__UI_BASE__/flex_editor"
-			  form="
-			  	mv_data_table=transactions
-				item_id=[loop-code]
-				ui_return_to=__UI_BASE__/order
-			"][L]Edit order[/L]</a>
-	</td>
-</tr>
-
-[if type=file term="[either]__ORDER_DIRECTORY__[or]orders[/either]/[loop-code]"]
-<tr>
-	<td align=right>&nbsp;</td>
-	<td>[page href="process/[loop-code].pgp"
-			  add_dot_html=0
-			  form="
-			  	deliver_encrypted=1
-				mv_todo=return
-				mv_nextpage=@@MV_PAGE@@
-				order=[loop-code]
-			"][L]Decrypt Credit Card[/L]</a>
-	</td>
-</tr>
-[/if]
-
-</table>
-
-</td><td valign=top colspan=4>
-[set bill_address]
-[loop-data transactions b_fname] [loop-data transactions b_lname]<br>
-[loop-data transactions b_address1]<br>
-[if-loop-data transactions b_address2]
-[loop-data transactions b_address2]<br>
-[/if-loop-data]
-[loop-data transactions b_city], [loop-data transactions b_state] [loop-data transactions b_zip]<br>
-[loop-calc]
-	my $c = q{[loop-data transactions b_country]};
-	return if '__SHIP_DEFAULT_COUNTRY__' eq $c;
-	my $name = tag_data('country', 'name', $c);
-	return qq{$name ($c)<br>};
-[/loop-calc]
-[/set]
-
-[set ship_address]
-[loop-data transactions fname] [loop-data transactions lname]<br>
-[loop-data transactions address1]<br>
-[if-loop-data transactions address2]
-[loop-data transactions address2]<br>
-[/if-loop-data]
-[loop-data transactions city], [loop-data transactions state] [loop-data transactions zip]<br>
-[loop-calc]
-	my $c = q{[loop-data transactions country]};
-	return if '__SHIP_DEFAULT_COUNTRY__' eq $c;
-	my $name = tag_data('country', 'name', $c);
-	return qq{$name ($c)<br>};
-[/loop-calc]
-[/set]
-
-<font size=2>
-<p>
-[if-loop-data transactions username]
-<A HREF="[area
-				href=__UI_BASE__/flex_editor
-				form=|
-					ui_return_to=__UI_BASE__/order_view
-					ui_return_to=order=[cgi order]
-					ui_hide_key=1
-					ui_data_fields=username b_company b_fname b_lname b_address1 b_address2 b_city b_state b_zip b_country b_email b_phone_day b_phone_night
-					page_title=Customer: [loop-data transactions fname] [loop-data transactions lname]
-					item_id=[loop-data transactions username]
-					mv_data_table=userdb
-				|
-		]"><b><u>[L]Bill To[/L]</u>:</b></A>
-[else]
-		<b>[L]Bill To[/L]:</b>
-[/else]
-[/if-loop-data]
-<blockquote>
-[if-loop-data transactions b_address1]
-[scratch bill_address]
-[else]
-[scratch ship_address]
-[/else]
-[/if-loop-data]
-</blockquote>
-
-<b>
-[if-loop-data transactions username]
-<A HREF="[area
-				href=__UI_BASE__/flex_editor
-				form=|
-					ui_return_to=__UI_BASE__/order_view
-					ui_return_to=mv_arg=[cgi order]
-					ui_hide_key=1
-					ui_data_fields=username company fname lname address1 address2 city state zip country email phone_day phone_night
-					page_title=Customer: [loop-data transactions fname] [loop-data transactions lname]
-					item_id=[loop-data transactions username]
-					mv_data_table=userdb
-				|
-		]"><b><u>[L]Ship To[/L]</u>:</b></A>
+		]"><u>[loop-data transactions b_fname] [loop-data transactions b_lname]</A>
+                                 </td>
+                              </tr>
+							  [if-bill-data transactions b_company]
+                              <tr> 
+                                 <td width="30%" class="block4bold">[L]Company[/L]:</td>
+                                 <td width="70%" class="maincontent">
+								 	[loop-data transactions b_company]
+                                 </td>
+                              </tr>
+							  [/if-bill-data]
+                              <tr> 
+                                 <td valign="top" class="block4bold">[L]Address[/L]:</td>
+                                 <td class="maincontent">
+								 [loop-data transactions b_address1]
+								 [if-bill-data transactions b_address2]
+								 <br>
+								 [loop-data transactions b_address2]
+								 [/if-bill-data]
+								 </td>
+                              </tr>
+							  [if-bill-data transactions b_country =~ /^US|^CA/]
+                              <tr> 
+                                 <td class="block4bold">[L]City, State, Zip[/L]:</td>
+                                 <td class="maincontent">[loop-data transactions b_city], [loop-data transactions state]  [loop-data transactions zip]</td>
+                              </tr>
+							  [else]
+                              <tr> 
+                                 <td class="block4bold">[L]City[/L]:</td>
+                                 <td class="maincontent">[loop-data transactions b_city]</td>
+                              </tr>
+							  		[if-bill-data transactions b_state]
+                              <tr> 
+                                 <td class="block4bold">[L]State[/L]:</td>
+                                 <td class="maincontent">[loop-data transactions b_state]</td>
+                              </tr>
+								    [/if-bill-data]
+							  		[if-bill-data transactions b_zip]
+                              <tr> 
+                                 <td class="block4bold">[L]Postal code[/L]:</td>
+                                 <td class="maincontent">[loop-data transactions b_zip]</td>
+                              </tr>
+								    [/if-bill-data]
+							  [/else]
+							  [/if-bill-data]
+                              <tr> 
+                                 <td class="block4bold">[L]Country[/L]:</td>
+                                 <td class="maincontent">[data table=country col=name key="[loop-data transactions b_country]"]</td>
+                              </tr>
+                              <tr> 
+                                 <td height="15" colspan="2" class="block4bold"><img src="bg.gif" width="1" height="1"></td>
+                              </tr>
+                           </table>
+		[/loop]
 [else]
-		<b>[L]Ship To[/L]:</b>
+						<i>Same as shipping address</i>
 [/else]
 [/if-loop-data]
-<br>
-<blockquote>
-[scratch ship_address]
-</blockquote>
-</font>
-
-<P>
-<B>[L]Status[/L]:<B> [page href=__UI_BASE__/order_status form="order=[loop-code]"]
+                        </td>
+                     </tr>
+                  </table>
+               </td>
+               <td width="3"><img src="bg.gif" width="3" height="1"></td>
+               <!-- SHIPPING DETAILS -->
+               <td width="34%" valign="top"> 
+                  <table width="100%" height="160" border="0" cellpadding="6" cellspacing="1" class="rseparator">
+                     <tr> 
+                        <td height="1%" class="block4"><a href="#">Shipping Details</a></td>
+                     </tr>
+                     <tr> 
+                        <td height="99%" valign="top" class="block4"> 
+                           <table width="100%" border="0" cellspacing="0" cellpadding="1">
+                              <tr> 
+                                 <td width="30%" class="block4bold">[L]Name[/L]:</td>
+                                 <td width="70%" class="maincontent"><A HREF="[area
+				href=__UI_BASE__/customer_view
+				arg="[loop-data transactions username]"
+		]"><u>[loop-data transactions fname] [loop-data transactions lname]</A>
+                                 </td>
+                              </tr>
+							  [if-loop-data transactions company]
+                              <tr> 
+                                 <td width="30%" class="block4bold">[L]Company[/L]:</td>
+                                 <td width="70%" class="maincontent">
+								 	[loop-data transactions company]
+                                 </td>
+                              </tr>
+							  [/if-loop-data]
+                              <tr> 
+                                 <td valign="top" class="block4bold">[L]Address[/L]:</td>
+                                 <td class="maincontent">
+								 [loop-data transactions address1]
+								 [if-loop-data transactions address2]
+								 <br>
+								 [loop-data transactions address2]
+								 [/if-loop-data]
+								 </td>
+                              </tr>
+							  [if-loop-data transactions country =~ /^US|^CA/]
+                              <tr> 
+                                 <td class="block4bold">[L]City, State, Zip[/L]:</td>
+                                 <td class="maincontent">[loop-data transactions city], [loop-data transactions state]  [loop-data transactions zip]</td>
+                              </tr>
+							  [else]
+                              <tr> 
+                                 <td class="block4bold">[L]City[/L]:</td>
+                                 <td class="maincontent">[loop-data transactions city]</td>
+                              </tr>
+							  		[if-loop-data transactions state]
+                              <tr> 
+                                 <td class="block4bold">[L]State[/L]:</td>
+                                 <td class="maincontent">[loop-data transactions state]</td>
+                              </tr>
+								    [/if-loop-data]
+							  		[if-loop-data transactions zip]
+                              <tr> 
+                                 <td class="block4bold">[L]Postal code[/L]:</td>
+                                 <td class="maincontent">[loop-data transactions zip]</td>
+                              </tr>
+								    [/if-loop-data]
+							  [/else]
+							  [/if-loop-data]
+                              <tr> 
+                                 <td class="block4bold">[L]Country[/L]:</td>
+                                 <td class="maincontent">[data table=country col=name key="[loop-data transactions country]"]</td>
+                              </tr>
+                              <tr> 
+                                 <td height="15" colspan="2" class="block4bold"><img src="bg.gif" width="1" height="1"></td>
+                              </tr>
+                           </table>
+                        </td>
+                     </tr>
+                  </table>
+               </td>
+            </tr>
+         </table>
+      </td>
+   </tr>
+   <tr> 
+      <td height=6><img src="bg.gif" width=1 height=6></td>
+   </tr>
+   <tr> 
+      <td> 
+         <!-- CUSTOMERS ORDER GRID -->
+         <table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
+            <tr> 
+               <td width="14%" class=rhead style="padding: 5px">[L]Status[/L]</td>
+               <td width="14%" class=rhead style="padding: 5px">[L]SKU[/L]</td>
+               <td width="14%" class=rhead style="padding: 5px">[L]Name[/L]</td>
+               <td width="14%" class=rhead style="padding: 5px; text-align: right">[L]Qty[/L]</td>
+               <td width="14%" class=rhead style="padding: 5px; text-align: right">[L]Unit Price[/L]</td>
+               <td width="14%" class=rhead style="padding: 5px; text-align: right">[L]Total[/L]</td>
+            </tr>
+[query list=1 sql="select * from orderline where order_number = '[loop-code]'"]
+            <tr class="[sql-alternate 2]rowalt[else]rownorm[/else][/sql-alternate]"> 
+               <td style="padding: 5px">[page href="admin/order_status"
+			   							 form="order=[loop-code]"
+									]
                 [display    table=transactions
                             column=status
                             key="[loop-code]"
                             arbitrary=order_view
                 ]</A>
-[set bill_address][/set]
-[set ship_address][/set]
-</td></tr>
-
-<!-- ----- Order information ----- -->
-
-<tr>
-<td width=50 align=center class=rborder>
-<font size=2>
-<b>[L]Status[/L]</b></font></td>
-
-<td width=230 align=left class=rborder>
-<font size=2>
-<b>[L]Name[/L]</b></font></td>
-
-<td width=100 align=left class=rborder>
-<font size=2>
-<b>[L]SKU[/L]</b></font></td>
-
-<td width=50 align=right class=rborder>
-<font size=2>
-<b>[L]Qty.[/L]</b></font></td>
-
-<td width=70 align=right class=rborder>
-<font size=2>
-<b>[L]Each[/L]</b></font></td>
-
-<td width=70 align=right class=rborder>
-<font size=2>
-<b>[L]Discount[/L]</b></font></td>
-
-<td width=80 align=right class=rborder>
-<font size=2>
-<b>[L]Total[/L]</b></font></td>
-</tr>
-[query st=db sql="select * from orderline where order_number = '[loop-data transactions order_number]'" list=1]
-<tr><td width=50 align=center class=rnorm>
-<font size=2>
 [calc]
 	$total_weight += ([field field=weight key="[sql-param sku]"] + 0 || 0) * [sql-data orderline quantity];
 	return;
 [/calc]
-<B>[sql-filter loc upper][sql-data orderline status][/sql-filter]</B>
-<BR>&nbsp;
-</font></td>
-
-<td width=330 class=rnorm>
-<font size=2>
-[either][sql-data orderline description][or][data table=__ProductFiles_0__ col=description key="[sql-data orderline sku]"][/either]
-[if-sql-data orderline size]
-<BR>
-[L]Size[/L]: [sql-data orderline size]
-[/if-sql-data]
-[if-sql-data orderline color]
-<BR>
-[L]Color[/L]: [sql-data orderline color]
-[/if-sql-data]
-
-[if-sql-data orderline options]
-<BR>
-[L]Options[/L]: [sql-data orderline options]
-[/if-sql-data]
-</font></td>
-
-<td width=100 align=left class=rnorm>
-<font size=2>
-[sql-data orderline sku]
-</font></td>
-
-<td width=50 align=right class=rnorm>
-<font size=2>
-[sql-data orderline quantity]
-</font></td>
-
-<td width=70 align=right class=rnorm>
-<font size=2>
-[currency][sql-data orderline price][/currency]
-</font></td>
-
-<td width=70 align=right class=rnorm>
-<font size=2>
-&nbsp;[sql-data orderline discount]
-</font></td>
-
-<td width=80 align=right class=rborder>
-<font size=2>
-[currency][sql-data orderline subtotal][/currency]
-
-</font></td>
-</tr>
+               <td style="padding: 5px">[sql-param sku]</td>
+               <td style="padding: 5px">[sql-filter 30.][sql-param description][/sql-filter]</td>
+               <td align=right style="padding: 5px">[sql-param quantity]</td>
+               <td align=right style="padding: 5px">[sql-param price]</td>
+               <td align=right style="padding: 5px">[sql-param subtotal]</td>
+            </tr>
 [/query]
+            <tr> 
+               <td height=4 colspan=5 class=lightshade><img src="bg.gif" width=1 height=4></td>
+               <td class=lightshade><img src="bg.gif" width=1 height=4></td>
+            </tr>
+            <tr> 
+               <td height=39 colspan=5 align=right class=rsubbold>[L]Item Total[/L]:</td>
+               <td class=rownorm align=right>[currency][loop-data transactions subtotal][/currency]</td>
+            </tr>
+            <tr> 
+               <td colspan=5 align=right class=rsubbold>[L]Tax:[/L]</td>
+               <td class=rownorm align=right>[currency][loop-data transactions salestax][/currency]</td>
+            </tr>
+            <tr> 
+               <td colspan=5 align=right class=rsubbold>[L]Total Weight:[/L]</td>
+               <td class=rownorm align=right>[calc]$total_weight[/calc]</td>
+            </tr>
+			[if-loop-data transactions handling > 0]
+            <tr> 
+               <td colspan=5 align=right class=rsubbold>[L]Shipping[/L]</td>
+               <td class=rownorm align=right>[currency][loop-data transactions shipping][/currency]</td>
+            </tr>
+			[/if-loop-data]
+            <tr> 
+               <td colspan=5 align=right class=rsubbold>[L]Shipping[/L]</td>
+               <td class=rownorm align=right>[currency][loop-data transactions shipping][/currency]</td>
+            </tr>
+            <tr> 
+               <td colspan=5 align=right class=rsubbold>[L]GRAND TOTAL:[/L]</td>
+               <td class=rownormbold align=right>[currency][loop-data transactions total_cost][/currency]</td>
+            </tr>
+         </table>
+      </td>
+   </tr>
+</table>
 
-<!-- ----- Product total ----- -->
-
-<tr>
-<td colspan=6 align=right>
-<font size=2>[L]Product Total[/L]:</font>
-</td>
-<td align=right class=rborder>
-<font size=2>[currency][loop-data transactions subtotal][/currency]</font>
-</td>
-</tr>
-
-<!-- ----- Tax total ----- -->
-
-<tr>
-<td colspan=6 align=right>
-<font size=2>[L]Tax[/L]:</font>
-</td>
-<td align=right class=rborder>
-<font size=2>[currency][loop-data transactions salestax][/currency]</font>
-</td>
-</tr>
-
-<!-- ----- Shipping total ----- -->
-
-<tr>
-<td colspan=6 align=right>
-<font size=2>[L]Shipping[/L]: [loop-data transactions shipmode]</font>
-</td>
-<td align=right class=rborder>
-<font size=2>
-[currency][loop-data transactions shipping][/currency]</font>
-</td>
-</tr>
-
-<!-- ----- Handling total (if any) ----- -->
-
-[if-loop-data transactions handling > 0]
-<tr>
-<td colspan=6 align=right>
-<font size=2>[L]Handling[/L]:</font>
-</td>
-<td align=right class=rborder>
-<font size=2>
-[currency][loop-data transactions handling][/currency]</font>
-</td>
-</tr>
-[/if-loop-data]
-
-<!-- ----- Grand total ----- -->
-
-<tr>
-<td colspan=6 align=right>
-<font size=3><b>[L]Grand total[/L]:</b></font>
-</td>
-<td align=right class=rborder>
-<font size=3><b>[currency][loop-data transactions total_cost][/currency]<br></b></font>
-</td>
-</tr>
-
-<!-- ----- Weight total ----- -->
-
-<tr></tr>
-
-<tr>
-<td colspan=6 align=right>
-<font size=2>[L]Total weight[/L]:</font>
-</td>
-<td align=right class=rborder>
-<font size=2>[calc] $total_weight [/calc]</font>
-</td>
-</tr>
-
-<!-- ----- Volume total ----- -->
-
-<tr>
-<td colspan=6 align=right>
-<font size=2>[L]Total volume[/L]:</font>
-</td>
-<td align=right class=rborder>
-<font size=2>0</font>
-</td>
-</tr>
-<tr>
-<td colspan=6>
-<b>[L]Comments[/L]:</b>
-</td>
-</tr>
-
-<tr>
-<td colspan=7 align=left class=rnorm>
-<pre>[loop-data transactions comments]</pre>
-</td>
-</tr>
-
-<tr>
-<td colspan=7 class=rborder><img src="bg.gif" height=1></td>
-</tr>
+[seti page_banner][L]View Order[/L]: [loop-code][/seti]
 
-</table>
-<SMALL>
+[output name=bottom_buttons]
 <form action="[area __UI_BASE__/order]" method=post>
 <input type=hidden name=mv_session_id value="[data session id]">
 <input type=hidden name=mv_action value=back>
@@ -433,25 +361,26 @@
 viewnext=
 vieworder=
 [/set]
-<input type=submit name=mv_click value="[L]Return[/L]">
-<input type=submit name="vieworder" value="[L]View next order[/L]">
+<input type=submit name=mv_click value="[L]Return[/L]" class=s3>
+<input type=submit name="vieworder" value="[L]View next order[/L]" class=s3>
 
 [if-loop-data transactions archived]
-<input type=submit name="unarchiveorder" value="[L]Un-archive order and view next[/L]">
+<input type=submit name="unarchiveorder" value="[L]Un-archive order and view next[/L]" class=s3>
 [else]
-<input type=submit name="archiveorder" value="[L]Archive order and view next[/L]">
+<input type=submit name="archiveorder" value="[L]Archive order and view next[/L]" class=s3>
 [/else]
 [/if-loop-data]
 [if-mm advanced order=d]
 <input type=submit name="deleteorder" value="[L]Delete order and view next[/L]" 
- onClick="return confirm('[L]Are you sure you want to delete this order?[/L]')">
+ onClick="return confirm('[L]Are you sure you want to delete this order?[/L]')" class=s3>
 [/if-mm]
-
 </form>
-</SMALL>
+
+[output]
 
 [/loop]
+
 <!-- ----- END REAL STUFF ----- -->
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ version: $Id: order_view.html,v 2.8 2002/10/27 04:36:04 mheins Exp $ -->
+<!-- page: @@MV_PAGE@@ version: $Id: order_view.html,v 2.9 2003/01/14 02:25:50 mheins Exp $ -->



2.4       +1 -0      interchange/dist/lib/UI/pages/admin/payment.html


rev 2.4, prev_rev 2.3
Index: payment.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/payment.html,v
retrieving revision 2.3
retrieving revision 2.4
diff -u -r2.3 -r2.4
--- payment.html	18 Aug 2002 15:38:26 -0000	2.3
+++ payment.html	14 Jan 2003 02:25:50 -0000	2.4
@@ -3,6 +3,7 @@
 [set ui_class]Admin[/set]
 [set help_name]payment.main[/set]
 [set icon_name]icon_config.gif[/set]
+[set page_perm]payment[/set]
 @_UI_STD_HEAD_@
 
 <!-- ----- BEGIN REAL STUFF ----- -->



2.7       +30 -58    interchange/dist/lib/UI/pages/admin/preferences.html


rev 2.7, prev_rev 2.6
Index: preferences.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/preferences.html,v
retrieving revision 2.6
retrieving revision 2.7
diff -u -r2.6 -r2.7
--- preferences.html	18 Aug 2002 08:09:05 -0000	2.6
+++ preferences.html	14 Jan 2003 02:25:50 -0000	2.7
@@ -7,17 +7,11 @@
 
 <!-- ----- BEGIN REAL STUFF ----- -->
 [calc] $Config->{NoSearch} = ''; return; [/calc]
-<center>
-<table __UI_T_PROPERTIES__>
 
-<tr>
-<td class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
-
-<tr>
-  <td align=left class=rnorm>
-		<table style="margin-left: 20px" width="70%">
-		[table-organize columnize=1 cols=4]
+<div class=titlebox>Edit Preferences</div>
+
+<table style="margin-left: 20px" width="70%">
+	[table-organize columnize=1 cols=4]
 [loop search="
 		fi=variable
 		st=db
@@ -29,7 +23,7 @@
 "]
 <TD width="25%">
 [if-loop-pos 0]
-<a href="[area href="__UI_BASE__/flex_select" form=|
+<a href="[area href="__UI_BASE__/pref_select" form=|
 				mv_data_table=variable
 				ui_meta_specific=1
 				ui_hide_key=1
@@ -41,7 +35,7 @@
 				help_name=knar.main
 |]">[loop-code]</A>
 [else]
-<a href="[area href="__UI_BASE__/flex_select" form=|
+<a href="[area href="__UI_BASE__/pref_select" form=|
 				mv_data_table=variable
 				ui_meta_specific=1
 				ui_hide_key=1
@@ -61,13 +55,23 @@
 		[/table-organize]
 		</table>
 
+[output name=search_box]
+<FORM ACTION="[process href="__UI_BASE__/pref_select"]" METHOD=GET>
+<INPUT TYPE=hidden NAME=mv_session_id VALUE="[data session id]">
+<INPUT TYPE=hidden NAME=mv_data_table    VALUE="variable">
+<INPUT TYPE=hidden NAME=ui_meta_specific VALUE="1">
+<INPUT TYPE=hidden NAME=mv_action        VALUE=back>
+
+<span class="s3">Search for a preference:</span><input NAME=ui_text_qualification size=16 class=s3><INPUT TYPE=submit VALUE="[L]Search[/L]" class=s3>
+</FORM>
+
+[output name=""]
+
+
 [if-mm super]
-<tr>
-<td class=rspacer><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
+	<br>
+<div class=titlebox>Table Editor Control</div>
 
-<tr>
-<td class=rnorm>
 	[if type=explicit compare=`
 			return
 				(! defined $Values->{ui_meta_force} and $Variable->{UI_META_LINK})
@@ -91,46 +95,22 @@
 				ui_meta_force=1"][L]Temporarily turn on meta links in database edit[/L]</A>
 	[/else]
 	[/if]
-	</td>
-</tr>
+	<br>
+	[page href="__UI_BASE__/edit_metaconfig"]Configure defaults for table editor</A>
+<br>
 [/if-mm]
 
-<tr>
-<td class=rspacer><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
-
-<tr>
-	<td class=rnorm>
-	<table width="100%">
-		<tr>
-			<td width="30%">
 [if !variable UI_REGISTERED]
-<a href="http://interchange.redhat.com/cgi-bin/ic/register.html">[L]Register[/L]</a>
+<br>
+<div class=titlebox>Register </div>
+<a href="http://interchange.redhat.com/cgi-bin/ic/register.html" title="Completely optional">[L]Register[/L]</a>
 [/if]
 
-			</td>
-			<td>
-<FORM ACTION="[process href="__UI_BASE__/flex_select"]" METHOD=GET>
-<INPUT TYPE=hidden NAME=mv_session_id VALUE="[data session id]">
-<INPUT TYPE=hidden NAME=mv_data_table    VALUE="variable">
-<INPUT TYPE=hidden NAME=ui_meta_specific VALUE="1">
-<INPUT TYPE=hidden NAME=mv_action        VALUE=back>
-Search for a preference: <input NAME=ui_text_qualification size=16><INPUT TYPE=submit VALUE="[L]Search[/L]">
-</FORM>
-			</td>
-		</tr>
-	</table>
-
-</td></tr>
-
-<tr>
-	<td class=rspacer><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
+<br>
+<br>
 
-<tr>
-	<td class=rnorm valign=top>
+		<div class=titlebox>[L]Personal CSS[/L]</div>
 		<form action="[process href="@@MV_PAGE@@"]">
-		<b>[L]Personal CSS[/L]</b>
 		[if cgi personal_css]
 			[if type=explicit compare="[userdb function=save profile=ui]"]
 				<span class=cmessage>(saved successfully)</span>
@@ -153,15 +133,7 @@
 		<textarea name=personal_css rows=24 cols=50>[value personal_css]</textarea>
 				</td>
 		</form>
-	</td>
-</tr>
-
-<tr>
-<td class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
 
-</table>
-</center>
 <!-- ----- END REAL STUFF ----- -->
 
 @_UI_STD_FOOTER_@



2.5       +18 -18    interchange/dist/lib/UI/pages/admin/reconfig.html


rev 2.5, prev_rev 2.4
Index: reconfig.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/reconfig.html,v
retrieving revision 2.4
retrieving revision 2.5
diff -u -r2.4 -r2.5
--- reconfig.html	28 Oct 2002 01:58:35 -0000	2.4
+++ reconfig.html	14 Jan 2003 02:25:50 -0000	2.5
@@ -5,32 +5,32 @@
 [set help_name]reconfig[/set]
 [set ui_class]Admin[/set]
 [set page_title][L]Reconfiguring[/L]....[/set]
-[calc]
-	my $hk = $Tag->global_value('Global::HouseKeeping');
-	$hk += 2;
-	$Scratch->{its} = join " ", 1 .. $hk;
-	return;
-[/calc]
-[set icon_name]icon_regen.gif[/set]
-@_UI_STD_HEAD_@
+[tmp meta_header]
+<META HTTP-EQUIV="refresh" content="[calc]
+		my $secs = $Tag->global_value('Global::HouseKeeping') || 10;
+		$secs += 2;
+		my $url = $Tag->area({
+							href => 'admin/genconfig',
+							form => 'start_at_index=1',
+							});
+		return "$secs; URL=$url";
+		[/calc]">
+[/tmp]
 
-[L]Reconfiguring catalog[/L]: ...<BR>
-[tmp name=RECONFIG_STATUS send=1][reconfigure][/tmp]
+[set icon_name]icon_regen.gif[/set]
 
-[reconfig-wait]
+@_UI_STD_HEAD_@
 
-[if scratch possible_timeout]
- [L]WARNING: Reconfiguration may have timed out[/L].<BR>
-[L]Last config[/L]: [reconfig-time]
+[L]Reconfiguring catalog[/L]...
+[if type=explicit compare="[reconfigure]"]
+[L]Catalog reconfigure request was sent successfully, please wait....[/L]
 [else]
-[L]SUCCESS[/L], config time [file name=`"etc/status.$Config->{CatalogName}"`]
-[value name=ui_changes_made set=""]
+[L]Catalog reconfigure request failed.[/L]
 [/else]
 [/if]
-(<A HREF="[area href="[either][data session arg][or]__UI_BASE__/index[/either]"]">[L]return[/L]</A>)<BR>
 </HTML>
 
 <!-- ----- END REAL STUFF ----- -->
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ version: $Revision: 2.4 $ -->
+<!-- page: @@MV_PAGE@@ version: $Revision: 2.5 $ -->



1.5       +36 -30    interchange/dist/lib/UI/pages/admin/search_replace.html


rev 1.5, prev_rev 1.4
Index: search_replace.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/search_replace.html,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- search_replace.html	18 Aug 2002 08:09:05 -0000	1.4
+++ search_replace.html	14 Jan 2003 02:25:50 -0000	1.5
@@ -29,19 +29,17 @@
 <input type=hidden name=mv_action value=back>
 
 <table border=0 __UI_T_PROPERTIES__>
-<tr>
-<td colspan=2 class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
-
-<tr class=rnorm>
-<td width=25%>
-
-1. Choose a table to operate on:
+<tr class=rownorm>
+<td class=clabel>
+[calc]++$numbering[/calc].
+</td>
+<td class=clabel width="25%">
+Choose a table to operate on:
 
 </td>
-<td>
+<td class=cdata width="100%">
 [if !cgi area_table]
-	[value name=area_table set="[either][cgi mv_data_table][or]__ProductFiles_1__[/either]" hide=1]
+	[value name=area_table set="[either][cgi mv_data_table][or]__ProductFiles_0__[/either]" hide=1]
 	[value name=area_column set=category hide=1]
 [/if]
 <select name="area_table"
@@ -59,11 +57,14 @@
 </select>
 </td>
 </tr>
-<tr>
-<td>
-2. Choose a column to operate on:
+<tr class=rownorm>
+<td class=clabel>
+[calc]++$numbering[/calc].
+</td>
+<td class=clabel width="25%">
+Choose a column to operate on:
 </td>
-<td>
+<td class=cdata width="100%">
 <select name="area_column">
 <option value=""> -- none --
 [loop list="[db-columns table='[value area_table]']" option=area_column]
@@ -72,29 +73,38 @@
 </select>
 </td>
 </tr>
-<tr>
-<td>
-3. Set what to search for in that column:
+<tr class=rownorm>
+<td class=clabel>
+[calc]++$numbering[/calc].
 </td>
-<td>
+<td class=clabel width="25%">
+Set what to search for in that column:
+</td>
+<td class=cdata width="100%">
 <input name="search_for" type="text" size="30"> Case-sensitive? [display name=case_sensitive type=yesno cgi-default=1]
 <br><i>(Exact text match or regular expression)</i>
 </td>
 </tr>
-<tr>
-<td>
-4. Choose the replacement string
+<tr class=rownorm>
+<td class=clabel>
+[calc]++$numbering[/calc].
+</td>
+<td class=clabel width="25%">
+Choose the replacement string
 </td>
-<td>
+<td class=cdata width="100%">
 <input name="replace_with" type="text" size="30">
 <br><i>(Exact text to be inserted instead of search value. Replaces parenthisized text if parentheses are used.)</i>
 </td>
 </tr>
-<tr>
-<td>
-5. Click this button to do it:
+<tr class=rownorm>
+<td class=clabel>
+[calc]++$numbering[/calc].
+</td>
+<td class=clabel width="25%">
+Click this button to do it:
 </td>
-<td>
+<td class=cdata width="100%">
 [button text="Search and Replace"]
 [flag type=write table="[cgi area_table]"]
 [seti ui_failure]
@@ -176,10 +186,6 @@
 [/button]
 <BR>
 </td>
-</tr>
-
-<tr>
-<td colspan=2 class=rmarq><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
 </tr>
 
 </table>



2.6       +2 -0      interchange/dist/lib/UI/pages/admin/search_wizard.html


rev 2.6, prev_rev 2.5
Index: search_wizard.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/search_wizard.html,v
retrieving revision 2.5
retrieving revision 2.6
diff -u -r2.5 -r2.6
--- search_wizard.html	18 Aug 2002 08:09:05 -0000	2.5
+++ search_wizard.html	14 Jan 2003 02:25:50 -0000	2.6
@@ -1,6 +1,7 @@
 [seti page_title][L]Search Builder[/L][/seti]
 [set help_name]search_builder[/set]
 [set ui_class]Design[/set]
+[set display_class]type5[/set]
 [set icon_name]icon_config.gif[/set]
 [seti name=tables][list-databases][/seti]
 [seti meta_header]
@@ -232,6 +233,7 @@
 <INPUT TYPE=hidden NAME=ui_target VALUE="[cgi ui_target]">
 <INPUT TYPE=hidden NAME=ui_source_form VALUE="[cgi ui_source_form]">
 <INPUT TYPE=hidden NAME=ui_source_var VALUE="[cgi ui_source_var]">
+<INPUT TYPE=hidden NAME=display_class VALUE="[cgi display_class]">
 [return-to]
 
 <P>



2.3       +2 -0      interchange/dist/lib/UI/pages/admin/search_wizard2.html


rev 2.3, prev_rev 2.2
Index: search_wizard2.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/search_wizard2.html,v
retrieving revision 2.2
retrieving revision 2.3
diff -u -r2.2 -r2.3
--- search_wizard2.html	18 Aug 2002 08:09:05 -0000	2.2
+++ search_wizard2.html	14 Jan 2003 02:25:50 -0000	2.3
@@ -1,6 +1,7 @@
 [seti page_title]Search Builder: criteria [calc] $CGI->{current_column} + 1[/calc][/seti]
 [set help_name]search_builder[/set]
 [set ui_class]Design[/set]
+[set display_class]type5[/set]
 [set icon_name]icon_config.gif[/set]
 [seti name=tables][list-databases][/seti]
 [seti meta_header]
@@ -151,6 +152,7 @@
 <INPUT TYPE=hidden NAME=ui_target VALUE="[cgi ui_target]">
 <INPUT TYPE=hidden NAME=ui_source_form VALUE="[cgi ui_source_form]">
 <INPUT TYPE=hidden NAME=ui_source_var VALUE="[cgi ui_source_var]">
+<INPUT TYPE=hidden NAME=display_class VALUE="[cgi display_class]">
 [return-to]
 <P>
 <table __UI_T_PROPERTIES__>



2.3       +2 -0      interchange/dist/lib/UI/pages/admin/search_wizard3.html


rev 2.3, prev_rev 2.2
Index: search_wizard3.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/search_wizard3.html,v
retrieving revision 2.2
retrieving revision 2.3
diff -u -r2.2 -r2.3
--- search_wizard3.html	18 Aug 2002 08:09:05 -0000	2.2
+++ search_wizard3.html	14 Jan 2003 02:25:50 -0000	2.3
@@ -1,6 +1,7 @@
 [seti page_title]Search Builder: sorting[/seti]
 [set help_name]search_builder[/set]
 [set ui_class]Design[/set]
+[set display_class]type5[/set]
 [set icon_name]icon_config.gif[/set]
 [seti name=tables][list-databases][/seti]
 [seti meta_header]
@@ -139,6 +140,7 @@
 <INPUT TYPE=hidden NAME=ui_target VALUE="[cgi ui_target]">
 <INPUT TYPE=hidden NAME=ui_source_form VALUE="[cgi ui_source_form]">
 <INPUT TYPE=hidden NAME=ui_source_var VALUE="[cgi ui_source_var]">
+<INPUT TYPE=hidden NAME=display_class VALUE="[cgi display_class]">
 [return-to]
 <P>
 <table __UI_T_PROPERTIES__>



2.2       +1 -0      interchange/dist/lib/UI/pages/admin/search_wizard_results.html


rev 2.2, prev_rev 2.1
Index: search_wizard_results.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/search_wizard_results.html,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- search_wizard_results.html	6 Aug 2002 22:02:34 -0000	2.1
+++ search_wizard_results.html	14 Jan 2003 02:25:50 -0000	2.2
@@ -8,6 +8,7 @@
 [/if-mm]
 [seti page_title][cgi report_title][/seti]
 [set icon_name]icon_stats.gif[/set]
+[set display_class]type5[/set]
 [set ui_class]Design[/set]
 [set help_name]report[/set]
 



2.5       +1 -0      interchange/dist/lib/UI/pages/admin/ship.html


rev 2.5, prev_rev 2.4
Index: ship.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/ship.html,v
retrieving revision 2.4
retrieving revision 2.5
diff -u -r2.4 -r2.5
--- ship.html	18 Aug 2002 15:38:26 -0000	2.4
+++ ship.html	14 Jan 2003 02:25:50 -0000	2.5
@@ -2,6 +2,7 @@
 [set ui_class]Admin[/set]
 [set page_title][L]Shipping configuration[/L][/set]
 [set icon_name]icon_config.gif[/set]
+[set page_perm]shipping[/set]
 @_UI_STD_HEAD_@
 <!-- 
 	read=[calc]



2.3       +1 -0      interchange/dist/lib/UI/pages/admin/ship_data.html


rev 2.3, prev_rev 2.2
Index: ship_data.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/ship_data.html,v
retrieving revision 2.2
retrieving revision 2.3
diff -u -r2.2 -r2.3
--- ship_data.html	18 Aug 2002 08:09:05 -0000	2.2
+++ ship_data.html	14 Jan 2003 02:25:50 -0000	2.3
@@ -2,6 +2,7 @@
 [set ui_class]Admin[/set]
 [seti page_title]Shipping options: edit data for method [cgi ui_shipmode][/seti]
 [seti page_banner]Shipping options: edit data for method <I>[cgi ui_shipmode]</I>[/seti]
+[set page_perm]shipping[/set]
 [set icon_name]icon_config.gif[/set]
 @_UI_STD_HEAD_@
 



2.2       +1 -0      interchange/dist/lib/UI/pages/admin/ship_edit.html


rev 2.2, prev_rev 2.1
Index: ship_edit.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/ship_edit.html,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- ship_edit.html	18 Aug 2002 08:09:05 -0000	2.1
+++ ship_edit.html	14 Jan 2003 02:25:50 -0000	2.2
@@ -2,6 +2,7 @@
 [set ui_class]Admin[/set]
 [seti page_title]Shipping options: edit method [cgi ui_shipmode][/seti]
 [seti page_banner]Shipping options: edit method <I>[cgi ui_shipmode]</I>[/seti]
+[set page_perm]shipping[/set]
 [set icon_name]icon_config.gif[/set]
 [set meta_header]
 <SCRIPT LANGUAGE=JavaScript>



2.2       +1 -0      interchange/dist/lib/UI/pages/admin/ship_range.html


rev 2.2, prev_rev 2.1
Index: ship_range.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/ship_range.html,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- ship_range.html	18 Aug 2002 08:09:05 -0000	2.1
+++ ship_range.html	14 Jan 2003 02:25:50 -0000	2.2
@@ -2,6 +2,7 @@
 [set ui_class]Admin[/set]
 [set page_banner]Shipping method tables[/set]
 [set help_name]shipping.methodtables[/set]
+[set page_perm]shipping[/set]
 [set icon_name]icon_config.gif[/set]
 @_UI_STD_HEAD_@
 



2.2       +20 -3     interchange/dist/lib/UI/pages/admin/show_session.html


rev 2.2, prev_rev 2.1
Index: show_session.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/show_session.html,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- show_session.html	26 Sep 2002 04:35:02 -0000	2.1
+++ show_session.html	14 Jan 2003 02:25:50 -0000	2.2
@@ -6,10 +6,27 @@
 @_UI_STD_HEAD_@
 
 <!-- ----- BEGIN REAL STUFF ----- -->
-	[if cgi show_session]
-		<P><B>[L]Showing session[/L]: [cgi show_session]</B>
+
+[if cgi show_session]
+	<P><B>[L]Showing session[/L]: [cgi show_session]</B>
+
+(show only:
+[loop list="
+	values=Values,
+	scratch=Scratch,
+	carts=Carts,
+	errors=Errors,
+	History,
+	SCALAR=Scalars,
+	payment_stack=Payments
+" acclist=1]
+	[page href="@@MV_PAGE@@" form="
+									show_session=[cgi show_session]
+									key=[loop-code]
+									"][loop-param label]</A>
+[/loop])
 <XMP>
-[dump-session name="[cgi show_session]"]
+[dump-session name="[cgi show_session]" key="[cgi key]"]
 </XMP>
 	[else]
 	([L]last[/L]



2.10      +93 -83    interchange/dist/lib/UI/pages/admin/spread.html


rev 2.10, prev_rev 2.9
Index: spread.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/spread.html,v
retrieving revision 2.9
retrieving revision 2.10
diff -u -r2.9 -r2.10
--- spread.html	18 Oct 2002 06:00:10 -0000	2.9
+++ spread.html	14 Jan 2003 02:25:50 -0000	2.10
@@ -28,36 +28,35 @@
 
 @_UI_STD_HEAD_@
 
+[tmp extra_title]
+[loop list="[cgi mv_data_table]"]
+	[if-loop-data __UI_META_TABLE__ name]
+	<B>[loop-data __UI_META_TABLE__ name]</B>
+	[/if-loop-data]
+	[if-loop-data __UI_META_TABLE__ help_url]
+	&nbsp;&nbsp;&nbsp;<small><A HREF="[loop-data __UI_META_TABLE__ help_url]">help</A></small>
+	[/if-loop-data]
+	[if-loop-data __UI_META_TABLE__ help]
+	<i>[loop-data __UI_META_TABLE__ name]</i>
+	[/if-loop-data]
+[/loop]
+[/tmp]
+[calc]
+	$Scratch->{page_banner} .= $Scratch->{extra_title};
+	$Scratch->{page_title} .= $Scratch->{extra_title};
+	return;
+[/calc]
+
+[output name=search_box]
 <FORM ACTION="[area href="[either][cgi ui_searchpage][or]@@MV_PAGE@@[/either]"]" METHOD=GET>
 <INPUT TYPE=hidden NAME=mv_session_id VALUE="[data session id]">
 <INPUT TYPE=hidden NAME=mv_data_table    VALUE="[cgi mv_data_table]">
 <INPUT TYPE=hidden NAME=ui_meta_view     value="[cgi ui_meta_view]">
 <INPUT TYPE=hidden NAME=mv_action        VALUE=back>
 <INPUT TYPE=hidden NAME=ui_show_fields VALUE="[cgi ui_show_fields]">
-
-[if !scratch tmp_large]
-<table>
-<tr>
-<td>
-		[loop list="[cgi mv_data_table]"]
-		 	[if-loop-data __UI_META_TABLE__ name]
-		 	<B>[loop-data __UI_META_TABLE__ name]</B>
-			[/if-loop-data]
-		 	[if-loop-data __UI_META_TABLE__ help_url]
-		 	&nbsp;&nbsp;&nbsp;<small><A HREF="[loop-data __UI_META_TABLE__ help_url]">help</A></small>
-			[/if-loop-data]
-		 	[if-loop-data __UI_META_TABLE__ help]
-		 	<BR><i>[loop-data __UI_META_TABLE__ name]</i>
-			[/if-loop-data]
-		[/loop]
-</td>
-<td>
-<input NAME=ui_text_qualification size=16><INPUT TYPE=submit VALUE="[L]Limit with search[/L]">
-</td>
-</tr>
-</table>
-[/if]
+<span class=s3>[L]Limit with search[/L]:</span> <input NAME=ui_text_qualification size=16 class=s2> 
 </FORM>
+[output name=""]
 
 [perl tables="[cgi mv_data_table] __UI_META_TABLE__"]
 	my $table = $CGI->{mv_data_table};
@@ -121,6 +120,7 @@
 	return;
 [/perl]
 
+[output name="top_of_form"]
 <FORM METHOD=POST ACTION="[base-url]/ui">
 <INPUT TYPE=hidden NAME="mv_todo" VALUE="set">
 <INPUT TYPE=hidden NAME="mv_nextpage" VALUE="@@MV_PAGE@@">
@@ -137,25 +137,13 @@
 <INPUT TYPE=hidden NAME="mv_data_fields" VALUE="[cgi mv_data_fields]">
 <INPUT TYPE=hidden NAME="mv_data_function" VALUE="update">
 
+[output name=""]
 [calc]
 [/calc]
 
 [search-region more=1 arg="[scratch mrec_options]"]
-<table cellpadding=2 cellspacing=0 width="90%">
+<table width="100%" border=0 cellpadding=0 cellspacing=1 class=rseparator>
 
-<tr>
-<td colspan="[scratch ui_num_col]" class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
-<tr>
-	<td class=rnorm>&nbsp;</td>
-	<td colspan="[scratch ui_most_col]" class=rnorm>
-	&nbsp;&nbsp;&nbsp;[button text="[L]Ok[/L]" extra=|style="font-weight: bold"|]
-		mv_todo=set
-		[return-to click]
-	[/button]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-	<INPUT TYPE=submit NAME=mv_click VALUE="[L]Cancel[/L]">
-	</td>
-</tr>
 [more-list]
 [prev-anchor]&nbsp;&nbsp;<span style="font-size: larger; font-weight: bolder">&lt;</span>&nbsp;&nbsp;[/prev-anchor]
 [next-anchor]&nbsp;&nbsp;<span style="font-size: larger; font-weight: bolder">&gt;</span>&nbsp;&nbsp;[/next-anchor]
@@ -166,20 +154,16 @@
 <td colspan="[scratch ui_num_col]" class=rspacer><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
 </tr>
 <tr>
-<td class=rnorm>&nbsp;</td>
-<td colspan="[scratch ui_most_col]" class=rnorm>
+<td class=rhead>&nbsp;</td>
+<td colspan="[scratch ui_most_col]" class=rhead>
 	[msg arg.0=`q{[more]}`]More pages: %s[/msg]
 </td>
 </tr>
 [/more-list]
 
-<tr>
-<td colspan="[scratch ui_num_col]" class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
-
-<TR class=rnorm CELLPADDING=2>
-	<TH ALIGN=CENTER>&nbsp;</TH>
-	<TH ALIGN=CENTER>[cgi ui_data_key_name]</TH>
+<TR class=rhead CELLPADDING=2>
+	<td align=center>&nbsp;</td>
+	<td>[cgi ui_data_key_name]</td>
 	[row-edit columns="[cgi mv_data_fields]" ]
 </TR>
 
@@ -194,42 +178,41 @@
 		return $out;
 	[/item-sub]
 	[if-mm keys [item-code]]
-<TR class=rnorm>
+<TR class=rownorm>
 	<td valign=top><input type=checkbox name="batch_id" value="[item-code]"><input type=hidden name="[item-exec addnum][/item-exec][cgi ui_data_key_name]" value="[item-code]"></td>
 	<TD valign=top>
 	[page href="__UI_BASE__/flex_editor"
 	form=|
 		page_title=Edit [cgi mv_data_table]: [item-code]
 		mv_data_table=[cgi mv_data_table]
+		ui_meta_specific=[cgi ui_meta_specific]
 		item_id=[item-code]
-	|]<small><small><u>edit</u></small></small>&nbsp;<b>[item-code]</b></A>
+	|][item-code]</A>
 	</TD>
 	[row-edit
 		key="[item-code]"
 		extra="valign=top"
 		pointer="[item-exec addnum]1[/item-exec]"
 		columns="[cgi mv_data_fields]"
+		ui_meta_specific="[cgi ui_meta_specific]"
 		]
-</TR>
-<tr>
-<td colspan="[scratch ui_num_col]" class=rspacer><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
 </tr>
 	[/if-mm]
 	[set row_number][item-increment][/set]
 	[/search-list]
 
 <tr>
-<td colspan="[scratch ui_num_col]" class=rmarq>New record</td>
+<td colspan="[scratch ui_num_col]" class=rhead><b>New record</b></td>
 </tr>
 
-<TR class=rnorm CELLPADDING=2>
+<TR class=rhead CELLPADDING=2>
 	<TH ALIGN=CENTER>&nbsp;</TH>
 	<TH ALIGN=CENTER>[cgi ui_data_key_name]</TH>
-	[row-edit columns="[cgi mv_data_fields]" ]
+	[row-edit columns="[cgi mv_data_fields]"]
 </TR>
 
 
-<TR class=rnorm>
+<TR class=rownorm>
 	<td COLSPAN=2 valign=top>
 	<input type=text size=12 name="999999_[cgi ui_data_key_name]">
 	</TD>
@@ -249,34 +232,69 @@
 [last-anchor]&nbsp;<span style="font-size: larger; font-weight: bolder">&gt;&gt;</span>[/last-anchor]
 [page-anchor]&nbsp;<span style="font-size: larger; font-weight: bolder">$PAGE$</span>[/page-anchor]
 <tr>
-<td colspan="[scratch ui_num_col]" class=rspacer><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
-<tr>
-<td class=rnorm>&nbsp;</td>
-<td colspan="[scratch ui_most_col]" class=rnorm>
+<td class=rhead>&nbsp;</td>
+<td colspan="[scratch ui_most_col]" class=rhead>
 	[msg arg.0=`q{[more]}`]More pages: %s[/msg]
 </td>
 </tr>
 [/more-list]
 
-<tr>
-<td colspan="[scratch ui_num_col]" class=rspacer><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
+</TABLE>
+</center>
+[/search-region]
 
-<tr>
-<td colspan="[scratch ui_num_col]" class=rborder><img src="bg.gif" width=__UI_MAIN_WIDTH__ height=1></td>
-</tr>
+[output name=top_buttons]
+	[button text="[L]Ok[/L]" extra=|style="font-weight: bold"|]
+		mv_todo=set
+		[return-to click]
+	[/button]
+	[button text="[L]Delete checked[/L]"
+		confirm="[L]Are you sure you want to delete the checked rows?[/L]"]
+[flag type=write table="[cgi mv_data_table]"]
+mv_nextpage=__UI_BASE__/flex_select
+mv_auto_export=
+mv_todo=return
+[if-mm tables =d]
+	[perl tables="[cgi mv_data_table]"]
+		my $tab = $CGI->{mv_data_table};
+		my $db  = $Db{$tab};
+		unless ($db) {
+			$Scratch->{ui_message} = "No table '$tab'";
+			return;
+		}
+		my @items = split /\0/, $CGI->{batch_id};
+		foreach my $item (@items) {
+			if ($db->delete_record($item)) {
+				$out .= "Deleted $item from table $tab<BR>";
+			}
+			else {
+				$out .= "Item $item not in $tab table (or delete failed)<BR>";
+			}
+		}
+		$Scratch->{ui_message} = $out;
+		return;
+	[/perl]
+[else]
+	[set ui_message][L]Not authorized to delete items.[/L][/set]
+[/else]
+[/if-mm]
+	[return-to click]
+[/button]
 
-<tr>
-<td class=rnorm>&nbsp;</td>
-<td colspan="[scratch ui_most_col]" class=rnorm>
+	<INPUT TYPE=submit NAME=mv_click VALUE="[L]Cancel[/L]" type=s3>
 
+[output name=bottom_buttons]
 
-	&nbsp;&nbsp;&nbsp;[button text="[L]Ok[/L]" extra=|style="font-weight: bold"|]
+	[if-mm super]
+	<INPUT TYPE=checkbox NAME=mv_auto_export [if !scratch ui_too_large]CHECKED [/if]VALUE="[cgi mv_data_table]" class=s3>
+		<span class=s3>[L]Auto-export[/L]</span>
+	[/if-mm]
+
+	[button text="[L]Ok[/L]" extra=|style="font-weight: bold"|]
 		mv_todo=set
 		[return-to click]
-	[/button]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-	[button text="[L]Delete checked rows[/L]"
+	[/button]
+	[button text="[L]Delete checked[/L]"
 		confirm="[L]Are you sure you want to delete the checked rows?[/L]"]
 [flag type=write table="[cgi mv_data_table]"]
 mv_nextpage=__UI_BASE__/flex_select
@@ -307,19 +325,11 @@
 [/else]
 [/if-mm]
 	[return-to click]
-[/button]&nbsp;&nbsp;&nbsp;
-	<INPUT TYPE=submit NAME=mv_click VALUE="[L]Cancel[/L]">
-	[if-mm super]
-	<BR><b><INPUT TYPE=checkbox NAME=mv_auto_export [if !scratch ui_too_large]CHECKED [/if]VALUE="[cgi mv_data_table]">
-		[L]Auto-export[/L]</b>
-	[/if-mm]
+[/button]
 
-</td>
-</tr>
+	<INPUT TYPE=submit NAME=mv_click VALUE="[L]Cancel[/L]" type=s3>
+[output name="bottom_of_form"]
 
-</TABLE>
-</center>
-[/search-region]
 </FORM>
 
 



2.2       +1 -1      interchange/dist/lib/UI/pages/admin/tax.html


rev 2.2, prev_rev 2.1
Index: tax.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/tax.html,v
retrieving revision 2.1
retrieving revision 2.2
diff -u -r2.1 -r2.2
--- tax.html	18 Aug 2002 08:09:06 -0000	2.1
+++ tax.html	14 Jan 2003 02:25:50 -0000	2.2
@@ -9,7 +9,7 @@
 [/calc]
 [flag type=write table=country]
 [flag type=write table=state]
-[set table_perm]1[/set]
+[set page_perm]tax[/set]
 [set ui_class]Admin[/set]
 [set page_title][L]Tax configuration[/L][/set]
 [set help_name]tax.main[/set]



2.1                  interchange/dist/lib/UI/pages/admin/commerce.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/content_components.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/content_templates.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/dbconfig_save.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/edit_metaconfig.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/generic.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/genfunction.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/gpg_key.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/menu_loader.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/merge_meta.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/order_status_alt.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/page_metaconfig.html


rev 2.1, prev_rev 2.0



2.1                  interchange/dist/lib/UI/pages/admin/pref_select.html


rev 2.1, prev_rev 2.0



1.3       +26 -28    interchange/dist/lib/UI/pages/admin/survey/index.html


rev 1.3, prev_rev 1.2
Index: index.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/survey/index.html,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- index.html	23 Nov 2002 03:54:12 -0000	1.2
+++ index.html	14 Jan 2003 02:25:52 -0000	1.3
@@ -4,16 +4,14 @@
 	return;
 [/calc]
 [set table_perm]1[/set]
-[set ui_class]Admin[/set]
+[set ui_class]Content[/set]
 [set page_title][L]Set up a survey[/L][/set]
 [set help_name]survey.main[/set]
-[set icon_name]icon_config.gif[/set]
+[set icon_name]icon_pages.gif[/set]
 @_UI_STD_HEAD_@
 
 <!-- BEGIN REAL STUFF -->
 
-<blockquote>
-
 [tmp survey_keys]code	label
 [loop search="
 		ml=1000
@@ -27,51 +25,51 @@
 	  "][loop-code]	[loop-param label]
 [/loop][/tmp]
 
+<div class=titlebox>Edit an existing survey</div>
+<ul>
+[loop list="[scratch survey_keys]" lr=1 head-skip=1]
+<li>[page href="__UI_BASE__/survey/overall" form="item_id=[loop-code]"][loop-code] -- [loop-param label]</A>
+	([page href=survey/standard form="survey_start=[loop-code]"]run</a>)
+	 </li>
+[/loop]
+</ul>
+
+
+<div class=titlebox>Create a new survey</div>
+<blockquote>
 <form action="[area __UI_BASE__/survey/overall]">
 <input type=hidden name=mv_action value=back>
 <input type=hidden name=mv_session_id value="[data session_id]">
 <input type=hidden name="mv_filter:item_id" value=word>
-<table>
-<tr>
-	<td>New survey name</td>
-	<td>Clone from</td>
-	<td>&nbsp;</td>
+<table class=rseparator cellspacing=0 cellpadding=3>
+<tr class=rhead>
+	<td>Survey name</td>
+	<td colspan=2>Clone from</td>
 </tr>
-<tr>
-	<td>
-	 <input type=text size=16 name=item_id> 
+<tr class=rownorm>
+	<td class=clabel>
+	 <input type=text size=16 name=item_id class=s3> 
 	</td>
-	<td>
-		<select name="survey_clone">
+	<td class=cdata>
+		<select name="survey_clone" class=s3>
 		<option value=""> -- none --
 		[loop list="[scratch survey_keys]" lr=1 head-skip=1]<option value="[loop-code]"> [loop-code]</option>[/loop]
 		</select>
 	</td>
-	<td>
+	<td class=cdata>
 		<input type=submit value="[L]Create[/L]">
 	</td>
 </tr>
 </table>
 
 </form>
-
-Edit an existing survey:
-<ul>
-[loop list="[scratch survey_keys]" lr=1 head-skip=1]
-<li>[page href="__UI_BASE__/survey/overall" form="item_id=[loop-code]"][loop-code] -- [loop-param label]</A>
-	([page href=survey/standard form="survey_start=[loop-code]"]run</a>)
-	 </li>
-[/loop]
-</ul>
 </blockquote>
+<div class=titlebox>Access survey results</div>
 
 <blockquote>
-<h2>Access survey results</h2>
-
 	[file-navigator initial_dir="logs/survey" no-up=1 no-new-file=1]
-
 </blockquote>
 <!-- ----- END REAL STUFF ----- -->
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ version: $Id: index.html,v 1.2 2002/11/23 03:54:12 mheins Exp $ -->
+<!-- page: @@MV_PAGE@@ version: $Id: index.html,v 1.3 2003/01/14 02:25:52 mheins Exp $ -->



1.3       +3 -1      interchange/dist/lib/UI/pages/admin/survey/overall.html


rev 1.3, prev_rev 1.2
Index: overall.html
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/admin/survey/overall.html,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- overall.html	23 Nov 2002 03:54:12 -0000	1.2
+++ overall.html	14 Jan 2003 02:25:52 -0000	1.3
@@ -227,6 +227,8 @@
 	tabbed=1
 	table_width=620
 	tab_width=100
+	output-map="[scratch ui_style_edit]"
+	ui_style="[scratch ui_style_edit]"
 	break_row_class=rmarq
 	panel_width=600
 	panel_height=500
@@ -430,4 +432,4 @@
 </table>
 
 @_UI_STD_FOOTER_@
-<!-- page: @@MV_PAGE@@ version: $Revision: 1.2 $ -->
+<!-- page: @@MV_PAGE@@ version: $Revision: 1.3 $ -->



1.7       +2 -3      interchange/dist/lib/UI/pages/include/page_editor


rev 1.7, prev_rev 1.6
Index: page_editor
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/pages/include/page_editor,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- page_editor	3 Oct 2002 16:20:27 -0000	1.6
+++ page_editor	14 Jan 2003 02:25:53 -0000	1.7
@@ -280,7 +280,6 @@
 			value=1><br>
 [loop list="[page-param ui_display_order]"]
 	<A
-		style="font-size: larger; font-weight: bolder"
 		HREF="javascript:void(0)"
 		onClick="visible(1)"
 		title="edit page controls"
@@ -329,7 +328,6 @@
 		<A
 			HREF="javascript:void(0)"
 			TITLE="edit [comp-param component]"
-			STYLE="font-size: larger; font-weight: bolder"
 			onClick="visible([comp-increment],'comp')"
 		>[if-comp-param component][comp-param component][else]-empty-[/else][/if-comp-param]</A>&nbsp;<input
 				type=checkbox
@@ -489,7 +487,7 @@
 			href="silent/ce_modify"
 			item_id="CONTENT"
 			js_changed=changed
-			label.ui_body_text=|&nbsp;&nbsp;&nbsp;Page&nbsp;content<br><br><input type=button onClick="content_win();" Value="[L]Edit in Browser[/L]">|
+			label.ui_body_text=|&nbsp;&nbsp;&nbsp;Page&nbsp;content|
 			mv_nextpage=@@MV_PAGE@@
 			nocancel=1
 			notable=1
@@ -501,6 +499,7 @@
 			table_width="100%"
 			ui_data_fields="code ui_body_text"
 			ui_hide_key=1
+			filter.ui_body_text="linkdecode"
 			widget.ui_body_text="textarea"
 			view=ui_component
 			form-extra=|



1.1                  interchange/dist/lib/UI/pages/include/meta/mv_metadata.asc


rev 1.1, prev_rev 1.0
Index: mv_metadata.asc
===================================================================
code	type	width	height	field	db	name	outboard	options	attribute	label	help	lookup	filter	help_url	pre_filter	lookup_exclude	prepend	append	display_filter	default	extended
access	table											access							1		{'panel_shade' => "f",'ui_show_fields' => "username
name
last_login(strftime)
super(yesno)",'ui_sort_field' => "username",'ui_sort_option' => "f",}
access::super	select							0=No, 1=Yes													
affiliate	table		25	affiliate,name,url,active		Affiliates Data						affiliate									{'panel_shade' => "f",'ui_show_fields' => "affiliate
name
url
join_date(convert_date.%B.%d,.%Y)
active(yesno)",}
affiliate::active	yesno									Active?											
affiliate::affiliate	text	12								Affiliate ID			word								
affiliate::image	text	70																			
affiliate::join_date	date									Join date			date_change								
affiliate::name	text	50								Affiliate Name											
affiliate::timeout	text	8								Timeout delay	(in seconds, 0 to disable)										
affiliate::url	text	70								URL	Default URL to redirect to										
area	table			code
name
which_page
url
search
page
selector		Category Groups/Placement						area									
area::display_type	select							name=Banner Text or Name,url=URL only,icon=Icon and name, image=Image													
area::image	imagedir						images														
area::link_template	textarea	30	4					none=No link, external=External link (http://...), internal=Interchange page, simple=Simple search, complex=Complex search													
area::link_type	select							none=No link, external=External link (http://...), internal=Interchange page, simple=Simple search, complex=Complex search													
banner	table					Banner ads		code
category
weight
rotate
banner				banner									
cat	table			code
name
page
selector
url		Categories						cat									{'bottom_buttons' => "",'spread_textarea' => "",'include_form_expand' => "",'tab_vert_offset' => "",'restrict_allow' => "",'widget_cell_class' => "",'ui_sort_field' => "",'link_table' => "",'ui_show_fields' => "",'link_extra' => "",'break_row_class' => "",'label_cell_class' => "",'tab_horiz_offset' => "",'link_before' => "",'ui_special_add' => "",'left_width' => "",'top_buttons' => "",'spread_fields' => "",'combo_row_class' => "",'include_before' => "",'ui_meta_specific' => "",'tab_height' => "",'link_view' => "",'link_fields' => "",'spread_meta' => "",'tab_width' => "",'data_row_class' => "",'ui_sort_option' => "",'panel_height' => "",'include_form' => "",'help_cell_class' => "",'filter_field' => "",'spacer_row_class' => "",'widget_class' => "s3",'ui_data_fields' => "",'ui_sort_combined' => "",'file_upload' => "",'spread_width' => "",'spread_height' => "",'tabbed' => "",'include_form_interpolate' => "",'table_width' => "",'spread_textarea_rows' => "",'link_sort' => "",'panel_width' => "",'link_key' => "",'data_cell_class' => "",'view_from' => "",'link_label' => "",}
cat::area	multiple		5		area							code									
cat::display_type	select							name=Banner Text or Name,url=URL only,icon=Icon and name, image=Image													
cat::link_template	textarea	30	4					none=No link,
 external=External link (http://...),
 internal=Interchange page,
 simple=Simple search,
 complex=Complex search													
cat::link_type	select							none=No link, external=External link (http://...), internal=Interchange page, simple=Simple search, complex=Complex search													
cat::page	text	80																			
cat::search	textarea	50	4																		
cat::sel	text									Select code											
cat::selector	textarea	50	3																		
country	table		200	code
name(40)
shipmodes
tax		Int'l Shipping/Taxing Settings						country									{'panel_shade' => "f",'spread_height' => "50",'ui_data_fields' => "=Identification

code
name

=Shipping/Taxing

shipmodes
tax

=Sort/Display
region
sorder

=Extended information

iso
isonum",}
country::code	text	5								Country Code	Two-letter code										
country::iso	text	5								ISO Country code	Not normally used by Interchange; some credit card companies require this. A three letter code.										
country::isonum	text	5								ISO Country Number	Not normally used by Interchange.										
country::name	text	40								Country Name											
country::region	combo											region	nullselect								
country::shipmodes	text	30								Shipping modes	Space-separated shipping modes for this country, in the order they should be displayed in the shipping selector.										
country::tax	textarea	20	8							Tax information	Only used if <B>SalesTax</b> is set to "multi". Uses tax_category in products table to set level. If all items are to be taxed at 10%, the value used should be:
<PRE>
    default=10%
</PRE>										
custview::userdb::dealer	display							=No,1=Yes		Dealer											
custview::userdb::email_copy	display							=No, 1=Yes		Payment method											
custview::userdb::fax_order	display							=Credit Card*, 1=Fax or Mail, 2=Purchase order, 3=COD		Payment method											
custview::userdb::mail_list	display							offer=Special Offers, newsletter=Newsletter, alert=Alerts and Recalls, upgrade=Upgrades					null_to_space								
dbconfig::mv_metadata::attribute	move_combo	30	10					columns::		Spreadsheet columns	Must have the key field (usually it is the first one)		null_to_comma								
dbconfig::mv_metadata::code	hidden_text									Database table											
dbconfig::mv_metadata::db	reverse_combo							tables					last_non_null								
dbconfig::mv_metadata::display_filter	select							=Yes,
1=No		Backup select	If Yes, table should be checked by default in backup/download.										
dbconfig::mv_metadata::field	move_combo	30	10					columns::		List on select page	Must have the key field (usually it is the first one)		null_to_comma								
dbconfig::mv_metadata::filter	multiple		5					filesafe=Safe for file name,
    uc=Upper case,
    nullselect=First non-null (combo box),
    null_to_space=Translate null to space,
    null_to_comma=Translate null to comma,
    lc=Lower case,
    digits_dot=Decimal number (not negative),
    backslash=Remove backslashes,
    namecase=Name case,
    name=Turn LAST,FIRST into FIRST LAST,
    digits=Digits only,
    word=Word chars only (A-z0-9_),
    unix=DOS to UNIX,
    dos=UNIX to DOS,
    mac=UNIX to MAC,
    gate=Only allow if scratch set,
    no_white=No whitespace,
    strip=Strip leading/trailing whitespace,
    sql=Escape single quotes (SQL),
    text2html=Simple text to HTML,
    urlencode=URL encode (%20, etc),
    pagefile=Safe for Interchange page name,
    entities=HTML entities (& -> &amp;), date_change=MM/DD/YYYY to YYYYMMDD					option_format								
dbconfig::mv_metadata::height	text	4								Select page rows	Number of rows to display at selector page.		digits								
dbconfig::mv_metadata::help	textarea	70	4							Help	displays at top of page										
dbconfig::mv_metadata::help_url	text	70	4							Help URL	links below help text										
dbconfig::mv_metadata::lookup	text	20																			
dbconfig::mv_metadata::name	text	70	4							Description											
dbconfig::mv_metadata::options	move_combo	20	8	 				columns::		Fields to edit	Recommended fields to display on editor screen, in order of
 display. If a blank line is between them, a break line will
be put in.										
dbconfig::mv_metadata::outboard	multiple		8					NONE,
Qty price;pricing:q5:rn=Qty price,
Options;options:o_enable:r=Options,
Up-sell;merchandising:upsell_to:r=Up-sell,
Cross-sell;merchandising:cross_sell:r=Cross-sell,
Promo;merchandising:featured:r=Promo,
Inventory;inventory:quantity:rn=Inventory		Special display	These are extra links for the item editor -- various merchandising, inventory, and pricing links.		null_to_comma								
dbconfig::mv_metadata::type	select							=No,
1=Yes		Display with meta (spreadsheet)			filesafe								
dbconfig::mv_metadata::width	text	4								Default spreadsheet column width			digits								
gish::products	table		50			Product information	Qty price;pricing:q5:rn,Options;options:o_enable:r,Promo;merchandising:featured:r,Inventory;inventory:quantity:rn		gish			products									{'bottom_buttons' => "",'include_form_expand' => "1",'spread_textarea' => "",'tab_vert_offset' => "",'widget_cell_class' => "cwidget",'restrict_allow' => "area",'ui_sort_field' => "",'link_table' => "",'ui_show_fields' => "sku
description(30.)
prod_group
category
price(%.2f align=right)",'link_extra' => "",'break_row_class' => "rmarq",'label_cell_class' => "clabel",'tab_horiz_offset' => "",'link_before' => "",'ui_special_add' => "Qty price;pricing:q5:rn,Options;options:o_enable:r,Promo;merchandising:featured:r,Inventory;inventory:quantity:rn",'top_buttons' => "",'left_width' => "20%",'spread_fields' => "sku
description
price
comment
nontaxable",'combo_row_class' => "rnorm",'include_before' => "price",'tab_height' => "",'ui_meta_specific' => "",'link_view' => "",'link_fields' => "",'spread_meta' => "comment nontaxable",'tab_width' => "120",'data_row_class' => "rnorm",'ui_sort_option' => "",'panel_height' => "700",'include_form' => "<td class=clabel> Product images </td>
 <td class=cdata>

<script>
function get_images (sku) {
                var path = '[var IMAGE_DIR]';
  
                var el;
                var divit = document.getElementById('images_table');
                divit.style.display= 'none';
                el = document.getElementById('thumb_img');
                el.src = path + '/thumb/' + sku + '_b.gif';

                el = document.getElementById('item_img');
                el.src = path + '/items/' + sku + '.gif';     
                divit.style.display= 'block';
        }
</script>
    <table id=images_table>
        <tr class=rmarq>
             <td>Image</td>
             <td>Thumb</td>
        </tr>
        <tr>
             <td><img id=item_img src=\"[var IMAGE_DIR]/items/[cgi item_id].gif\"></td>
             <td><img id=thumb_img src=\"[var IMAGE_DIR]/thumb/[cgi item_id]_b.gif\"></td>
        </tr>
ll_class' => "chelp",'spacer_row_class' => "rspacer",'ui_data_fields' => "=General

sku
description
prod_group
category
comment

=Pricing

price
wholesale

=Images

image
thumb
image_large

=Shipping/Tax/Other

weight
gift_cert
nontaxable",'ui_sort_combined' => "",'spread_width' => "8",'file_upload' => "1",'spread_height' => "25",'tabbed' => "1",'include_form_interpolate' => "",'spread_textarea_rows' => "4",'table_width' => "800",'link_sort' => "",'panel_width' => "800",'link_key' => "",'data_cell_class' => "cdata",'link_label' => "",'view_from' => "",}
gish::products::image	imagehelper									Image							<img src="_UI_VALUE_"><br>				
ichelp	table		100									ichelp									{'bottom_buttons' => "",'spread_textarea' => "",'tab_vert_offset' => "",'include_form_expand' => "",'restrict_allow' => "",'widget_cell_class' => "",'ui_sort_field' => "code",'link_table' => "",'ui_show_fields' => "code
title",'link_extra' => "",'break_row_class' => "",'label_cell_class' => "",'tab_horiz_offset' => "",'link_before' => "",'ui_special_add' => "",'left_width' => "",'top_buttons' => "",'spread_fields' => "",'combo_row_class' => "",'include_before' => "",'ui_meta_specific' => "",'tab_height' => "",'link_view' => "",'link_fields' => "",'spread_meta' => "",'tab_width' => "",'data_row_class' => "",'ui_sort_option' => "",'panel_height' => "",'include_form' => "",'help_cell_class' => "",'spacer_row_class' => "",'ui_sort_combined' => "",'ui_data_fields' => "",'file_upload' => "",'spread_width' => "",'spread_height' => "",'tabbed' => "",'include_form_interpolate' => "",'table_width' => "",'spread_textarea_rows' => "",'link_sort' => "",'panel_width' => "",'link_key' => "",'data_cell_class' => "",'view_from' => "",'link_label' => "",}
ichelp::helptext	textarea	72	15							Help Text											
icmenu	table	12	50	code
mgroup
msort
next_line
page
name(30)
inactive
		Interchange menus						icmenu									
icmenu::debug	yesno									Debug	 Set to "Yes" to get debug messages relating to the item (if supported by menu).										
icmenu::depends_on	text	30								Include on	 Form parameter needed to cause inclusion of this option. Can be used differently by different menu versions. Normally, preceding it by an exlamation point (!) inverts the sense.										
icmenu::exclude_on	text	30								Exclude on	 Form parameter to cause exclusion of this option if otherwise included. Can be used differently by different menu versions. Normally, preceding it by an exlamation point (!) inverts the sense.										
icmenu::help_name	text	30								Help tag	 The page name for the help you should be pointed to when following this link. Can be used differently by different menus, sometimes not used at all.										
icmenu::img_dn	text	30								Image Down	 The image for presentation on hover -- for menus that support images.										
icmenu::img_icon	text	30								Title icon	 Icon image for display to the left of the name text. To replace name entirely, leave name blank (or make it an HTML comment).										
icmenu::img_sel	text	30								Image Down	 The image for presentation on selection of the item, for menus that support images.										
icmenu::img_up	text	30								Image Up	 The image for normal presentation -- on menus that support images.										
icmenu::inactive	yesno																				
icmenu::indicator	text	30								Indicator Variable	 Form parameter to cause highlighting -- precede with ! to cause highlighting if <i>not</i> set.										
icmenu::member	select							=All,1=Member only,0=Non-member only													
icmenu::next_line	yesno									Go to next line	Breaks menus at next line (or level)										
icmenu::super	yesno									Only for superuser	 Menu option will be presented only to the super-user if this is Yes.										
icmenu::url	text	50								External URL	 On some menus, causes a link to an external URL instead of the internal one generated by "page" and "form".										
inventory	table		100	sku,quantity				sku

=Quantity info

quantity
stock_message

=Accounting info

account
cogs_account				inventory									{'bottom_buttons' => "",'include_form_expand' => "",'tab_vert_offset' => "",'spread_textarea' => "",'widget_cell_class' => "",'restrict_allow' => "",'ui_sort_field' => "",'link_table' => "",'panel_style' => "",'ui_show_fields' => "",'link_extra' => "",'break_row_class' => "",'label_cell_class' => "",'tab_horiz_offset' => "",'link_before' => "",'panel_last_shade' => "d",'ui_special_add' => "",'top_buttons' => "",'left_width' => "",'include_before' => "",'combo_row_class' => "",'spread_fields' => "",'tab_height' => "",'ui_meta_specific' => "",'link_view' => "",'link_fields' => "",'spread_meta' => "",'data_row_class' => "",'tab_width' => "",'ui_sort_option' => "",'panel_height' => "",'include_form' => "",'tab_style' => "",'help_cell_class' => "",'filter_field' => "quantity=digits",'spacer_row_class' => "",'widget_class' => "",'ui_data_fields' => "=General

sku quantity

=Stock info

stock_message
account cogs_account

=Order parameters

min_order",'ui_sort_combined' => "",'spread_width' => "",'file_upload' => "",'panel_shade' => "f",'tabbed' => "",'spread_height' => "",'include_form_interpolate' => "",'spread_textarea_rows' => "",'table_width' => "",'link_sort' => "",'panel_width' => "",'link_key' => "",'data_cell_class' => "",'link_label' => "",'view_from' => "",}
inventory::account	text	20								Sales account											
inventory::cogs_account	text	20								COGS Account											
inventory::min_order	text	5								Minimum Order Qty	Minimum number allowed to order										
inventory::quantity	text	8								On hand											
inventory::sku	text	16								SKU											
inventory::stock_message	select							In stock,Ships in 3-5 days,Ships in 4-6 weeks,Special order		Out of stock message	Some absurd amount of help on the same line to make sure the colspan is good for use.	stock_message									
item_select::products	table		50			Item Editor			item_select			products									{'ui_show_fields' => "sku
description
prod_group
category
price(%.2f align=right)",'ui_sort_field' => "description",'ui_special_add' => "Qty price;pricing:q5:rn,Options;options:o_enable:r,Promo;merchandising:featured:r,Inventory;inventory:quantity:rn",}
matrix::options::price	text	12								Price			digits_dot								
matrix_options::options	table		100					code
sku

=Option information

o_group
o_label
o_value
	matrix_options			options									{'panel_shade' => "f",'ui_show_fields' => "code
sku
o_group
o_value
o_label",'ui_sort_field' => "sku",'ui_sort_combined' => "sku,o_group",}
merchandising::banner_image	text									Banner image	if appropriate										
merchandising::banner_text	text									Banner text	for use where appropriate.										
merchandising::blurb_begin	text									Teaser	catch line for feature display										
merchandising::blurb_end	text									Closer	end text for feature display										
merchandising::cross_category	select				products			=- none -		Cross-sale category	If there are no item-specific cross sells for an item, it will fall
back to a cross-category sale. Select a category for <b>this item</b>
to be cross-sold to.	category									
merchandising::cross_sell	text	50			products					Cross-sell SKUs			null_to_space					&nbsp;&nbsp;<A HREF="admin/sku_selector?caller=item_cross&table=_UI_TABLE_&col=_UI_COLUMN_&item_id=_UI_KEY_&value=_UI_URL_VALUE_">select...</A>			
merchandising::featured	select							=none,
specials=Specials,
new=New item,
expired=expired		Promotions	Selects where to feature the item for a promotion.		option_format					<A HREF="admin/add_meta_option?item_id=_UI_TABLE_::_UI_COLUMN_&ui_return_to=admin/item&ui_return_to=ui_return_table=products">add...</A>			
merchandising::finish_date	date									End date			date_change								
merchandising::sku	text				products							sku									
merchandising::start_date	date									Start date			date_change								
merchandising::timed_promotion	select							=No,
1=Yes		Timed?	<B>Yes</B> if the promotion is timed with the start and end dates.										
merchandising::upsell_to	text	50			products					Up-sell SKUs								&nbsp;&nbsp;<A HREF="admin/sku_selector?caller=item_up&table=_UI_TABLE_&col=_UI_COLUMN_&item_id=_UI_KEY_&value=_UI_URL_VALUE_">select...</A>			
metaconfig::mv_metadata::append	textarea	60	5							Append HTML	<SMALL>HTML to be appended to the widget.
Will substitute in the macros _UI_TABLE_, _UI_COLUMN_,
_UI_KEY, and _UI_VALUE_, and will resolve relative links
with absolute links.</SMALL>										
metaconfig::mv_metadata::attribute	text	20								Column name	Do not set this.										
metaconfig::mv_metadata::code	text	30								Table::Column	Table::Column to be operated on.										
metaconfig::mv_metadata::db	combo							tables		Lookup Table	Table for an external lookup.		nullselect								
metaconfig::mv_metadata::field	move_combo	20	10					columns::		Field for lookup	Can be two comma separated fields, in which case second is used as the label text. Both must be in the same table.										
metaconfig::mv_metadata::filter	move_combo	30	1					filters		Filter(s)	Filters which can transform or constrain your data. Some widgets
require filters.										
metaconfig::mv_metadata::height	text	4								Height	SIZE for SELECT<BR>
ROWS for TEXTAREA<BR>		digits								
metaconfig::mv_metadata::help	textarea	70	4							Help	This help text.										
metaconfig::mv_metadata::help_url	text	70	4							Help URL	A URL which will provide more help										
metaconfig::mv_metadata::lookup	text	20								Lookup select	<SMALL>Whether lookup is performed to get options for a select type.
If nothing is in the <B>field</B>, then used as the name of the field to lookup
in. Use <B>Lookup Table</B> if you want to look up in a different table.</SMALL>										
metaconfig::mv_metadata::lookup_exclude	text	20								Lookup exclude	<B>ADVANCED</B>: regular expression that excludes certain keys from the lookup.										
metaconfig::mv_metadata::name	text	20								Variable name	Normally left empty, changes variable name to send in form.										
metaconfig::mv_metadata::options	textarea	50	8							Options	Options for SELECT/COMBO types (if lookup, prepended). Entered in the
interchange option format:<P>
<blockquote>
value=label*</blockquote>One per line.		line2options		options2line						
metaconfig::mv_metadata::outboard	text	30								Directory	Select directory for image listing widget.										
metaconfig::mv_metadata::prepend	textarea	60	5							Prepend HTML	<SMALL>HTML to be prepended to the widget.
Will substitute in the macros _UI_TABLE_, _UI_COLUMN_,
_UI_KEY, and _UI_VALUE_, and will resolve relative links
with absolute links.</SMALL>										
metaconfig::mv_metadata::type	select							text=Text entry*,
textarea=Textarea,
select=Select box,
yesno=Yes/No (Yes=1),
noyes=No/Yes (No=1),
yesno radio=Yes/No (radio),
noyes radio=No/Yes (radio),
multiple=Multiple Select,
combo=Combo Select,
reverse_combo=Reverse Combo,
move_combo=Combo move,
display=Text of option,
hidden_text=Hidden (show text),
radio=Radio box, 
radio_nbsp=Radio (nbsp),
checkbox=Checkbox,
check_nbsp=Checkbox (nbsp),
imagedir=Image listing,
imagehelper=Image upload,
date=Date selector,
value=Value,
option_format=Option formatter,
show=Show all options		Widget type	Select the basic display type for the field.										
metaconfig::mv_metadata::width	text	4								Width	SIZE for TEXT<BR>
COLS for TEXTAREA<BR>
Label limit for SELECT		digits								
modular::options	table		20	code
o_master
sku
o_enable	options	Modular option view		code
o_master
sku
o_group
phantom
o_default
o_enable

=Ordering information

description
price
differential	modular			options									
modular::options::differential	text	12								Price offset	Adjustment to option price when phantom. A positive or negative
number.										
modular::options::o_default	select							=No,
1=Yes		Default?	Yes if the default selection for the group.										
modular::options::o_enable	select							=No,
1=Yes		Follow?	Enable for next level										
modular::options::o_group	combo	5			options					Option group	Scanned to see if it applies (or doesn't apply) to this product.	o_group	nullselect								
modular::options::o_master	select				options			=none		Master item	Always included when the base SKU is equal to this.	sku									
modular::options::phantom	select							=No,
1=Yes		Phantom?	If yes, this item is just a placeholder for modular options.										
modular::options::price	text	12								Price	Price of option										
modular::options::sku	text	20																			
modular_create::options	table			code
o_master
sku
o_group
description(30)
price				code
o_master
sku
o_group
phantom
o_default

=Attributes

price
description
	modular_create			options									
modular_create::options::code	text	20								code	will be auto-assigned if left blank								 		
modular_create::options::description	text	30	3							Option description											
modular_create::options::o_default	select							=No,
1=Yes		Default?	Whether a/the default selection for this group.										
modular_create::options::o_enable	select							=No,
1=Yes		Sub-items											
modular_create::options::phantom	select							=No,
1=Yes		Phantom?	Whether a phantom for structuring										
modular_create::options::price	text	12								Price	Price of this option.										
modular_create::options::sku	text	20									Unique SKU										
mv_metadata	table		200	code
type
options								mv_metadata							1		
mv_metadata::append	textarea	60	5							Append HTML	<SMALL>HTML to be appended to the widget.
Will substitute in the macros _UI_TABLE_, _UI_COLUMN_,
_UI_KEY, and _UI_VALUE_, and will resolve relative links
with absolute links.</SMALL>										
mv_metadata::attribute	text	20								Column name	Do not set this.										
mv_metadata::code	text	30								Table::Column	Table::Column to be operated on.										
mv_metadata::db	combo							tables		Lookup Table	Table for an external lookup.		nullselect								
mv_metadata::field	move_combo	20	10					columns::		Field for lookup	Can be two comma separated fields, in which case second is used as the label text. Both must be in the same table.										
mv_metadata::filter	move_combo	30	1					filters		Filter(s)	Filters which can transform or constrain your data. Some widgets
require filters.										
mv_metadata::height	text	4								Height	SIZE for SELECT<BR>
ROWS for TEXTAREA<BR>		digits								
mv_metadata::help	textarea	70	4							Help	This help text.										
mv_metadata::help_url	text	70	4							Help URL	A URL which will provide more help										
mv_metadata::lookup	text	20								Lookup select	<SMALL>Whether lookup is performed to get options for a select type.
If nothing is in the <B>field</B>, then used as the name of the field to lookup
in. Use <B>Lookup Table</B> if you want to look up in a different table.</SMALL>										
mv_metadata::lookup_exclude	text	20								Lookup exclude	<B>ADVANCED</B>: regular expression that excludes certain keys from the lookup.										
mv_metadata::name	text	20								Variable name	Normally left empty, changes variable name to send in form.										
mv_metadata::options	textarea	50	8							Options	Options for SELECT/COMBO types (if lookup, prepended). Entered in the
interchange option format:<P>
<blockquote>
value=label*</blockquote>One per line.		line2options		options2line						
mv_metadata::outboard	text	30								Directory	Select directory for image listing widget.										
mv_metadata::prepend	textarea	60	5							Prepend HTML	<SMALL>HTML to be prepended to the widget.
Will substitute in the macros _UI_TABLE_, _UI_COLUMN_,
_UI_KEY, and _UI_VALUE_, and will resolve relative links
with absolute links.</SMALL>										
mv_metadata::type	select							text=Text entry*,
textarea=Textarea,
select=Select box,
yesno=Yes/No (Yes=1),
noyes=No/Yes (No=1),
yesno radio=Yes/No (radio),
noyes radio=No/Yes (radio),
multiple=Multiple Select,
combo=Combo Select,
reverse_combo=Reverse Combo,
move_combo=Combo move,
display=Text of option,
hidden_text=Hidden (show text),
radio=Radio box, 
radio_nbsp=Radio (nbsp),
checkbox=Checkbox,
check_nbsp=Checkbox (nbsp),
imagedir=Image listing,
imagehelper=Image upload,
date=Date selector,
value=Value,
option_format=Option formatter,
show=Show all options,gpg_keys=GPG key selector		Widget type	Select the basic display type for the field.										
mv_metadata::width	text	4								Width	SIZE for TEXT<BR>
COLS for TEXTAREA<BR>
Label limit for SELECT		digits								
optadd::mv_metadata::options	textarea	20	8							Options	Options in the format:<P>
<blockquote>
value=label*</blockquote>
		option_format								
options	table			code
sku
o_group
o_master
description(30)
price		Product Options						options									
options::code	text	10																			
options::description	textarea	50	5							Description	For description in display										
options::o_exclude	textarea	35	5							Exclude	Only for modular options. Lists the option groups to exclude
once the include has been done. Takes the form of a number of wildcard atoms.										
options::o_group	text	20								Option name	Name of option variable, i.e. "size"										
options::o_height	text	4								Height											
options::o_include	textarea	35	5							Include	Only for modular options. Lists the option groups to include
with your item. Takes the form of a number of wildcard atoms.										
options::o_label	text	40								Label	Short name for option display										
options::o_matrix	select							=Non-matrix,!=Matrix options		Matrix options	Matrix options allow you to maintain multiple option sets with
inventory on each combination.										
options::o_modular	select							=Not modular,Modular options		Modular options	Modular options allow you to attach multiple SKUs to the same item,
possibly with attached options of their own. Very complex but you can do
most anything.										
options::o_value	option_format	20	5							Possible Values	In Interchange option format:&lt;PRE>
  VALUE1=Label 1,
  VALUE2=Label 2*
&lt;/PRE>(* = default selection)		option_format								
options::o_widget	select							text=Text entry*,

textarea=Textarea,
select=Select box,
yesno=Yes/No (Yes=1),
noyes=No/Yes (No=1),
yesno radio=Yes/No (radio),
noyes radio=No/Yes (radio),
multiple=Multiple Select,
combo=Combo Select,
reverse_combo=Reverse Combo,
move_combo=Combo move,
display=Text of option,
hidden_text=Hidden (show text),
radio=Radio box, 
radio_nbsp=Radio (nbsp),
checkbox=Checkbox,
check_nbsp=Checkbox (nbsp),
imagedir=Image listing,
imagehelper=Image upload,
date=Date selector,
value=Value,
option_format=Option formatter,
show=Show all options		Widget type	Select the basic display type for the field.										
options::o_width	text	4								Width											
options::price	text	12								Price	Price data, either option=N.NN or
a number, depending on matrix settings.										
options::sku	text	20								Associated item											
options::volume	text	10								Volume	(if different, mostly for matrix/modular)										
options::weight	text	10								Weight	(if different, mostly for matrix/modular)										
optmaster::options::code	text	15																			
optmaster::options::o_enable	select							=No,1=Yes		Enable options	Whether any options processing is done										
optmaster::options::o_exclude	textarea	20	5							Exclude											
optmaster::options::o_include	textarea	20	5							Include											
optmaster::options::o_matrix	select							=Non-matrix,1=Matrix options		Matrix?											
optmaster::options::o_modular	select							=Not modular,1=Modular options		Modular options?											
optmaster::options::o_simple	select							=No,1=Yes		Enable options	Whether any options processing is done										
order_returns::username	text									Username											
order_view::orderline::status	display							pending=Pending, shipped=Shipped, backorder=Back ordered, credit=Waiting for credit check, canceled=Canceled					nullselect								
order_view::transactions::status	display							pending=Pending, shipped=Shipped, partial=Partially shipped, backorder=Back ordered, credit=Waiting for credit check, canceled=Canceled					nullselect								
orderline	table			code,sku,description,price, quantity,subtotal								orderline							1		{'bottom_buttons' => "",'spread_textarea' => "",'tab_vert_offset' => "",'widget_cell_class' => "",'ui_sort_field' => "",'link_table' => "",'ui_show_fields' => "",'link_extra' => "",'break_row_class' => "",'label_cell_class' => "",'tab_horiz_offset' => "",'link_before' => "",'ui_special_add' => "",'top_buttons' => "",'left_width' => "",'spread_fields' => "code
status
sku
quantity
price",'combo_row_class' => "",'include_before' => "",'ui_meta_specific' => "",'tab_height' => "",'link_view' => "",'link_fields' => "",'spread_meta' => "status",'tab_width' => "",'data_row_class' => "",'ui_sort_option' => "",'panel_height' => "",'include_form' => "",'help_cell_class' => "",'spacer_row_class' => "",'ui_data_fields' => "",'ui_sort_combined' => "",'spread_width' => "",'file_upload' => "",'spread_height' => "",'tabbed' => "",'table_width' => "",'spread_textarea_rows' => "",'link_sort' => "",'panel_width' => "",'link_key' => "",'data_cell_class' => "",'link_label' => "",}
orderline::status	select							pending=Pending, shipped=Shipped, backorder=Back ordered, credit=Waiting for credit check, canceled=Canceled					nullselect								
page_metaconfig::mv_metadata::code	hidden_text									Page											
page_metaconfig::mv_metadata::extended.bottom_template	combo							UI_STD_FOOTER=Standard UI,NOLEFT_BOTTOM=Catalog page&#44; no left/right,LEFTONLY_BOTTOM=Catalog page&#44; left only,LEFTRIGHT_BOTTOM=Catalog page&#44; left and right		Variable for Bottom Template			nullselect								
page_metaconfig::mv_metadata::extended.display_class	text									Display Class	Type of admin page template to use										
page_metaconfig::mv_metadata::extended.help_name	combo			code,title	ichelp			=none		Help key		1	nullselect								
page_metaconfig::mv_metadata::extended.icon_name	select							=--use page value--,Accounting,icon_config.gif=Administration,icon_pages.gif=Content,icon_people.gif=Customers,icon_error.gif=Error,icon_design.gif=Design,icon_ic.gif=Interchange,icon_item.gif=Items,icon_merch.gif=Merchandising,bg.gif=None,icon_orders.gif=Orders,icon_stats.gif=Reports,icon_regen.gif=Wizard		Icon type	Icon to show (you clicked on it to get here)										
page_metaconfig::mv_metadata::extended.meta_header	textarea	80	8							Extra Header Info	Meta tags, scripts, etc.										
page_metaconfig::mv_metadata::extended.mv_logical_page	text									Logical Page	You can create a tab-up indication on the second level menu by defining the logical page that is associated with a page containing a third_level menu.										
page_metaconfig::mv_metadata::extended.page_banner	text	40								Page Banner	Same as page title if empty										
page_metaconfig::mv_metadata::extended.page_content	textarea	80	30							Content for page											
page_metaconfig::mv_metadata::extended.page_css	textarea	50	8							Custom CSS for this page											
page_metaconfig::mv_metadata::extended.page_perm	text									Page Permissions Required											
page_metaconfig::mv_metadata::extended.page_title	text	40								Page Title	Uses value set in page if blank										
page_metaconfig::mv_metadata::extended.second_menu	text									Second Menu	Default based on page class										
page_metaconfig::mv_metadata::extended.superuser	yesno									Limit to superuser											
page_metaconfig::mv_metadata::extended.table_perm	text									Table Permissions Required											
page_metaconfig::mv_metadata::extended.third_menu	text									Third menu	Default based on page class										
page_metaconfig::mv_metadata::extended.top_menu	text									Top Menu	Default "Top"										
page_metaconfig::mv_metadata::extended.top_template	combo							UI_STD_HEAD=Standard UI,NOLEFT_TOP=Catalog Page&#44; no left or right,LEFTONLY_TOP=Catalog Page&#44; left side only,LEFTRIGHT_TOP=Catalog Page&#44; left and right		Variable for Top Template			nullselect								
page_metaconfig::mv_metadata::extended.ui_body_extra	text									Extra parameters for &lt;body&gt; tag											
page_metaconfig::mv_metadata::extended.ui_class	select							=--use page value--,Accounting,Admin=Administration,Content,Customers,Design,Items,Merchandising,Misc=Miscellaneous,None,Orders,Reports,Tables,Wizard		UI Class	Selects default icon, help, and menus										
page_metaconfig::mv_metadata::extended.ui_style_edit	yesno									New-style tabbed display	If you are using the newer menuing system, which doesn't use third-level tabs on the table-editor pages, you can make the tabbed display in the browser look better by specifying "Yes" here. It puts the tabs in the HTML wrapper and improves appearance.										
pages/																					{'help_name' => "template.edit",}
pages/admin/access																					{'ui_class' => "Admin",}
pages/admin/content																					{'third_menu' => "ContentEdit",}
pages/admin/content_components																					{'mv_logical_page' => "admin/content",'third_menu' => "ContentEdit",}
pages/admin/content_templates																					{'mv_logical_page' => "admin/content",'third_menu' => "ContentEdit",'help_name' => "template.edit",}
pages/admin/db_metaconfig																					{'icon_name' => "icon_regen.gif",'ui_style_edit' => "1",'ui_class' => "Admin",}
pages/admin/dbconfig																					{'third_menu' => "DbConfig",}
pages/admin/dbconfig_save																					{'third_menu' => "DbConfig",}
pages/admin/dbdownload																					{'mv_logical_page' => "admin/gentable",'third_menu' => "uiExport",}
pages/admin/dbinfo																					{'third_menu' => "Tables",'mv_logical_page' => "admin/genconfig",'top_template' => "UI_STD_HEAD",'bottom_template' => "UI_STD_FOOTER",}
pages/admin/direct_sql																					{'ui_class' => "Tables",}
pages/admin/edit_metaconfig																					{'icon_name' => "icon_regen.gif",}
pages/admin/export_table																					{'third_menu' => "uiExport",'ui_class' => "Tables",}
pages/admin/file_transfer																					{'page_title' => "File Navigator",}
pages/admin/flex_editor																					{'icon_name' => "icon_stats.gif",'ui_style_edit' => "1",'ui_class' => "Tables",}
pages/admin/flex_select																					{'icon_name' => "icon_stats.gif",'second_menu' => "Tables",'ui_class' => "Tables",}
pages/admin/foo																					{'page_content' => "This is the foo page.",'top_template' => "UI_STD_HEAD",'bottom_template' => "UI_STD_FOOTER",}
pages/admin/foobar																					{'page_content' => "This is the foobar page!",'icon_name' => "icon_pages.gif",'page_title' => "The foobar page",'top_template' => "NOLEFT_TOP",'bottom_template' => "NOLEFT_BOTTOM",'ui_class' => "Content",}
pages/admin/genconfig																					{'icon_name' => "icon_config.gif",'page_title' => "Interchange Server Information",'ui_class' => "Admin",}
pages/admin/gentable																					{'icon_name' => "icon_stats.gif",'top_template' => "UI_STD_HEAD",'bottom_template' => "UI_STD_FOOTER",'ui_class' => "Tables",}
pages/admin/gpg_key																					{'mv_logical_page' => "admin/tax",'third_menu' => "Commerce",}
pages/admin/group																					{'mv_logical_page' => "admin/access",'ui_class' => "Admin",}
pages/admin/import_table																					{'ui_class' => "Tables",}
pages/admin/index																					{'icon_name' => "icon_ic.gif",'ui_class' => "None",}
pages/admin/item_cross																					{'mv_logical_page' => "admin/merchandising",'ui_class' => "Merchandising",}
pages/admin/item_edit																					{'ui_style_edit' => "1",}
pages/admin/item_feature																					{'mv_logical_page' => "admin/merchandising",'ui_class' => "Merchandising",}
pages/admin/item_inventory																					{'ui_class' => "Items",}
pages/admin/item_option																					{'ui_class' => "Items",}
pages/admin/item_up																					{'mv_logical_page' => "admin/merchandising",'ui_class' => "Merchandising",}
pages/admin/layout																					{'mv_logical_page' => "admin/genfunction",'third_menu' => "Legacy",'top_template' => "UI_STD_HEAD",'bottom_template' => "UI_STD_FOOTER",'ui_class' => "Misc",}
pages/admin/layout_auto																					{'page_banner' => "Auto-populate Area and Cat tables",'mv_logical_page' => "admin/genfunction",'third_menu' => "Legacy",'page_title' => "Auto-populate Area and Cat tables",'top_template' => "UI_STD_HEAD",'bottom_template' => "UI_STD_FOOTER",'ui_class' => "Misc",}
pages/admin/menu_editor																					{'top_template' => "UI_STD_HEAD",'bottom_template' => "UI_STD_FOOTER",}
pages/admin/order_status																					{'mv_logical_page' => "admin/order",'third_menu' => "OrderView",'top_template' => "UI_STD_HEAD",'bottom_template' => "UI_STD_FOOTER",}
pages/admin/order_view																					{'mv_logical_page' => "admin/order",'third_menu' => "OrderView",'top_template' => "UI_STD_HEAD",'bottom_template' => "UI_STD_FOOTER",}
pages/admin/page_metaconfig																					{'icon_name' => "icon_config.gif",'ui_class' => "Admin",}
pages/admin/payment																					{'mv_logical_page' => "admin/tax",'third_menu' => "Commerce",}
pages/admin/preferences																					{'help_name' => "knar.main",}
pages/admin/reconfig																					{'help_name' => "reconfig",}
pages/admin/search_replace																					{'ui_class' => "Tables",}
pages/admin/ship																					{'mv_logical_page' => "admin/tax",'third_menu' => "Commerce",}
pages/admin/show_session																					{'mv_logical_page' => "admin/genconfig",}
pages/admin/spread																					{'icon_name' => "icon_stats.gif",'ui_class' => "Tables",}
pages/admin/survey/index																					{'third_menu' => "Surveys",}
pages/admin/survey/overall																					{'mv_logical_page' => "admin/survey/index",'ui_style_edit' => "1",'icon_name' => "icon_pages.gif",'help_name' => "survey.overall",'ui_class' => "Content",}
pages/admin/tax																					{'third_menu' => "Commerce",}
pages/admin/testpage																					{'page_content' => "This is some content!!!",'icon_name' => "icon_regen.gif",'page_title' => "This is a test virtual page",'top_template' => "UI_STD_HEAD",'bottom_template' => "UI_STD_FOOTER",'ui_class' => "Admin",}
pricing	table					Pricing Settings	2					pricing									{'panel_shade' => "f",'panel_height' => "400",'ui_show_fields' => "sku
price_group
w2(align=right)
w5(align=right)
w10(align=right)
w25(align=right)
w100(align=right)",'ui_data_fields' => "=General

sku
price_group
products:price
products:wholesale

=Retail quantity pricing (if used)

q2 q5 q10
q25 q100

=Wholesale quantity pricing (if used)

w2 w5 w10
w25 w100

",}
pricing::price_group	combo				pricing					Discount group		price_group	nullselect								
pricing::q10	text	6								Qty 10											
pricing::q100	text	6								Qty 100											
pricing::q2	text	6								Qty 2											
pricing::q25	text	6								Qty 25											
pricing::q3	text																				
pricing::q5	text	6								Qty 5											
pricing::w10	text	6								Qty 10											
pricing::w100	text	6								Qty 100											
pricing::w2	text	6								Qty 2											
pricing::w25	text	6								Qty 25											
pricing::w5	text	6								Qty 5											
products	table		50			Product information	Qty price;pricing:q5:rn,Options;options:o_enable:r,Promo;merchandising:featured:r,Inventory;inventory:quantity:rn					products									{'include_form_expand' => "1",'restrict_allow' => "area var page",'include_form' => "<td class=clabel> Product images </td>
 <td class=cdata>

<script>
function get_images (sku) {
                var path = '[var IMAGE_DIR]';
  
                var el;
                var divit = document.getElementById('images_table');
                divit.style.display= 'none';
                el = document.getElementById('thumb_img');
                el.src = path + '/thumb/' + sku + '_b.gif';

                el = document.getElementById('item_img');
                el.src = path + '/items/' + sku + '.gif';     
                divit.style.display= 'block';
        }
</script>
    <table id=images_table>
        <tr class=rmarq>
             <td>Image</td>
             <td>Thumb</td>
        </tr>
        <tr>
             <td><a href=\"javascript:mvpan_tripTab(2)\"><img border=0 id=item_img src=\"[var IMAGE_DIR]/items/[cgi item_id].gif\"></a></td>
             <td><a href=\"javascript:mvpan_tripTab(2)\"><img border=0 id=thumb_img src=\"[var IMAGE_DIR]/thumb/[cgi item_id]_b.gif\"></A></td>
        </tr>
    </table>
 </td>
",'ui_show_fields' => "sku
description(30.)
prod_group
category
price(%.2f align=right)",'ui_data_fields' => "=General

sku
description
prod_group category
comment
inactive

=Pricing

price
wholesale

=Images

image
thumb
image_large

=Shipping/Tax/Other

weight
nontaxable gift_cert",'panel_shade' => "f",'file_upload' => "1",'spread_width' => "8",'tabbed' => "1",'spread_height' => "25",'ui_special_add' => "Qty price;pricing:q5:rn,Options;options:o_enable:r,Promo;merchandising:featured:r,Inventory;inventory:quantity:rn",'left_width' => "20%",'include_before' => "price",'spread_fields' => "sku
description
price
comment
nontaxable",'spread_textarea_rows' => "4",'spread_meta' => "comment nontaxable",'view_from' => "prod_group",}
products::artist	text	30								Artist											
products::category	combo	20	1		products			=--none--		Category	Enter in box for new category.	category	nullselect		nullselect						
products::color	textarea	70	2																		
products::comment	textarea	70	8							Detailed Description											
products::description	text	60								Short Description											
products::gift_cert	select							=No,1=Yes		Gift certificate handling?	Yes if price should appear to be quantity										
products::image	imagehelper						images/items			Image							[var SAMPLEURL]	<A HREF="admin/upload_file?ui_image_preview=[var IMAGE_DIR]/items/_UI_VALUE_&ui_upload_binary=1&ui_upload_backup=0&mv_arg=images/items/_UI_VALUE_&ui_start_dir=items&ui_return_to=admin/item_edit&ui_return_to=item_id=_UI_KEY_&ui_preload=_UI_TABLE_:_UI_COLUMN_">upload...</A>			
products::image_large	imagehelper						images/items			Large Image							[var SAMPLEURL]	<A HREF="admin/upload_file?ui_image_preview=[var IMAGE_DIR]/items/_UI_VALUE_&ui_upload_binary=1&ui_upload_backup=0&mv_arg=images/items/_UI_VALUE_&ui_start_dir=items&ui_return_to=admin/item_edit&ui_return_to=item_id=_UI_KEY_&ui_preload=_UI_TABLE_:_UI_COLUMN_">upload...</A>			
products::inactive	yesno									Inactive?											
products::nontaxable	select							=Yes, 1=No		Taxable?											
products::price	text	12								Product Price			digits_dot								
products::prod_group	combo	20			products					Product Group		prod_group	nullselect								
products::related	multiple	5		sku	products					Related items	space-separated SKUs										
products::sale_price	text	12								Sale Price											
products::size	textarea	70	2																		
products::sku	text									SKU								<script>
    function poke_iframe (value) {
        var term = 'products::sku::';
        term += value;
        var url = '[area href=admin/quick_question
                         form="
                            type=data
                            style=padding: 0; font-size: 10pt
                            yes=Key exists!
                            yes_style=color: red
                            no=Key is available
                         "]';
        url += '&term=' + term;
        var el = document.getElementById('the');
        el.src = url;
        el.load();
    }
</script>


<iframe frameborder=0 height=24 width=200 id=the src="[area
                        href=admin/quick_question
                        form="
                            type=data
                            term=products::sku::[cgi item_id]
                            style=padding: 0; font-size: 10pt
                            yes=Key exists!                            
                            yes_style=color: red
                            no=Key is available
                        "]">
Verify that SKU is unique!
</iframe>
			{ extra => 'onChange="poke_iframe(this.value)" '}
products::thumb	imagehelper	30					images/thumb			Thumb			nullselect				[var SAMPLEURL]	<A HREF="admin/upload_file?ui_image_preview=[var IMAGE_DIR]/thumb/_UI_VALUE_&ui_upload_binary=1&ui_upload_backup=0&mv_arg=images/thumb/_UI_VALUE_&ui_start_dir=items&ui_return_to=admin/item_edit&ui_return_to=item_id=_UI_KEY_&ui_preload=_UI_TABLE_:_UI_COLUMN_">upload...</A>			
products::title	text	30								Title			namecase								
products::weight	text	4								Weight in pounds			digits_dot								
products::wholesale	text	12								Dealer Price											
promotion	table																				{'panel_shade' => "f",'ui_show_fields' => "code
start_date
finish_date
discount_type
discount",'ui_sort_field' => "start_date",'ui_sort_option' => "r",}
promotion::discount	text									Discount	Enter either a percent amount off like:  10%<br>
Or a dollar amount off: 10.00										
promotion::discount_type	select			sku,description	products			ENTIRE_ORDER=Percent or dollars off ENTIRE ORDER,ALL_ITEMS=Percent off ALL ITEMS		Promotion type	Enter a SKU to give discount on one item	1									
promotion::finish_date	date									Expires			date_change								
promotion::inactive	yesno									Inactive											
promotion::merchandising::blurb_begin	textarea	70	2							Teaser	beginning text for feature display										
promotion::merchandising::blurb_end	textarea	70	2							Closer	end text for feature display										
promotion::note	textarea	50	5							Notes for receipt											
promotion::start_date	date									Start midnight of			date_change								
promotion::timed	yesno									Timed promotion?											
shipping	table			description								shipping									
state	table			code
country
state
name
tax
tax_name		State/Province Settings (tax, etc)						state									
state::state	text	4											word								
survey	table											survey									{'panel_shade' => "f",'panel_height' => "600",'tabbed' => "1",'left_width' => "200",'table_width' => "900",'panel_width' => "900",'ui_show_fields' => "code
label
type",'tab_width' => "200",'ui_data_fields' => "=Question

code
label
type
options
extended.check
width
height
filter

=Explanation/Formatting

help

=Graphing

extended.graph_enable
extended.graph_type
extended.graph_label
extended.graph_low_water
extended.graph_width
extended.graph_height
extended.graph_title
",'ui_sort_combined' => "code,label",}
survey::code	hidden_text	70	2							Survey::Field											
survey::extended.check	select							=none,required=Required answer,state=US state,province=Canadian province,state_province=US state or Canada province,postcode=US or Canada postal code,phone=Like a phone number,us_phone_with_area=US phone (with area code),email=An email address,luhn=Pass LUHN-10 check		Consistency check											
survey::extended.graph_enable	yesno									Enable Graph	Requires GD::Graph module installed.										
survey::extended.graph_height	text	6								Height of chart image	Default 300.										
survey::extended.graph_label	textarea	30	8							Graph Labels	Entered in option format, i.e.

<blockquote>
data_value=Label for Graph
</blockquote>

One per line. Any values not listed will be placed under "Other" label.		line2options		options2line						
survey::extended.graph_low_water	text	6								Low water for "other"	The number of responses which should trigger placement in "Other" category.		digits								
survey::extended.graph_title	text	50								Graph Title	Default is question text.										
survey::extended.graph_type	select							pie=Pie Chart,area=Area Chart		Graph Type											
survey::extended.graph_width	text	6								Width of chart image	Default 400.										
survey::filter	hidden_text							my $wid = $CGI->{type};
if($wid =~ /fillin/) {
return 'nullselect';
}
elsif ($wid =~ /checkbox/) {
return 'checkbox null_to_comma';
}
return '';					calculated.mv_metadata.options.survey::filter								
survey::height	text	3								Height	For option selects and text boxes										
survey::help	textarea	80	5							Explanation Text	Explanation text to be shown above question										
survey::label	textarea	60	2							Question											
survey::options	textarea	100	10							Choices	Choices for option types		line2options		options2line						{ default => '=-- select one --' }
survey::type	select							select=Simple select,
fillin_combo=Options with "other" text input,
radio_left=Select one (radio),
checkbox_left=Select any (checkbox),
textarea=Text Box,
text=One-line text		Answer type											
survey::width	text	3								Width	Applies to all										
table-editor																					{'widget_cell_class' => "cwidget",'help_cell_class' => "chelp",'next_button_class' => "s3",'spacer_row_class' => "rnorm",'widget_class' => "s3",'break_row_class' => "rbreak",'label_cell_class' => "clabel",'output_map' => "0",'reset_button_class' => "s3",'panel_shade' => "f",'cancel_button_class' => "s3",'spacer_row_style' => "height: 8px; border-top: 0; border-left: 0; border-right: 0",'button_delete' => "1",'widget_cell_style' => "vertical-align: top",'delete_button_class' => "s3",'data_cell_class' => "cdata",'image_meta' => "1",'data_row_class' => "rnorm",'back_button_class' => "s3",}
tracking::transactions	table								tracking			transactions									{'panel_shade' => "f",'ui_show_fields' => "code
username
lname
nitems
total_cost
city
state",'spread_height' => "50",'ui_sort_field' => "tracking_number",'spread_meta' => "tracking_number",'spread_fields' => "code
lname
city
state
country
tracking_number",}
transactions	table		100									transactions							1		{'panel_height' => "500",'panel_shade' => "f",'include_form' => "<td class=clabel>
                        Recompute?
                    </td>
                    <td class=cdata>
                        <input type=checkbox name=mv_cleanup value=recompute_transaction> Totals &nbsp;&nbsp; <input type=checkbox name=recompute_tax value=1> Tax &nbsp;&nbsp; <B>Warning: this will not work if your prices depend on options and you change them!
<input type=hidden name=mv_return_table value=transactions>
                    </td>
",'link_before' => "nitems",'tabbed' => "1",'ui_sort_field' => "order_number",'left_width' => "120",'link_table' => "orderline",'include_before' => "total_cost",'table_width' => "800",'link_sort' => "code",'ui_show_fields' => "code
username(lookup.userdb.fname)
nitems
total_cost",'link_key' => "order_number",'link_fields' => "code order_number sku quantity description price subtotal",'ui_data_fields' => "=Transaction info

order_number 
order_date update_date
status
nitems
subtotal
salestax
shipping handling
total_cost

=General

code
store_id
username
comments
order_ymd order_wday
archived deleted complete
shipmode
payment_method
avs
po_number
order_id

=Shipping

fname lname
company
address1
address2
city state zip
country
phone_day phone_night fax
email

=Billing

b_fname b_lname
b_company
b_address1
b_address2
b_city b_state b_zip
b_country b_phone

=Tracking info

affiliate campaign
currency_locale
parent",'link_label' => "Ordered Items",}
transactions::archived	yesno									Archived											
transactions::auth_code	text	16								Authorization											
transactions::deleted	yesno									Deleted											
transactions::order_id	text	32								Order ID											
transactions::status	select							pending=Pending, shipped=Shipped, partial=Partially shipped, backorder=Back ordered, credit=Waiting for credit check, canceled=Canceled					nullselect								
ui_component::mv_metadata	table								ui_component			mv_metadata									{'ui_data_fields' => "=Main

code
label
default
type
width
height
options
filter

=Database lookup

lookup
field
db

=Help and misc

help
help_url
prepend
append
pre_filter",'table_width' => "80%",'left_width' => "30%",}
ui_component::mv_metadata::append	textarea	60	5							Append HTML	<SMALL>HTML to be appended to the widget.
Will substitute in the macros _UI_TABLE_, _UI_COLUMN_,
_UI_KEY, and _UI_VALUE_, and will resolve relative links
with absolute links.</SMALL>										
ui_component::mv_metadata::attribute	text	20								Column name	Do not set this.										
ui_component::mv_metadata::code	text	30								Identifier	identifier for this control, will be placed with &#91;control identifier]		word lc								
ui_component::mv_metadata::db	combo							tables		Lookup Table	Table for an external lookup.		nullselect								
ui_component::mv_metadata::default	text	40								Default value											
ui_component::mv_metadata::field	move_combo	30	1					columns::		Field for lookup	Can be two comma separated fields, in which case second is used as the label text. Both must be in the same table.										
ui_component::mv_metadata::filter	move_combo	30	1					filters		Filter(s)	Filters which can transform or constrain your data. Some widgets
require filters.										
ui_component::mv_metadata::height	text	4								Height	SIZE for SELECT<BR>
ROWS for TEXTAREA<BR>		digits								
ui_component::mv_metadata::help	textarea	70	4							Help	This help text.										
ui_component::mv_metadata::help_url	text	70	4							Help URL	A URL which will provide more help										
ui_component::mv_metadata::label	text	40								Label											
ui_component::mv_metadata::lookup	text	20								Lookup select	<SMALL>Whether lookup is performed to get options for a select type.
If nothing is in the <B>field</B>, then used as the name of the field to lookup
in. Use <B>Lookup Table</B> if you want to look up in a different table.</SMALL>										
ui_component::mv_metadata::lookup_exclude	text	20								Lookup exclude	<B>ADVANCED</B>: regular expression that excludes certain keys from the lookup.										
ui_component::mv_metadata::name	text	20								Variable name	Normally left empty, changes variable name to send in form.										
ui_component::mv_metadata::options	textarea	20	8							Options	Options for SELECT/COMBO types (if lookup, prepended). Entered in the
interchange option format:<P>
<blockquote>
value=label*</blockquote>		option_format								
ui_component::mv_metadata::outboard	text	30								Directory	Select directory for image listing widget.										
ui_component::mv_metadata::prepend	textarea	60	5							Prepend HTML	<SMALL>HTML to be prepended to the widget.
Will substitute in the macros _UI_TABLE_, _UI_COLUMN_,
_UI_KEY, and _UI_VALUE_, and will resolve relative links
with absolute links.</SMALL>										
ui_component::mv_metadata::type	select							text=Text entry*,
textarea=Textarea,

select=Select box,
yesno=Yes/No (Yes=1),
noyes=No/Yes (No=1),
multiple=Multiple Select,
combo=Combo Select,
reverse_combo=Reverse Combo,
move_combo=Combo move,
display=Text of option,
hidden_text=Hidden (show text),
radio=Radio box, 
radio_nbsp=Radio (nbsp),
checkbox=Checkbox,
check_nbsp=Checkbox (nbsp),
imagedir=Image listing,
imagehelper=Image upload,
date=Date selector,
value=Value,
option_format=Option formatter,
show=Show all options		Widget type	Select the basic display type for the field.										
ui_component::mv_metadata::ui_body	textarea	80	30							Component Body			digits								
ui_component::mv_metadata::ui_body_text	textarea	80	30							Component Body											
ui_component::mv_metadata::width	text	4								Width	SIZE for TEXT<BR>
COLS for TEXTAREA<BR>
Label limit for SELECT		digits								
userdb	table			username,company,lname,fname		Users						userdb									{'tab_horiz_offset' => "",'tab_vert_offset' => "",'panel_height' => "400",'file_upload' => "",'tabbed' => "1",'left_width' => "",'table_width' => "800",'tab_height' => "",'panel_width' => "800",'tab_width' => "",'ui_data_fields' => "=Name and Contact Info

phone_day
phone_night
email
fax
fax_order
username
password
email_copy
mail_list
mod_time
inactive

=Shipping Info

company
fname
lname
address1
address2
address3
city
state
zip
country
mv_shipmode

=Billing Info


b_company
b_fname
b_lname
b_address1
b_address2
b_address3
b_city
b_state
b_zip
b_country
b_phone

=Order Info

project_id
account_id
credit_limit
dealer
price_level
order_dest
mv_credit_card_type
mv_credit_card_exp_month
mv_credit_card_exp_year
order_numbers

=Repositories

s_nickname
address_book
b_nickname
accounts
p_nickname
preferences
carts

=Permissions

owner
file_acl
db_acl
acl
",}
userdb::address1	text	40								Address											
userdb::address2	text	40								&nbsp;											
userdb::b_address1	text	40								Billing Address											
userdb::b_address2	text	40								 											
userdb::b_city	text	40								Billing City											
userdb::b_company	text	30								Billing Company	If different										
userdb::b_country	text	10								Billing Country											
userdb::b_fname	text	40								Billing First Name											
userdb::b_lname	text	40								Billing Last Name											
userdb::b_phone	text									Billing Phone											
userdb::b_state	text	10								Billing State											
userdb::b_zip	text	10								Billing Postcode											
userdb::city	text	40								City											
userdb::comment	text									Comments by user											
userdb::company	text	40								Company											
userdb::country	text	10								Country											
userdb::dealer	yesno							=No,1=Yes		Dealer											
userdb::email	text	40								Email Address											
userdb::email_copy	select							=No, 1=Yes													
userdb::fax_order	select							=Credit Card*, 1=Fax or Mail, 2=Purchase order, 3=COD		Payment method											
userdb::feedback	textarea	70	8																		
userdb::fname	text	30								First Name											
userdb::inactive	yesno									Inactive											
userdb::lname	text	30								Last Name											
userdb::mail_list	check_nbsp							offer=Special Offers, newsletter=Newsletter, alert=Alerts and Recalls, upgrade=Upgrades					null_to_space								
userdb::mod_time	text	20																			
userdb::phone_day	text	30								Daytime Phone											
userdb::phone_night	text	30								Home Phone											
userdb::price_level	select							=Retail,dealer=Dealer,distributor=Distributor		Price level											
userdb::project_id	textarea									Purchase Order No.											
userdb::state	text	10								State											
userdb::subject	text									Subject											
userdb::username	hidden_text	16								Username			no_white								
userdb::zip	text	10								Postcode			uc word								
variable	table											variable							1		{'ui_meta_specific' => "1",'panel_shade' => "f",'spread_height' => "25",'spread_meta' => "Variable pref_group",'ui_sort_combined' => "pref_group,code",}
variable::Variable	text	60								Preference value											
variable::Variable::ADDRESS	text									Company Address											
variable::Variable::CATALOG_STATIC	select							No, Yes		Enabled for users?	<b>Yes</b> will cause Interchange to generate static links where possible.<BR><BR>
<b>No</b> disables generation of static links for users; you can still send a search engine to the statically generated URL and it will spider the static links on the page.										
variable::Variable::CGI_URL	text									CGI URL	URL that calls Interchange, without the server name										
variable::Variable::CHECK_ACCEPTED	select							0=No, 1=Yes													
variable::Variable::COD_ACCEPTED	select							0=No, 1=Yes													
variable::Variable::CREDIT_CARDS_ACCEPTED	checkbox							visa=Visa, mc=Mastercard, discover=Discover, amex=American Express					null_to_space								
variable::Variable::CUSTOMER_VIEW_DEALER	yesno									Show dealer info	Set to Yes to show dealer status on customer view page										
variable::Variable::CUSTOMER_VIEW_LARGE	yesno									Query by example view	Select if you have a very large customer database, to prevent building huge lists of customers every time you access the customer tab.										
variable::Variable::DOCROOT	text									Document root	This is the directory where your HTML originates. It should match the DocumentRoot
of your HTTP server.			http://www.apache.org/docs/mod/core.html#documentroot							
variable::Variable::ENCRYPTOR	text	80								Encryption command	Normally should not be set if you use GPG and your key file is in your Interchange user's home directory										
variable::Variable::FORUM_ANON_NAME	text	20								Forum Anonymous Name	Name to use when a user posts anonymously to a forum										
variable::Variable::FORUM_EMAIL_NOTIFY	text	50								Forum notify email	An email address to send copies of user comments on products.										
variable::Variable::FORUM_PRODUCTS	yesno									Enable Product Forums	This enables user comments on products in the flypage. Only enabled by default if using MySQL or Postgres, as it will not work well on DBM and is not tested on Oracle.										
variable::Variable::MULTIORDER	select							=No,1=Yes			Whether users should by default have multipage order forms.										
variable::Variable::MV_PAYMENT_HOST	text	64								Payment Host	Many payment processors allow setting the host that the transaction
is sent to, but most provide a default. This need not be set for most gateways.										
variable::Variable::MV_PAYMENT_ID	text	20								Payment Gateway ID	The account ID for your payment gateway.										
variable::Variable::MV_PAYMENT_MODE	select							=none,
authorizenet=Authorize.net,
boa=Bank of America,
ccvs=CCVS,
echo=ECHO,
itransact=iTransact,
mcve=MCVE,
skipjack=Skipjack IC,
signio=Verisign Payflow Pro,
testpayment=TestPayment module,
tclink=Trust Commerce,
wellsfargo=Wells Fargo
		Payment Gateway	Which payment processor module you wish to use. You always have to sign up with your merchant bank and their credit card processor to enable this, without fail. The TestPayment module is just for testing purposes.
&lt;p>
See the documentation in the associated module for how to implement.										
variable::Variable::MV_PAYMENT_REFERER	text	40								Payment Referer	Some payment systems (notably AuthorizeNet) want to know that the
REFERER value is correct. Most don't need this.										
variable::Variable::MV_PAYMENT_SECRET	text	20								Payment Secret	Some payment gateways require a password or "secret". Many don't,
so this may not be necessary.										
variable::Variable::MYSQL	select							0=No, 1=Yes													
variable::Variable::ORDER_VIEW_LARGE	yesno									Query by example view	Select when you have large numbers of pending orders to display, to prevent long startup times when clicking the Orders tab.										
variable::Variable::PGP_KEY	gpg_keys									Key selector								[page admin/gpg_key]Add a GPG/PGP key</A>			
variable::Variable::POSTAL_ACCEPTED	select							=No,
1=Yes		Accept postal orders?											
variable::Variable::PO_ACCEPTED	select							0=No, 1=Yes													
variable::Variable::SECURE_ENABLE	yesno									Enable Secure URL?											
variable::Variable::SETTLE_TRANSACTION	yesno									Settle transactions	If you ship hard goods and only do an authorization at order time, you may choose to settle the transaction automatically via the Order manager. This needs to be set to Yes to enable this.										
variable::Variable::STATIC_LOGGED	select							No, Yes		Enabled for logged in users?	<b>Yes</b> will cause Interchange to generate static links where possible, even when users are logged in.										
variable::Variable::STYLE	select							foundation=Foundation Red,purpleyellow=Purple and Yellow,grayorange=Gray and Orange,fixedwidth=Fixed Width,greens=Green,grayscale=Gray,blueyellow=Blue and Yellow		Theme											
variable::Variable::TAXFIELD	select							state=Simple state-based,
multi=State/Province and VAT		Type of tax	You must <b>apply changes</b> after changing this.										
variable::Variable::UI_DBCONFIG	yesno									Offer Database Config Link	Shows Database configuration link on Tables  main manu										
variable::Variable::UI_IMAGE_META	yesno									New table display style	Image meta llink										
variable::Variable::UI_IMAGE_META-_NULL_-UI_META_LINK	yesno									New table display style											
variable::Variable::UI_ITEM_EXPUNGE	text	60								Item expunge tables	The tables that should have the SKU removed when you DELETE ITEM from the items menu.										
variable::Variable::UI_META_LINK	select							0=No, 1=Yes		Meta edit links	Determines whether enabled by default. They can be turned on in Preferences.										
variable::Variable::UI_SECURE	yesno										Determines whether to force UI into secure mode or not.										
variable::code	text									Variable name											
variable::pref_group	combo	20								Preferences area		pref_group	nullselect								
variant::inventory::quantity	text	8								On hand	Inventory of this variant.										
variant::options::code	text	20								SKU									 		
variant::options::description	textarea	60	3							Variant description											
variant::options::o_height	text	4								Height of Widget	Height of widget (if applicable)										
variant::options::o_width	text	4								Width of widget											
variant::options::price	text	12								Price	Price of this variant.										
variant::options::weight	text	8								Weight	Weight for this variant.										
variant::options::wholesale	text	12								Dealer price											
wiki::wikitext	textarea	80	24							Body											



1.1                  interchange/dist/lib/UI/pages/include/templates/ui_type1


rev 1.1, prev_rev 1.0
Index: ui_type1
===================================================================
<html>
<html[scratch ui_language_direction]>
<head>
<title>[scratch page_title]</title>
[tmp window_name][tag time]%m%d%H%M%S[/tag][/tmp]
<script language="JavaScript">
<!--
function open_help(url) {
 if(url == undefined) 
  url = '[area href="[either]@_UI_HELP_URL_@[or]@_UI_BASE_@/help[/either]" form="topic=[scratch help_name]"]';
 opts="top=0,left=0,scrollbars,status=no,menubar=no,location=yes,toolbar=no,resizable=yes,fullsize=no,width=__UI_HELP_WIDTH__,height=__UI_HELP_HEIGHT__";
 window.open(url, 'Help', opts);
}
function checkAll(form,what,uncheck) {
 var i, n, check;
 n = form.elements[what].length;
 if (!n) {
  if (uncheck == 1) {
   form.elements[ what ].checked=false;
  } else {
   form.elements[ what ].checked=true;
  }
 } else {
   var checkval;
   if (uncheck == 1) { checkval=false; } else { checkval=true; }
   for (i=0; i < n; i++) {
    check = form.elements[ what ][ i ];
    check.checked = checkval;
   }
 }
}
function addItem(selector, receptor, joiner) {
 if (joiner == null) { joiner = " "; } else { joiner = "\n"; }
 if (receptor.value != '') receptor.value = receptor.value + joiner;
 if (selector[selector.selectedIndex].value != null) {
  receptor.value = receptor.value + selector[selector.selectedIndex].value;
 } else {
  if (selector[selector.selectedIndex].text != null) {
   receptor.value = receptor.value + selector[selector.selectedIndex].text;
  }
 }
 return true;
}
//-->
</SCRIPT>
<link href="__UI_IMG__interchange.css" rel="stylesheet" type="text/css">
[if value personal_css]<style>[value personal_css]</style>[/if]
{{HEADER}}
[scratchd meta_header]
</head>
<body [scratch ui_body_extra] marginwidth="0" marginheight="0">
<table height="100%" width="100%" border="0" cellspacing="0" cellpadding="0">
   <tr>
      <td>
         <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
               <td width="121"><a href="[area admin/index]"><img src="logo.gif" width="121" height="32" border=0></A></td>
			   <td width="100%" align=right valign=bottom>
			   		<a href="[area admin/index]"><img border=0 width=100 height=29 src="bg.gif"></a>
			   </td>
			   {{FIXED_MENU}}
            </tr>
         </table>
      </td>
   </tr>
   <tr>
   		<td height=15>
		  <table width="100%" border=0 cellspacing=0 cellpadding=0>
            <!-- FIRST LEVEL TABS -->
            <tr>
			   {{TOP_TABS}}
               <td width="100%" style="vertical-align:bottom;">
                  <table width="100%" border="0" cellspacing="0" cellpadding="0">
							<tr><td class="lightshade"><img src="bg.gif" height="1"></td></tr>
                  </table>
				</td>
            </tr>
         </table>
      </td>
   </tr>
   <tr>
      <td class=block1 height="100%">
         <table width="100%" border=0 cellspacing=0 cellpadding=0 height="100%">
            <tr>
               <td class=lightshade><img src="bg.gif" width=1></td>
               <td width="100%" class=block1inner height="100%">
                  <table width="100%" border=0 cellspacing=0 cellpadding=0 height="100%">
                     <tr> 
                        <td colspan=3> 
                           <table width="100%" border=0 cellspacing=0 cellpadding=0>
                              <tr> 
                                 <td><img src="bg.gif" height=1></td>
                                 <td width="100%" rowspan=2 valign=bottom align=right> 
																							
                                    <table width="100%" border=0 cellspacing=0 cellpadding=0>
                                       <tr> 
                                          <td align=right><img src="bg.gif" width=1 height=1></td>
                                       </tr>
                                       <tr> 
                                          {{SEARCH_BOX?}}
                                          <td style="
																								text-align: right;
																								padding-right: 5px;
																					">
																					{{SEARCH_BOX}}
																					</td>
                                          {{/SEARCH_BOX?}}
                                          {{SEARCH_BOX:}}
                                          <td height=3><img src="bg.gif" height=3></td>
                                          {{/SEARCH_BOX:}}
                                       </tr>
                                       <tr> 
                                          <td class=lightshade><img src="bg.gif" height=1></td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
                              <tr> 
                                 <td valign=bottom> 
                                    <table width="100%" border=0 cellspacing=0 cellpadding=0>
                                       <!-- SECOND LEVEL TABS -->
                                       <tr> 
																			{{SECOND_TABS}}
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
                           </table>
                        </td>
                     </tr>
{{TOP_OF_FORM}}
{{HIDDEN_FIELDS}}
                     <tr> 
                        <td width=1 class=lightshade><img src="bg.gif" width=1 height=1></td>
                        <td width="100%" class=block3inner> 
                           <table width="100%" border=0 cellspacing=0 cellpadding=1>
                              <!-- TABLE TITLE ROW -->
                              <tr> 
                                 <td> 
                                    <table width="100%" border=0 cellspacing=0 cellpadding=0>
                                       <tr> 
                                          <td class=rtitle><img src="bg.gif" width=29 height=1></td>
                                          <td class=rtitle><img src="bg.gif" width=1 height=1></td>
                                       </tr>
                                       <tr> 
                                          <td width=29 height=22 align=center class=rtitle><a href="[area href='admin/page_metaconfig' form='page=[var MV_PAGE 1]']" title="[L]Page properties[/L]"><img src="[either][scratch icon_name][or]icon_error.gif[/either]" border=0></a></td>
                                          <td class=rtitle>[either][scratch page_banner][or][scratch page_title][/either]</td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
                              <tr> 
                                 <td height=4><img src="bg.gif" width=1 height=4></td>
                              </tr>
							  <!-- THIRD_TABS -->
								<tr> 
								   <td valign=bottom style="padding-bottom: 0"> 
									  <table cellpadding=0 cellspacing=2 width="100%">
									  <tr>
											<td height=4><img src="bg.gif" width=1 height=4></td>
											<td align=right nowrap width="100%" rowspan=2> 
											 <!-- TOP BUTTONS -->
												{{TOP_BUTTONS}}
											 </td>
										 </tr>
										 <tr>
										   <td>
												<table border=0 cellspacing=0 cellpadding=0>
												 <!-- THIRD LEVEL TABS -->
												 <tr> 
												 {{THIRD_TABS}}
												 </tr>
												</table>
											 </td>
										  </tr>
									  </table>
								   </td>
								</tr>
                              <tr> 
                                 <td class="darkshade"> 
                                    <table width="100%" border="0" cellspacing="0" cellpadding="7">
                                       <tr> 
                                          <td class="workarea"> 
			  [if warnings]
			  <blockquote class=cmessage>
				  [warnings]
			  </blockquote>
			  [/if]

			  [if errors]
			  <blockquote class=cerror>
				
				[error show_var=1 all=1 show_error=1 joiner="<br>"]
			  </blockquote>
			  [/if]
										  {{:DEFAULT}}
                                          </td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
															{{BOTTOM_BUTTONS?}}
                              <tr> 
                                 <td height="4" align=right>{{EXTRA_BUTTONS}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{BOTTOM_BUTTONS}}</td>
                              </tr>
															{{/BOTTOM_BUTTONS?}}
															{{BOTTOM_BUTTONS:}}
                              <tr> 
                                 <td height="4"><img src="bg.gif" width="1" height="4"></td>
                              </tr>
															{{/BOTTOM_BUTTONS:}}
                           </table>
                        </td>
                        <td width="1" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
{{BOTTOM_OF_FORM}}
                     <tr> 
                        <td colspan="3" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
					<!-- FOOTER -->
                     <tr> 
                        <td colspan="3" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
					<tr>
					   <td height="28" class="footer" colspan=2>
						   &nbsp;
						   	<a href="@_INTERCHANGE_URL_@" class=footer>
								Interchange
							</A>
							[version] &copy; 2002-2003 Interchange Development Group&nbsp;&nbsp;&nbsp;
							&nbsp;
							Username:
						   <a href="[area href='__UI_BASE__/access_permissions' form='user_id=[data session username]']" class=footer>[data session username]</A> &nbsp; 
							&nbsp;
							[time]%e %b %Y %H:%M:%S[/time]
							&nbsp;
						    &nbsp;
						   StoreID: <a href="[calc]$Config->{VendURLOriginal}[/calc]" class=footer>[calc]$Config->{CatalogName}[/calc]</A> &nbsp; 
							&nbsp;
							&nbsp;
							([var MV_PAGE 1])
                       </td>
						<td align=right class=footer>
								
                       </td>
					</tr>
                  </table>
               </td>
               <td class="darkshade"><img src="bg.gif" width="1"></td>
            </tr>
            <tr>
               <td colspan=3 class=darkshade><img src="bg.gif" width=1></td>
            </tr>
         </table>
      </td>
   </tr>
</table>
</body>
</html>



1.1                  interchange/dist/lib/UI/pages/include/templates/ui_type2


rev 1.1, prev_rev 1.0
Index: ui_type2
===================================================================
<html>
<html[scratch ui_language_direction]>
<head>
<title>[scratch page_title]</title>
[tmp window_name][tag time]%m%d%H%M%S[/tag][/tmp]
<script language="JavaScript">
<!--
function open_help(url) {
 if(url == undefined) 
  url = '[area href="[either]@_UI_HELP_URL_@[or]@_UI_BASE_@/help[/either]" form="topic=[scratch help_name]"]';
 opts="top=0,left=0,scrollbars,status=no,menubar=no,location=yes,toolbar=no,resizable=yes,fullsize=no,width=__UI_HELP_WIDTH__,height=__UI_HELP_HEIGHT__";
 window.open(url, 'Help', opts);
}
function checkAll(form,what,uncheck) {
 var i, n, check;
 n = form.elements[what].length;
 if (!n) {
  if (uncheck == 1) {
   form.elements[ what ].checked=false;
  } else {
   form.elements[ what ].checked=true;
  }
 } else {
   var checkval;
   if (uncheck == 1) { checkval=false; } else { checkval=true; }
   for (i=0; i < n; i++) {
    check = form.elements[ what ][ i ];
    check.checked = checkval;
   }
 }
}
function addItem(selector, receptor, joiner) {
 if (joiner == null) { joiner = " "; } else { joiner = "\n"; }
 if (receptor.value != '') receptor.value = receptor.value + joiner;
 if (selector[selector.selectedIndex].value != null) {
  receptor.value = receptor.value + selector[selector.selectedIndex].value;
 } else {
  if (selector[selector.selectedIndex].text != null) {
   receptor.value = receptor.value + selector[selector.selectedIndex].text;
  }
 }
 return true;
}
//-->
</SCRIPT>
<link href="__UI_IMG__interchange.css" rel="stylesheet" type="text/css">
[if value personal_css]<style>[value personal_css]</style>[/if]
[scratchd meta_header]
</head>
<body [scratch ui_body_extra] marginwidth="0" marginheight="0">
<table height="100%" width="100%" border="0" cellspacing="0" cellpadding="0">
   <tr>
      <td>
         <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
               <td width="121"><a href="http://www.icdevgroup.org/" target=icdevgroup><img src="logo.gif" width="121" height="32" border=0></A></td>
			   <td width="100%" align=right valign=bottom>
			   		<a href="[area admin/index]"><img border=0 width=300 height=29 src="bg.gif"></a>
			   </td>
			   {{FIXED_MENU}}
            </tr>
         </table>
      </td>
   </tr>
   <tr>
   		<td height=15>
		  <table width="100%" border=0 cellspacing=0 cellpadding=0>
            <!-- FIRST LEVEL TABS -->
            <tr>
			   {{TOP_TABS}}
               <td width="100%" style="vertical-align:bottom;">
                  <table width="100%" border="0" cellspacing="0" cellpadding="0">
							<tr><td class="lightshade"><img src="bg.gif" height="1"></td></tr>
                  </table>
				</td>
            </tr>
         </table>
      </td>
   </tr>
   <tr>
      <td class=block1 height="100%">
         <table width="100%" border=0 cellspacing=0 cellpadding=0 height="100%">
            <tr>
               <td class=lightshade><img src="bg.gif" width=1></td>
               <td width="100%" class=block1inner height="100%">
                  <table width="100%" border=0 cellspacing=0 cellpadding=0 height="100%">
                     <tr> 
                        <td colspan=3> 
                           <table width="100%" border=0 cellspacing=0 cellpadding=0>
                              <tr> 
                                 <td><img src="bg.gif" height=1></td>
                                 <td width="100%" rowspan=2 valign=bottom align=right> 
																							
                                    <table width="100%" border=0 cellspacing=0 cellpadding=0>
                                       <tr> 
                                          <td align=right><img src="bg.gif" width=1 height=1></td>
                                       </tr>
                                       <tr> 
                                          {{SEARCH_BOX?}}
                                          <td style="
																								text-align: right;
																								padding-right: 5px;
																					">
																					{{SEARCH_BOX}}
																					</td>
                                          {{/SEARCH_BOX?}}
                                          {{SEARCH_BOX:}}
                                          <td height=3><img src="bg.gif" height=3></td>
                                          {{/SEARCH_BOX:}}
                                       </tr>
                                       <tr> 
                                          <td class=lightshade><img src="bg.gif" height=1></td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
                              <tr> 
                                 <td valign=bottom> 
                                    <table width="100%" border=0 cellspacing=0 cellpadding=0>
                                       <!-- SECOND LEVEL TABS -->
                                       <tr> 
																			{{SECOND_TABS}}
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
                           </table>
                        </td>
                     </tr>
{{TOP_OF_FORM}}
{{HIDDEN_FIELDS}}
                     <tr> 
                        <td width=1 class=lightshade><img src="bg.gif" width=1 height=1></td>
                        <td width="100%" class=block3inner> 
                           <table width="100%" border=0 cellspacing=0 cellpadding=1>
                              <!-- TABLE TITLE ROW -->
                              <tr> 
                                 <td> 
                                    <table width="100%" border=0 cellspacing=0 cellpadding=0>
                                       <tr> 
                                          <td class=rtitle><img src="bg.gif" width=29 height=1></td>
                                          <td class=rtitle><img src="bg.gif" width=1 height=1></td>
                                       </tr>
                                       <tr> 
                                          <td width=29 height=22 align=center class=rtitle>[if scratch icon_name]<img src="[scratch icon_name]" width=16 height=14>[else]&nbsp;[/else][/if]</td>
                                          <td class=rtitle>[either][scratch page_banner][or][scratch page_title][/either]</td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
                              <tr> 
                                 <td height=4><img src="bg.gif" width=1 height=4></td>
                              </tr>
							  <!-- THIRD_TABS -->
								<tr> 
								   <td valign=bottom> 
									  <table cellpadding=0 cellspacing=2 width="100%">
									  <tr>
										   <td>
												<table border=0 cellspacing=0 cellpadding=0>
												 <!-- THIRD LEVEL TABS -->
												 <tr> 
												 {{THIRD_TABS}}
												 </tr>
												</table>
											 </td>
												<td align=right nowrap width="100%"> 
													{{SECTION_BUTTONS_TOP}}
												</td>
										  </tr>
									  </table>
								   </td>
								</tr>
                              <tr> 
                                 <td class="darkshade"> 
                                    <table width="100%" border="0" cellspacing="0" cellpadding="7">
                                       <tr> 
                                          <td class="workarea"> 
										  {{:DEFAULT}}
                                          </td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
															{{SECTION_BUTTONS_BOTTOM?}}
                              <tr> 
                                 <td height="4" align=right>{{SECTION_BUTTONS_BOTTOM}}</td>
                              </tr>
															{{/SECTION_BUTTONS_BOTTOM?}}
															{{SECTION_BUTTONS_BOTTOM:}}
                              <tr> 
                                 <td height="4"><img src="bg.gif" width="1" height="4"></td>
                              </tr>
															{{/SECTION_BUTTONS_BOTTOM:}}
                           </table>
                        </td>
                        <td width="1" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
{{BOTTOM_OF_FORM}}
                     <tr> 
                        <td colspan="3" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
					<!-- FOOTER -->
                     <tr> 
                        <td colspan="3" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
					<tr>
					   <td height="28" class="footer" colspan=2>
						   &nbsp;
						   	<a href="@_INTERCHANGE_URL_@" class=footer>
								Interchange
							</A>
							[version] &copy; 2002-2003 Interchange Development Group&nbsp;&nbsp;&nbsp;
							&nbsp;
							Username:
						   <a href="[area href='__UI_BASE__/access_permissions' form='user_id=[data session username]']" class=footer>[data session username]</A> &nbsp; 
							&nbsp;
							[time]%e %b %Y %H:%M:%S[/time]
							&nbsp;
						    &nbsp;
						   StoreID: <a href="[calc]$Config->{VendURLOriginal}[/calc]" class=footer>[calc]$Config->{CatalogName}[/calc]</A> &nbsp; 
							&nbsp;
							&nbsp;
							([var MV_PAGE 1])
                       </td>
						<td align=right class=footer>
								
                       </td>
					</tr>
                  </table>
               </td>
               <td class="darkshade"><img src="bg.gif" width="1"></td>
            </tr>
            <tr>
               <td colspan=3 class=darkshade><img src="bg.gif" width=1></td>
            </tr>
         </table>
      </td>
   </tr>
</table>
</body>
</html>



1.1                  interchange/dist/lib/UI/pages/include/templates/ui_type3


rev 1.1, prev_rev 1.0
Index: ui_type3
===================================================================
<html>
<html[scratch ui_language_direction]>
<head>
<title>[scratch page_title]</title>
[tmp window_name][tag time]%m%d%H%M%S[/tag][/tmp]
<script language="JavaScript">
<!--
function open_help(url) {
 if(url == undefined) 
  url = '[area href="[either]@_UI_HELP_URL_@[or]@_UI_BASE_@/help[/either]" form="topic=[scratch help_name]"]';
 opts="top=0,left=0,scrollbars,status=no,menubar=no,location=yes,toolbar=no,resizable=yes,fullsize=no,width=__UI_HELP_WIDTH__,height=__UI_HELP_HEIGHT__";
 window.open(url, 'Help', opts);
}
function checkAll(form,what,uncheck) {
 var i, n, check;
 n = form.elements[what].length;
 if (!n) {
  if (uncheck == 1) {
   form.elements[ what ].checked=false;
  } else {
   form.elements[ what ].checked=true;
  }
 } else {
   var checkval;
   if (uncheck == 1) { checkval=false; } else { checkval=true; }
   for (i=0; i < n; i++) {
    check = form.elements[ what ][ i ];
    check.checked = checkval;
   }
 }
}
function addItem(selector, receptor, joiner) {
 if (joiner == null) { joiner = " "; } else { joiner = "\n"; }
 if (receptor.value != '') receptor.value = receptor.value + joiner;
 if (selector[selector.selectedIndex].value != null) {
  receptor.value = receptor.value + selector[selector.selectedIndex].value;
 } else {
  if (selector[selector.selectedIndex].text != null) {
   receptor.value = receptor.value + selector[selector.selectedIndex].text;
  }
 }
 return true;
}
//-->
</SCRIPT>
<link href="__UI_IMG__interchange.css" rel="stylesheet" type="text/css">
[if value personal_css]<style>[value personal_css]</style>[/if]
{{HEADER}}
[scratchd meta_header]
</head>
<body [scratch ui_body_extra] marginwidth="0" marginheight="0">
<table height="100%" width="100%" border="0" cellspacing="0" cellpadding="0">
   <tr>
      <td>
         <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
               <td width="121"><a href="http://www.icdevgroup.org/" target=icdevgroup><img src="logo.gif" width="121" height="32" border=0></A></td>
			   <td width="100%" align=right valign=bottom>
			   		<a href="[area admin/index]"><img border=0 width=300 height=29 src="bg.gif"></a>
			   </td>
			   {{FIXED_MENU}}
            </tr>
         </table>
      </td>
   </tr>
   <tr>
   		<td height=15>
		  <table width="100%" border=0 cellspacing=0 cellpadding=0>
            <!-- FIRST LEVEL TABS -->
            <tr>
			   {{TOP_TABS}}
               <td width="100%" style="vertical-align:bottom;">
                  <table width="100%" border="0" cellspacing="0" cellpadding="0">
							<tr><td class="lightshade"><img src="bg.gif" height="1"></td></tr>
                  </table>
				</td>
            </tr>
         </table>
      </td>
   </tr>
   <tr>
      <td class=block1 height="100%">
         <table width="100%" border=0 cellspacing=0 cellpadding=0 height="100%">
            <tr>
               <td class=lightshade><img src="bg.gif" width=1></td>
               <td width="100%" class=block1inner height="100%">
                  <table width="100%" border=0 cellspacing=0 cellpadding=0 height="100%">
                     <tr> 
                        <td colspan=3> 
                           <table width="100%" border=0 cellspacing=0 cellpadding=0>
                              <tr> 
                                 <td><img src="bg.gif" height=1></td>
                                 <td width="100%" rowspan=2 valign=bottom align=right> 
																							
                                    <table width="100%" border=0 cellspacing=0 cellpadding=0>
                                       <tr> 
                                          <td align=right><img src="bg.gif" width=1 height=1></td>
                                       </tr>
                                       <tr> 
                                          {{SEARCH_BOX?}}
                                          <td style="
																								text-align: right;
																								padding-right: 5px;
																					">
																					{{SEARCH_BOX}}
																					</td>
                                          {{/SEARCH_BOX?}}
                                          {{SEARCH_BOX:}}
                                          <td height=3><img src="bg.gif" height=3></td>
                                          {{/SEARCH_BOX:}}
                                       </tr>
                                       <tr> 
                                          <td class=lightshade><img src="bg.gif" height=1></td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
                              <tr> 
                                 <td valign=bottom> 
                                    <table width="100%" border=0 cellspacing=0 cellpadding=0>
                                       <!-- SECOND LEVEL TABS -->
                                       <tr> 
																			{{SECOND_TABS}}
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
                           </table>
                        </td>
                     </tr>
{{TOP_OF_FORM}}
{{HIDDEN_FIELDS}}
                     <tr> 
                        <td width=1 class=lightshade><img src="bg.gif" width=1 height=1></td>
                        <td width="100%" class=block3inner> 
                           <table width="100%" border=0 cellspacing=0 cellpadding=1>
                              <!-- TABLE TITLE ROW -->
                              <tr> 
                                 <td> 
                                    <table width="100%" border=0 cellspacing=0 cellpadding=0>
                                       <tr> 
                                          <td class=rtitle><img src="bg.gif" width=29 height=1></td>
                                          <td class=rtitle><img src="bg.gif" width=1 height=1></td>
                                       </tr>
                                       <tr> 
                                          <td width=29 height=22 align=center class=rtitle><a href="[area href='admin/page_metaconfig' form='page=[var MV_PAGE 1]']" title="[L]Page properties[/L]"><img src="[either][scratch icon_name][or]icon_error.gif[/either]" width=16 height=14 border=0></a></td>
                                          <td class=rtitle>[either][scratch page_banner][or][scratch page_title][/either]</td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
                              <tr> 
                                 <td height=4><img src="bg.gif" width=1 height=4></td>
                              </tr>
							  <!-- THIRD_TABS -->
								<tr> 
								   <td valign=bottom style="padding-bottom: 0"> 
									  <table cellpadding=0 cellspacing=2 width="100%">
									  <tr>
											<td height=4><img src="bg.gif" width=1 height=4></td>
											<td align=right nowrap width="100%" rowspan=2> 
											 <!-- TOP BUTTONS -->
												{{TOP_BUTTONS}}
											 </td>
										 </tr>
										 <tr>
										   <td>
												<table border=0 cellspacing=0 cellpadding=0>
												 <!-- THIRD LEVEL TABS -->
												 <tr> 
												 {{THIRD_TABS}}
												 </tr>
												</table>
											 </td>
										  </tr>
									  </table>
								   </td>
								</tr>
                              <tr> 
                                 <td class="darkshade"> 
                                    <table width="100%" border="0" cellspacing="0" cellpadding="7">
                                       <tr> 
                                          <td class="workarea"> 
			  [if warnings]
			  <blockquote class=cmessage>
				  [warnings]
			  </blockquote>
			  [/if]

			  [if errors]
			  <blockquote class=cerror>
				
				[error show_var=1 all=1 show_error=1 joiner="<br>"]
			  </blockquote>
			  [/if]
										  {{:DEFAULT}}
                                          </td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
															{{BOTTOM_BUTTONS?}}
                              <tr> 
                                 <td height="4" align=right>{{EXTRA_BUTTONS}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{BOTTOM_BUTTONS}}</td>
                              </tr>
															{{/BOTTOM_BUTTONS?}}
															{{BOTTOM_BUTTONS:}}
                              <tr> 
                                 <td height="4"><img src="bg.gif" width="1" height="4"></td>
                              </tr>
															{{/BOTTOM_BUTTONS:}}
                           </table>
                        </td>
                        <td width="1" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
{{BOTTOM_OF_FORM}}
                     <tr> 
                        <td colspan="3" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
					<!-- FOOTER -->
                     <tr> 
                        <td colspan="3" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
					<tr>
					   <td height="28" class="footer" colspan=2>
						   &nbsp;
						   	<a href="@_INTERCHANGE_URL_@" class=footer>
								Interchange
							</A>
							[version] &copy; 2002-2003 Interchange Development Group&nbsp;&nbsp;&nbsp;
							&nbsp;
							Username:
						   <a href="[area href='__UI_BASE__/access_permissions' form='user_id=[data session username]']" class=footer>[data session username]</A> &nbsp; 
							&nbsp;
							[time]%e %b %Y %H:%M:%S[/time]
							&nbsp;
						    &nbsp;
						   StoreID: <a href="[calc]$Config->{VendURLOriginal}[/calc]" class=footer>[calc]$Config->{CatalogName}[/calc]</A> &nbsp; 
							&nbsp;
							&nbsp;
							([var MV_PAGE 1])
                       </td>
						<td align=right class=footer>
								
                       </td>
					</tr>
                  </table>
               </td>
               <td class="darkshade"><img src="bg.gif" width="1"></td>
            </tr>
            <tr>
               <td colspan=3 class=darkshade><img src="bg.gif" width=1></td>
            </tr>
         </table>
      </td>
   </tr>
</table>
</body>
</html>



1.1                  interchange/dist/lib/UI/pages/include/templates/ui_type5


rev 1.1, prev_rev 1.0
Index: ui_type5
===================================================================
<html>
<html[scratch ui_language_direction]>
<head>
<title>[scratch page_title]</title>
[tmp window_name][tag time]%m%d%H%M%S[/tag][/tmp]
<script language="JavaScript">
<!--
function open_help(url) {
 if(url == undefined) 
  url = '[area href="[either]@_UI_HELP_URL_@[or]@_UI_BASE_@/help[/either]" form="topic=[scratch help_name]"]';
 opts="top=0,left=0,scrollbars,status=no,menubar=no,location=yes,toolbar=no,resizable=yes,fullsize=no,width=__UI_HELP_WIDTH__,height=__UI_HELP_HEIGHT__";
 window.open(url, 'Help', opts);
}
function checkAll(form,what,uncheck) {
 var i, n, check;
 n = form.elements[what].length;
 if (!n) {
  if (uncheck == 1) {
   form.elements[ what ].checked=false;
  } else {
   form.elements[ what ].checked=true;
  }
 } else {
   var checkval;
   if (uncheck == 1) { checkval=false; } else { checkval=true; }
   for (i=0; i < n; i++) {
    check = form.elements[ what ][ i ];
    check.checked = checkval;
   }
 }
}
function addItem(selector, receptor, joiner) {
 if (joiner == null) { joiner = " "; } else { joiner = "\n"; }
 if (receptor.value != '') receptor.value = receptor.value + joiner;
 if (selector[selector.selectedIndex].value != null) {
  receptor.value = receptor.value + selector[selector.selectedIndex].value;
 } else {
  if (selector[selector.selectedIndex].text != null) {
   receptor.value = receptor.value + selector[selector.selectedIndex].text;
  }
 }
 return true;
}
//-->
</SCRIPT>
<link href="__UI_IMG__interchange.css" rel="stylesheet" type="text/css">
[if value personal_css]<style>[value personal_css]</style>[/if]
{{HEADER}}
[scratchd meta_header]
</head>
<body [scratch ui_body_extra] marginwidth="0" marginheight="0">
<table height="100%" width="100%" border="0" cellspacing="0" cellpadding="0">
   <tr>
      <td class=block1 height="100%">
         <table width="100%" border=0 cellspacing=0 cellpadding=0 height="100%">
            <tr>
               <td class=lightshade><img src="bg.gif" width=1></td>
               <td width="100%" class=block1inner height="100%">
                  <table width="100%" border=0 cellspacing=0 cellpadding=0 height="100%">
                     <tr> 
                        <td colspan=3> 
                           <table width="100%" border=0 cellspacing=0 cellpadding=0>
                              <tr> 
                                 <td><img src="bg.gif" height=1></td>
                                 <td width="100%" rowspan=2 valign=bottom align=right> 
																							
                                    <table width="100%" border=0 cellspacing=0 cellpadding=0>
                                       <tr> 
                                          <td align=right><img src="bg.gif" width=1 height=1></td>
                                       </tr>
                                       <tr> 
                                          {{SEARCH_BOX?}}
                                          <td style="
																								text-align: right;
																								padding-right: 5px;
																					">
																					{{SEARCH_BOX}}
																					</td>
                                          {{/SEARCH_BOX?}}
                                          {{SEARCH_BOX:}}
                                          <td height=3><img src="bg.gif" height=3></td>
                                          {{/SEARCH_BOX:}}
                                       </tr>
                                       <tr> 
                                          <td class=lightshade><img src="bg.gif" height=1></td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
                           </table>
                        </td>
                     </tr>
{{TOP_OF_FORM}}
{{HIDDEN_FIELDS}}
                     <tr> 
                        <td width=1 class=lightshade><img src="bg.gif" width=1 height=1></td>
                        <td width="100%" class=block3inner> 
                           <table width="100%" border=0 cellspacing=0 cellpadding=1>
                              <!-- TABLE TITLE ROW -->
                              <tr> 
                                 <td> 
                                    <table width="100%" border=0 cellspacing=0 cellpadding=0>
                                       <tr> 
                                          <td class=rtitle><img src="bg.gif" width=29 height=1></td>
                                          <td class=rtitle><img src="bg.gif" width=1 height=1></td>
                                       </tr>
                                       <tr> 
                                          <td width=29 height=22 align=center class=rtitle><a href="[area href='admin/page_metaconfig' form='page=[var MV_PAGE 1]']" title="[L]Page properties[/L]"><img src="[either][scratch icon_name][or]icon_error.gif[/either]" width=16 height=14 border=0></a></td>
                                          <td class=rtitle>[either][scratch page_banner][or][scratch page_title][/either]</td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
                              <tr> 
                                 <td height=4><img src="bg.gif" width=1 height=4></td>
                              </tr>
                              <tr> 
                                 <td class="darkshade"> 
                                    <table width="100%" border="0" cellspacing="0" cellpadding="7">
                                       <tr> 
                                          <td class="workarea"> 
			  [if warnings]
			  <blockquote class=cmessage>
				  [warnings]
			  </blockquote>
			  [/if]

			  [if errors]
			  <blockquote class=cerror>
				
				[error show_var=1 all=1 show_error=1 joiner="<br>"]
			  </blockquote>
			  [/if]
										  {{:DEFAULT}}
                                          </td>
                                       </tr>
                                    </table>
                                 </td>
                              </tr>
															{{BOTTOM_BUTTONS?}}
                              <tr> 
                                 <td height="4" align=right>{{EXTRA_BUTTONS}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{BOTTOM_BUTTONS}}</td>
                              </tr>
															{{/BOTTOM_BUTTONS?}}
															{{BOTTOM_BUTTONS:}}
                              <tr> 
                                 <td height="4"><img src="bg.gif" width="1" height="4"></td>
                              </tr>
															{{/BOTTOM_BUTTONS:}}
                           </table>
                        </td>
                        <td width="1" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
{{BOTTOM_OF_FORM}}
                     <tr> 
                        <td colspan="3" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
					<!-- FOOTER -->
                     <tr> 
                        <td colspan="3" class="darkshade"><img src="bg.gif" width="1" height="1"></td>
                     </tr>
					<tr>
					   <td height="28" class="footer" colspan=2>
						   &nbsp;
						   	<a href="@_INTERCHANGE_URL_@" class=footer>
								Interchange
							</A>
							[version] &copy; 2002-2003 Interchange Development Group&nbsp;&nbsp;&nbsp;
							&nbsp;
							Username:
						   <a href="[area href='__UI_BASE__/access_permissions' form='user_id=[data session username]']" class=footer>[data session username]</A> &nbsp; 
							&nbsp;
							[time]%e %b %Y %H:%M:%S[/time]
							&nbsp;
						    &nbsp;
						   StoreID: <a href="[calc]$Config->{VendURLOriginal}[/calc]" class=footer>[calc]$Config->{CatalogName}[/calc]</A> &nbsp; 
							&nbsp;
							&nbsp;
							([var MV_PAGE 1])
                       </td>
						<td align=right class=footer>
								
                       </td>
					</tr>
                  </table>
               </td>
               <td class="darkshade"><img src="bg.gif" width="1"></td>
            </tr>
            <tr>
               <td colspan=3 class=darkshade><img src="bg.gif" width=1></td>
            </tr>
         </table>
      </td>
   </tr>
</table>
</body>
</html>



2.1       +32 -8     interchange/dist/lib/UI/profiles/db_maintenance


rev 2.1, prev_rev 2.0
Index: db_maintenance
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/profiles/db_maintenance,v
retrieving revision 2.0
retrieving revision 2.1
diff -u -r2.0 -r2.1
--- db_maintenance	18 Jul 2001 02:22:13 -0000	2.0
+++ db_maintenance	14 Jan 2003 02:25:53 -0000	2.1
@@ -112,14 +112,14 @@
 		}
 
 #Log("using idp=$idp, value=$CGI->{$idp}");
-		$return unless $idp;
+		return unless $idp;
 
 		delete $Scratch->{ui_location};
 		$Config->{NoSearch} = '';
 		
-		my $out = '';
 		my @deltables = split /[\s0,]/, $CGI->{ui_delete_tables};
 		unshift @deltables, $CGI->{mv_data_table};
+		my @out;
 		for(@{$CGI_array->{$idp}}) {
 			my $key = $_;
 			my $db;
@@ -127,11 +127,12 @@
 				my ($t, $col) = split /:/, $_;
 				next unless $t;
 				if ( $Tag->if_mm('!tables', "$t=d") ) {
-					push @errors, "Not authorized to delete from table $t";
+					push @errors,
+						errmsg("Not authorized to delete from table %s", $t);
 					next;
 				}
 				unless ($db = $Db{$t}) {
-					push @errors, "Table $t not available.";
+					push @errors, errmsg("Table %s not available.", $t);
 					next;
 				}
 				if($col) {
@@ -139,10 +140,21 @@
 					$key = $db->quote($key, $col);
 					my $num = $db->query("delete from $t where $col = $key");
 					if($num > 0) {
-						$out .= "deleted $num records from $t where $col = $key</BR>";
+						push @out, errmsg(
+									"deleted %s records from %s where %s = %s",
+									$num,
+									$t,
+									$col,
+									$key,
+									);
 					}
 					else {
-						$out .= "No records in $t where $col = $key</BR>";
+						push @errors, errmsg(
+										"No records in %s where %s = %s",
+										$t,
+										$col,
+										$key,
+										);
 					}
 				}
 				else {
@@ -152,11 +164,23 @@
 							push @errors, $@;
 							next;
 						};
-					$out .= "deleted $key from $t<br>";
+					push @out, errmsg("Deleted %s from %s", $key, $t);
 				}
 			}
 		}
-
+		if(@errors) {
+			my $str = '<ul><li>';
+			$str .= join '<li>', @errors;
+			$str .= '</ul>';
+			$Tag->error({ name => 'db_maintenance', set => $str });
+		}
+		if(@out) {
+			my $str = '<ul><li>';
+			$str .= join '<li>', @out;
+			$str .= '</ul>';
+			$Tag->warnings($str);
+		}
+		return;
 	[/perl]
 [/if]
 



2.3       +4 -3      interchange/dist/lib/UI/profiles/process_filter


rev 2.3, prev_rev 2.2
Index: process_filter
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/profiles/process_filter,v
retrieving revision 2.2
retrieving revision 2.3
diff -u -r2.2 -r2.3
--- process_filter	14 Oct 2002 21:35:02 -0000	2.2
+++ process_filter	14 Jan 2003 02:25:53 -0000	2.3
@@ -1,7 +1,7 @@
 __NAME__ process_filter
 [flag type=write table="[cgi mv_data_table]"]
 [perl tables="[list-databases]"]
-# $Id: process_filter,v 2.2 2002/10/14 21:35:02 mheins Exp $
+# $Id: process_filter,v 2.3 2003/01/14 02:25:53 mheins Exp $
 	my @filters = grep /^ui_filter:/, keys %$CGI;
   FILTERS: {
 	last FILTERS unless @filters;
@@ -19,7 +19,7 @@
 	}
   }
 
-  SERIALIZE: {
+ SERIALIZE: {
   	last SERIALIZE unless $CGI->{ui_serial_fields};
 #Debug("Found serialzed values $CGI->{ui_serial_fields}");
 	my(@scols) = split /\s+/, $CGI->{ui_serial_fields};
@@ -45,6 +45,7 @@
 									$serial_data{$maincol},
 									$hashkey,
 									$val,
+									1,
 								);
 
 	}
@@ -54,7 +55,7 @@
 	for(@cols) {
 #Debug("after serialize data for $_: $CGI->{$_}");
 	}
-  }
+ }
 
 	my @uploads = grep /^ui_upload_file_path:/, keys %$CGI;
 #Debug("Check uploads: " . join ",", @uploads);



2.5       +2 -2      interchange/dist/lib/UI/vars/UI_STD_FILE_NAV


rev 2.5, prev_rev 2.4
Index: UI_STD_FILE_NAV
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/vars/UI_STD_FILE_NAV,v
retrieving revision 2.4
retrieving revision 2.5
diff -u -r2.4 -r2.5
--- UI_STD_FILE_NAV	26 Aug 2002 02:56:27 -0000	2.4
+++ UI_STD_FILE_NAV	14 Jan 2003 02:25:53 -0000	2.5
@@ -40,7 +40,7 @@
 			</SELECT>
 			<INPUT TYPE=submit VALUE="[msg]Find files[/msg]"><BR>
 			<small>
-			<INPUT TYPE=checkbox NAME="find_session" VALUE=1> [msg]Look in session and temporary files[/msg]
+			<INPUT TYPE=checkbox NAME="find_session" VALUE=1 [checked cgi=1 name=find_session value=1]> [msg]Look in session and temporary files[/msg]
 			&nbsp;&nbsp;&nbsp;
 			[if type=explicit
 				compare=`
@@ -84,7 +84,7 @@
 	]
 [else]
 <table width="100%">
-[table-organize columns=3 columnize=1 interpolate=1]
+[table-organize columns=3 columnize=1 min-rows=15 interpolate=1]
 	[file-navigator
 		mask="[scratch dir_mask]"
 		include_mask="[scratch include_mask]"



2.8       +17 -44    interchange/dist/lib/UI/vars/UI_STD_FOOTER


rev 2.8, prev_rev 2.7
Index: UI_STD_FOOTER
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/vars/UI_STD_FOOTER,v
retrieving revision 2.7
retrieving revision 2.8
diff -u -r2.7 -r2.8
--- UI_STD_FOOTER	18 Aug 2002 08:17:44 -0000	2.7
+++ UI_STD_FOOTER	14 Jan 2003 02:25:53 -0000	2.8
@@ -1,46 +1,19 @@
 Variable UI_STD_FOOTER  <<EOV
-[if scratch ui_checklist]
-		</td>
-	</tr>
-</table>[set ui_checklist][/set][/if]
-								</td>
-							</tr>
-						</table>
-					</td>
-				</tr>
-			</table>
-			<!-- end of main wrapper table -->
-		</td>
-	</tr>
-	<!-- start of bottom -->
-	<tr>
-		<td valign=bottom>
-			<table width="100%" border=0 cellpadding=0 cellspacing=0>
-				<tr>
-					<td height=1 class=hrmedium><img src="bg.gif" height=1></td>
-				</tr>
-				<tr>
-					<td height=24 class=tabdark>
-						<table border=0 cellspacing=0 cellpadding=0>
-							<tr>
-								<td width=6><img src="bg.gif"></td>
-								<td><img src="icfooter.gif"></td>
-								<td nowrap class=footer>
-									[version] &copy; 2002-2003 Interchange Development Group&nbsp;&nbsp;&nbsp;
-									<font class=footerb>[msg]Username[/msg]: </font>[data session username]&nbsp;&nbsp;&nbsp;
-									<font class=footerb>[msg]StoreID[/msg]: </font> <A HREF="[scratch ui_catalog_url]">[calc]$Config->{CatalogName}[/calc] </b></a>&nbsp;&nbsp;&nbsp;
-									  [tag time]%d %B %Y %H:%M:%S[/tag] &nbsp;([var MV_PAGE 1])
-								</td>
-							</tr>
-						</table>
-					</td>
-				</tr>
-			</table>
-		</td>
-	</tr>
-	<!-- end of bottom -->
-</table>
-<!-- end of outer wrapper table -->
-</body>
-</html>
+[unpack]
+[include file="include/templates/ui_[either][scratch display_class][or]type1[/either]"]
+[/unpack]
+[comment] Clear these puppies [/comment][calc]
+	for (qw/
+				page_title
+				page_banner
+				icon_name
+				help_name
+				page_perm
+				table_perm
+				ui_body_extra
+				display_class
+		/) { delete $Scratch->{$_} }
+	return;
+[/calc]
+	
 EOV



2.36      +191 -348  interchange/dist/lib/UI/vars/UI_STD_HEAD


rev 2.36, prev_rev 2.35
Index: UI_STD_HEAD
===================================================================
RCS file: /var/cvs/interchange/dist/lib/UI/vars/UI_STD_HEAD,v
retrieving revision 2.35
retrieving revision 2.36
diff -u -r2.35 -r2.36
--- UI_STD_HEAD	10 Jan 2003 21:10:50 -0000	2.35
+++ UI_STD_HEAD	14 Jan 2003 02:25:53 -0000	2.36
@@ -1,4 +1,4 @@
-## UI Header vars, version: $Id: UI_STD_HEAD,v 2.35 2003/01/10 21:10:50 jon Exp $
+## UI Header vars, version: $Id: UI_STD_HEAD,v 2.36 2003/01/14 02:25:53 mheins Exp $
 Variable UI_STD_INIT <<EOV
 [calcn]
 	# is this browser able to grok DHTML ?
@@ -19,7 +19,7 @@
 	# of Interchange's automatic image path rewriting
 	$Config->{ImageDirOriginal} = $Config->{ImageDir};
 	$Config->{ImageDirSecureOriginal} = $Config->{ImageDirSecure};
-	$Config->{ImageDir} =
+	$Variable->{UI_IMG} = $Config->{ImageDir} =
 		$Tag->image( { ui => 1, secure => 0, dir_only => 1 } );
 	$Config->{ImageDirSecure} =
 		$Tag->image( { ui => 1, secure => 1, dir_only => 1 } );
@@ -27,11 +27,12 @@
 	# force using secure URL for this page?
 	$Config->{VendURLOriginal} = $Config->{VendURL};
 	if ($Variable->{UI_SECURE} or $Tag->var('UI_SECURE', 1)) {
+		$Variable->{UI_IMG} = $Config->{ImageDirSecure};
 		$Config->{VendURL} = $Config->{SecureURL};
 	}
 
 	''
-[/calcn]
+[/calcn][page-meta]
 EOV
 
 Variable UI_STD_HEAD <<EOV
@@ -63,6 +64,12 @@
 		$last = $_;
 	} 
 	$last =~ s/ui_class_//;
+	if($CGI->{display_class}) {
+		$Scratch->{display_class} = $CGI->{display_class};
+	}
+	if($Scratch->{check_publish} and $Scratch->{check_publish} =~ /^[1yt].?.?$/) {
+		$Scratch->{check_publish} = q{ onClick="return check_publish()" };
+	}
 	$ui_tag = (delete $Scratch->{ui_class} || $CGI->{ui_class} || $last || 'None');
 	$Scratch->{ui_class} = $ui_tag;
 	$Scratch->{"ui_class_$ui_tag"} = 1;
@@ -95,398 +102,234 @@
 	[bounce page="__UI_BASE__/error"]
 	[/if-mm]
 [/if]
+[if scratch superuser]
+	[if-mm !super]
+	[seti ui_error][msg arg.0="[var MV_PAGE 1]"]Sorry, must be superuser for page '%s'.[/msg][/seti]
+	[bounce page="__UI_BASE__/error"]
+	[/if-mm]
+[/if]
 [if scratch dhtml_required]
 [and scratch ui_old_browser]
 	[seti ui_error][loc]Modern browser like Mozilla or MSIE 5 required for page accessed[/loc][/seti]
 	[bounce page="__UI_BASE__/error"]
 [/if]
-<html[scratch ui_language_direction]>
-<head>
-<title>[scratch page_title]</title>
-[tmp window_name][tag time]%m%d%H%M%S[/tag][/tmp]
-<script language="JavaScript">
-<!--
-function open_help(url) {
- if(url == undefined) 
-  url = '[area href="[either]@_UI_HELP_URL_@[or]@_UI_BASE_@/help[/either]" form="topic=[scratch help_name]"]';
- opts="top=0,left=0,scrollbars,status=no,menubar=no,location=yes,toolbar=no,resizable=yes,fullsize=no,width=__UI_HELP_WIDTH__,height=__UI_HELP_HEIGHT__";
- window.open(url, 'Help', opts);
-}
-function checkAll(form,what,uncheck) {
- var i, n, check;
- n = form.elements[what].length;
- if (!n) {
-  if (uncheck == 1) {
-   form.elements[what].checked=false;
-  } else {
-   form.elements[what].checked=true;
-  }
- } else {
-   var checkval;
-   if (uncheck == 1) { checkval=false; } else { checkval=true; }
-   for (i=0; i < n; i++) {
-    check = form.elements[what][i];
-    check.checked = checkval;
-   }
- }
-}
-function addItem(selector, receptor, joiner) {
- if (joiner == null) { joiner = " "; } else { joiner = "\n"; }
- if (receptor.value != '') receptor.value = receptor.value + joiner;
- if (selector[selector.selectedIndex].value != null) {
-  receptor.value = receptor.value + selector[selector.selectedIndex].value;
- } else {
-  if (selector[selector.selectedIndex].text != null) {
-   receptor.value = receptor.value + selector[selector.selectedIndex].text;
-  }
- }
- return true;
-}
-//-->
-</SCRIPT>
-<link href="@_UI_IMAGE_DIR_@ic.css" rel="stylesheet" type="text/css" title="Main IC stylesheet">
-<link href="@_UI_IMAGE_DIR_@ic1.css" rel="alternate stylesheet" type="text/css" title="Working IC stylesheet">
-</STYLE>[calc]
-		%cstyles = (
-						interfacemain	=> '#D4D0C8',
-						tabdark			=> '#B4B0AA',
-						hrdark			=> '#404040',
-						hrmedium		=> '#E4E4E4',
-						hrlight			=> '#FFFFFF',
-						headerrow		=> '#CCCCCC',
-						tabborder		=> '#404040',
-						tablightborder	=> '#FFFFFF',
-						vr				=> '#999999',
-					);
 
-		my @styles = keys %cstyles;
-		if($CGI->{set_styles}) {
-			for(@styles) {
-				$CGI->{$_} =~ s/[^#\w]+//g;
-				if($CGI->{$_}) {
-					$Scratch->{$_} = $CGI->{$_};
-				}
-			}
-		}
-		if($CGI->{reset_styles}) {
-			for(@styles) {
-				delete $Scratch->{$_};
-			}
-		}
-
-		$Scratch->{interesting} ||= 'interfacemain tabdark';
-		if($CGI->{interesting}) {
-			my @ary =  grep /^\w+$/, split /[\s,\0]+/, $CGI->{interesting};
-			$Scratch->{interesting} = join " ", @ary;
-		}
-
-		my @interested =  grep /^\w+$/, split /[\s,\0]+/, $Scratch->{interesting};
-		@interesting{@interested} = @interested;
-
-		for(@styles) {
-			next unless $Scratch->{$_};
-
-			push @out, qq(.$_ {
-	background-color: $Scratch->{$_};
-}
-);
-		}
-		if(@out) {
-			return join "\n", '<STYLE>', @out, '</STYLE>';
-		}
-		return;
-[/calc]
-[if value personal_css]<style>[value personal_css]</style>[/if]
-[scratchd meta_header]
-</head>
-<body [scratch ui_body_extra] leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
-<!-- outer wrapper table to enable the interface to scale to full browser height -->
-<table width="100%" height="100%" border=0 cellpadding=0 cellspacing=0>
-	<tr>
-		<td height=115 valign=top>
-			<!-- start of main wrapper table -->
-			<table width="100%" border=0 cellpadding=0 cellspacing=0>
-				<!-- row 1: logo and generic menu options -->
-				<tr>
-					<td height=42 valign=middle class=interfacemain>
-						<table width="100%" border=0 cellspacing=0 cellpadding=0>
-							<tr>
-								<td width="30%" rowspan=2 valign=middle>
-									<table width=132 border=0 cellspacing=0 cellpadding=0>
-										<tr>
-											<td width=5 height=42>&nbsp;</td>
-											<td width=127><a href="http://www.icdevgroup.org/" target=icdevgroup><img src="iclogo.gif" border=0></a></td>
-											<td width="70%" height=31 align=right valign=bottom><a href="[area admin/index]"><img border=0 width=300 height=29 src="bg.gif"></a>
-											</td>
-										</tr>
-									</table>
-								</td>
-								<td width="70%" height=31 align=right valign=bottom>
-									<table border=0 cellspacing=0 cellpadding=0>
-										<tr>
+[output name=fixed_menu]
 [if session logged_in]
 [menu
 	name=Bottom
 	ui_security=depends_on
+	extra_value.check_publish=`$Scratch->{check_publish}`
 	superuser=super
 	full_interpolate=page
 	localize="name,description"
 	]
-	<td align=left valign=bottom>&nbsp;&nbsp;<a href="{HREF}" title="{DESCRIPTION}" class=menufont>{NAME}</a>&nbsp;&nbsp;</td>
+	<td nowrap>&nbsp;<a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}" class=toplink>{NAME}</a>&nbsp;</td>
 [menu-footer]
 [if-mm super]
 	[if scratch ui_meta_link]
-												<td align=left valign=bottom>
-													&nbsp;&nbsp;<a
-														href="[area href='admin/menu_editor' form='qmenu_name=Bottom']"
-														style="font-size: 7pt">edit</A>
-												&nbsp;&nbsp;</td>
+			<td nowrap>
+				&nbsp;&nbsp;<a
+					href="[area href='admin/menu_editor' form='qmenu_name=Bottom']"
+					style="font-size: 7pt" class=edittablink {CHECK_PUBLISH} title="[msg]Edit this menu[/msg]">edit</A>
+			&nbsp;&nbsp;</td>
 	[/if]
 [/if-mm]
 [/menu-footer]
 [/menu]
 [/if]
-									</tr>
-								</table>
-							</td>
-						</tr>
-						<tr>
-							<td height=11><img src="bg.gif" height=1></td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<!-- row 2: dark grey space above the tabs -->
-			<tr>
-				<td height=2 align=left valign=middle class=tabdark><img src="bg.gif"></td>
-			</tr>
-[if session logged_in]
-			<!-- row 3: tab row -->
-			<tr>
-				<td height=18 align=left valign=middle class=tabdark>
-					<table width="100%" border=0 cellspacing=0 cellpadding=0>
-						<tr>
-							<td>
-								<table border=0 cellspacing=0 cellpadding=0>
-									<tr>
-										<!-- tab: menu entry -->
 
+[output name=top_tabs]
 [menu
-	  name=Top
+	  name="[either][scratch top_menu][or]Top[/either]"
 	  superuser=super
 	  inactive=inactive
 	  localize=name
 	  indicator=indicator
 	  ui_security=depends_on
+	  extra_value.check_publish=`$Scratch->{check_publish}`
 	  link_class=menufont
 	  entities=description
 	  ]
 {INDICATED:}
 	<!-- class={NAME} down -->
-											<td valign=bottom>
-												<table width="100%" border=0 cellspacing=0 cellpadding=0>
-													<tr>
-														<td width=14 rowspan=3 class=shrink><a
-			href="{HREF}"
-			title="{DESCRIPTION}"><img border=0 src="tab_dark_left.gif"></A></td>
-														<td height=1 width=69 class=tabborder><img src="bg.gif" height=1></td>
-														<td width=2 rowspan=3><img src="tab_dark_right.gif"></td>
-													</tr>
-													<tr>
-														<td height=2><img src="bg.gif" height=1></td>
-													</tr>
-													<tr>
-														<td height=13 align=left valign=top><a
-		id="{CODE}"
-		href="{HREF}"
-		title="{DESCRIPTION}"
-		class=menufont>{NAME}</a>&nbsp;&nbsp;</td>
-													</tr>
-													<tr>
-														<td height=1 colspan=3 class=hrdark><img src="bg.gif" height=1></td>
-													</tr>
-													<tr>
-														<td height=1 colspan=3 class=hrlight><img src="bg.gif" height=1></td>
-													</tr>
-												</table>
-											</td>
+               <td height=15 class=tabdown>
+                  <table width="100%" border=0 cellspacing=0 cellpadding=0>
+                     <tr>
+                        <td class=tabdownleft><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}" class=tablink><img src="bg.gif" width=24 height=15 border=0></A></td>
+                        <td nowrap class=tabdownfill><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}" class=tablink>{NAME}</a></td>
+                        <td class=tabdownright><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}" class=tablink><img src="bg.gif" width=24 height=15 border=0></A></td>
+                     </tr>
+                            <tr><td colspan=3 class=darkshade><img src="bg.gif" height=1></td></tr>
+                            <tr><td colspan=3 class=lightshade><img src="bg.gif" height=1></td></tr>
+                  </table>
+               </td>
 {/INDICATED:}
 {INDICATED?}
 <!-- tab: {NAME} (up) -->
-<td valign=bottom>
-<table width="100%" border=0 cellspacing=0 cellpadding=0 class=interfacemain>
-	<tr>
-		<td width=17 rowspan=4 class=shrink><img src="tab_light_left.gif"></td>
-		<td height=1 width=53 class=tabborder><img src="bg.gif" height=1></td>
-		<td width=2 rowspan=4><img src="tab_light_right.gif"></td>
-	</tr>
-	<tr>
-		<td height=1 class=hrlight><img src="bg.gif" height=1></td>
-	</tr>
-	<tr>
-		<td height=1><img src="bg.gif" height=1></td>
-	</tr>
-	<tr>
-		<td height=13 align=left valign=top><a href="{HREF}" title="{DESCRIPTION}" class=menufont>{NAME}</a>&nbsp;&nbsp;&nbsp;</td>
-	</tr>
-	<tr>
-		<td height=1 colspan=3><img src="bg.gif" height=1></td>
-	</tr>
-	<tr>
-		<td height=1 colspan=3><img src="bg.gif" height=1></td>
-	</tr>
-</table>
+               <td class=block1>
+                  <table width="100%" border=0 cellspacing=0 cellpadding=0>
+                     <tr>
+                        <td class=tableft><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}" class=tablink><img src="bg.gif" width=24 height=15 border=0></A></td>
+                        <td nowrap class=tabfill><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}" class=tablink>{NAME}</a></td>
+                        <td class=tabright><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}" class=tablink><img src="bg.gif" width=24 height=15 border=0></A></td>
+                     </tr>
+                  </table>
+               </td>
+{/INDICATED?}
+[/menu]
+	<!-- menu edit=Top -->
+	[if-mm super][if scratch ui_meta_link]
+               <td height=15 class=tabdown>
+                  <table width="100%" border=0 cellspacing=0 cellpadding=0>
+                     <tr>
+                        <td class=tabdownleft><a href="[area href='admin/menu_editor' form='qmenu_name=Top']" {CHECK_PUBLISH} title="[msg]Edit these menu tabs[/msg]"><img src="bg.gif" width=24 height=15 border=0></td>
+                        <td nowrap class=tabdownfill><a href="[area href='admin/menu_editor' form='qmenu_name=[either][scratch top_menu][or]Top[/either]']" {CHECK_PUBLISH} title="[msg]Edit these menu tabs[/msg]" class=edittablink>edit</A></td>
+                        <td class=tabdownright><a href="[area href='admin/menu_editor' form='qmenu_name=Top']" {CHECK_PUBLISH} title="[msg]Edit these menu tabs[/msg]"><img src="bg.gif" width=24 height=15 border=0></td>
+                     </tr>
+							<tr><td colspan=3 class=darkshade><img src="bg.gif" height=1></td></tr>
+							<tr><td colspan=3 class=lightshade><img src="bg.gif" height=1></td></tr>
+                  </table>
+               </td>
+[/if][/if-mm]
+
+[output name=second_tabs]
+[menu
+	name="[either][scratch second_menu][or][scratch ui_class][/either]"
+	superuser=super
+	exclude_on=exclude_on
+	depends_on=depends_on
+	expand_values=name,page
+	expand_values_form=form
+	extra_value.check_publish=`$Scratch->{check_publish}`
+	localize=name
+	indicator=indicator
+	last_line="[if scratch third_menu]next_line[/if]"
+	indicator_page=page
+	inactive=inactive
+	entities=description
+	nbsp=name
+	reparse=1
+]
+<!-- PAGE=[var MV_PAGE 1] -->
+{NEXT_LINE?}[output name=third_tabs]{/NEXT_LINE?}
+{INDICATED?}
+<td class=block3> 
+   <table width="100%" border=0 cellspacing=0 cellpadding=0>
+	  <tr> 
+		 <td class=subtableft><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}"><img src="bg.gif" width=16 height=16 border=0></a></td>
+		 <td nowrap class=subtabfill><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}" class=subtablink>{NAME}</a></td>
+		 <td class=subtabright><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}"><img src="bg.gif" width=16 height=16 border=0></a></td>
+	  </tr>
+	  <tr> 
+		 <td colspan=3 class=subtabfilllwr><img src="bg.gif" height=1></td>
+	  </tr>
+   </table>
 </td>
 {/INDICATED?}
+{INDICATED:}
+<td class=subtabdown> 
+   <table width="100%" border=0 cellspacing=0 cellpadding=0>
+	  <tr> 
+		 <td class=subtabdownleft><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}"><img src="bg.gif" width=16 height=16 border=0></a></td>
+		 <td nowrap class=subtabdownfill><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}" class=subtablink>{NAME}</a></td>
+		 <td class=subtabdownright><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}"><img src="bg.gif" width=16 height=16 border=0></a></td>
+	  </tr>
+	  <tr> 
+		 <td colspan=3 class=darkshade><img src="bg.gif" height=1></td>
+	  </tr>
+	  <tr> 
+		 <td colspan=3 class=lightshade><img src="bg.gif" height=1></td>
+   </table>
+</td>
+{/INDICATED:}
 [/menu]
-										</tr>
-									</table>
-								</td>
-								<!-- black and white horizontal rules to stretch to width=100% -->
-								<td height=18 width="100%" valign=bottom class=shrink>
-									<table width="100%" border=0 cellpadding=0 cellspacing=0>
-										<tr>
-											<td width="100%" height=16 class=shrink align=right>
-[if-mm super]
-	[if scratch ui_meta_link]
-													<a
-														href="[area href='admin/menu_editor' form='qmenu_name=Top']"
-														style="font-size: 7pt">edit</A>
-												&nbsp;
-	[/if]
-[/if-mm]
-											&nbsp;
-											</td>
-										</tr>
-										<tr>
-											<td height=1 class=hrdark><img src="bg.gif" width=1></td>
-										</tr>
-										<tr>
-											<td height=1 class=hrlight><img src="bg.gif" width=1></td>
-										</tr>
-									</table>
-								</td>
-							</tr>
-						</table>
-					</td>
-				</tr>
-				<!-- row 4: sub-menu -->
-				<tr>
-					<td height=28 class=interfacemain>
-						<table border=0 cellpadding=0 cellspacing=0>
-							<tr>
-								<td width=16><img src="bg.gif" height=1></td>
+[output name=second_tabs]
+<!-- menu edit=Second -->
+[if-mm super][if scratch ui_meta_link]
+<td class=subtabdown> 
+   <table width="100%" border=0 cellspacing=0 cellpadding=0>
+	  <tr> 
+		 <td class=subtabdownleft><img src="bg.gif" width=16 height=16></td>
+		 <td nowrap class=subtabdownfill><a href="[area href='admin/menu_editor' form='qmenu_name=[either][scratch second_menu][or][scratch ui_class][/either]']" {CHECK_PUBLISH} title="[msg]Edit these menu tabs[/msg]" class=edittablink>edit</a></td>
+		 <td class=subtabdownright><img src="bg.gif" width=16 height=16></td>
+	  </tr>
+	  <tr> 
+		 <td colspan=3 class=darkshade><img src="bg.gif" height=1></td>
+	  </tr>
+	  <tr> 
+		 <td colspan=3 class=lightshade><img src="bg.gif" height=1></td>
+   </table>
+</td>
+[/if][/if-mm]
+
+[if scratch third_menu]
+[output name=third_tabs]
 [menu
-	name="[scratch ui_class]"
+	name="[scratch third_menu]"
 	superuser=super
+	extra_value.check_publish=`$Scratch->{check_publish}`
 	exclude_on=exclude_on
 	depends_on=depends_on
-	expand_values=name,page,form
+	expand_values=name,page
+	expand_values_form=form
 	localize=name
-	indicator=indicator,page
+	indicator=indicator
+	indicator_page=page
 	inactive=inactive
 	entities=description
 	nbsp=name
-]{NEXT_LINE?}
-							</tr>
-						</table>
-					</td>
-				</tr>
-				<!-- row 5: dark horizontal rule -->
-				<tr>
-					<td height=1 class=hrdark><img src="bg.gif" height=1></td>
-				</tr>
-				<!-- row 6: light horizontal rule -->
-				<tr>
-					<td height=1 class=hrlight><img src="bg.gif" height=1></td>
-				</tr>
-				<!-- row 7: menu options for component type -->
-				<tr>
-					<td height=17 align=left valign=middle class=interfacemain>
-						<table border=0 cellspacing=0 cellpadding=0>
-							<tr>{/NEXT_LINE?}
-								<td align=center valign=middle>&nbsp;&nbsp;{PAGE?}<A href="{HREF}" title="{DESCRIPTION}"
-									style="{INDICATED?}font-weight: bolder;{/INDICATED?}" class=menufont>{NAME}</A>{/PAGE?}{PAGE:}{NAME}{/PAGE:}&nbsp;&nbsp;</td>
-								<td width=1 class=vr><img src="bg.gif" width=1></td>
-	[menu-footer]
-[if-mm super]
-	[if scratch ui_meta_link]
-												<td width="100%" align=right valign=middle>
-													&nbsp;&nbsp;<a
-														href="[area href='admin/menu_editor' form='qmenu_name=[scratch ui_class]']"
-														style="font-size: 7pt">edit</A>
-												&nbsp;&nbsp;</td>
-	[/if]
-[/if-mm]
-							</tr>
-						</table>
-					</td>
-				</tr>
-				<!-- row 8: dark horizontal rule -->
-				<tr>
-					<td height=1 class=hrdark><img src="bg.gif" height=1></td>
-				</tr>
-[/menu-footer][/menu]
-	[if !scratch ui_no_title]
-				<!-- row 9: heading row -->
-				<tr>
-					<td height=19 align=left valign=middle class=headerrow>
-						<table border=0 cellspacing=0 cellpadding=0>
-							<tr>
-								<td width=13><img src="bg.gif"></td>
-								<td nowrap class=heading>
-									[calc]
-										my $tit = $Scratch->{page_banner} || $Scratch->{page_title};
-										return $tit if $tit =~ /^\s*</s;
-										$tit =~ s{(.*?)(:|$)}{<span style="font-weight: bold">$1</span>$2};
-										return $tit;
-									[/calc]
-									[if type=explicit compare="[error all=1 show_var=1 keep=1]"]
-									<blockquote class=cerror>
-										[error show_var=1 all=1 show_error=1 joiner="<br>"]
-									</blockquote>
-									[/if]
-									[if scratch ui_failure]
-									<blockquote class=cerror>
-										[scratchd ui_failure]
-									</blockquote>
-									[/if]
-									[if scratch ui_message]
-									<blockquote class=cmessage>
-									[scratchd ui_message]
-									</blockquote>
-									[/if]
-									[warnings auto=1]
-								</td>
-							</tr>
-						</table>
-					</td>
-				</tr>
-	[/if]
+	reparse=1
+]
+<!-- PAGE=[var MV_PAGE 1] -->
+{INDICATED?}
+<td class=block3> 
+   <table width="100%" border=0 cellspacing=0 cellpadding=0>
+	  <tr> 
+		 <td class=subtableft><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}"><img src="bg.gif" width=16 height=16 border=0></a></td>
+		 <td nowrap class=subtabfill><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}" class=subtablink>{NAME}</a></td>
+		 <td class=subtabright><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}"><img src="bg.gif" width=16 height=16 border=0></a></td>
+	  </tr>
+	  <tr> 
+		 <td colspan=3 class=subtabfilllwr><img src="bg.gif" height=1></td>
+	  </tr>
+   </table>
+</td>
+{/INDICATED?}
+{INDICATED:}
+<td class=subtabdown> 
+   <table width="100%" border=0 cellspacing=0 cellpadding=0>
+	  <tr> 
+		 <td class=subtabdownleft><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}"><img src="bg.gif" width=16 height=16 border=0></a></td>
+		 <td nowrap class=subtabdownfill><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}" class=subtablink>{NAME}</a></td>
+		 <td class=subtabdownright><a href="{HREF}" {CHECK_PUBLISH} title="{DESCRIPTION}"><img src="bg.gif" width=16 height=16 border=0></a></td>
+	  </tr>
+	  <tr> 
+		 <td colspan=3 class=darkshade><img src="bg.gif" height=1></td>
+	  </tr>
+	  <tr> 
+		 <td colspan=3 class=lightshade><img src="bg.gif" height=1></td>
+   </table>
+</td>
+{/INDICATED:}
+[/menu]
+	<!-- menu edit=Third -->
+	[if-mm super][if scratch ui_meta_link]
+	<td class=subtabdown> 
+	   <table width="100%" border=0 cellspacing=0 cellpadding=0>
+		  <tr> 
+			 <td class=subtabdownleft><img src="bg.gif" width=16 height=16></td>
+			 <td nowrap class=subtabdownfill><a href="[area href='admin/menu_editor' form='qmenu_name=[scratch third_menu]']" {CHECK_PUBLISH} title="[msg]Edit these menu tabs[/msg]" class=edittablink>edit</a></td>
+			 <td class=subtabdownright><img src="bg.gif" width=16 height=16></td>
+		  </tr>
+		  <tr> 
+			 <td colspan=3 class=darkshade><img src="bg.gif" height=1></td>
+		  </tr>
+		  <tr> 
+			 <td colspan=3 class=lightshade><img src="bg.gif" height=1></td>
+	   </table>
+	</td>
+	[/if][/if-mm]
 [/if]
-<!-- END MENUBAR -->
-				<!-- row 10: main content -->
-				<tr>
-					<td align=left valign=top>
-						<table width="100%" border=0 cellspacing=0 cellpadding=0>
-							<tr>
-								<td class="[either][scratch display_class][or]maincontent[/either]" valign=top>[if scratch ui_checklist]
-<table>
-	<tr>
-		<td width="20%">
-	[include file=include/wizard_checklist locale="[scratch mv_locale]"]
-		</td>
-		<td width="80%" valign=top>
-[/if][comment] Clear these puppies [/comment][calc]
-	for (qw/
-				page_title
-				page_banner
-				icon_name
-				help_name
-				page_perm
-				table_perm
-				ui_body_extra
-		/) { delete $Scratch->{$_} }
-	return;
-[/calc]
+[output name=""]
 EOV



1.8       +27 -8     interchange/lib/Vend/Dispatch.pm


rev 1.8, prev_rev 1.7
Index: Dispatch.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Dispatch.pm,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Dispatch.pm	18 Nov 2002 16:55:15 -0000	1.7
+++ Dispatch.pm	14 Jan 2003 02:25:53 -0000	1.8
@@ -1,6 +1,6 @@
 # Vend::Dispatch - Handle Interchange page requests
 #
-# $Id: Dispatch.pm,v 1.7 2002/11/18 16:55:15 mheins Exp $
+# $Id: Dispatch.pm,v 1.8 2003/01/14 02:25:53 mheins Exp $
 #
 # Copyright (C) 2002 ICDEVGROUP <interchange@icdevgroup.org>
 # Copyright (C) 2002 Mike Heins <mike@perusion.net>
@@ -26,7 +26,7 @@
 package Vend::Dispatch;
 
 use vars qw($VERSION);
-$VERSION = substr(q$Revision: 1.7 $, 10);
+$VERSION = substr(q$Revision: 1.8 $, 10);
 
 use POSIX qw(strftime);
 use Vend::Util;
@@ -67,13 +67,32 @@
 }
 
 sub response {
-	my ($output) = @_;
-	my $out = ref $output ? $output : \$output;
-	if (defined $Vend::CheckHTML) {
-		require Vend::External;
-		Vend::External::check_html($out);
+	my $possible = shift;
+	if(defined $possible) {
+		push @Vend::Output, ( ref $possible ? $possible : \$possible);
 	}
-	$H->respond($out);
+#::logDebug("output=" . ::uneval(\@Vend::Output) . "\nnames=" . ::uneval(\%Vend::OutPtr) . "\nfilters=" . ::uneval(\%Vend::OutFilter));
+	if($Vend::MultiOutput) {
+		for my $space (keys %Vend::OutPtr) {
+			my $things = $Vend::OutPtr{$space} || [];
+			for my $ptr (@$things) {
+				my $subs = $Vend::OutFilter{$space} || [];
+				for my $sub (@$subs) {
+					$sub->($Vend::Output[$ptr]);
+				}
+			}
+		}
+		for(grep $_, @Vend::Output) {
+			$H->respond($_);
+		}
+	}
+	else {
+		for(@Vend::Output) {
+			Vend::Interpolate::substitute_image($_);
+			$H->respond($_);
+		}
+	}
+	@Vend::Output = ();
 }
 
 # Parse the mv_click and mv_check special variables



2.6       +4 -3      interchange/lib/Vend/Error.pm


rev 2.6, prev_rev 2.5
Index: Error.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Error.pm,v
retrieving revision 2.5
retrieving revision 2.6
diff -u -r2.5 -r2.6
--- Error.pm	16 Sep 2002 23:06:31 -0000	2.5
+++ Error.pm	14 Jan 2003 02:25:53 -0000	2.6
@@ -1,6 +1,6 @@
 # Vend::Error - Handle Interchange error pages and messages
 # 
-# $Id: Error.pm,v 2.5 2002/09/16 23:06:31 mheins Exp $
+# $Id: Error.pm,v 2.6 2003/01/14 02:25:53 mheins Exp $
 #
 # Copyright (C) 1996-2002 Red Hat, Inc. <interchange@redhat.com>
 #
@@ -37,7 +37,7 @@
 
 use vars qw/$VERSION/;
 
-$VERSION = substr(q$Revision: 2.5 $, 10);
+$VERSION = substr(q$Revision: 2.6 $, 10);
 
 sub get_locale_message {
 	my ($code, $message, @arg) = @_;
@@ -81,7 +81,8 @@
     $page = readin(find_special_page('interact'));
     if (defined $page) {
 		$page =~ s#\[message\]#$msg#ig;
-		::response(::interpolate_html($page, 1));
+		::interpolate_html($page, 1);
+		::response();
     }
 	else {
 		logError( "Missing special page: interact" , '');



2.142     +35 -69    interchange/lib/Vend/Interpolate.pm


rev 2.142, prev_rev 2.141
Index: Interpolate.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Interpolate.pm,v
retrieving revision 2.141
retrieving revision 2.142
diff -u -r2.141 -r2.142
--- Interpolate.pm	2 Jan 2003 22:41:31 -0000	2.141
+++ Interpolate.pm	14 Jan 2003 02:25:53 -0000	2.142
@@ -1,6 +1,6 @@
 # Vend::Interpolate - Interpret Interchange tags
 # 
-# $Id: Interpolate.pm,v 2.141 2003/01/02 22:41:31 jon Exp $
+# $Id: Interpolate.pm,v 2.142 2003/01/14 02:25:53 mheins Exp $
 #
 # Copyright (C) 1996-2002 Red Hat, Inc. <interchange@redhat.com>
 #
@@ -27,7 +27,7 @@
 require Exporter;
 @ISA = qw(Exporter);
 
-$VERSION = substr(q$Revision: 2.141 $, 10);
+$VERSION = substr(q$Revision: 2.142 $, 10);
 
 @EXPORT = qw (
 
@@ -455,6 +455,9 @@
 sub substitute_image {
 	my ($text) = @_;
 
+	## Allow no substitution of downloads
+	return if $::Pragma->{download};
+
 	## If post_page routine processor returns true, return. Otherwise,
 	## continue image rewrite
 	if($::Pragma->{post_page}) {
@@ -502,54 +505,6 @@
     }
 }
 
-#
-# This is one entry point for page display.
-# Evaluates all of the Interchange tags. Does some basic cache management
-# for static page building.
-#
-
-sub cache_html {
-	my ($html,$wantref) = @_;
-	my ($name, @post);
-	my ($bit, %post);
-
-	# static page building should be independent from secure mode
-	my $secure = $CGI::secure;
-	$CGI::secure = 0;
-	
-	$CacheInvalid = 0;
-
-	vars_and_comments(\$html);
-
-	my $complete;
-	my $full = '';
-	my $parse = new Vend::Parse;
-	$parse->parse($html);
-	while($parse->{_buf}) {
-		substitute_image(\$parse->{OUT});
-		Vend::Dispatch::response( \$parse->{OUT});
-		$full .= $parse->{OUT};
-		$parse->{OUT} = '';
-		$parse->parse('');
-	}
-	substitute_image(\$parse->{OUT})
-		unless $parse->{ABORT};
-	$full .= $parse->{OUT} if $full;
-	$CacheInvalid++ if $parse->{INVALID};
-	$Vend::CachePage = $CacheInvalid ? undef : 1;
-	$complete = \$full if $full;
-
-	# restore secure mode
-	$CGI::secure = $secure;
-	
-	if (defined $Vend::BuildingPages) {
-		return $full if $full;
-		return $parse->{OUT};
-	}
-	return (\$parse->{OUT}, $complete || undef) if defined $wantref;
-	return ($parse->{OUT});
-}
-
 sub dynamic_var {
 	my $varname = shift;
 
@@ -641,22 +596,22 @@
 		unless $opt and $opt->{onfly};
 
     # Returns, could be recursive
-	my $parse = new Vend::Parse;
+	my $parse = new Vend::Parse $wantref;
 	$parse->parse($html);
 	while($parse->{_buf}) {
 		if($toplevel and $parse->{SEND}) {
 			delete $parse->{SEND};
-			substitute_image(\$parse->{OUT});
-			::response(\$parse->{OUT});
-			$parse->{OUT} = '';
+			::response();
+			$parse->destination($parse->{_current_output});
 		}
 		$parse->parse('');
 	}
-	substitute_image(\$parse->{OUT});
-	return \$parse->{OUT} if defined $wantref;
-	return $parse->{OUT};
+	return $parse->{OUT} if defined $wantref;
+	return ${$parse->{OUT}};
 }
 
+*cache_html = \&interpolate_html;
+
 my $Filters_initted;
 
 sub filter_value {
@@ -1426,6 +1381,13 @@
 		$op .=	qq%	$operator $comp%
 				if defined $comp;
 	}
+	elsif($base =~ /^warnings?$/) {
+		my $warn = 0;
+		if(my $ary = $Vend::Session->{warnings}) {
+			ref($ary) eq 'ARRAY' and $warn = scalar(@$ary);
+		}
+		$op = $warn;
+	}
 	elsif($base eq 'validcc') {
 		$CacheInvalid = 1;
 		no strict 'refs';
@@ -1478,7 +1440,7 @@
 	for(@addl) {
 		my $chain = /^\[[Aa]/;
 		last if ($chain ^ $status);
-		$status = (new Vend::Parse)->parse($_)->{OUT};
+		$status = ${(new Vend::Parse)->parse($_)->{OUT}};
 	}
 #::logDebug("if status=$status");
 
@@ -4185,14 +4147,14 @@
 		return undef if ! ref $hash;
 	}
 	if($ucase) {
-		$body =~ s!\{($Codere)\}!$hash->{"\L$1"}!g;
-		$body =~ s!\{($Codere)\?($Codere)\:($Codere)\}!
+		$body =~ s!\{([A-Z_][A-Z_]+)\}!$hash->{"\L$1"}!g;
+		$body =~ s!\{([A-Z_][A-Z_]+)\?([A-Z_][A-Z_]+)\:([A-Z_][A-Z_]+)\}!
 					length($hash->{lc $1}) ? $hash->{lc $2} : $hash->{lc $3}
 				  !eg;
-		$body =~ s!\{($Codere)\|($Some)\}!$hash->{lc $1} || $2!eg;
-		$body =~ s!\{($Codere)\s+($Some)\}! $hash->{lc $1} ? $2 : ''!eg;
-		1 while $body =~ s!\{($Codere)\?\}($Some){/\1\?\}! $hash->{lc $1} ? $2 : ''!eg;
-		1 while $body =~ s!\{($Codere)\:\}($Some){/\1\:\}! $hash->{lc $1} ? '' : $2!eg;
+		$body =~ s!\{([A-Z_][A-Z_]+)\|($Some)\}!$hash->{lc $1} || $2!eg;
+		$body =~ s!\{([A-Z_][A-Z_]+)\s+($Some)\}! $hash->{lc $1} ? $2 : ''!eg;
+		1 while $body =~ s!\{([A-Z_][A-Z_]+)\?\}($Some){/\1\?\}! $hash->{lc $1} ? $2 : ''!eg;
+		1 while $body =~ s!\{([A-Z_][A-Z_]+)\:\}($Some){/\1\:\}! $hash->{lc $1} ? '' : $2!eg;
 		$body =~ s!\{(\w+)\:+(\w+)\:+(.*?)\}! tag_data($1, $2, $3) !eg;
 	}
 	else {
@@ -5244,8 +5206,12 @@
 		}
 		my $id = $tab;
 		$id .= "::$key" if $key;
-		my $meta = Vend::Table::Editor::meta_record($id, $view, $opt->{table});
-
+		my $meta = Vend::Table::Editor::meta_record(
+								$id,
+								$view,
+								$opt->{table},
+								$opt->{extended_only},
+								);
 		if(! $meta) {
 			$opt->{object} = {
 					matches		=> 1,
@@ -5908,9 +5874,9 @@
 
     $file = Vend::Util::escape_chars($file);
     if(!$opt->{auto} and $Global::NoAbsolute and (file_name_is_absolute($file) or $file =~ m#\.\./.*\.\.#)) {
-	::logError("Can't use file '%s' with NoAbsolute set", $file);
-	::logGlobal({ level => 'auth'}, "Can't use file '%s' with NoAbsolute set", $file);
-	return '';
+		::logError("Can't use file '%s' with NoAbsolute set", $file);
+		::logGlobal({ level => 'auth'}, "Can't use file '%s' with NoAbsolute set", $file);
+		return '';
     }
 
     if( ! -f $file or $secs && (stat(_))[9] < (time() - $secs) ) {



2.9       +85 -4     interchange/lib/Vend/Page.pm


rev 2.9, prev_rev 2.8
Index: Page.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Page.pm,v
retrieving revision 2.8
retrieving revision 2.9
diff -u -r2.8 -r2.9
--- Page.pm	7 Sep 2002 18:45:42 -0000	2.8
+++ Page.pm	14 Jan 2003 02:25:53 -0000	2.9
@@ -1,6 +1,6 @@
 # Vend::Page - Handle Interchange page routing
 # 
-# $Id: Page.pm,v 2.8 2002/09/07 18:45:42 mheins Exp $
+# $Id: Page.pm,v 2.9 2003/01/14 02:25:53 mheins Exp $
 #
 # Copyright (C) 1996-2002 Red Hat, Inc. <interchange@redhat.com>
 #
@@ -45,7 +45,7 @@
 
 use vars qw/$VERSION/;
 
-$VERSION = substr(q$Revision: 2.8 $, 10);
+$VERSION = substr(q$Revision: 2.9 $, 10);
 
 my $wantref = 1;
 
@@ -70,7 +70,8 @@
 		unless defined $page;
 	$page =~ s#\[subject\]#$subject#ig;
 	$Vend::PageInit = 0;
-	return ::response(::interpolate_html($page, 1));
+	interpolate_html($page, 1);
+	::response();
 }
 
 # Displays the catalog page NAME.  If the file is not found, displays
@@ -122,7 +123,8 @@
 
 	if (defined $page) {
 		$Vend::PageInit = 0;
-		::response(::interpolate_html($page, 1, $opt));
+		interpolate_html($page, 1, $opt);
+		::response();
 		return 1;
 	}
 	else {
@@ -191,6 +193,85 @@
 							 	|| find_special_page('search')
 		if ! $CGI::values{mv_nextpage};
 	return 1;
+}
+
+sub output_test {
+	my ($tag) = @_;
+	my $ary;
+	return '' unless $ary = $Vend::OutPtr{lc $tag};
+	for(@$ary) {
+		next unless $Vend::Output[$_];
+		next unless length(${$Vend::Output[$_]});
+		return 1;
+	}
+	return '';
+}
+
+sub output_cat {
+	my ($tag) = @_;
+	my $ary;
+	return '' unless $ary = $Vend::OutPtr{lc $tag};
+	my $out = '';
+	for(@$ary) {
+		next unless $Vend::Output[$_];
+		$out .= ${$Vend::Output[$_]};
+		undef $Vend::Output[$_];
+	}
+	return $out;
+}
+
+sub output_ary {
+	my ($tag) = @_;
+	my $ary;
+	return '' unless $ary = $Vend::OutPtr{lc $tag};
+	my @out;
+	for(@$ary) {
+		next unless $Vend::Output[$_];
+		push @out, ${$Vend::Output[$_]};
+		undef $Vend::Output[$_];
+	}
+	return \@out;
+}
+
+sub output_rest {
+	my ($tag) = @_;
+	my $out = '';
+	for(@$Vend::Output) {
+		next unless $_;
+		$out .= ${$Vend::Output[$_]};
+		undef $Vend::Output[$_];
+	}
+	return $out;
+}
+
+sub templatize {
+	my ($template) = @_;
+	$template ||= $Vend::Cfg->{PageTemplate} || '{:REST}';
+#::logDebug("Templatizing, template length=" . length($template));
+	my $body = $template;
+
+	$body =~ s!\{\{\@([A-Z][A-Z_]*[A-Z])\}\}(.*?)\{\{/\@\1\}\}!
+					my $tag = lc $1;
+					my $ary;
+					return '' unless $ary = $Vend::OutPtr{$tag};
+					my $tpl = $2;
+					my $out = '';
+					for(@$ary) {
+						my $ref = $Vend::Output[$_]
+							or next;
+						my $chunk = $tpl;
+						$chunk =~ s/\{$tag\}/$$ref/;
+						undef $Vend::Output[$_];
+						$out .= $chunk;
+					}
+					$out;
+				!sge;
+	1 while $body =~ s!\{\{([A-Z][A-Z_]*[A-Z])\?\}\}(.*?)\{\{/\1\?\}\}! output_test(lc $1) ? $2 : ''!egs;
+	1 while $body =~ s!\{\{([A-Z][A-Z_]*[A-Z])\:\}\}(.*?)\{\{/\1\:\}\}! output_test(lc $1) ? '' : $2!egs;
+	$body =~ s!\{\{([A-Z][A-Z_]*[A-Z])\}\}!output_cat($1)!eg;
+	$body =~ s!\{\{:DEFAULT\}\}!output_cat('')!e;
+	$body =~ s!\{\{:REST\}\}!output_rest('')!e;
+	@Vend::Output = (\$body);
 }
 
 1;



2.24      +127 -30   interchange/lib/Vend/Parse.pm


rev 2.24, prev_rev 2.23
Index: Parse.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Parse.pm,v
retrieving revision 2.23
retrieving revision 2.24
diff -u -r2.23 -r2.24
--- Parse.pm	3 Nov 2002 14:17:15 -0000	2.23
+++ Parse.pm	14 Jan 2003 02:25:53 -0000	2.24
@@ -1,6 +1,6 @@
 # Vend::Parse - Parse Interchange tags
 # 
-# $Id: Parse.pm,v 2.23 2002/11/03 14:17:15 kwalsh Exp $
+# $Id: Parse.pm,v 2.24 2003/01/14 02:25:53 mheins Exp $
 #
 # Copyright (C) 1996-2002 Red Hat, Inc. <interchange@redhat.com>
 #
@@ -35,7 +35,7 @@
 
 @ISA = qw(Exporter Vend::Parser);
 
-$VERSION = substr(q$Revision: 2.23 $, 10);
+$VERSION = substr(q$Revision: 2.24 $, 10);
 
 @EXPORT = ();
 @EXPORT_OK = qw(find_matching_end);
@@ -155,8 +155,14 @@
 				unless		=> \&Vend::Interpolate::tag_unless,
 			);
 
+my %Special = qw/
+				goto	1
+				bounce	1
+				output 	1
+			  /;
 my %Routine = (
 
+				output          => sub { return '' },
 				bounce          => sub { return '' },
 				if				=> \&Vend::Interpolate::tag_self_contained_if,
 				unless			=> \&Vend::Interpolate::tag_unless,
@@ -277,7 +283,7 @@
 					mvasp			1
 				/ );
 
-my $Initialized = 0;
+my $Initialized;
 
 sub global_init {
 		add_tags($Global::UserTag);
@@ -292,17 +298,88 @@
 
 sub new {
     my $class = shift;
+	my $opt = shift;
     my $self = new Vend::Parser;
 	$self->{INVALID} = 0;
 
 	add_tags($Vend::Cfg->{UserTag})
 		unless $Vend::Tags_added++;
 
-	$self->{TOPLEVEL} = 1 if ! $Initialized;
-
-	$self->{OUT} = '';
     bless $self, $class;
-	$Initialized = $self;
+
+	if($opt) {
+		$self->destination('');
+	}
+	else {
+		my $string = '';
+		$self->{OUT} = $self->{DEFAULT_OUT} = \$string;
+	}
+#::logDebug("OUT=$self->{OUT}");
+
+	if (! $Initialized) {
+		$Initialized = $self;
+		$self->{TOPLEVEL} = 1;
+	}
+
+	return $self;
+}
+
+sub destination {
+	my ($s, $name, $attr) = @_;
+	$s->{_outname} ||= [];
+
+	if(! defined $name) {
+		pop @{$s->{_outname}};
+		$name = pop  @{$s->{_outname}};
+	}
+	else {
+		$name = lc $name;
+		push @{$s->{_outname}}, $name;
+	}
+
+#::logDebug("destination set to '$name'");
+	$name ||= '';
+
+	my $string = '';
+	$s->{OUT} = \$string;
+	push @Vend::Output, $s->{OUT};
+
+	my $nary = $Vend::OutPtr{$name} ||= [];
+	push @$nary, $#Vend::Output;
+
+	return unless $attr;
+#::logDebug("destination extended output settings");
+
+	my $fary = $Vend::OutFilter{$name};
+
+	if ($name) {
+		$Vend::MultiOutput = 1;
+		if(! $Vend::OutFilter{''}) {
+			my $ary = [];
+			push @$ary, \&Vend::Interpolate::substitute_image
+				unless $::Pragma->{no_image_rewrite};
+			$Vend::OutFilter{''} = $ary;
+		}
+
+		if(! $fary) {
+			$fary = $Vend::OutFilter{$name} = [];
+			if($attr->{output_filter}) {
+				my $filt = $attr->{output_filter};
+				push @$fary, sub {
+					my $ref = shift;
+					$$ref = Vend::Interpolate::filter_value($filt, $$ref);
+					return;
+				};
+			}
+			if (! $attr->{no_image_parse} and ! $::Pragma->{no_image_rewrite}) {
+				push @$fary, \&Vend::Interpolate::substitute_image;
+			}
+			if ($attr->{output_extended}) {
+				$Vend::OutExtended{$name} = $attr;
+			}
+		}
+	}
+	return $s->{OUT};
 }
 
 my %noRearrange = qw//;
@@ -358,7 +435,15 @@
         }
         $tag = $Alias{$tag};
 	};
-	if(
+	if($Special{$tag}) {
+		my $ref = pop(@_);
+		my @args = @$ref{ @{$Order{$tag}} };
+		push @args, $ref if $addAttr{$tag};
+#::logDebug("Parse-do_tag: args now=" . ::uneval_it(\@args) );
+		$Initialized->start($tag, $ref);
+		return;
+	}
+	elsif(
 		( ref($_[-1]) && scalar @{$Order{$tag}} > scalar @_ and ! $noRearrange{$tag}) 
 	)
 	{
@@ -434,7 +519,7 @@
 
 sub text {
     my($self, $text) = @_;
-	$self->{OUT} .= $text;
+	${$self->{OUT}} .= $text;
 }
 
 my %Monitor = ( qw( tag_ary 1 ) );
@@ -504,6 +589,7 @@
     my($self, $tag, $attr, $attrseq, $origtext, $empty_container) = @_;
 	$tag =~ tr/-/_/;   # canonical
 	$Vend::CurrentTag = $tag = lc $tag;
+#::logDebug("start tag=$tag");
 	my $buf = \$self->{_buf};
 
 	my($tmpbuf);
@@ -521,7 +607,7 @@
 					$Vend::restricted,
 				);
 			}
-			$self->{OUT} .= $origtext;
+			${$self->{OUT}} .= $origtext;
 			return 1;
 		}
 		elsif (! $Vend::admin) {
@@ -549,7 +635,8 @@
 			return 1;
 		}
 		else {
-			$self->{OUT} .= $origtext;
+#::logDebug("no alias. origtext: $origtext");
+			${$self->{OUT}} .= $origtext;
 			return 1;
 		}
 	}
@@ -572,7 +659,7 @@
 
 		my $p = new Vend::Parse;
 		$p->parse($attr->{$trib});
-		$attr->{$trib} = $p->{OUT};
+		$attr->{$trib} = ${$p->{OUT}};
 		$self->{INVALID} += $p->{INVALID};
 	}
 
@@ -617,22 +704,13 @@
 #interpolate=$attr->{interpolate}
 #EOF
 
-	if($tag =~ /^[gb]o/) {
-		if($tag eq 'goto') {
-			return 1 if resolve_if_unless($attr);
-			if(! $args[0]) {
-				$$buf = '';
-				$Initialized->{_buf} = '';
-				$self->{ABORT} = 1
-					if $attr->{abort};
-				return ($self->{SEND} = 1);
-			}
-			goto_buf($args[0], $buf);
-			$self->{ABORT} = 1;
-			$self->{SEND} = 1 if ! $$buf;
+	if($Special{$tag}) {
+		if($tag eq 'output') {
+			$self->destination($attr->{name}, $attr);
 			return 1;
 		}
 		elsif($tag eq 'bounce') {
+#::logDebug("bouncing...");
 			return 1 if resolve_if_unless($attr);
 			if(! $attr->{href} and $attr->{page}) {
 				$attr->{href} = Vend::Interpolate::tag_area($attr->{page});
@@ -652,9 +730,27 @@
 			$self->{SEND} = 1;
 			return 1;
 		}
+		elsif($tag eq 'goto') {
+			return 1 if resolve_if_unless($attr);
+			if(! $args[0]) {
+				$$buf = '';
+				$Initialized->{_buf} = '';
+				$self->{ABORT} = 1
+					if $attr->{abort};
+				return ($self->{SEND} = 1);
+			}
+			goto_buf($args[0], $buf);
+			$self->{ABORT} = 1;
+			$self->{SEND} = 1 if ! $$buf;
+			return 1;
+		}
 	}
 
 	local($SIG{__DIE__}) = \&eval_die;
+
+#::logDebug("output attr=$attr->{_output}");
+	$self->destination($attr->{_output}) if $attr->{_output};
+
 	if($hasEndTag{$tag}) {
 		# Handle embedded tags, but only if interpolate is 
 		# defined (always if using old tags)
@@ -664,17 +760,17 @@
 		if ($attr->{interpolate} and !$empty_container) {
 			my $p = new Vend::Parse;
 			$p->parse($tmpbuf);
-			$tmpbuf = $p->{ABORT} ? '' : $p->{OUT};
+			$tmpbuf = $p->{ABORT} ? '' : ${$p->{OUT}};
 		}
 		if($attr->{reparse} ) {
 			$$buf = ($routine->(@args,$tmpbuf)) . $$buf;
 		}
 		else {
-			$self->{OUT} .= &{$routine}(@args,$tmpbuf);
+			${$self->{OUT}} .= &{$routine}(@args,$tmpbuf);
 		}
 	}
 	elsif(! $attr->{interpolate}) {
-		$self->{OUT} .= &$routine( @args );
+		${$self->{OUT}} .= &$routine( @args );
 	}
 	else {
 		$$buf = &$routine( @args ) . $$buf;
@@ -682,6 +778,7 @@
 
 	$self->{SEND} = $attr->{'send'} || undef;
 #::logDebug("Returning from $tag");
+	$self->destination() if $attr->{_output};
 	return 1;
 }
 
@@ -689,7 +786,7 @@
     my($self, $tag) = @_;
 	my $save = $tag;
 	$tag =~ tr/-/_/;   # canonical
-	$self->{OUT} .= "[/$save]";
+	${$self->{OUT}} .= "[/$save]";
 }
 
 sub find_html_end {
@@ -797,7 +894,7 @@
 					and do {
 						my $p = new Vend::Parse;
 						$p->parse($val);
-						$val = $p->{OUT};
+						$val = ${$p->{OUT}};
 					};
 			}
 		# truncated just after the '=' or inside the attribute



2.8       +5 -4      interchange/lib/Vend/Parser.pm


rev 2.8, prev_rev 2.7
Index: Parser.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Parser.pm,v
retrieving revision 2.7
retrieving revision 2.8
diff -u -r2.7 -r2.8
--- Parser.pm	14 Aug 2002 15:32:04 -0000	2.7
+++ Parser.pm	14 Jan 2003 02:25:53 -0000	2.8
@@ -1,6 +1,6 @@
 # Vend::Parser - Interchange parser class
 #
-# $Id: Parser.pm,v 2.7 2002/08/14 15:32:04 mheins Exp $
+# $Id: Parser.pm,v 2.8 2003/01/14 02:25:53 mheins Exp $
 #
 # Copyright (C) 1997-2002 Red Hat, Inc. <interchange@redhat.com>
 #
@@ -66,7 +66,7 @@
 
 use HTML::Entities ();
 use vars qw($VERSION);
-$VERSION = substr(q$Revision: 2.7 $, 10);
+$VERSION = substr(q$Revision: 2.8 $, 10);
 
 
 sub new
@@ -101,7 +101,8 @@
 	while (1) {  # the loop will end by returning when text is parsed
 		# If a preceding routine sent the response, stop 
 		if ($Vend::Sent) {
-			$self->{OUT} = $self->{_buf} = '';
+			${$self->{OUT}} = $self->{_buf} = '';
+			@Vend::Output = ();
 			return $self;
 		}
 		# We try to pull off any plain text (anything before a '[')
@@ -142,7 +143,7 @@
 #::logDebug("tag='$tag' eat='$eaten'");
 
 				# Then we would like to find some attributes
-				while (	$$buf =~ s|^(([a-zA-Z][-a-zA-Z0-9._]*)\s*)|| or
+				while (	$$buf =~ s|^(([_a-zA-Z][-a-zA-Z0-9._]*)\s*)|| or
 					 	$$buf =~ s|^(([=!<>][=~]?)\s+)||                 )
 				{
 					$eaten .= $1;



2.5       +16 -4     interchange/lib/Vend/Table/DB_File.pm


rev 2.5, prev_rev 2.4
Index: DB_File.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Table/DB_File.pm,v
retrieving revision 2.4
retrieving revision 2.5
diff -u -r2.4 -r2.5
--- DB_File.pm	10 Sep 2002 17:29:09 -0000	2.4
+++ DB_File.pm	14 Jan 2003 02:25:53 -0000	2.5
@@ -1,6 +1,6 @@
 # Vend::Table::DB_File - Access an Interchange table stored in a DB file hash
 #
-# $Id: DB_File.pm,v 2.4 2002/09/10 17:29:09 mheins Exp $
+# $Id: DB_File.pm,v 2.5 2003/01/14 02:25:53 mheins Exp $
 #
 # Copyright (C) 1996-2002 Red Hat, Inc. <interchange@redhat.com>
 #
@@ -30,7 +30,7 @@
 use Vend::Table::Common;
 
 @ISA = qw(Vend::Table::Common);
-$VERSION = substr(q$Revision: 2.4 $, 10);
+$VERSION = substr(q$Revision: 2.5 $, 10);
 
 sub create {
 	my ($class, $config, $columns, $filename) = @_;
@@ -100,8 +100,20 @@
 		}
 	}
 
-	my $dbm = tie(%$tie, 'DB_File', $filename, $flags, 0600)
-		or die "Could not open '$filename': $!";
+	my $dbm;
+	my $failed = 0;
+
+	my $retry = $Vend::Cfg->{Limit}{dbm_open_retries} || 10;
+
+	while( $failed < $retry ) {
+		$dbm = tie(%$tie, 'DB_File', $filename, $flags, 0600)
+			and undef($failed), last;
+		$failed++;
+		select(undef,undef,undef,$failed * .100);
+	}
+
+	die ::errmsg("%s could not tie to '%s': %s", 'DB_File', $filename, $!)
+		unless $dbm;
 
 	my $columns = [split(/\t/, $tie->{'c'})];
 



1.22      +574 -278  interchange/lib/Vend/Table/Editor.pm


rev 1.22, prev_rev 1.21
Index: Editor.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Table/Editor.pm,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- Editor.pm	13 Dec 2002 12:53:22 -0000	1.21
+++ Editor.pm	14 Jan 2003 02:25:53 -0000	1.22
@@ -1,6 +1,6 @@
 # Vend::Table::Editor - Swiss-army-knife table editor for Interchange
 #
-# $Id: Editor.pm,v 1.21 2002/12/13 12:53:22 mheins Exp $
+# $Id: Editor.pm,v 1.22 2003/01/14 02:25:53 mheins Exp $
 #
 # Copyright (C) 2002 ICDEVGROUP <interchange@icdevgroup.org>
 # Copyright (C) 2002 Mike Heins <mike@perusion.net>
@@ -26,7 +26,7 @@
 package Vend::Table::Editor;
 
 use vars qw($VERSION);
-$VERSION = substr(q$Revision: 1.21 $, 10);
+$VERSION = substr(q$Revision: 1.22 $, 10);
 
 use Vend::Util;
 use Vend::Interpolate;
@@ -157,7 +157,7 @@
 }
 
 sub meta_record {
-	my ($item, $view, $mdb) = @_;
+	my ($item, $view, $mdb, $extended_only) = @_;
 
 #::logDebug("meta_record: item=$item view=$view mdb=$mdb");
 	return undef unless $item;
@@ -191,14 +191,19 @@
 	# Get additional settings from extended field, which is a serialized
 	# hash
 	my $hash;
-	if($record->{extended}) {
+	if(! $record->{extended}) {
+			return undef if $extended_only;
+	}
+	else {
 		## From Vend::Util
 		$hash = get_option_hash($record->{extended});
+		$record = {} if $extended_only;
 		if(ref $hash eq 'HASH') {
 			@$record{keys %$hash} = values %$hash;
 		}
 		else {
 			undef $hash;
+			return undef if $extended_only;
 		}
 	}
 
@@ -306,6 +311,7 @@
 								append
 								attribute
 								db
+								class
 								extra
 								field
 								filter
@@ -490,7 +496,7 @@
 	<B>$LABEL$</B>
 </TD>
 <TD VALIGN=TOP>
-	<TABLE CELLSPACING=0 CELLMARGIN=0><TR><TD>$WIDGET$</TD><TD><I>$HELP$</I>{HELP_URL}<BR><A HREF="$HELP_URL$">help</A>{/HELP_URL}</TD></TR></TABLE>
+	<TABLE CELLSPACING=0 CELLMARGIN=0><TR><TD>$WIDGET$</TD><TD>$HELP${HELP_URL}<BR><A HREF="$HELP_URL$">help</A>{/HELP_URL}</TD></TR></TABLE>
 </TD>
 </TR>
 EOF
@@ -536,42 +542,49 @@
 	
 	$opt ||= {};
 
-	my @chars = reverse(0 .. 9, 'a' .. 'e');
 	my @colors;
 	$opt->{tab_bgcolor_template} ||= '#xxxxxx';
-	$opt->{tab_height} ||= '30';
-	$opt->{tab_width} ||= '120';
-	$opt->{panel_height} ||= '600';
-	$opt->{panel_width} ||= '800';
+	$opt->{tab_height} ||= '20'; $opt->{tab_width} ||= '120';
 	$opt->{panel_id} ||= 'mvpan';
 	$opt->{tab_horiz_offset} ||= '10';
 	$opt->{tab_vert_offset} ||= '8';
+	my $width_height;
 	$opt->{tab_style} ||= q{
 								text-align:center;
 								font-family: sans-serif;
 								line-height:150%;
+								font-size: smaller;
 								border:2px;
 								border-color:#999999;
 								border-style:outset;
 								border-bottom-style:none;
 							};
-	$opt->{panel_style} ||= q{ 
+	if($opt->{ui_style}) {
+		$opt->{panel_style} ||= q{ 
+									padding: 0;
+								};
+		$width_height = '';
+	}
+	else {
+		$opt->{panel_style} ||= q{ 
 									font-family: sans-serif;
 									font-size: smaller;
+									padding: 0;
 									border: 2px;
 									border-color:#999999;
 									border-style:outset;
 								};
-	$opt->{layer_tab_style} ||= q{
-									font-weight:bold;
-									text-align:center;
-									font-family:sans-serif;
-									};
-	$opt->{layer_panel_style} ||= q{
-									font-family:sans-serif;
-									padding:6px;
-									};
+		$opt->{panel_height} ||= '600';
+		$opt->{panel_width} ||= '800';
+		$width_height = <<EOF;
+   width: $opt->{panel_width}px;
+   height: $opt->{panel_height}px;
+EOF
+	}
+
+	$opt->{panel_shade} ||= 'e';
 
+	my @chars = reverse(0 .. 9, 'a' .. $opt->{panel_shade});
 	my $id = $opt->{panel_id};
 	my $vpf = $id . '_';
 	my $num_panels = scalar(@$cont);
@@ -579,15 +592,24 @@
 	my $num_rows = POSIX::ceil( $num_panels / $opt->{tab_width});
 	my $width = $opt->{panel_width};
 	my $height = $opt->{tab_height} * $num_rows + $opt->{panel_height};
-	my $panel_y =
+	my $panel_y;
+	my $int1;
+	my $int2;
+	if($opt->{ui_style}) {
+		$panel_y = 2;
+		$int1 = $int2 = 0;
+	}
+	else {
+	  $panel_y =
 		$num_rows
 		* ($opt->{tab_height} - $opt->{tab_vert_offset})
 		+ $opt->{tab_vert_offset};
-	my $int1 = $panel_y - 2;
-	my $int2 = $opt->{tab_height} * $num_rows;
+		$int1 = $panel_y - 2;
+		$int2 = $opt->{tab_height} * $num_rows;
+	}
 	for(my $i = 0; $i < $num_panels; $i++) {
 		my $c = $opt->{tab_bgcolor_template} || '#xxxxxx';
-		$c =~ s/x/$chars[$i] || 'e'/eg;
+		$c =~ s/x/$chars[$i] || $opt->{panel_shade}/eg;
 		$colors[$i] = $c;
 	}
 	my $cArray = qq{var ${vpf}colors = ['} . join("','", @colors) . qq{'];};
@@ -606,6 +628,8 @@
 var ${vpf}hOffset = $opt->{tab_horiz_offset};
 $cArray
 
+var ${vpf}uptabs = new Array;
+var ${vpf}dntabs = new Array;
 var ${vpf}divLocation = new Array(${vpf}numLocations)
 var ${vpf}newLocation = new Array(${vpf}numLocations)
 for(var i=0; i<${vpf}numLocations; ++i) {
@@ -642,6 +666,40 @@
 	div.style.left = (newPos % ${vpf}tabsPerRow) * ${vpf}tabWidth +	(${vpf}hOffset * (Math.floor(newPos / ${vpf}tabsPerRow)))
 }
 
+function ${vpf}tripTab(n) {
+	// n is the ID of the division that was clicked
+	// firstTab is the location of the first tab in the selected row
+	var el;
+	for(var i = 0; i < ${vpf}dntabs.length; i++) {
+		el = document.getElementById('${vpf}td' + i);
+		if(el != undefined) {
+			el.innerHTML = ${vpf}dntabs[ i ];
+			el.style.backgroundColor = '#B4B0AA';
+		}
+	}
+	el = document.getElementById('${vpf}td' + n);
+	el.innerHTML = ${vpf}uptabs[ n ];
+	el.style.backgroundColor = '#D4D0C8';
+	// Set tab positions & zIndex
+	// Update location
+	var j = 1;
+	for(var i=0; i<${vpf}numDiv; ++i) {
+		var loc = ${vpf}newLocation[i]
+		var div = ${vpf}getDiv("panel",i)
+		if(i == n) {
+			${vpf}setZIndex(div, ${vpf}numLocations +1);
+			div.style.display = 'block';
+			div.style.backgroundColor = ${vpf}colors[0];
+		}
+		else {
+			${vpf}setZIndex(div, ${vpf}numLocations - loc)
+			div.style.display = 'none';
+			div.style.backgroundColor = ${vpf}colors[j++];
+		}
+		${vpf}divLocation[i] = loc
+	}
+}
+
 function ${vpf}selectTab(n) {
 	// n is the ID of the division that was clicked
 	// firstTab is the location of the first tab in the selected row
@@ -681,13 +739,6 @@
 	}
 }
 
-// Nav4: position component into a table
-function ${vpf}positionPanel() {
-	document.$id.top=document.panelLocator.pageY;
-	document.$id.left=document.panelLocator.pageX;
-}
-if (document.layers) window.onload=${vpf}positionPanel;
-
 //-->
 </SCRIPT>
 <STYLE type="text/css">
@@ -716,6 +767,8 @@
 EOF
 	my $s1 = '';
 	my $s2 = '';
+	my @dntabs;
+	my @uptabs;
 	for(my $i = 0; $i < $num_panels; $i++) {
 		my $zi = $num_panels - $i;
 		my $pnum = $i + 1;
@@ -737,6 +790,47 @@
 $cont->[$i]
 $opt->{panel_append}
 </DIV>
+EOF
+		if($opt->{ui_style}) {
+			$s2 .= <<EOF;
+<td class=subtabdown id="${vpf}td$i"> 
+EOF
+
+			$dntabs[$i] = <<EOF;
+	<table width="100%" border=0 cellspacing=0 cellpadding=0>
+	  <tr> 
+		 <td class=subtabdownleft><a href="javascript:${vpf}tripTab($i,1)"><img src="bg.gif" width=16 height=16 border=0></a></td>
+		 <td nowrap class=subtabdownfill><a href="javascript:${vpf}tripTab($i,1)" class=subtablink>$tit->[$i]</a></td>
+		 <td class=subtabdownright><a href="javascript:${vpf}tripTab($i,1)"><img src="bg.gif" width=16 height=16 border=0></a></td>
+	  </tr>
+	  <tr> 
+		 <td colspan=3 class=darkshade><img src="bg.gif" height=1></td>
+	  </tr>
+	  <tr> 
+		 <td colspan=3 class=lightshade><img src="bg.gif" height=1></td>
+	  </tr>
+   </table>
+EOF
+
+			$s2 .= $dntabs[$i];
+
+			$uptabs[$i] = <<EOF;
+	<table width="100%" border=0 cellspacing=0 cellpadding=0>
+	  <tr> 
+		 <td class=subtableft><a href="javascript:${vpf}tripTab($i,1)"><img src="bg.gif" width=16 height=16 border=0></a></td>
+		 <td nowrap class=subtabfill><a href="javascript:${vpf}tripTab($i,1)" class=subtablink>$tit->[$i]</a></td>
+		 <td class=subtabright><a href="javascript:${vpf}tripTab($i,1)"><img src="bg.gif" width=16 height=16 border=0></a></td>
+	  </tr>
+	  <tr> 
+		 <td colspan=3 class=subtabfilllwr><img src="bg.gif" height=1></td>
+	  </tr>
+	</table>
+EOF
+			$s2 .= "</td>\n";
+
+		}
+		else {
+			$s1 .= <<EOF;
 <DIV
 	onclick="${vpf}selectTab($i)"
 	id="${id}tab$i"
@@ -752,53 +846,51 @@
 $tit->[$i]
 </DIV>
 EOF
-		my $lheight = $opt->{tab_height} * $num_rows;
-		my $ltop = $num_rows * ($opt->{tab_height} - $opt->{tab_vert_offset})
-					+ $opt->{tab_vert_offset} - 2;
-		$s2 .= <<EOF;
-<LAYER
-	bgcolor="$colors[$i]"
-	style="$opt->{layer_tab_style}"
-	width="$opt->{tab_width}"
-	height="$lheight"
-	left="$left"
-	top="$top"
-	z-index="$zi"
-	id="${id}tab$i"
-	onfocus="${vpf}selectTab($i)"
-	>
-<table width="100%" cellpadding=2 cellspacing=0>
-$tit->[$i]
-</LAYER>
-<LAYER
-	bgcolor="$colors[$i]"
-	style="$opt->{layer_panel_style}"
-	width="$opt->{panel_width}"
-	height="$opt->{panel_height}"
-	left="0"
-	top="$ltop"
-	z-index="$zi"
-	id="${id}panel$i"
-	>$cont->[$i]
-</LAYER>
-EOF
+		}
 	}
 
 	my $start_index = $opt->{start_at_index} || 0;
 	$start_index += 0;
-	return <<EOF;
-$out
+	if($s2) {
+		$Tag->output_to('third_tabs', { name => 'third_tabs' }, $s2);
+	}
+	$out .= <<EOF;
 <div style="
 		position: relative;
 		left: 0; top: 0; width=100%; height=100%;
 		z-index: 0;
 	">
 $s1
+EOF
+	if($s2) {
+		$out .= <<EOF;
+<script>
+EOF
+		for(my $i = 0; $i < @dntabs; $i++) {
+			$out .= "${vpf}uptabs[ $i ] = ";
+			$out .= $Tag->jsq($uptabs[$i]);
+			$out .= ";\n";
+			$out .= "${vpf}dntabs[ $i ] = ";
+			$out .= $Tag->jsq($dntabs[$i]);
+			$out .= ";\n";
+		}
+		$out .= <<EOF;
+	${vpf}tripTab($start_index);
+</script>
+EOF
+	}
+	else {
+		$out .= <<EOF;
 <script>
 	${vpf}selectTab($start_index);
 </script>
+EOF
+	}
+
+	$out .= <<EOF;
 </div>
 EOF
+
 }
 
 my $tcount_all;
@@ -923,6 +1015,7 @@
 	break_row_class => 'rbreak',
 	title_row_class => 'rmarq',
 	data_row_class => 'rnorm',
+	ok_button_style => 'font-weight: bold; width: 40px; text-align: center',
 );
 
 my %o_default_var = (qw/
@@ -932,7 +1025,7 @@
 
 my %o_default_defined = (
 	mv_update_empty		=> 1,
-	restrict_allow		=> 'page area var cgi',
+	restrict_allow		=> 'page area var',
 );
 
 my %o_default = (
@@ -947,7 +1040,6 @@
 	border_height		=> 1,
 	clear_image			=> 'bg.gif',
 	table_width			=> '100%',
-	table_height		=> '100%',
 );
 
 # Build maps for ui_te_* option pass
@@ -1078,82 +1170,30 @@
 #::logDebug("options now=" . ::uneval($opt));
 	}
 
-	my $tmeta;
-	if($opt->{no_table_meta}) {
-		$tmeta = {};
-	}
-	else {
-		$tmeta = meta_record($table, $opt->{ui_meta_view}) || {};
-	}
-
-	$opt->{view_from} ||= $tmeta->{view_from};
-
-	if( !   $opt->{ui_meta_view}
-		and $opt->{view_from}
-		and $data
-		and $opt->{ui_meta_view} = $data->{$opt->{view_from}}
-		)
-	{
-		$tmeta = meta_record($table, $opt->{ui_meta_view}) || {};
-	}
-
-	# This section checks the passed options and converts them from
-	# strings to refs if necessary
-	FORMATS: {
-		no strict 'refs';
-		my $ref;
-		for(qw/
-                    append
-                    default
-					database
-                    error
-                    extra
-                    field
-                    filter
-					form
-                    height
-                    help
-                    help_url
-                    label
-                    lookup
-                    lookup_query
-                    meta
-                    options
-                    outboard
-                    override
-                    passed
-                    pre_filter
-                    prepend
-                    template
-                    wid_href
-                    widget
-                    width
-				/ )
-		{
-			next if ref $opt->{$_};
-			($opt->{$_} = {}, next) if ! $opt->{$_};
-			my $ref = {};
-			my $string = $opt->{$_};
-			$string =~ s/^\s+//gm;
-			$string =~ s/\s+$//gm;
-			while($string =~ m/^(.+?)=\s*(.+)/mg) {
-				$ref->{$1} = $2;
-			}
-			$opt->{$_} = $ref;
-		}
-	}
-
 	my @mapdirect = qw/
-		bottom_buttons
 		border_cell_class
 		border_height
-		break_cell_style
 		border_height
+		bottom_buttons
 		break_cell_class
 		break_cell_style
+		break_cell_style
 		break_row_class
 		break_row_style
+		button_delete
 		clear_image
+		cancel_button_class
+		cancel_button_style
+		reset_button_class
+		reset_button_style
+		delete_button_class
+		delete_button_style
+		ok_button_class
+		ok_button_style
+		next_button_class
+		next_button_style
+		back_button_class
+		back_button_style
 		data_cell_class
 		data_cell_style
 		data_row_class
@@ -1161,9 +1201,10 @@
 		default_widget
 		display_type
 		file_upload
+		help_anchor
 		help_cell_class
 		help_cell_style
-		help_anchor
+		image_meta
 		include_before
 		include_form
 		include_form_expand
@@ -1173,15 +1214,18 @@
 		label_cell_style
 		left_width
 		link_before
-		link_table
+		link_extra
 		link_fields
-		link_label
-		link_sort
 		link_key
-		link_view
+		link_label
 		link_no_blank
+		link_row_qual
+		link_auto_number
+		link_row_blank
+		link_sort
+		link_table
 		link_template
-		link_extra
+		link_view
 		mv_blob_field
 		mv_blob_label
 		mv_blob_nick
@@ -1190,13 +1234,17 @@
 		mv_data_decode
 		mv_data_table
 		mv_update_empty
+		output_map
 		panel_height
 		panel_id
+		panel_class
+		panel_shade
+		panel_style
 		panel_width
 		restrict_allow
+		spacer_height
 		spacer_row_class
 		spacer_row_style
-		spacer_height
 		start_at
 		tab_bgcolor_template
 		tab_cellpadding
@@ -1205,6 +1253,8 @@
 		tab_horiz_offset
 		tab_vert_offset
 		tab_width
+		tab_class
+		tab_style
 		tabbed
 		table_height
 		table_width
@@ -1227,20 +1277,10 @@
 		view_from
 		widget_cell_class
 		widget_cell_style
+		widget_class
 	/;
 
-	for(grep defined $tmeta->{$_}, @mapdirect) {
-		$opt->{$_} = $tmeta->{$_} if ! defined $opt->{$_};
-	}
-
 	if($opt->{cgi}) {
-		unshift @mapdirect, qw/
-				item_id
-				item_id_left
-				ui_clone_id
-				ui_clone_tables
-				ui_sequence_edit
-		/;
 		for(@mapdirect) {
 			next if ! defined $CGI->{$_};
 			$opt->{$_} = $CGI->{$_};
@@ -1253,10 +1293,108 @@
 					and $opt->{$row->[1]}{$1} = $CGI->{$_};
 			}
 		}
+	}
+
+#::logDebug("no_meta_display=$opt->{ui_no_meta_display}");
+	my $tmeta;
+	if($opt->{no_table_meta} || $opt->{ui_no_meta_display}) {
+		$tmeta = {};
+	}
+	else {
+		$tmeta = meta_record($table, $opt->{ui_meta_view}) || {};
+	}
+
+	$opt->{view_from} ||= $tmeta->{view_from};
+	
+	my $baseopt;
+	if($opt->{no_base_meta} || $opt->{ui_no_meta_display}) {
+		$baseopt = {};
+	}
+	else {
+		$baseopt = meta_record('table-editor') || {};
+		delete $baseopt->{extended};
+	}
+
+	if( !   $opt->{ui_meta_view}
+		and $opt->{view_from}
+		and $opt->{view_from}
+		and $data
+		and ! $opt->{ui_no_meta_display}
+		and $opt->{ui_meta_view} = $data->{$opt->{view_from}}
+		)
+	{
+		$tmeta = meta_record($table, $opt->{ui_meta_view}) || {};
+	}
+
+	# This section checks the passed options and converts them from
+	# strings to refs if necessary
+	FORMATS: {
+		no strict 'refs';
+		my $ref;
+		for(qw/
+                    append
+                    default
+					database
+                    error
+                    extra
+                    field
+                    filter
+					form
+                    height
+                    help
+                    help_url
+                    label
+                    lookup
+                    lookup_query
+                    meta
+                    options
+                    outboard
+                    override
+                    passed
+                    pre_filter
+                    prepend
+                    template
+                    wid_href
+                    widget
+                    width
+				/ )
+		{
+			next if ref $opt->{$_};
+			($opt->{$_} = {}, next) if ! $opt->{$_};
+			my $ref = {};
+			my $string = $opt->{$_};
+			$string =~ s/^\s+//gm;
+			$string =~ s/\s+$//gm;
+			while($string =~ m/^(.+?)=\s*(.+)/mg) {
+				$ref->{$1} = $2;
+			}
+			$opt->{$_} = $ref;
+		}
+	}
+
+	for(grep length($baseopt->{$_}), @mapdirect) {
+#::logDebug("checking baseopt->{$_}, baseopt=$baseopt->{$_} tmeta=$tmeta->{$_}");
+		$tmeta->{$_} = $baseopt->{$_}	unless length $tmeta->{$_};
+	}
+
+	for(grep defined $tmeta->{$_}, @mapdirect) {
+#::logDebug("checking tmeta->{$_}, tmeta=$tmeta->{$_} opt=$opt->{$_}");
+#::logDebug("opt->{$_} is " . (defined $opt->{$_} ? 'defined' : 'undefined'));
+		$opt->{$_} = $tmeta->{$_}		unless defined $opt->{$_};
+	}
 
-		### Why these here?
-		#$table = $opt->{mv_data_table};
-		#$key = $opt->{item_id};
+	if($opt->{cgi}) {
+		my @extra = qw/
+				item_id
+				item_id_left
+				ui_clone_id
+				ui_clone_tables
+				ui_sequence_edit
+		/;
+		for(@extra) {
+			next if ! defined $CGI->{$_};
+			$opt->{$_} = $CGI->{$_};
+		}
 	}
 
 	if($opt->{wizard}) {
@@ -1375,19 +1513,24 @@
 		$opt->{$mainp} = $thing;
 	}
 
-	#### This code is also in main editor routine, change there too!
-	my $rowdiv         = $opt->{across}    || 1;
-	my $cells_per_span = $opt->{cell_span} || 2;
-	my $rowcount = 0;
-	my $span = $rowdiv * $cells_per_span;
-	#### 
+	# Init the button styles
 
-	# Make standard fixed rows
-	$opt->{spacer_row} = <<EOF;
-<tr$opt->{spacer_row_extra}>
-<td colspan=$span $opt->{spacer_row_extra}><img src="$opt->{clear_image}" width=1 height="$opt->{spacer_height}" alt=x></td>
-</tr>
-EOF
+	for my $ctype (qw/ok next back cancel delete reset/) {
+		my $mainp = $ctype . '_button_extra';
+		my $thing = '';
+		for my $ptype (qw/class style/) {
+			my $parm = $ctype . '_button_' . $ptype;
+			$opt->{$parm} ||= $tmeta->{$parm};
+			if(defined $opt->{$parm}) {
+				$thing .= qq{ $ptype="$opt->{$parm}"};
+			}
+		}
+		$opt->{$mainp} ||= $tmeta->{$mainp};
+		if($opt->{$mainp}) {
+			$thing .= " " . $opt->{$mainp};
+		}
+		$opt->{$mainp} = $thing;
+	}
 
 	###############################################################
 	# Get the field display information including breaks and labels
@@ -1396,6 +1539,7 @@
 		$opt->{ui_data_fields} = $tmeta->{ui_data_fields} || $tmeta->{options};
 	}
 #::logDebug("fields were=$opt->{ui_data_fields}");
+
 	$opt->{ui_data_fields} =~ s/\r\n/\n/g;
 	$opt->{ui_data_fields} =~ s/\r/\n/g;
 	$opt->{ui_data_fields} =~ s/^[ \t]+//mg;
@@ -1421,6 +1565,42 @@
 	$opt->{ui_data_fields} =~ s/[\s,\0]+$//;
 #::logDebug("fields now=$opt->{ui_data_fields}");
 
+	## Visual field layout
+	if($opt->{ui_data_fields} =~ /[\w:.]+[ \t,]+\w+.*\n\w+/) {
+		my $cs = $opt->{colspan} ||= {};
+		my @things = split /\n/, $opt->{ui_data_fields};
+		my @rows;
+		my $max = 0;
+		for(@things) {
+			my @cols = split /[\s\0,]+/, $_;
+			my $cnt = scalar(@cols);
+			$max = $cnt if $cnt > $max;
+			push @rows, \@cols;
+		}
+		$opt->{across} = $max;
+		for(@rows) {
+			my $cnt = scalar(@$_);
+			if ($cnt < $max) {
+				my $name = $_->[-1];
+				$cs->{$name} = (($max - $cnt) * 2) + 1;
+			}
+		}
+	}
+
+	#### This code is also in main editor routine, change there too!
+	my $rowdiv         = $opt->{across}    || 1;
+	my $cells_per_span = $opt->{cell_span} || 2;
+	my $rowcount = 0;
+	my $span = $rowdiv * $cells_per_span;
+	#### 
+
+	# Make standard fixed rows
+	$opt->{spacer_row} = <<EOF;
+<tr$opt->{spacer_row_extra}>
+<td colspan=$span $opt->{spacer_row_extra}><img src="$opt->{clear_image}" width=1 height="$opt->{spacer_height}" alt=x></td>
+</tr>
+EOF
+
 	$opt->{mv_nextpage} = $Global::Variable->{MV_PAGE}
 		if ! $opt->{mv_nextpage};
 
@@ -1470,9 +1650,9 @@
 	$key ||= $opt->{item_id};
 
 	if($opt->{cgi}) {
-		$key ||= delete $CGI->{item_id};
-		$opt->{item_id_left} ||= delete $CGI::values{item_id_left};
-		$opt->{ui_sequence_edit} ||= delete $CGI::values{ui_sequence_edit};
+		$key ||= $CGI->{item_id};
+		$opt->{item_id_left} ||= $CGI::values{item_id_left};
+		$opt->{ui_sequence_edit} ||= $CGI::values{ui_sequence_edit};
 	}
 
 	if($key =~ /\0/ or (! $key and $key = delete $opt->{item_id_left}) ) {
@@ -1534,6 +1714,7 @@
 
 	my $append       = $opt->{append};
 	my $check        = $opt->{check};
+	my $class        = $opt->{class} || {};
 	my $database     = $opt->{database};
 	my $default      = $opt->{default};
 	my $error        = $opt->{error};
@@ -1558,6 +1739,7 @@
 	my $template     = $opt->{template};
 	my $widget       = $opt->{widget};
 	my $width        = $opt->{width};
+	my $colspan      = $opt->{colspan} || {};
 
 	my $blabel = $opt->{blabel};
 	my $elabel = $opt->{elabel};
@@ -1960,7 +2142,7 @@
 				}
 				$blob_widget = <<EOF unless $opt->{ui_blob_hidden};
 <B>$msg1:</B> $blob_widget&nbsp;
-<INPUT TYPE=checkbox NAME=mv_blob_only VALUE=1$checked>&nbsp;$msg2</SMALL>
+<INPUT TYPE=checkbox NAME=mv_blob_only class="$opt->{widget_class}" VALUE=1$checked>&nbsp;$msg2</SMALL>
 EOF
 			}
 
@@ -1970,7 +2152,7 @@
 	   <SMALL>$opt->{mv_blob_title}<BR>
 		$loaded_from
 	 </td>
-	 <td$opt->{widget_cell_extra}>
+	 <td$opt->{data_cell_extra}>
 	 	$blob_widget&nbsp;
 	 </td>
 </TR>
@@ -2033,8 +2215,9 @@
 
 	no strict 'subs';
 
-	chunk 'FORM_BEGIN', <<EOF; # unless $wo;
-$restrict_begin<FORM METHOD=$opt->{method} ACTION="$opt->{href}"$opt->{enctype}$opt->{form_extra}>
+	chunk ttag(), $restrict_begin;
+	chunk 'FORM_BEGIN', 'OUTPUT_MAP', <<EOF; # unless $wo;
+<FORM METHOD=$opt->{method} ACTION="$opt->{href}"$opt->{enctype}$opt->{form_extra}>
 EOF
 
     $hidden->{mv_click}      = $opt->{process_filter};
@@ -2043,7 +2226,7 @@
     $hidden->{mv_data_table} = $table;
     $hidden->{mv_data_key}   = $keycol;
 
-	chunk 'HIDDEN_ALWAYS', <<EOF;
+	chunk 'HIDDEN_ALWAYS', 'OUTPUT_MAP', <<EOF;
 <INPUT TYPE=hidden NAME=mv_session_id VALUE="$Vend::Session->{id}">
 <INPUT TYPE=hidden NAME=mv_click VALUE="process_filter">
 EOF
@@ -2107,9 +2290,13 @@
 		while ( ($hk, $hv) = each %{$opt->{hidden}} ) {
 			push @o, produce_hidden($hk, $hv);
 		}
-		chunk 'HIDDEN_USER', join("", @o); # unless $wo;
+		chunk 'HIDDEN_USER', 'OUTPUT_MAP', join("", @o); # unless $wo;
 	}
 
+	if($opt->{tabbed} and $Session->{browser} !~ /Gecko/) {
+		$opt->{table_width} ||= $opt->{panel_width} + 10;
+		$opt->{table_height} ||= $opt->{panel_height} + 10;
+	}
 	chunk ttag(), <<EOF; # unless $wo;
 <table class=touter border="0" cellspacing="0" cellpadding="0" width="$opt->{table_width}" height="$opt->{table_height}">
 <tr>
@@ -2117,7 +2304,7 @@
 
 <table class=tinner width="$opt->{inner_table_width}" height="$opt->{inner_table_height}" cellspacing=0 cellmargin=0 cellpadding="2" align="center" border="0">
 EOF
-	chunk ttag(), 'NO_TOP', <<EOF; # unless $opt->{no_top} or $wo;
+	chunk ttag(), 'NO_TOP OUTPUT_MAP', <<EOF; # unless $opt->{no_top} or $wo;
 <tr> 
 <td colspan=$span$opt->{border_cell_extra}><img src="$opt->{clear_image}" width=1 height="$opt->{border_height}" alt=x></td>
 </tr>
@@ -2134,21 +2321,22 @@
 
 	#### Extra buttons
 	my $extra_ok =	$blob_widget
+						|| $opt->{output_map}
 	  					|| $linecount > 4
 						|| defined $opt->{include_form}
 						|| $mlabel;
 	if ($extra_ok and ! $opt->{no_top} and ! $opt->{nosave}) {
 	  	if($opt->{back_text}) {
-		  chunk ttag(), '', <<EOF; # unless $wo;
+		  chunk ttag(), 'OUTPUT_MAP', <<EOF; # unless $wo;
 <tr$opt->{data_row_extra}>
-<td>&nbsp;</td>
+<td$opt->{label_cell_extra}>&nbsp;</td>
 <td align=left colspan=$oddspan$opt->{data_cell_extra}>
 EOF
-			chunk 'COMBINED_BUTTONS_TOP', 'BOTTOM_BUTTONS', <<EOF; # if ! $opt->{bottom_buttons};
-<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{back_text}">&nbsp;<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}">&nbsp;<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"></B>
+			chunk 'COMBINED_BUTTONS_TOP', 'BOTTOM_BUTTONS OUTPUT_MAP', <<EOF;
+<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{back_text}"$opt->{back_button_extra}>&nbsp;<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}"$opt->{cancel_button_extra}>&nbsp;<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"$opt->{next_button_extra}></B>
 <BR>
 EOF
-			chunk 'MLABEL', '', 'MESSAGES', $mlabel;
+			chunk 'MLABEL', 'OUTPUT_MAP', 'MESSAGES', $mlabel;
 			chunk ttag(), <<EOF;
 	</td>
 </tr>
@@ -2156,47 +2344,46 @@
 EOF
 		}
 		elsif ($opt->{wizard}) {
-		  chunk ttag(), 'NO_TOP', <<EOF;
+			chunk ttag(), 'NO_TOP OUTPUT_MAP', <<EOF;
 <TR$opt->{data_row_extra}>
-<td>&nbsp;</td>
+<td$opt->{label_cell_extra}>&nbsp;</td>
 <td align=left colspan=$oddspan$opt->{data_cell_extra}>
 EOF
-			chunk 'WIZARD_BUTTONS_TOP', 'BOTTOM_BUTTONS NO_TOP', <<EOF; # if ! $opt->{bottom_buttons};
-<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}">&nbsp;<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"></B>
+			chunk 'WIZARD_BUTTONS_TOP', 'BOTTOM_BUTTONS NO_TOP OUTPUT_MAP', <<EOF; 
+<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}"$opt->{cancel_button_extra}>&nbsp;<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"$opt->{next_button_extra}></B>
 <BR>
 EOF
-			chunk 'MLABEL', 'BOTTOM_BUTTONS', 'MESSAGES', $mlabel;
-			chunk ttag(), <<EOF;
+			chunk 'MLABEL', 'BOTTOM_BUTTONS OUTPUT_MAP', 'MESSAGES', $mlabel;
+			chunk ttag(), 'NO_TOP OUTPUT_MAP', <<EOF;
 	</td>
 </tr>
 $opt->{spacer_row}
 EOF
 		}
 		else {
-		  chunk ttag(), 'BOTTOM_BUTTONS NO_TOP', <<EOF;
+		  chunk ttag(), 'BOTTOM_BUTTONS NO_TOP OUTPUT_MAP', <<EOF;
 <TR$opt->{data_row_extra}>
-<td>&nbsp;</td>
+<td$opt->{label_cell_extra}>&nbsp;</td>
 <td align=left colspan=$oddspan$opt->{data_cell_extra}>
 EOF
 
-		  $opt->{ok_button_style} = 'font-weight: bold; width: 40px; text-align: center'
-		  	unless defined $opt->{ok_button_style};
-		  	
-		  chunk 'OK_TOP', 'NO_TOP', <<EOF;
-<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}" style="$opt->{ok_button_style}">
+		  chunk 'OK_TOP', 'NO_TOP OUTPUT_MAP', <<EOF;
+<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"$opt->{ok_button_extra}>
 EOF
-		  chunk 'CANCEL_TOP', 'NOCANCEL BOTTOM_BUTTONS NO_TOP', <<EOF;
+		  chunk 'CANCEL_TOP', 'NOCANCEL BOTTOM_BUTTONS NO_TOP OUTPUT_MAP', <<EOF;
 &nbsp;
-<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}" style="$opt->{cancel_button_style}">
+<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}"$opt->{cancel_button_extra}>
 EOF
 
-		  chunk 'RESET_TOP', '_SHOW_RESET BOTTOM_BUTTONS NO_TOP', <<EOF;
+		  if($opt->{show_reset}) {
+			  chunk 'RESET_TOP', 'BOTTOM_BUTTONS NO_TOP OUTPUT_MAP', <<EOF;
 &nbsp;
-<INPUT TYPE=reset>
+<INPUT TYPE=reset$opt->{reset_button_extra}>
 EOF
+		  }
 
-			chunk 'MLABEL', 'BOTTOM_BUTTONS', $mlabel;
-			chunk ttag(), 'BOTTOM_BUTTONS NO_TOP', <<EOF;
+			chunk 'MLABEL', 'BOTTOM_BUTTONS OUTPUT_MAP', $mlabel;
+			chunk ttag(), 'BOTTOM_BUTTONS NO_TOP OUTPUT_MAP', <<EOF;
 	</td>
 </tr>
 $opt->{spacer_row}
@@ -2258,7 +2445,7 @@
 	@tables = grep $_ !~ /:/, @tables;
 	for(@tables) {
 		next unless $possible{$_};
-		my $db = database_exists_ref($_);
+		my $db = $Db{$_} || Vend::Data::database_exists_ref($_);
 		next unless $db;
 		my $new = 
 		my $res = $db->clone_row($id, $new);
@@ -2271,7 +2458,7 @@
 	}
 	for(@sets) {
 		my ($t, $col) = split /:/, $_;
-		my $db = database_exists_ref($t) or next;
+		my $db = $Db{$t} || Vend::Data::database_exists_ref($t) or next;
 		my $res = $db->clone_set($col, $id, $new);
 		if($res) {
 			$out .= "cloned $col=$id to to $col=$new in table $t<BR>\n";
@@ -2328,8 +2515,6 @@
 								OK_TOP
 								CANCEL_TOP
 								RESET_TOP
-								BLOB_WIDGET
-								CLONE_TABLES
 								/;
 
 	my %break;
@@ -2467,7 +2652,7 @@
 		$opt->{meta_extra} ||= "";
 		$opt->{meta_extra} .= qq{ class="$opt->{meta_class}"}
 			if $opt->{meta_class};
-		$opt->{meta_extra} .= qq{ class="$opt->{meta_style}"}
+		$opt->{meta_extra} .= qq{ style="$opt->{meta_style}"}
 			if $opt->{meta_style};
 	}
 
@@ -2481,22 +2666,26 @@
    <td$opt->{label_cell_extra}> 
      {BLABEL}{LABEL}{ELABEL}
    </td>
-   <td$opt->{data_cell_extra}>{WIDGET}{HELP_EITHER?}&nbsp;<a href="{HELP_URL}" title="{HELP}">$opt->{help_anchor}</a>{/HELP_EITHER?}&nbsp;{META_URL?}<A HREF="{META_URL}">$opt->{meta_anchor}</A>{/META_URL?}
+   <td$opt->{data_cell_extra}\{COLSPAN}>{WIDGET}{HELP_EITHER?}&nbsp;<a href="{HELP_URL}" title="{HELP}">$opt->{help_anchor}</a>{/HELP_EITHER?}&nbsp;{META_URL?}<A HREF="{META_URL}">$opt->{meta_anchor}</A>{/META_URL?}
    </td>
 EOF
 		}
 		elsif($opt->{image_meta}) {
+			$opt->{break_template} ||= <<EOF;
+$opt->{spacer_row}
+<tr$opt->{break_row_extra}><td colspan=$span $opt->{break_cell_extra}>{ROW}</td></tr>
+EOF
 			$row_template = <<EOF;
    <td$opt->{label_cell_extra}> 
      {BLABEL}{LABEL}{ELABEL}
    </td>
-   <td$opt->{data_cell_extra}>
+   <td$opt->{data_cell_extra}\{COLSPAN}>
      <table cellspacing=0 cellmargin=0 width="100%">
        <tr> 
          <td$opt->{widget_cell_extra}>
            {WIDGET}
          </td>
-         <td$opt->{help_cell_extra}>{TKEY}{HELP?}<i>{HELP}</i>{/HELP?}{HELP_URL?}<BR><A HREF="{HELP_URL}">$opt->{help_anchor}</A>{/HELP_URL?}</td>
+         <td$opt->{help_cell_extra}>{TKEY}{HELP?}{HELP}{/HELP?}{HELP_URL?}<BR><A HREF="{HELP_URL}">$opt->{help_anchor}</A>{/HELP_URL?}</td>
          <td align=right>{META_STRING}</td>
        </tr>
      </table>
@@ -2526,7 +2715,7 @@
    <td$opt->{label_cell_extra}> 
      {BLABEL}{LABEL}{ELABEL}{META_STRING}
    </td>
-   <td$opt->{data_cell_extra}>
+   <td$opt->{data_cell_extra}\{COLSPAN}>
      <table cellspacing=0 cellmargin=0 width="100%">
        <tr> 
          <td$opt->{widget_cell_extra}>
@@ -2587,6 +2776,9 @@
 		my @llab;
 		my @ltpl;
 		my @lnb;
+		my @lrq;
+		my @lra;
+		my @lrb;
 		my @lbefore;
 		my @lsort;
 		my $tcount = 1;
@@ -2598,6 +2790,9 @@
 			@llab    = @{$opt->{link_label}};
 			@ltpl    = @{$opt->{link_template}};
 			@lnb     = @{$opt->{link_no_blank}};
+			@lrq     = @{$opt->{link_row_qual}};
+			@lra     = @{$opt->{link_auto_number}};
+			@lrb     = @{$opt->{link_rows_blank}};
 			@lbefore = @{$opt->{link_before}};
 			@lsort   = @{$opt->{link_sort}};
 		}
@@ -2609,6 +2804,9 @@
 			@llab    = $opt->{link_label};
 			@ltpl    = $opt->{link_template};
 			@lnb     = $opt->{link_no_blank};
+			@lrq     = $opt->{link_row_qual};
+			@lra     = $opt->{link_auto_number};
+			@lrb     = $opt->{link_rows_blank};
 			@lbefore = $opt->{link_before};
 			@lsort   = $opt->{link_sort};
 		}
@@ -2620,6 +2818,9 @@
 			my $lb = shift @lbefore;
 			my $lnb = shift @lnb;
 			my $ls = shift @lsort;
+			my $lrq = shift @lrq;
+			my $lra = shift @lra;
+			my $lrb = shift @lrb;
 
 			my $rcount = 0;
 
@@ -2637,6 +2838,15 @@
 			$lf ||= $lmeta->{spread_fields};
 
 			my $l_pkey = $ldb->config('KEY');
+			$lrq ||= $l_pkey;
+
+			my $an_piece = '';
+			if($lra) {
+				$an_piece = <<EOF;
+<input type=hidden name="mv_data_auto_number__$tcount" value="$lra">
+<input type=hidden name="mv_data_function__$tcount" value="insert">
+EOF
+			}
 
 			my @cf = grep /\S/, split /[\s,\0]+/, $lf;
 			@cf = grep $_ ne $l_pkey, @cf;
@@ -2650,6 +2860,8 @@
 <input type=hidden name="mv_data_fields__$tcount" value="$lf">
 <input type=hidden name="mv_data_multiple__$tcount" value="1">
 <input type=hidden name="mv_data_key__$tcount" value="$l_pkey">
+<input type=hidden name="mv_data_multiple_qual__$tcount" value="$lrq">
+$an_piece
 $l_pkey</td>};
 			push @lout, $Tag->row_edit({ table => $lt, columns => $lf });
 			push @lout, '</tr>';
@@ -2681,20 +2893,25 @@
 				push @lout, "</tr>";
 			}
 			unless($lnb) {
-				my %o = (
-					table => $lt,
-					blank => 1,
-					extra => $opt->{link_extra},
-					pointer => 999999,
-					stacker => $tcount,
-					columns => $lf,
-					extra => $opt->{link_extra},
-				);
-				push @lout, qq{<tr><td$lextra>};
-				push @lout, qq{<input size=8 name="999999_${l_pkey}__$tcount" value="">};
-				push @lout, '</td>';
-				push @lout, $Tag->row_edit(\%o);
-				push @lout, '</tr>';
+				my $start_ptr = 999000;
+				$lrb ||= 1;
+				for(0 .. $opt->{link_rows_blank}) {
+					my %o = (
+						table => $lt,
+						blank => 1,
+						extra => $opt->{link_extra},
+						pointer => $start_ptr,
+						stacker => $tcount,
+						columns => $lf,
+						extra => $opt->{link_extra},
+					);
+					push @lout, qq{<tr><td$lextra>};
+					push @lout, qq{<input size=8 name="${start_ptr}_${l_pkey}__$tcount" value="">};
+					push @lout, '</td>';
+					push @lout, $Tag->row_edit(\%o);
+					push @lout, '</tr>';
+					$start_ptr++;
+				}
 			}
 			push @lout, "</table>";
 			$whash->{LABEL}  = $ll;
@@ -2864,7 +3081,7 @@
 
 		my $namecol;
 		if($serialize) {
-#Debug("serialize=$serialize");
+#::logDebug("serialize=$serialize");
 			if($serialize{$col}) {
 				push @{$serialize{$col}}, $serialize;
 			}
@@ -2875,18 +3092,18 @@
 					$sd = tag_data($tt, $tc, $k);
 				}
 				else {
-					$sd = $data->{$col} || $def->{$col};
+					$sd = $data->{$col} || $default->{$col};
 				}
-#Debug("serial_data=$sd");
+#::logDebug("serial_data=$sd");
 				$serial_data{$col} = $sd;
 				$opt->{hidden}{$col} = $data->{$col};
 				$serialize{$col} = [$serialize];
 			}
 			$c =~ /\.(.*)/;
 			my $hk = $1;
-#Debug("fetching serial_data for $col hk=$hk data=$serial_data{$col}");
+#::logDebug("fetching serial_data for $col hk=$hk data=$serial_data{$col}");
 			$currval = dotted_hash($serial_data{$col}, $hk);
-#Debug("fetched hk=$hk value=$currval");
+#::logDebug("fetched hk=$hk value=$currval");
 			$overridden = 1;
 			$namecol = $c = $serialize;
 		}
@@ -2990,11 +3207,14 @@
 			}
 		}
 
+		$class->{$c} ||= $opt->{widget_class};
+
 #::logDebug("col=$c currval=$currval widget=$widget->{$c} label=$label->{$c}");
 		my $display = display($t, $c, $key, {
 							append				=> $append->{$c},
 							applylocale			=> 1,
 							arbitrary			=> $opt->{ui_meta_view},
+							class				=> $class->{$c},
 							column				=> $c,
 							db					=> $database->{$c},
 							default				=> $currval,
@@ -3042,6 +3262,8 @@
 		$display->{TKEY}   = $tkey_message;
 		$display->{BLABEL} = $blabel;
 		$display->{ELABEL} = $elabel;
+		$display->{COLSPAN} = " colspan=$colspan->{$namecol}" 
+			if $colspan->{$namecol};
 		$display->{ERROR}  = $err_string;
 
 		$update_ctl = 0;
@@ -3111,12 +3333,12 @@
 	if(@ext_enable) {
 		$::Scratch->{mv_data_enable} .= " " . join(" ", @ext_enable) . " ";
 	}
-#Debug("setting mv_data_enable to $::Scratch->{mv_data_enable}");
+#::logDebug("setting mv_data_enable to $::Scratch->{mv_data_enable}");
 	my @serial = keys %serialize;
 	my @serial_fields;
 	my @o;
 	for (@serial) {
-#Debug("$_ serial_data=$serial_data{$_}");
+#::logDebug("$_ serial_data=$serial_data{$_}");
 		$serial_data{$_} = uneval($serial_data{$_})
 			if is_hash($serial_data{$_});
 		$serial_data{$_} =~ s/\&/&amp;/g;
@@ -3129,7 +3351,7 @@
 		push @o, qq{<INPUT TYPE=hidden NAME="ui_serial_fields" VALUE="};
 		push @o, join " ", @serial_fields;
 		push @o, qq{">};
-		chunk 'SERIAL_FIELDS', join("", @o);
+		chunk 'HIDDEN_SERIAL', 'OUTPUT_MAP', join("", @o);
 	}
 
 	###
@@ -3158,63 +3380,43 @@
 
 	my ($beghid, $endhid) = split m{</td>}i, $opt->{spacer_row}, 2;
 	$endhid = "</td>$endhid" if $endhid;
-	chunk ttag(), $beghid;
-	chunk 'HIDDEN_EXTRA', qq{<INPUT TYPE=hidden NAME=mv_data_fields VALUE="$passed_fields">@extra_hidden};
-	chunk ttag(), $endhid;
+	chunk ttag(), 'OUTPUT_MAP', $beghid;
+	chunk 'HIDDEN_EXTRA', 'OUTPUT_MAP', qq{<INPUT TYPE=hidden NAME=mv_data_fields VALUE="$passed_fields">@extra_hidden};
+	chunk ttag(), 'OUTPUT_MAP', $endhid;
 
   SAVEWIDGETS: {
   	last SAVEWIDGETS if $wo || $opt->{nosave}; 
 #::logDebug("in SAVEWIDGETS");
-		chunk ttag(), <<EOF;
+		chunk ttag(), 'OUTPUT_MAP', <<EOF;
 <TR$opt->{data_row_extra}>
-<td>&nbsp;</td>
+<td$opt->{label_cell_extra}>&nbsp;</td>
 <td align=left colspan=$oddspan$opt->{data_cell_extra}>
 EOF
 
-
 	  	if($opt->{back_text}) {
 
-			chunk 'COMBINED_BUTTONS_BOTTOM', <<EOF;
-<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{back_text}">&nbsp;<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}">&nbsp;<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"></B>
+			chunk 'COMBINED_BUTTONS_BOTTOM', 'OUTPUT_MAP', <<EOF;
+<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{back_text}"$opt->{back_button_extra}>&nbsp;<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}"$opt->{cancel_button_extra}>&nbsp;<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"$opt->{next_button_extra}></B>
 EOF
 		}
 		elsif($opt->{wizard}) {
-			chunk 'WIZARD_BUTTONS_BOTTOM', <<EOF;
-<TR$opt->{data_row_extra}>
-<td>&nbsp;</td>
-<td align=left colspan=$oddspan$opt->{data_cell_extra}>
-<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}">&nbsp;<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"></B>
+			chunk 'WIZARD_BUTTONS_BOTTOM', 'OUTPUT_MAP', <<EOF;
+<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}"$opt->{cancel_button_extra}>&nbsp;<B><INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"$opt->{next_button_extra}></B>
 EOF
 		}
 		else {
-			chunk 'OK_BOTTOM', <<EOF;
-<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}" style="$opt->{ok_button_style}">
+			chunk 'OK_BOTTOM', 'OUTPUT_MAP', <<EOF;
+<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{next_text}"$opt->{ok_button_extra}>
 EOF
 
-			chunk 'CANCEL_BOTTOM', 'NOCANCEL', <<EOF;
-&nbsp;<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}" style="$opt->{cancel_button_style}">
+			chunk 'CANCEL_BOTTOM', 'NOCANCEL OUTPUT_MAP', <<EOF;
+&nbsp;<INPUT TYPE=submit NAME=mv_click VALUE="$opt->{cancel_text}"$opt->{cancel_button_extra}>
 EOF
 
-			chunk 'RESET_BOTTOM', qq{&nbsp;<INPUT TYPE=reset>}
+			chunk 'RESET_BOTTOM', 'OUTPUT_MAP', qq{&nbsp;<INPUT TYPE=reset$opt->{reset_button_extra}>}
 				if $opt->{show_reset};
 		}
 
-	if(! $opt->{notable} and $Tag->if_mm('tables', "$table=x") and ! $db->config('LARGE') ) {
-		my $checked = ' CHECKED';
-		$checked = ''
-			if defined $opt->{mv_auto_export} and ! $opt->{mv_auto_export};
-		my $autoexpstr = errmsg('Auto-export');		
-		chunk 'AUTO_EXPORT', 'NOEXPORT NOSAVE', <<EOF; # unless $opt->{noexport} or $opt->{nosave};
-<small>
-&nbsp;
-&nbsp;
-&nbsp;
-&nbsp;
-&nbsp;
-	<INPUT TYPE=checkbox NAME=mv_auto_export VALUE="$table"$checked>&nbsp;$autoexpstr
-EOF
-
-	}
 
 	if($exists and ! $opt->{nodelete} and $Tag->if_mm('tables', "$table=d")) {
 		my $extra = $Tag->return_to( { type => 'click', tablehack => 1 });
@@ -3233,17 +3435,44 @@
 					});
 		my $delstr = errmsg('Delete');
 		my $delmsg = errmsg('Are you sure you want to delete %s?',$key);
-		chunk 'DELETE_BUTTON', 'NOSAVE', <<EOF; # if ! $opt->{nosave};
-<BR><BR><A
-onClick="return confirm('$delmsg')"
-HREF="$url"><IMG SRC="delete.gif" ALT="Delete $key" BORDER=0></A> $delstr
+		if($opt->{output_map} or $opt->{button_delete}) {
+			chunk 'DELETE_BUTTON', 'NOSAVE OUTPUT_MAP', <<EOF;
+&nbsp;
+	<input
+		type=button
+		onClick="if(confirm('$delmsg')) { location='$url' }"
+		title="Delete $key"
+		value="$delstr"$opt->{delete_button_extra}>
+EOF
+		}
+		else {
+			chunk 'DELETE_BUTTON', 'NOSAVE OUTPUT_MAP', <<EOF; # if ! $opt->{nosave};
+<BR><BR><A onClick="return confirm('$delmsg')" HREF="$url"><IMG SRC="delete.gif" ALT="Delete $key" BORDER=0></A> $delstr
 EOF
+		}
 
 	}
+
+	if(! $opt->{notable} and $Tag->if_mm('tables', "$table=x") and ! $db->config('LARGE') ) {
+		my $checked = ' CHECKED';
+		my $msg = errmsg("Automatically export to text file");
+		$checked = ''
+			if defined $opt->{mv_auto_export} and ! $opt->{mv_auto_export};
+		my $autoexpstr = errmsg('Auto-export');		
+		chunk 'AUTO_EXPORT', 'NOEXPORT NOSAVE OUTPUT_MAP', <<EOF;
+<small>
+&nbsp;
+&nbsp;
+	<INPUT TYPE=checkbox class="$opt->{widget_class}" title="$msg" NAME=mv_auto_export VALUE="$table"$checked><span class="$opt->{widget_class}" title="$msg">&nbsp;$autoexpstr</span>
+EOF
+
+	}
+
 	chunk_alias 'HIDDEN_FIELDS', qw/
 										HIDDEN_ALWAYS
-										HIDDEN_AUTO
 										HIDDEN_EXTRA
+										HIDDEN_SERIAL
+										HIDDEN_USER
 										/;
 	chunk_alias 'BOTTOM_BUTTONS', qw/
 										WIZARD_BUTTONS_BOTTOM
@@ -3251,9 +3480,12 @@
 										OK_BOTTOM
 										CANCEL_BOTTOM
 										RESET_BOTTOM
+										/;
+	chunk_alias 'EXTRA_BUTTONS', qw/
 										AUTO_EXPORT
-										DELETE_BUTTON/;
-	chunk ttag(), <<EOF;
+										DELETE_BUTTON
+										/;
+	chunk ttag(), 'OUTPUT_MAP', <<EOF;
 </small>
 </td>
 </tr>
@@ -3299,9 +3531,26 @@
 </td></tr></table>
 EOF
 
-	chunk 'FORM_END', '', 'BOTTOM_OF_FORM', <<EOF;
-</form>$restrict_end
+	my $end_script = '';
+	if( $opt->{start_at}
+			and
+		$opt->{form_name}
+			and
+		$widget->{$opt->{start_at}} !~ /radio|check/i
+		)
+	{
+		$end_script = <<EOF;
+<script>
+	document.$opt->{form_name}.$opt->{start_at}.focus();
+</script>
 EOF
+	}
+	chunk 'FORM_END', 'OUTPUT_MAP', <<EOF;
+</form>$end_script
+EOF
+	chunk ttag(), $restrict_end;
+
+	chunk_alias 'BOTTOM_OF_FORM', qw/ FORM_END /;
 
 	my %ehash = (
 	);
@@ -3311,6 +3560,7 @@
 		NOEXPORT
 		NOSAVE
 		NO_BOTTOM
+		OUTPUT_MAP
 		NO_TOP
 		SHOW_RESET
 		/)
@@ -3321,6 +3571,38 @@
 	$ehash{MESSAGE} = length($message) ? 1 : 0;
 
 #::logDebug("exclude is " . uneval(\%exclude));
+
+	if($opt->{output_map}) {
+		$opt->{output_map} =~ s/^\s+//;
+		$opt->{output_map} =~ s/\s+$//;
+		my %map;
+		my @map = split /[\s,=\0]+/, $opt->{output_map};
+		if(@map > 1) {
+			for(my $i = 0; $i <= @map; $i += 2) {
+				$map{ uc $map[$i] } = lc $map[$i + 1];
+			}
+		}
+		else {
+			%map = qw/
+				TOP_OF_FORM			top_of_form
+				BOTTOM_OF_FORM		bottom_of_form
+				HIDDEN_FIELDS  	    hidden_fields
+				TOP_BUTTONS    	    top_buttons
+				BOTTOM_BUTTONS    	bottom_buttons
+				EXTRA_BUTTONS    	extra_buttons
+			/;
+		}
+
+		while(my($al, $to) = each %map) {
+#::logDebug("outputting alias $al to output $to");
+			my $ary = $alias{$al} || [];
+#::logDebug("alias $al means " . join(" ", @$ary));
+			my $string = join("", @outhash{@$ary});
+#::logDebug("alias $al string is $string");
+			$Tag->output_to($to, { name => $to}, $string );
+		}
+	}
+
 	resolve_exclude(\%ehash);
 
 	if($wo) {
@@ -3381,7 +3663,9 @@
 			for(@controls) {
 				push @tabcont, create_rows($opt, $_);
 			}
-			$opt->{panel_prepend} ||= '<table>';
+			$opt->{panel_table_extra} ||= 'width="100%" cellpadding=3 cellspacing=1';
+			$opt->{panel_table_extra} =~ s/^/ /;
+			$opt->{panel_prepend} ||= "<table$opt->{panel_table_extra}>";
 			$opt->{panel_append} ||= '</table>';
 			push @put, tabbed_display(\@titles,\@tabcont,$opt);
 		}
@@ -3407,7 +3691,9 @@
 		for(@controls) {
 			push @tabcont, create_rows($opt, $_);
 		}
-		$opt->{panel_prepend} ||= '<table>';
+		$opt->{panel_table_extra} ||= 'width="100%" cellpadding=3 cellspacing=1';
+		$opt->{panel_table_extra} =~ s/^/ /;
+		$opt->{panel_prepend} ||= "<table$opt->{panel_table_extra}>";
 		$opt->{panel_append} ||= '</table>';
 		push @put, tabbed_display(\@titles,\@tabcont,$opt);
 	}
@@ -3452,15 +3738,20 @@
 	my $rowcount		= 0;
 	my $span			= $rowdiv * $cells_per_span;
 	my $oddspan			= $span - 1;
+	my $colspan = $opt->{colspan};
+#::logDebug("colspan=" . ::uneval($colspan));
 
 	my @out;
 
-	for(@$columns) {
+	for my $c (@$columns) {
+		my $colname = $c;
+		$colname =~ s/^COLUMN_//;
+#::logDebug("doing column $c name=$colname");
 		# If doesn't exist, was brought in before.
-		my $ref = delete $outhash{$_}
+		my $ref = delete $outhash{$c}
 			or next;
 		if($ref->{ROW}) {
-#::logDebug("outputting ROW $_=$ref->{ROW}");
+#::logDebug("outputting ROW $c=$ref->{ROW}");
 			my $tpl = $ref->{TEMPLATE} || $opt->{combo_template};
 			push @out, tag_attr_list($tpl, $ref);
 			$rowcount = 0;
@@ -3468,6 +3759,11 @@
 		}
 		my $w = '';
 		$w .= "<tr$opt->{data_row_extra}>\n" unless $rowcount++ % $rowdiv;
+		if(my $s = $colspan->{$colname}) {
+#::logDebug("found colspan=$s (ref=$ref->{COLSPAN}) for $colname");
+			my $extra =  ($s - 1) / $cells_per_span;
+			$rowcount += $extra;
+		}
 		$w .= tag_attr_list($ref->{TEMPLATE}, $ref);
 		$w .= "</tr>" unless $rowcount % $rowdiv;
 		push @out, $w;



2.5       +8 -5      interchange/lib/Vend/Table/GDBM.pm


rev 2.5, prev_rev 2.4
Index: GDBM.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Table/GDBM.pm,v
retrieving revision 2.4
retrieving revision 2.5
diff -u -r2.4 -r2.5
--- GDBM.pm	10 Sep 2002 17:29:09 -0000	2.4
+++ GDBM.pm	14 Jan 2003 02:25:53 -0000	2.5
@@ -1,6 +1,6 @@
 # Vend::Table::GDBM - Access an Interchange table stored in a GDBM file
 #
-# $Id: GDBM.pm,v 2.4 2002/09/10 17:29:09 mheins Exp $
+# $Id: GDBM.pm,v 2.5 2003/01/14 02:25:53 mheins Exp $
 #
 # Copyright (C) 1996-2002 Red Hat, Inc. <interchange@redhat.com>
 #
@@ -29,7 +29,7 @@
 use Vend::Table::Common;
 
 @ISA = qw(Vend::Table::Common);
-$VERSION = substr(q$Revision: 2.4 $, 10);
+$VERSION = substr(q$Revision: 2.5 $, 10);
 
 sub new {
 	my ($class, $obj) = @_;
@@ -105,15 +105,18 @@
 	my $dbm;
 	my $failed = 0;
 
-	while( $failed < 10 ) {
+	my $retry = $Vend::Cfg->{Limit}{dbm_open_retries} || 10;
+
+	while( $failed < $retry ) {
 		$dbm = tie(%$tie, 'GDBM_File', $filename, $flags, 0777)
 			and undef($failed), last;
 		$failed++;
 		select(undef,undef,undef,$failed * .100);
 	}
 
-	die ::errmsg("Could not tie to '%s': %s", $filename, $!)
-		if $failed;
+	die ::errmsg("%s could not tie to '%s': %s", 'GDBM', $filename, $!)
+		unless $dbm;
+
 	my $columns = [split(/\t/, $tie->{'c'})];
 	my $column_index = Vend::Table::Common::create_columns($columns, $config);
 



2.66      +4 -4      interchange/scripts/interchange.PL


rev 2.66, prev_rev 2.65
Index: interchange.PL
===================================================================
RCS file: /var/cvs/interchange/scripts/interchange.PL,v
retrieving revision 2.65
retrieving revision 2.66
diff -u -r2.65 -r2.66
--- interchange.PL	14 Dec 2002 17:59:30 -0000	2.65
+++ interchange.PL	14 Jan 2003 02:25:54 -0000	2.66
@@ -1,9 +1,9 @@
 #!/usr/bin/perl
 ##!~_~perlpath~_~
 #
-# Interchange version 4.9.6
+# Interchange version 4.9.7
 #
-# $Id: interchange.PL,v 2.65 2002/12/14 17:59:30 jon Exp $
+# $Id: interchange.PL,v 2.66 2003/01/14 02:25:54 mheins Exp $
 #
 # Copyright (C) 1996-2002 Red Hat, Inc. and others.
 # http://www.icdevgroup.org/
@@ -126,7 +126,7 @@
 require Exporter;
 
 BEGIN {
-	$VERSION = '4.9.6';
+	$VERSION = '4.9.7';
 
 	unless ($] >= 5.006) {
 		die "Interchange $VERSION requires Perl 5.6.0 or later,\nbut you're trying to run it under Perl $]. Exiting.\n";
@@ -355,7 +355,7 @@
 
 =head1 VERSION
 
-4.9.6
+4.9.7
 
 =head1 DESCRIPTION