Index: branches/5.2.x/units/orders/orders_config.php
===================================================================
--- branches/5.2.x/units/orders/orders_config.php	(revision 14681)
+++ branches/5.2.x/units/orders/orders_config.php	(revision 14682)
@@ -1,564 +1,564 @@
 <?php
 /**
 * @version	$Id$
 * @package	In-Commerce
 * @copyright	Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
 * @license	Commercial License
 * This software is protected by copyright law and international treaties.
 * Unauthorized reproduction or unlicensed usage of the code of this program,
 * or any portion of it may result in severe civil and criminal penalties,
 * and will be prosecuted to the maximum extent possible under the law
 * See http://www.in-portal.org/commercial-license for copyright notices and details.
 */
 
 defined('FULL_PATH') or die('restricted access!');
 
 	$config =	Array (
 					'Prefix'			=>	'ord',
 					'ItemClass'			=>	Array ('class' => 'OrdersItem', 'file' => 'orders_item.php', 'build_event' => 'OnItemBuild'),
 					'ListClass'			=>	Array ('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
 					'EventHandlerClass'	=>	Array ('class' => 'OrdersEventHandler', 'file' => 'orders_event_handler.php', 'build_event' => 'OnBuild'),
 					'TagProcessorClass' =>	Array ('class' => 'OrdersTagProcessor', 'file' => 'orders_tag_processor.php', 'build_event' => 'OnBuild'),
 					'ValidatorClass' => 'OrderValidator',
 
 					'AutoLoad'			=>	true,
 
 					'RegisterClasses' => Array (
 						Array ('pseudo' => 'OrderCalculator', 'class' => 'OrderCalculator', 'file' => 'order_calculator.php', 'build_event' => ''),
 						Array ('pseudo' => 'OrderManager', 'class' => 'OrderManager', 'file' => 'order_manager.php', 'build_event' => ''),
 						Array ('pseudo' => 'OrderValidator', 'class' => 'OrderValidator', 'file' => 'order_validator.php', 'build_event' => '', 'require_classes' => 'kValidator'),
 					),
 
 					'Hooks'				=>	Array (
 						Array (
 							'Mode' => hAFTER,
 							'Conditional' => false,
 							'HookToPrefix' => 'ord',
 							'HookToSpecial' => '',
 							'HookToEvent' => Array ( 'OnPreSave' ),
 							'DoPrefix' => '',
 							'DoSpecial' => '',
 							'DoEvent' => 'OnRecalculateItems',
 						),
 
 						Array(
 							'Mode' => hBEFORE,
 							'Conditional' => false,
 							'HookToPrefix' => '',
 							'HookToSpecial' => '',
 							'HookToEvent' => Array( 'OnUpdateCart', 'OnUpdateCartJSON', 'OnCheckout' ),
 							'DoPrefix' => '',
 							'DoSpecial' => '',
 							'DoEvent' => 'OnApplyCoupon',
 						),
 
  						Array (
 							'Mode' => hBEFORE,
  							'Conditional' => false,
 							'HookToPrefix' => '',
  							'HookToSpecial' => '',
 							'HookToEvent' => Array( 'OnUpdateCart', 'OnUpdateCartJSON', 'OnCheckout' ),
  							'DoPrefix' => '',
  							'DoSpecial' => '',
 							'DoEvent' => 'OnApplyGiftCertificate',
 						),
 
 						Array (
 							'Mode' => hAFTER,
 							'Conditional' => false,
 							'HookToPrefix' => 'u',
 							'HookToSpecial' => '',
 							'HookToEvent' => Array ( 'OnCreate' ),
 							'DoPrefix' => '',
 							'DoSpecial' => '',
 							'DoEvent' => 'OnUserCreate',
 						),
 
 						Array (
 							'Mode' => hBEFORE,
 							'Conditional' => false,
 							'HookToPrefix' => 'u',
 							'HookToSpecial' => '',
 							'HookToEvent' => Array ('OnCheckExpiredMembership'),
 							'DoPrefix' => '',
 							'DoSpecial' => '',
 							'DoEvent' => 'OnCheckRecurringOrders',
 						),
 
 						Array (
 							'Mode' => hAFTER,
 							'Conditional' => false,
 							'HookToPrefix' => 'u',
 							'HookToSpecial' => '',
 							'HookToEvent' => Array ( 'OnAfterLogin' ),
 							'DoPrefix' => '',
 							'DoSpecial' => '',
 							'DoEvent' => 'OnUserLogin',
 						),
 
 						Array (
 							'Mode' => hBEFORE, // before because OnInpLogin is called after real in-portal login and uses data from hooks
 							'Conditional' => false,
 							'HookToPrefix' => 'u',
 							'HookToSpecial' => '',
 							'HookToEvent' => Array ( 'OnInpLogin' ),
 							'DoPrefix' => '',
 							'DoSpecial' => '',
 							'DoEvent' => 'OnUserLogin',
 						),
 					),
 					'AggregateTags' => Array (
 							Array (
 								'AggregateTo' => 'orditems',
 								'AggregatedTagName' => 'LinkRemoveFromCart',
 								'LocalTagName' => 'Orditems_LinkRemoveFromCart',
 							),
 							Array (
 								'AggregateTo' => 'orditems',
 								'AggregatedTagName' => 'ProductLink',
 								'LocalTagName' => 'Orderitems_ProductLink',
 							),
 							Array (
 								'AggregateTo' => 'orditems',
 								'AggregatedTagName' => 'ProductExists',
 								'LocalTagName' => 'Orderitems_ProductExists',
 							),
 					),
 
 					'QueryString' => Array (
 						1 => 'id',
 						2 => 'Page',
 						3 => 'PerPage',
 						4 => 'event',
 						5 => 'mode',
 					),
 					'IDField'			=>	'OrderId',
 					'StatusField'		=>	Array ('Status'),	// field, that is affected by Approve/Decline events
 
 					'ViewMenuPhrase'	=>	'la_title_Orders',
 					'CatalogTabIcon' => 'icon16_item.png',
 
 					'TitleField' => 'OrderNumber',
 					'TitlePresets'		=>	Array (
 						'default'	=>	Array (
 							'new_status_labels'		=> Array ('ord' => '!la_title_Adding_Order!'),
 							'edit_status_labels'	=> Array ('ord' => '!la_title_Editing_Order!'),
 							'new_titlefield'		=> Array ('ord' => '!la_title_New_Order!'),
 						),
 
 						'orders_incomplete'	=>	Array (	'prefixes'				=>	Array ('ord.incomplete_List'),
 														'format'				=>	"!la_title_IncompleteOrders!",
 										),
 
 						'orders_pending'	=>	Array (	'prefixes'				=>	Array ('ord.pending_List'),
 														'format'				=>	"!la_title_PendingOrders!",
 										),
 
 						'orders_backorders'	=>	Array (	'prefixes'				=>	Array ('ord.backorders_List'),
 														'format'				=>	"!la_title_BackOrders!",
 										),
 
 						'orders_toship'		=>	Array (	'prefixes'				=>	Array ('ord.toship_List'),
 														'format'				=>	"!la_title_OrdersToShip!",
 										),
 
 						'orders_processed'	=>	Array (	'prefixes'				=>	Array ('ord.processed_List'),
 														'format'				=>	"!la_title_OrdersProcessed!",
 										),
 
 						'orders_returns'	=>	Array (	'prefixes'				=>	Array ('ord.returns_List'),
 														'format'				=>	"!la_title_OrdersReturns!",
 										),
 
 						'orders_denied'		=>	Array (	'prefixes'				=>	Array ('ord.denied_List'),
 														'format'				=>	"!la_title_OrdersDenied!",
 										),
 						'orders_archived'	=>	Array (	'prefixes'				=>	Array ('ord.archived_List'),
 														'format'				=>	"!la_title_OrdersArchived!",
 										),
 
 						'orders_search'		=>	Array (	'prefixes'				=>	Array ('ord.search_List'),
 														'format'				=>	"!la_title_OrdersSearch!",
 										),
 
 						'orders_edit_general'	=>	Array ('prefixes' => Array ('ord'), 'format' => "#ord_status# '#ord_titlefield#' - !la_title_General!"),
 						'orders_edit_billing'	=>	Array ('prefixes' => Array ('ord'), 'format' => "#ord_status# '#ord_titlefield#' - !la_title_OrderBilling!"),
 						'orders_edit_shipping'	=>	Array ('prefixes' => Array ('ord'), 'format' => "#ord_status# '#ord_titlefield#' - !la_title_OrderShipping!"),
 						'orders_edit_items'		=>	Array ('prefixes' => Array ('ord', 'orditems_List'), 'format' => "#ord_status# '#ord_titlefield#' - !la_title_OrderItems!"),
 						'orders_edit_preview'	=>	Array ('prefixes' => Array ('ord'), 'format' => "#ord_status# '#ord_titlefield#' - !la_title_OrderPreview!"),
 
 						'orders_gw_result' => Array ('prefixes' => Array ('ord'), 'format' => "!la_title_OrderGWResult!"),
 
 						'orders_export' => Array ('format' => '!la_title_OrdersExport!'),
 
 						'orders_product_edit' => Array ('format' => '!la_title_Editing_Order_Item!'),
 					),
 
 					'EditTabPresets' => Array (
 						'Default' => Array (
 							'general' => Array ('title' => 'la_tab_General', 't' => 'in-commerce/orders/orders_edit', 'priority' => 1),
 							'items' => Array ('title' => 'la_tab_Items', 't' => 'in-commerce/orders/orders_edit_items', 'priority' => 2),
 							'shipping' => Array ('title' => 'la_tab_Shipping', 't' => 'in-commerce/orders/orders_edit_shipping', 'priority' => 3),
 							'billing' => Array ('title' => 'la_tab_Billing', 't' => 'in-commerce/orders/orders_edit_billing', 'priority' => 4),
 							'preview' => Array ('title' => 'la_tab_Preview', 't' => 'in-commerce/orders/orders_edit_preview', 'priority' => 5),
 						),
 					),
 
 					'PermSection'		=>	Array ('main' => 'in-commerce:orders'),
 
 
 					'Sections'			=>	Array (
 						'in-commerce:orders'	=>	Array (
 								'parent'		=>	'in-commerce',
 								'icon'			=>	'in-commerce:orders',
 								'label'			=>	'la_tab_Orders',
 								'url'			=>	Array ('t' => 'in-commerce/orders/orders_pending_list', 'pass' => 'm'),
 								'permissions'	=>	Array ('view', 'add', 'edit', 'delete', 'advanced:approve', 'advanced:deny', 'advanced:archive', 'advanced:place', 'advanced:process', 'advanced:ship', 'advanced:reset_to_pending'),
 								'priority'		=>	1,
 								'type'			=>	stTREE,
 						),
 					),
 
 					'SectionAdjustments' => Array (
 						'in-portal:visits' => Array (
 							'url' => Array ('t' => 'in-commerce/visits/visits_list_incommerce', 'pass' => 'm'),
 						),
 					),
 
 					'StatisticsInfo'	=>	Array (
 													'pending'	=>	Array (
 																			'icon'		=>	'core:icon16_item.png',
 																			'label'		=>	'la_title_Orders',
 																			'js_url' 	=>	"#url#",
 																			'url'		=>	Array ('t' => 'in-commerce/orders/orders_pending_list', 'pass' => 'm'),
 																			'status'	=>	ORDER_STATUS_PENDING,
 
 																	),
 											),
 
 					'TableName' => TABLE_PREFIX . 'Orders',
 
 					'CalculatedFields' => Array (
 						'' => Array (
 							'CustomerName'			=>	'IF( ISNULL(u.Login), IF (%1$s.PortalUserId = ' . USER_ROOT . ', \'root\', IF (%1$s.PortalUserId = ' . USER_GUEST . ', \'Guest\', \'n/a\')), CONCAT(u.FirstName,\' \',u.LastName) )',
 							'Username'				=>	'IF( ISNULL(u.Login),\'root\',u.Login)',
 							'OrderNumber'			=>	'CONCAT(LPAD(Number,6,"0"),\'-\',LPAD(SubNumber,3,"0") )',
 							'SubtotalWithoutDiscount'	=>	'(SubTotal + DiscountTotal)',
 							'SubtotalWithDiscount'	=>	'(SubTotal)',
 							'AmountWithoutVAT'		=>	'(SubTotal+IF(ShippingTaxable=1, ShippingCost, 0)+IF(ProcessingTaxable=1, ProcessingFee, 0))',
 							'TotalAmount'			=>	'SubTotal+ShippingCost+VAT+ProcessingFee+InsuranceFee-GiftCertificateDiscount',
 							'CouponCode'			=>	'pc.Code',
 							'CouponName'			=>	'pc.Name',
 							'AffiliateUser'			=>	'IF( LENGTH(au.Login),au.Login,\'!la_None!\')',
 							'AffiliatePortalUserId'	=>	'af.PortalUserId',
 							'GiftCertificateCode'	=>	'gc.Code',
 							'GiftCertificateRecipient' => 'gc.Recipient',
 						),
 
 						'myorders' => Array (
 							'OrderNumber'			=>	'CONCAT(LPAD(Number,6,"0"),\'-\',LPAD(SubNumber,3,"0") )',
 							'SubtotalWithoutDiscount'	=>	'(SubTotal + DiscountTotal)',
 							'SubtotalWithDiscount'	=>	'(SubTotal)',
 							'AmountWithoutVAT'		=>	'(SubTotal+IF(ShippingTaxable=1, ShippingCost, 0)+IF(ProcessingTaxable=1, ProcessingFee, 0))',
 							'TotalAmount'			=>	'SubTotal+ShippingCost+VAT+ProcessingFee+InsuranceFee-GiftCertificateDiscount',
 							/*'ItemsCount'			=>	'COUNT(%1$s.OrderId)',*/
 						),
 					),
 					// %1$s - table name of object
 					// %2$s - calculated fields
 					'ListSQLs' => Array (
 						'' => '	SELECT %1$s.* %2$s
 								FROM %1$s
 								LEFT JOIN '.TABLE_PREFIX.'PortalUser u ON %1$s.PortalUserId = u.PortalUserId
 								LEFT JOIN '.TABLE_PREFIX.'ProductsCoupons pc ON %1$s.CouponId = pc.CouponId
 								LEFT JOIN '.TABLE_PREFIX.'GiftCertificates gc ON %1$s.GiftCertificateId = gc.GiftCertificateId
 								LEFT JOIN '.TABLE_PREFIX.'Affiliates af ON %1$s.AffiliateId = af.AffiliateId
 								LEFT JOIN '.TABLE_PREFIX.'PortalUser au ON af.PortalUserId = au.PortalUserId',
 
 						'myorders' => '	SELECT %1$s.* %2$s
 										FROM %1$s
 										LEFT JOIN '.TABLE_PREFIX.'PortalUser u ON %1$s.PortalUserId = u.PortalUserId',
 //										LEFT JOIN '.TABLE_PREFIX.'OrderItems ON %1$s.OrderId = '.TABLE_PREFIX.'OrderItems.OrderId',
 					),
 
 					'ItemSQLs' => Array (
 						'' => '	SELECT %1$s.* %2$s FROM %1$s
 								LEFT JOIN '.TABLE_PREFIX.'PortalUser u ON %1$s.PortalUserId = u.PortalUserId
 								LEFT JOIN '.TABLE_PREFIX.'ProductsCoupons pc ON %1$s.CouponId = pc.CouponId
 								LEFT JOIN '.TABLE_PREFIX.'GiftCertificates gc ON %1$s.GiftCertificateId = gc.GiftCertificateId
 								LEFT JOIN '.TABLE_PREFIX.'Affiliates af ON %1$s.AffiliateId = af.AffiliateId
 								LEFT JOIN '.TABLE_PREFIX.'PortalUser au ON af.PortalUserId = au.PortalUserId',
 					),
 
 					'SubItems'	=> Array ('orditems'),
 					'ListSortings'	=> 	Array (
 																'' => Array (
 																	'Sorting' => Array ('OrderDate' => 'desc'),
 																)
 															),
 					'Fields' => Array (
 			            'OrderId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0, 'filter_type' => 'equals'),
 			            'Number' => Array ('type' => 'int', 'required' =>1, 'formatter' => 'kFormatter', 'unique' =>Array ('SubNumber'), 'format' => '%06d', 'max_value_inc'>999999, 'not_null' => 1, 'default' => 0),
 			            'SubNumber' => Array ('type' => 'int', 'required' =>1, 'formatter' => 'kFormatter', 'unique' =>Array ('Number'), 'format' => '%03d', 'max_value_inc'>999, 'not_null' => 1, 'default' => 0),
 			            'Status' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' =>Array (0=> 'la_Incomplete',1=> 'la_Pending',2=> 'la_BackOrders',3=> 'la_ToShip',4=> 'la_Processed',5=> 'la_Denied',6=> 'la_Archived'), 'use_phrases' =>1, 'not_null' => 1, 'default' => 0, 'filter_type' => 'equals'),
 						'OnHold' => Array (
 							'type' => 'int',
 							'formatter' => 'kOptionsFormatter',
 							'options' => Array (0 => 'la_No', 1 => 'la_Yes'), 'use_phrases' => 1,
 							'not_null' => 1, 'default' => 0,
 						),
 			            'OrderDate' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'required' => 1, 'default' => '#NOW#'),
 			            'PortalUserId' =>Array ('type' => 'int', 'formatter' => 'kLEFTFormatter', 'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'), 'options' =>Array (USER_ROOT => 'root', USER_GUEST => 'Guest'), 'left_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'PortalUser WHERE `%s` = \'%s\'', 'left_key_field' => 'PortalUserId', 'left_title_field' => 'Login', 'required' =>1, 'not_null' =>1, 'default' =>-1),
 			            'OrderIP' => Array ('type' => 'string', 'not_null' => 1, 'default' => '', 'filter_type' => 'like'),
 			            'UserComment' => Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => NULL),
 			            'AdminComment' => Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => NULL),
 			            'BillingTo' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'BillingCompany' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'BillingPhone' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'BillingFax' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'BillingEmail' => Array (
 			            	'type' => 'string',
 			            	'formatter' => 'kFormatter',
 			            	'regexp' => '/^(' . REGEX_EMAIL_USER . '@' . REGEX_EMAIL_DOMAIN . ')$/i',
 			            	'not_null' => 1, 'default' => '',
 						),
 			            'BillingAddress1' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'BillingAddress2' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'BillingCity' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'BillingState' => Array (
 			            	'type' => 'string',
 			            	'formatter' => 'kOptionsFormatter',
 			            	'options' => Array (),
 							'option_key_field' => 'DestAbbr',
 							'option_title_field' => 'Translation',
 							'not_null' => 1, 'default' => '',
 						),
 			            'BillingZip' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 						'BillingCountry' => Array(
 							'type' => 'string',
 							'formatter' => 'kOptionsFormatter',
 							'options_sql' => '	SELECT IF(l%2$s_Name = "", l%3$s_Name, l%2$s_Name) AS Name, IsoCode
 												FROM '.TABLE_PREFIX.'CountryStates
 												WHERE Type = ' . DESTINATION_TYPE_COUNTRY . '
 												ORDER BY Name',
 							'option_key_field' => 'IsoCode', 'option_title_field' => 'Name',
 							'not_null' => 1, 'default' => 'USA'
 						),
 			            'VAT' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'not_null' =>1, 'default' => '0', 'format' => '%01.2f'),
 			            'VATPercent' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'not_null' =>1, 'default' => '0', 'format' => '%01.3f'),
 			            'PaymentType' => Array (
 			            	'type' => 'int',
 			            	'formatter' => 'kOptionsFormatter',
 			            	'options_sql' => 'SELECT %s
 			            						FROM ' . TABLE_PREFIX . 'PaymentTypes
 	        		    						WHERE Status = 1
 	            								ORDER BY Priority DESC, Name ASC',
 							'option_key_field' => 'PaymentTypeId', 'option_title_field' => 'Description',
 							'not_null' => 1, 'default' => 0
 						),
 
 			            'PaymentAccount' => Array ('type' => 'string', 'not_null' => 1, 'cardtype_field' => 'PaymentCardType', 'default' => '', 'filter_type' => 'like'),
 			            'PaymentNameOnCard' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'PaymentCCExpDate' => Array ('type' => 'string', 'formatter' => 'kCCDateFormatter', 'month_field' => 'PaymentCCExpMonth', 'year_field' => 'PaymentCCExpYear', 'not_null' => 1, 'default' => ''),
 			            'PaymentCardType' => Array ('type' => 'string', 'not_null' => 1, 'formatter' => 'kOptionsFormatter', 'options' => Array ('' => '', '1' => 'Visa', '2' => 'Mastercard', '3' => 'Amex', '4' => 'Discover', '5' => 'Diners Club', '6' => 'JBC'), 'default' => ''),
 			            'PaymentExpires' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
 			            'ShippingTo' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'ShippingCompany' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'ShippingPhone' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'ShippingFax' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'ShippingEmail' => Array (
 			            	'type' => 'string', 'not_null' => 1, 'default' => '',
 			            	'formatter' => 'kOptionsFormatter',
 			            	'options' => Array (),
 							'option_key_field' => 'DestAbbr',
 							'option_title_field' => 'Translation',
 						),
 			            'ShippingAddress1' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'ShippingAddress2' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'ShippingCity' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'ShippingState' => Array (
 			            	'type' => 'string', 'formatter' => 'kOptionsFormatter',
 			            							'options' => Array (),
 								            		'option_key_field' => 'DestAbbr', 'option_title_field' => 'Translation',
 								            		'not_null' => 1, 'default' => ''),
 			            'ShippingZip' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 						'ShippingCountry' => Array(
 							'type' => 'string', 'formatter' => 'kOptionsFormatter',
 							'options_sql' => '	SELECT IF(l%2$s_Name = "", l%3$s_Name, l%2$s_Name) AS Name, IsoCode
 												FROM '.TABLE_PREFIX.'CountryStates
 												WHERE Type = ' . DESTINATION_TYPE_COUNTRY . '
 												ORDER BY Name',
 							'option_key_field' => 'IsoCode', 'option_title_field' => 'Name',
 							'not_null' => 1, 'default' => 'USA'
 						),
 			            'ShippingType' => Array (
 			            	'type' => 'int',
 			            	'formatter' => 'kOptionsFormatter',
 			            	'options_sql' => 'SELECT %s
 			            							FROM ' . TABLE_PREFIX . 'ShippingType
 			            						WHERE Status = 1',
 							'option_key_field' => 'ShippingID',
 							'option_title_field' => 'Name',
 							'not_null' => 1, 'default' => 0,
 						),
 			            'ShippingCost' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
 			            'ShippingCustomerAccount' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'ShippingTracking' => Array ('type' => 'string', 'not_null' => 1, 'default' => ''),
 			            'ShippingDate' => Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null),
 			            'SubTotal' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
 			            'ReturnTotal' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
 			            'CostTotal' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
 			            'OriginalAmount'	=>	Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
 			            'ShippingOption' => Array (
 			            	'type' => 'int',
 			            	'formatter' => 'kOptionsFormatter',
 			            	'options' => Array (
 								0 => 'la_ship_all_together', 1 => 'la_ship_backorder_separately', 2 => 'la_ship_backorders_upon_avail',
 							),
 							'use_phrases' => 1, 'not_null' => 1, 'default' => 0,
 						),
 			            'ShippingGroupOption' => Array (
 			            	'type' => 'int',
 			            	'formatter' => 'kOptionsFormatter', 'use_phrases' => 1,
 			            	'options' => Array (0 => 'la_opt_AutoGroupShipments', 1 => 'la_opt_ManualGroupShipments'),
 							'not_null' => 1, 'default' => 0,
 						),
 			            'GiftCertificateId' => Array ('type' => 'int', 'default' => null),
 			            'GiftCertificateDiscount' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00',),
 			            'ShippingInfo' => Array ('type' => 'string', 'default' => NULL),
 			            'CouponId' => Array ('type' => 'int', 'default' => null),
 			            'CouponDiscount' => Array ('type' => 'float', 'not_null' => 1, 'default' => '0.00', 'formatter' => 'kFormatter', 'format' => '%01.2f'),
 			            'DiscountTotal' => Array ('type' => 'float', 'not_null' => 1, 'default' => '0.00', 'formatter' => 'kFormatter', 'format' => '%01.2f'),
 			            'TransactionStatus' => Array (
 			            	'type' => 'int',
 			            	'formatter' => 'kOptionsFormatter',
 			            	'options' => Array (0 => 'la_opt_Invalid', 1 => 'la_opt_Verified', 2 => 'la_opt_Penging'),
 							'use_phrases' =>1, 'not_null' => 1, 'default' => 2,
 						),
 						'GWResult1' => Array ('type' => 'string', 'formatter' => 'kSerializedFormatter', 'default' => NULL),
 			            'GWResult2' => Array ('type' => 'string', 'formatter' => 'kSerializedFormatter', 'default' => NULL),
 			            'AffiliateId' => Array ('type' => 'int', 'formatter' => 'kLEFTFormatter', 'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'),  'options' => Array (0 => 'lu_None'), 'left_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'Affiliates af LEFT JOIN '.TABLE_PREFIX.'PortalUser pu ON pu.PortalUserId = af.PortalUserId WHERE `%s` = \'%s\'', 'left_key_field' => 'AffiliateId', 'left_title_field' => 'Login', 'not_null' =>1, 'default' =>0),
 			            'VisitId' => Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
             			'AffiliateCommission' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%.02f', 'not_null' => 1, 'default' => '0.0000'),
             			'ProcessingFee' => Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%.02f', 'not_null' => '0', 'default' => '0.0000'),
             			'InsuranceFee' => Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'not_null' => 1, 'default' => '0.00'),
             			'ShippingTaxable'		=>	Array ('type' => 'int', 'not_null' => 0, 'default' => 0),
             			'ProcessingTaxable'		=>	Array ('type' => 'int', 'not_null' => 0, 'default' => 0),
             			'IsRecurringBilling'	=> Array (
 							'type' => 'int',
 							'formatter' => 'kOptionsFormatter',
 							'options' => Array (0 => 'la_No', 1 => 'la_Yes',), 'use_phrases' => 1,
 							'default' => 0, 'not_null' => 1,
 						),
             			'ChargeOnNextApprove'	=> Array (
 							'type' => 'int',
 							'formatter' => 'kOptionsFormatter',
 							'options' => Array (0 => 'la_No', 1 => 'la_Yes',), 'use_phrases' => 1,
 							'default' => 0, 'not_null' => 1,
 						),
             			'NextCharge'			=>	Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => null),
             			'GroupId'			=>	Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 						'GoogleOrderNumber' => Array ('type' => 'string', 'default' => NULL), // MySQL BIGINT UNSIGNED = 8 Bytes, PHP int = 4 Bytes -> threat as string
 			        ),
 
 					'VirtualFields'	=> 	Array (
 						'CustomerName'			=>	Array ('type' => 'string', 'default' => '', 'filter_type' => 'like'),
 						'TotalAmount'			=>	Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'default' => '0.00'),
 						'AmountWithoutVAT'		=>	Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'default' => '0.00'),
 						'SubtotalWithDiscount'	=>	Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'default' => '0.00'),
 						'SubtotalWithoutDiscount'	=>	Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%01.2f', 'default' => '0.00'),
 						'OrderNumber'			=>	Array ('type' => 'string', 'default' => '', 'filter_type' => 'like'),
 						'CouponCode'			=>	Array ('type' => 'string', 'default' => ''),
 						'CouponName'			=>	Array ('type' => 'string', 'default' => ''),
 						'GiftCertificateCode'	=>	Array ('type' => 'string', 'default' => ''),
 						'GiftCertificateRecipient'	=>	Array ('type' => 'string', 'default' => ''),
 
 						// for ResetToUser
 						'UserTo'		=>	Array ('type' => 'string', 'default' => ''),
 						'UserCompany'	=>	Array ('type' => 'string', 'default' => ''),
 						'UserPhone'		=>	Array ('type' => 'string', 'default' => ''),
 						'UserFax'		=>	Array ('type' => 'string', 'default' => ''),
 						'UserEmail'		=>	Array ('type' => 'string', 'default' => ''),
 						'UserAddress1'	=>	Array ('type' => 'string', 'default' => ''),
 						'UserAddress2'	=>	Array ('type' => 'string', 'default' => ''),
 						'UserCity'		=>	Array ('type' => 'string', 'default' => ''),
 						'UserState'		=>	Array ('type' => 'string', 'default' => ''),
 						'UserZip'		=>	Array ('type' => 'string', 'default' => ''),
 						'UserCountry'	=>	Array ('type' => 'string', 'default' => ''),
 
 						// for Search
 						'Username'		=>	Array ('type' => 'string', 'filter_type' => 'like', 'default' => ''),
 						'HasBackOrders' => Array ('type' => 'int', 'default' => 0),
 						'PaymentCVV2'	=>	Array ('type' => 'string', 'default' => ''),
 						'AffiliateUser' =>	Array ('type' => 'string', 'filter_type' => 'like', 'default' => ''),
 						'AffiliatePortalUserId' => Array ('type' => 'int', 'default' => 0),
 
 						// export related fields: begin
 						'ExportFormat'			=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CSV', /*2 => 'XML'*/), 'default' => 1),
 						'ExportFilename'		=>	Array ('type' => 'string', 'default' => ''),
-						'FieldsSeparatedBy'		=>	Array ('type' => 'string', 'default' => ', '),
+						'FieldsSeparatedBy'		=>	Array ('type' => 'string', 'default' => ','),
 						'FieldsEnclosedBy'		=>	Array ('type' => 'string', 'default' => '"'),
 						'LineEndings'			=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'Windows', 2 => 'UNIX'), 'default' => 1),
 						'LineEndingsInside'		=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CRLF', 2 => 'LF'), 'default' => 2),
 						'IncludeFieldTitles'	=>	Array (
 					    	'type' => 'int',
 					    	'formatter' => 'kOptionsFormatter',
 					    	'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
 					    	'use_phrases' => 1, 'default' => 1,
 						),
 						'ExportColumns'			=>	Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''),
 						'AvailableColumns'		=>	Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''),
 						'ExportPresets' => Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''),
 						'ExportSavePreset' => Array (
 					    	'type' => 'int',
 					    	'formatter' => 'kOptionsFormatter',
 					    	'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
 					    	'use_phrases' => 1, 'default' => 0,
 						),
 						'ExportPresetName' =>	Array ('type' => 'string', 'default' => ''),
 						// export related fields: end
 					),
 					'Grids'	=> Array (
 						'Default' => Array (
 							'Icons' => Array (
 								'default' => 'icon16_item.png',
 								1 => 'icon16_pending.png',
 								5 => 'icon16_disabled.png',
 								'module' => 'core',
 							),
 
 							'Fields' => Array (
 								'OrderId'		=>	Array ('title' => 'column:la_fld_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 70, ),
 								'OrderNumber'	=> Array ( 'data_block' => 'grid_ordernumber_td', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
 								'OrderDate' => Array ( 'title' => 'la_col_OrderDate', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
 								'CustomerName'	=> Array ( 'title' => 'la_col_CustomerName', 'data_block' => 'grid_userlink_td', 'user_field' => 'PortalUserId', 'filter_block' => 'grid_like_filter', 'width' => 140, ),
 								'PaymentType'	=> Array ( 'data_block' => 'grid_billinglink_td', 'filter_block' => 'grid_options_filter', 'width' => 140, ),
 								'TotalAmount'	=> Array ( 'data_block' => 'grid_previewlink_td', 'filter_block' => 'grid_range_filter', 'width' => 140, ),
 								'AffiliateUser'	=> Array ( 'data_block' => 'grid_userlink_td', 'user_field' => 'AffiliatePortalUserId', 'filter_block' => 'grid_like_filter', 'width' => 140, ),
 								'OnHold' => Array ('filter_block' => 'grid_options_filter', 'width' => 100, ),
 							),
 						),
 
 						'Search' => Array (
 							'Icons' => Array (
 								'default' => 'icon16_item.png',
 								1 => 'icon16_pending.png',
 								5 => 'icon16_disabled.png',
 								'module' => 'core',
 							),
 							'Fields' => Array (
 								'OrderId'		=>	Array ('title' => 'column:la_fld_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 70, ),
 								'OrderNumber'	=>	Array ('data_block' => 'grid_ordernumber_td', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
 								'Status'		=>	Array ('filter_block' => 'grid_options_filter', 'filter_block' => 'grid_options_filter', 'width' => 100, ),
 								'OrderDate'	=>	Array ('title' => 'la_col_OrderDate', 'filter_block' => 'grid_date_range_filter', 'width' => 140, ),
 								'CustomerName'		=>	Array ('title' => 'la_col_CustomerName', 'data_block' => 'grid_userlink_td', 'user_field' => 'PortalUserId', 'filter_block' => 'grid_like_filter'),
 								'PaymentType'	=> 	Array ('data_block' => 'grid_billinglink_td', 'filter_block' => 'grid_options_filter'),
 								'TotalAmount'	=>	Array ('data_block' => 'grid_previewlink_td', 'filter_block' => 'grid_float_range_filter'),
 								'AffiliateUser'	=>	Array ('data_block' => 'grid_userlink_td', 'user_field' => 'AffiliatePortalUserId', 'filter_block' => 'grid_user_like_filter'),
 								'OrderIP'		=>	Array ('filter_block' => 'grid_like_filter'),
 								'Username'		=>	Array ('filter_block' => 'grid_user_like_filter'),
 								'PaymentAccount'	=>	Array ('title' => 'column:la_fld_CreditCardNumber', 'filter_block' => 'grid_like_filter'),
 							),
 						),
 					),
 	);
\ No newline at end of file
Index: branches/5.2.x/units/products/products_config.php
===================================================================
--- branches/5.2.x/units/products/products_config.php	(revision 14681)
+++ branches/5.2.x/units/products/products_config.php	(revision 14682)
@@ -1,697 +1,697 @@
 <?php
 /**
 * @version	$Id$
 * @package	In-Commerce
 * @copyright	Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
 * @license	Commercial License
 * This software is protected by copyright law and international treaties.
 * Unauthorized reproduction or unlicensed usage of the code of this program,
 * or any portion of it may result in severe civil and criminal penalties,
 * and will be prosecuted to the maximum extent possible under the law
 * See http://www.in-portal.org/commercial-license for copyright notices and details.
 */
 
 	defined('FULL_PATH') or die('restricted access!');
 
 	$config =	Array (
 					'Prefix'			=>	'p',
 					'ItemClass'			=>	Array ('class' => 'ProductsItem', 'file' => 'products_item.php', 'require_classes' => Array ('kCatDBItem'), 'build_event' => 'OnItemBuild'),
 					'ListClass'			=>	Array ('class' => 'kCatDBList', 'file' => '', 'build_event' => 'OnListBuild'),
 					'EventHandlerClass'	=>	Array ('class' => 'ProductsEventHandler', 'file' => 'products_event_handler.php', 'require_classes' => Array ('kCatDBEventHandler'), 'build_event' => 'OnBuild'),
 					'TagProcessorClass' =>	Array ('class' => 'ProductsTagProcessor', 'file' => 'products_tag_processor.php', 'require_classes' => Array ('kCatDBTagProcessor'), 'build_event' => 'OnBuild'),
 					'AutoLoad'			=>	true,
 					'QueryString'		=>	Array (
 												1	=>	'id',
 												2	=>	'Page',
 												3	=>	'PerPage',
 												4	=>	'event',
 												5 	=>	'mode',
 											),
 
 					'CatalogItem'			=>	true,
 					'AdminTemplatePath'		=>	'products',
 					'AdminTemplatePrefix'	=>	'products_',
 
 					'SearchConfigPostfix' => 'products',
 
 					'ConfigPriority' => 0,
 
 					'RewritePriority' => 104,
 					'RewriteListener' => 'ModRewriteHelper:CategoryItemRewriteListener',
 
 					'Hooks' => Array (
 						// for subscription products: access group is saved before changing pricings
 						Array (
 							'Mode' => hAFTER,
 							'Conditional' => true,
 							'HookToPrefix' => 'pr',
 							'HookToSpecial' => '*',
 							'HookToEvent' => Array ('OnNew', 'OnAfterItemLoad'),
 							'DoPrefix' => '',
 							'DoSpecial' => '*',
 							'DoEvent' => 'OnPreSave',
 						),
 
 						Array (
 							'Mode' => hAFTER,
 							'Conditional' => false,
 							'HookToPrefix' => 'lst',
 							'HookToSpecial' => '',
 							'HookToEvent' => Array ( 'OnBeforeCopyToLive' ),
 							'DoPrefix' => '',
 							'DoSpecial' => '',
 							'DoEvent' => 'OnSaveVirtualProduct',
 						),
 
 						Array (
 							'Mode' => hAFTER,
 							'Conditional' => false,
 							'HookToPrefix' => 'lst',
 							'HookToSpecial' => '*',
 							'HookToEvent' => Array ('OnAfterItemDelete'),
 							'DoPrefix' => '',
 							'DoSpecial' => '',
 							'DoEvent' => 'OnDeleteListingType',
 						),
 
 						Array (
 							'Mode' => hAFTER,
 							'Conditional' => false,
 							'HookToPrefix' => 'lst',
 							'HookToSpecial' => '*',
 							'HookToEvent' => Array ('OnAfterConfigRead'),
 							'DoPrefix' => '',
 							'DoSpecial' => '',
 							'DoEvent' => 'OnModifyPaidListingConfig',
 						),
 
 						Array (
 							'Mode' => hBEFORE,
 							'Conditional' => false,
 							'HookToPrefix' => 'file',
 							'HookToSpecial' => '',
 							'HookToEvent' => Array ( 'OnNew', 'OnEdit' ),
 							'DoPrefix' => '',
 							'DoSpecial' => '',
 							'DoEvent' => 'OnPreSave',
 						),
 
 						Array (
 							'Mode' => hBEFORE,
 							'Conditional' => false,
 							'HookToPrefix' => '',
 							'HookToSpecial' => '*',
 							'HookToEvent' => Array ('OnAfterConfigRead'),
 							'DoPrefix' => 'cdata',
 							'DoSpecial' => '*',
 							'DoEvent' => 'OnDefineCustomFields',
 						),
 
 						Array (
 							'Mode' => hBEFORE,
 							'Conditional' => false,
 							'HookToPrefix' => 'rev',
 							'HookToSpecial' => '*',
 							'HookToEvent' => Array ('OnAfterConfigRead'),
 							'DoPrefix' => '',
 							'DoSpecial' => '*',
 							'DoEvent' => 'OnCloneSubItem',
 						),
 
 						Array (
 							'Mode' => hBEFORE,
 							'Conditional' => false,
 							'HookToPrefix' => 'fav',
 							'HookToSpecial' => '*',
 							'HookToEvent' => Array ('OnAfterConfigRead'),
 							'DoPrefix' => '',
 							'DoSpecial' => '*',
 							'DoEvent' => 'OnCloneSubItem',
 						),
 
 						Array (
 							'Mode' => hBEFORE,
 							'Conditional' => false,
 							'HookToPrefix' => 'ci',
 							'HookToSpecial' => '*',
 							'HookToEvent' => Array ('OnAfterConfigRead'),
 							'DoPrefix' => '',
 							'DoSpecial' => '*',
 							'DoEvent' => 'OnCloneSubItem',
 						),
 					),
 
 					'IDField'			=>	'ProductId',
 					'StatusField'		=>	Array ('Status'),	// field, that is affected by Approve/Decline events
 
 					'TitleField'		=>	'Name',		// field, used in bluebar when editing existing item
 					'ItemType'			=>	11,	// this is used when relation to product is added from in-portal and via-versa
 
 					'ViewMenuPhrase'	=>	'la_text_Products',
 					'CatalogTabIcon' => 'in-commerce:icon16_products.png',
 
 					'ItemPropertyMappings'	=>	Array (
 													'NewDays'		=>	'Product_NewDays',		// number of days item to be NEW
 													'MinPopVotes'	=>	'Product_MinPopVotes',	// minimum number of votes for an item to be POP
 													'MinPopRating'	=>	'Product_MinPopRating',	// minimum rating for an item to be POP
 													'MaxHotNumber'	=>	'Product_MaxHotNumber',	// maximum number of HOT (top seller) items
 
 													'HotLimit'		=>	'Product_HotLimit',		// variable name in inp_Cache table
 													'ClickField'	=>	'Hits',					// item click count is stored here (in item table)
 												),
 
 					'TitlePhrase'		=> 'la_text_Product',
 
 					'TitlePresets'		=>	Array (
 												'default'	=>	Array (	'new_status_labels'		=> Array ('p' => '!la_title_Adding_Product!'),
 																		'edit_status_labels'	=> Array ('p' => '!la_title_Editing_Product!'),
 																		'new_titlefield'		=> Array ('p' => '!la_title_NewProduct!'),
 																),
 												'product_list' =>Array (	'prefixes'				=> Array ('c_List', 'p_List'),
 																		'tag_params'			=> Array ('c' => Array ('per_page' =>-1)),
 																		'format'				=>	"!la_title_Categories! (#c_recordcount#) - !la_title_Products! (#p_recordcount#)",
 																),
 												'products_edit' =>Array (	'prefixes'				=> Array ('p'),
 																		'new_titlefield'		=> Array ('p' => '!la_title_NewProduct!'),
 																		'format'				=> "#p_status# '#p_titlefield#' - !la_title_General!",
 																),
 												'inventory'	=>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# - '#p_titlefield#' - !la_title_Product_Inventory!"),
 												'pricing'	=>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_Pricing!"),
 												'access_pricing'	=>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_AccessPricing!"),
 												'access'	=>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_Access!"),
 												'files'		=>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_Files!"),
 												'options' =>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_Options!"),
 												'categories' =>	Array ('prefixes' => Array ('p', 'p-ci_List'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Categories!"),
 												'relations'	=>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Relations!"),
 												'content'	=>	Array ('prefixes' => Array ('p', 'p.content_List'), 'tag_params' => Array ('p.content' => Array ('types' => 'content', 'live_table' =>true)), 'format' => "#p_status# '#p_titlefield#' - !la_title_Product_PackageContent!"),
 												'images'	=>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Images!"),
 												'reviews'	=>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Reviews!"),
 												'products_custom'	=>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_Custom!"),
 												'images_edit'		=>	Array (	'prefixes'				=>	Array ('p', 'img'),
 																				'new_status_labels'		=>	Array ('img' => '!la_title_Adding_Image!'),
 																				'edit_status_labels'	=>	Array ('img' => '!la_title_Editing_Image!'),
 																				'new_titlefield'		=>	Array ('img' => '!la_title_New_Image!'),
 																				'format'				=>	"#p_status# '#p_titlefield#' - #img_status# '#img_titlefield#'",
 																		),
 												'pricing_edit'	=>	Array (		'prefixes'				=>	Array ('p', 'pr'),
 																				'new_status_labels'		=>	Array ('pr' =>"!la_title_Adding_PriceBracket! '!la_title_New_PriceBracket!'"),
 																				'edit_status_labels'	=>	Array ('pr' => '!la_title_Editing_PriceBracket!'),
 																				'format'				=>	"#p_status# '#p_titlefield#' - #pr_status#",
 																		),
 												'options_edit'	=>	Array (	'prefixes'				=>	Array ('p', 'po'),
 																				'new_status_labels'		=>	Array ('po' =>"!la_title_Adding_Option!"),
 																				'edit_status_labels'	=>	Array ('po' => '!la_title_Editing_Option!'),
 																				'new_titlefield'		=>	Array ('po' => '!la_title_New_Option!'),
 																				'format'				=>	"#p_status# '#p_titlefield#' - #po_status# '#po_titlefield#'",
 																		),
 
 												'options_combinations'	=>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_ManagingOptionCombinations!"),
 												'shipping_options'	=>	Array ('prefixes' => Array ('p'), 'format' => "#p_status# '#p_titlefield#' - !la_title_ManagingShippingOptions!"),
 
 												'file_edit'		=>	Array (		'prefixes'				=>	Array ('p', 'file'),
 																				'new_status_labels'		=>	Array ('file' =>"!la_title_Adding_File!"),
 																				'edit_status_labels'	=>	Array ('file' => '!la_title_Editing_File!'),
 																				'new_titlefield'		=>	Array ('file' => '!la_title_New_File!'),
 																				'format'				=>	"#p_status# '#p_titlefield#' - #file_status# '#file_titlefield#'",
 																		),
 												'relations_edit'	=>	Array (	'prefixes'				=>	Array ('p', 'rel'),
 																				'new_status_labels'		=>	Array ('rel' =>"!la_title_Adding_Relationship! '!la_title_New_Relationship!'"),
 																				'edit_status_labels'	=>	Array ('rel' => '!la_title_Editing_Relationship!'),
 																				'format'				=>	"#p_status# '#p_titlefield#' - #rel_status#",
 																		),
 												'reviews_edit'	=>	Array (		'prefixes'				=>	Array ('p', 'rev'),
 																				'new_status_labels'		=>	Array ('rev' =>"!la_title_Adding_Review! '!la_title_New_Review!'"),
 																				'edit_status_labels'	=>	Array ('rev' => '!la_title_Editing_Review!'),
 																				'format'				=>	"#p_status# '#p_titlefield#' - #rev_status#",
 																		),
 
 												'products_export' => Array ('format' => '!la_title_ProductsExport!'),
 
 												'products_import' => Array ('format' => '!la_title_ImportProducts!'),
 
 												'tree_in-commerce'	=>	Array ('format' => '!la_Text_Version! '.$this->Application->findModule('Name', 'In-Commerce', 'Version')),
 											),
 
 					'EditTabPresets' => Array (
 						'Default' => Array (
 							'general' => Array ('title' => 'la_tab_General', 't' => 'in-commerce/products/products_edit', 'priority' => 1),
 							'inventory' => Array ('title' => 'la_tab_Inventory', 't' => 'in-commerce/products/products_inventory', 'priority' => 2),
 							'access_and_pricing' => Array ('title' => 'la_tab_AccessAndPricing', 't' => 'in-commerce/products/products_access', 'priority' => 3),
 							'pricing' => Array ('title' => 'la_tab_Pricing', 't' => 'in-commerce/products/products_pricing', 'priority' => 4),
 
 //							'pricing2' => Array ('title' => 'la_tab_Pricing', 't' => 'in-commerce/products/products_access_pricing', 'priority' => 5),
 
 							'files_and_pricing' => Array ('title' => 'la_tab_FilesAndPricing', 't' => 'in-commerce/products/products_files', 'priority' => 6),
 							'options' => Array ('title' => 'la_tab_Options', 't' => 'in-commerce/products/products_options', 'priority' => 7),
 							'categories' => Array ('title' => 'la_tab_Categories', 't' => 'in-commerce/products/products_categories', 'priority' => 8),
 							'relations' => Array ('title' => 'la_tab_Relations', 't' => 'in-commerce/products/products_relations', 'priority' => 9),
 							'package_content' => Array ('title' => 'la_tab_PackageContent', 't' => 'in-commerce/products/products_packagecontent', 'priority' => 10),
 							'images' => Array ('title' => 'la_tab_Images', 't' => 'in-commerce/products/products_images', 'priority' => 11),
 							'reviews' => Array ('title' => 'la_tab_Reviews', 't' => 'in-commerce/products/products_reviews', 'priority' => 12),
 							'custom' => Array ('title' => 'la_tab_Custom', 't' => 'in-commerce/products/products_custom', 'priority' => 13),
 						),
 					),
 
 					'PermItemPrefix'	=>	'PRODUCT',
 
 					'PermTabText'		=>	'In-Commerce',
 					'PermSection'		=>	Array ('main' => 'CATEGORY:in-commerce:products_list', 'search' => 'in-commerce:search', 'custom' => 'in-commerce:configuration_custom'),
 
 					'Sections'			=>	Array (
 						'in-commerce'	=>	Array (
 							'parent'		=>	'in-portal:root',
 							'icon'			=>	'ecommerce',
 							'label'			=>	'la_title_In-Commerce',
 							'url'			=>	Array ('t' => 'index', 'pass_section' => true, 'pass' => 'm'),
 							'permissions'	=>	Array ('view'),
 							'priority'		=>	2.1,
 							'container'		=>	true,
 							'type'			=>	stTREE,
 						),
 
 						'in-commerce:products'	=>	Array (
 							'parent'		=>	'in-portal:site',
 							'icon'			=>	'products',
 							'label'			=>	'la_tab_Products',
 							'url'			=>	Array ('t' => 'catalog/advanced_view', 'anchor' => 'tab-p.showall', 'pass' => 'm'),
 							'onclick'		=>	'setCatalogTab(\'p.showall\')',
 							'permissions'	=>	Array ('view'),
 							'priority'		=>	3.2,
 							'type'			=>	stTREE,
 						),
 
 						// product settings
 						'in-commerce:setting_folder' => Array (
 							'parent'		=>	'in-portal:system',
 							'icon'			=>	'conf_ecommerce',
 							'label'			=>	'la_title_In-Commerce',
 							'use_parent_header' => 1,
 							'url'			=>	Array ('t' => 'index', 'pass_section' => true, 'pass' => 'm'),
 							'permissions'	=>	Array ('view'),
 							'priority'		=>	3.1,
 							'container'		=>	true,
 							'type'			=>	stTREE,
 						),
 
 						'in-commerce:general'	=>	Array (
 							'parent'		=>	'in-commerce:setting_folder',
 							'icon'			=>	'conf_ecommerce_general',
 							'label'			=>	'la_tab_GeneralSettings',
 							'url'			=>	Array ('t' => 'config/config_general', 'pass_section' => true, 'pass' => 'm'),
 							'permissions'	=>	Array ('view', 'edit'),
 							'priority'		=>	1,
 							'type'			=>	stTREE,
 						),
 
 						'in-commerce:output'	=>	Array (
 							'parent'		=>	'in-commerce:setting_folder',
 							'icon'			=>	'core:conf_output',
 							'label'			=>	'la_tab_ConfigOutput',
 							'url'			=>	Array ('t' => 'config/config_universal', 'pass_section' => true, 'pass' => 'm'),
 							'permissions'	=>	Array ('view', 'edit'),
 							'priority'		=>	2,
 							'type'			=>	stTREE,
 						),
 
 						'in-commerce:search'	=>	Array (
 							'parent'		=>	'in-commerce:setting_folder',
 							'icon'			=>	'core:conf_search',
 							'label'			=>	'la_tab_ConfigSearch',
 							'url'			=>	Array ('t' => 'config/config_search', 'module_key' => 'products', 'pass_section' => true, 'pass' => 'm'),
 							'permissions'	=>	Array ('view', 'edit'),
 							'priority'		=>	7,
 							'type'			=>	stTREE,
 						),
 
 						'in-commerce:configuration_custom'	=>	Array (
 							'parent'		=>	'in-commerce:setting_folder',
 							'icon'			=>	'core:conf_customfields',
 							'label'			=>	'la_tab_ConfigCustom',
 							'url'			=>	Array ('t' => 'custom_fields/custom_fields_list', 'cf_type' => 11, 'pass_section' => true, 'pass' => 'm,cf'),
 							'permissions'	=>	Array ('view', 'add', 'edit', 'delete'),
 							'priority'		=>	8,
 							'type'			=>	stTREE,
 						),
 
 						'in-commerce:contacts'	=>	Array (
 							'parent'		=>	'in-commerce:setting_folder',
 							'icon'			=>	'conf_contact_info',
 							'label'			=>	'la_tab_ConfigContacts',
 							'url'			=>	Array ('t' => 'config/config_universal', 'pass_section' => true, 'pass' => 'm'),
 							'permissions'	=>	Array ('view', 'edit'),
 							'priority'		=>	10,
 							'type'			=>	stTREE,
 						),
 					),
 
 					'FilterMenu'		=>	Array (
 						'Groups' => Array (
 							Array ('mode' => 'AND', 'filters' => Array ('show_new'), 'type' => kDBList::HAVING_FILTER),
 							Array ('mode' => 'AND', 'filters' => Array ('show_hot'), 'type' => kDBList::HAVING_FILTER),
 							Array ('mode' => 'AND', 'filters' => Array ('show_pop'), 'type' => kDBList::HAVING_FILTER),
 							Array ('mode' => 'AND', 'filters' => Array ('show_pick'), 'type' => kDBList::WHERE_FILTER),
 						),
 						'Filters' => Array (
 							'show_new'	=>	Array ('label' => 'la_Text_New', 'on_sql' => '', 'off_sql' => '`IsNew` != 1'  ),
 							'show_hot'	=>	Array ('label' => 'la_Text_TopSellers', 'on_sql' => '', 'off_sql' => '`IsHot` != 1'  ),
 							'show_pop'	=>	Array ('label' => 'la_Text_Pop', 'on_sql' => '', 'off_sql' => '`IsPop` != 1'  ),
 							'show_pick'	=>	Array ('label' => 'la_prompt_EditorsPick', 'on_sql' => '', 'off_sql' => '%1$s.`EditorsPick` != 1'  ),
 						)
 					),
 
 					'TableName' => TABLE_PREFIX . 'Products',
 
 					'CalculatedFields' => Array (
 						''	=>	Array (
 							'AltName'		=>	'img.AltName',
 							'SameImages'	=>	'img.SameImages',
 							'LocalThumb'	=>	'img.LocalThumb',
 							'ThumbPath'		=>	'img.ThumbPath',
 							'ThumbUrl'		=>	'img.ThumbUrl',
 							'LocalImage'	=>	'img.LocalImage',
 							'LocalPath'		=>	'img.LocalPath',
 							'FullUrl'		=>	'img.Url',
 
 							'Price'			=>	'COALESCE(pricing.Price, 0)',
 							'Cost'			=>	'COALESCE(pricing.Cost, 0)',
 							'PrimaryCat'	=> TABLE_PREFIX.'%3$sCategoryItems.PrimaryCat',
 							'CategoryId'	=> TABLE_PREFIX.'%3$sCategoryItems.CategoryId',
 							'ParentPath'	=> TABLE_PREFIX.'Category.ParentPath',
 							'Manufacturer'	=> TABLE_PREFIX.'Manufacturers.Name',
 							'Filename'		=> TABLE_PREFIX.'%3$sCategoryItems.Filename',
 							'CategoryFilename' => TABLE_PREFIX.'Category.NamedParentPath',
 							'FileSize'		=>	'files.Size',
 							'FilePath'		=>	'files.FilePath',
 							'FileVersion'	=>	'files.Version',
 						),
 
 						'showall' => Array (
 							'Price'			=>	'COALESCE(pricing.Price, 0)',
 							'Manufacturer'	=> TABLE_PREFIX.'Manufacturers.Name',
 							'PrimaryCat'	=> TABLE_PREFIX.'%3$sCategoryItems.PrimaryCat',
 							'CategoryId'	=> TABLE_PREFIX.'%3$sCategoryItems.CategoryId',
 							'FileSize'		=>	'files.Size',
 							'FilePath'		=>	'files.FilePath',
 							'FileVersion'	=>	'files.Version',
 							'Filename' 		=>	TABLE_PREFIX.'%3$sCategoryItems.Filename',
 							'CategoryFilename' => TABLE_PREFIX.'Category.NamedParentPath',
 						),
 					),
 
 					'CacheModRewrite' => true,
 
 					'ListSQLs'			=>	Array (
 													''	=>	'	SELECT %1$s.* %2$s
 																FROM %1$s
 																LEFT JOIN '.TABLE_PREFIX.'PortalGroup ON '.TABLE_PREFIX.'PortalGroup.GroupId = %1$s.AccessGroupId
 																LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId
 																LEFT JOIN '.TABLE_PREFIX.'Category ON '.TABLE_PREFIX.'Category.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
 																LEFT JOIN '.TABLE_PREFIX.'%3$sImages img ON img.ResourceId = %1$s.ResourceId AND img.DefaultImg = 1
 																LEFT JOIN '.TABLE_PREFIX.'%3$sProductFiles files ON files.ProductId = %1$s.ProductId AND files.IsPrimary = 1
 																LEFT JOIN '.TABLE_PREFIX.'%3$sProductsPricing pricing ON pricing.ProductId = %1$s.ProductId AND pricing.IsPrimary = 1
 																LEFT JOIN '.TABLE_PREFIX.'Manufacturers ON '.TABLE_PREFIX.'Manufacturers.ManufacturerId = %1$s.ManufacturerId
 																LEFT JOIN '.TABLE_PREFIX.'PermCache perm ON perm.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
 																LEFT JOIN '.TABLE_PREFIX.'%3$sProductsCustomData cust ON %1$s.ResourceId = cust.ResourceId',
 
 													'showall' => 'SELECT %1$s.* %2$s FROM %1$s
 																LEFT JOIN '.TABLE_PREFIX.'%3$sProductsPricing pricing ON pricing.ProductId = %1$s.ProductId AND pricing.IsPrimary = 1
 																LEFT JOIN '.TABLE_PREFIX.'%3$sProductFiles files ON files.ProductId = %1$s.ProductId AND files.IsPrimary = 1
 																LEFT JOIN '.TABLE_PREFIX.'Manufacturers ON '.TABLE_PREFIX.'Manufacturers.ManufacturerId = %1$s.ManufacturerId
 																LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId
 																LEFT JOIN '.TABLE_PREFIX.'Category ON '.TABLE_PREFIX.'Category.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
 																LEFT JOIN '.TABLE_PREFIX.'PermCache perm ON perm.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
 																LEFT JOIN '.TABLE_PREFIX.'%3$sProductsCustomData cust ON %1$s.ResourceId = cust.ResourceId',
 																		), // key - special, value - list select sql
 					'ListSortings'	=> 	Array (
 																'' => Array (
 																	'ForcedSorting' => Array ('EditorsPick' => 'desc', 'Priority' => 'desc'),
 																	'Sorting' => Array ('Name' => 'asc'),
 																)
 															),
 					'ItemSQLs'			=>	Array (	'' => '	SELECT %1$s.* %2$s
 															FROM %1$s
 															LEFT JOIN '.TABLE_PREFIX.'PortalGroup pg ON pg.GroupId = %1$s.AccessGroupId
 															LEFT JOIN '.TABLE_PREFIX.'%3$sCategoryItems ON '.TABLE_PREFIX.'%3$sCategoryItems.ItemResourceId = %1$s.ResourceId
 															LEFT JOIN '.TABLE_PREFIX.'Category ON '.TABLE_PREFIX.'Category.CategoryId = '.TABLE_PREFIX.'%3$sCategoryItems.CategoryId
 															LEFT JOIN '.TABLE_PREFIX.'%3$sImages img ON img.ResourceId = %1$s.ResourceId AND img.DefaultImg = 1
 															LEFT JOIN '.TABLE_PREFIX.'%3$sProductFiles files ON files.ProductId = %1$s.ProductId AND files.IsPrimary = 1
 															LEFT JOIN '.TABLE_PREFIX.'%3$sProductsPricing pricing ON pricing.ProductId = %1$s.ProductId AND pricing.IsPrimary = 1
 															LEFT JOIN '.TABLE_PREFIX.'Manufacturers ON '.TABLE_PREFIX.'Manufacturers.ManufacturerId = %1$s.ManufacturerId
 															LEFT JOIN '.TABLE_PREFIX.'%3$sProductsCustomData cust ON %1$s.ResourceId = cust.ResourceId',
 																		),
 					'SubItems'		=> Array ('pr', 'rev', 'img', 'po', 'poc', 'p-ci', 'rel', 'file', 'p-cdata', 'p-fav'),
 					'Fields'		=>	Array (
 					    'ProductId'				=>	Array ('type' => 'int', 'not_null' => 1, 'default' => 0,),
 					    'Name'					=>	Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'required' => 1, 'max_len' =>255, 'default' => ''),
     					'AutomaticFilename'		=>	Array (
 					    	'type' => 'int',
 					    	'formatter' => 'kOptionsFormatter',
 					    	'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
 					    	'use_phrases' => 1, 'not_null' => 1, 'default' => 1,
 						),
 					    'SKU'					=>	Array ('type' => 'string', 'required' => 1, 'max_len' =>255, 'error_msgs' => Array ('required' => 'Please fill in'), 'default' => NULL),
 					    'Description'			=>	Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'using_fck' => 1, 'default' => NULL),
 					    'DescriptionExcerpt'	=>	Array ('type' => 'string', 'formatter' => 'kMultiLanguage', 'using_fck' => 1, 'default' => NULL),
 					    'Weight'				=>	Array ('type' => 'float', 'min_value_exc' => 0, 'formatter' => 'kUnitFormatter', 'format' => '%0.2f', 'default' => NULL),
 					    'MSRP'					=>	Array ('type' => 'float', 'min_value_inc' => 0, 'formatter' => 'kFormatter', 'format' => '%0.2f', 'default' => NULL),
 					    'ManufacturerId'		=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'Manufacturers ORDER BY Name', 'option_key_field' => 'ManufacturerId', 'option_title_field' => 'Name', 'not_null' => 1, 'default' => 0),
 					    'Status'				=>	Array (
 					    	'type' => 'int',
 					    	'formatter' => 'kOptionsFormatter',
 					    	'options' => Array (1 => 'la_Active', 2 => 'la_Pending', 0 => 'la_Disabled'), 'use_phrases' => 1,
 					    	'default' => 2, 'not_null' => 1,
 						),
 					    'BackOrder'				=>	Array ('type' => 'int', 'not_null' => 1, 'options' => Array ( 2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never' ), 'use_phrases' => 1, 'default' => 2 ),
 					    'BackOrderDate'			=>	Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'error_msgs' => Array ('bad_date_format' => 'Please use the following date format: %s'), 'default' => NULL),
 					    'NewItem'				=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array ( 2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never' ), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2 ),
 					    'HotItem'				=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array ( 2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never' ), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2 ),
 					    'PopItem'				=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array ( 2 => 'la_Auto', 1 => 'la_Always', 0 => 'la_Never' ), 'use_phrases' => 1, 'not_null' => 1, 'default' => 2 ),
 					    'EditorsPick'			=>	Array (
 					    	'type' => 'int',
 					    	'formatter' => 'kOptionsFormatter',
 					    	'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1,
 					    	'not_null' => 1, 'default' => 0,
 						),
 					    'Featured'				=>	Array (
 					    	'type' => 'int',
 					    	'formatter' => 'kOptionsFormatter',
 					    	'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1,
 					    	'not_null' => 1, 'default' => 0,
 						),
 					    'OnSale'				=>	Array (
 					    	'type' => 'int',
 					    	'formatter' => 'kOptionsFormatter',
 					    	'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1,
 					    	'not_null' => 1, 'default' => 0,
 						),
 					    'Priority'				=>	Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 					    'CachedRating'			=>	Array ('type' => 'string', 'not_null' => 1, 'formatter' => 'kFormatter', 'default' => 0),
 					    'CachedVotesQty'		=>	Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 					    'Hits'					=>	Array ('type' => 'double', 'formatter' => 'kFormatter', 'format' => '%d', 'not_null' => 1, 'default' => 0),
 					    'CreatedOn'				=>	Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
 					    'Expire'				=>	Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' =>null),
 					    'Type'					=>	Array (
 					    	'type' => 'int',
 					    	'formatter' => 'kOptionsFormatter', 'use_phrases' => 1,
 							'options' => Array (
 								PRODUCT_TYPE_TANGIBLE => 'la_product_tangible',
 								PRODUCT_TYPE_SUBSCRIPTION => 'la_product_subscription',
 								PRODUCT_TYPE_SERVICE => 'la_product_service',
 								PRODUCT_TYPE_DOWNLOADABLE => 'la_product_downloadable',
 								/* PRODUCT_TYPE_PACKAGE => 'la_product_package', */
 							),
 							'not_null' => 1, 'default' => 1,
 						),
 					    'Modified'				=>	Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => '#NOW#'),
 					    'ModifiedById'			=>	Array ('type' => 'int', 'default' => NULL),
 					    'CreatedById' => Array (
 			            	'type' => 'int',
 			            	'formatter' => 'kLEFTFormatter',
 			            	'options' => Array (USER_ROOT => 'root', USER_GUEST => 'Guest'),
 			            	'left_sql' => 'SELECT %s FROM ' . TABLE_PREFIX . 'PortalUser
 			            					WHERE `%s` = \'%s\'',
 			            	'left_key_field' => 'PortalUserId',
 			            	'left_title_field' => 'Login',
 							'error_msgs' => Array ('invalid_option' => '!la_error_UserNotFound!'),
 			            	'sample_value' => 'Guest', 'required' => 1, 'default' => NULL,
 						),
 					    'ResourceId'			=>	Array ('type' => 'int', 'default' => null),
 					    'CachedReviewsQty'		=>	Array ('type' => 'int', 'formatter' => 'kFormatter', 'format' => '%d', 'not_null' => 1, 'default' => 0),
 					    'InventoryStatus' => Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_Disabled', 1 => 'la_by_product', 2 => 'la_by_options'), 'use_phrases' => 1, 'not_null' => 1, 'default' => 0),
 					    'QtyInStock'			=>	Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 					    'QtyInStockMin'			=>	Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 					    'QtyReserved'			=>	Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 					    'QtyBackOrdered'		=>	Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 					    'QtyOnOrder'			=>	Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 					    'InventoryComment'		=>	Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => null),
 					    'Qty'					=>	Array ('type' => 'int', 'formatter' => 'kFormatter', 'regexp' => '/^[\d]+$/', 'error_msgs' => Array ('invalid_format' => '!la_invalid_integer!')),
 					    'AccessGroupId'			=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'PortalGroup WHERE System!=1 AND Personal !=1 ORDER BY Name', 'option_key_field' => 'GroupId', 'option_title_field' => 'Name', 'default' => NULL),
 					    'AccessDuration'		=>	Array ('type' => 'int', 'default' => NULL),
 					    'AccessDurationType'	=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' =>Array (1 => 'la_opt_sec', 2 => 'la_opt_min', 3 => 'la_opt_hour', 4 => 'la_opt_day', 5 => 'la_opt_week', 6 => 'la_opt_month', 7 => 'la_opt_year' ), 'default' => NULL,),
 					    'AccessStart'			=>	Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL),
 					    'AccessEnd'				=>	Array ('type' => 'int', 'formatter' => 'kDateFormatter', 'default' => NULL,),
 					    'OptionsSelectionMode'	=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' =>Array (0 => 'la_opt_Selection', 1 => 'la_opt_List'), 'default' => 0),
 					    'HasRequiredOptions'	=>	Array ('type' => 'int', 'default' => 0, 'not_null' => 1),
 					    'Virtual'				=>	Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 						'ProcessingData'		=>	Array ('type' => 'string', 'default' => ''),
         				'PackageContent'		=>	Array ('type' => 'string', 'default' => NULL),
         				'IsRecurringBilling'	=>	Array (
 					    	'type' => 'int',
 					    	'formatter' => 'kOptionsFormatter',
 					    	'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
 					    	'use_phrases' => 1, 'not_null' => 1, 'default' => 0,
 						),
 						//'PayPalRecurring'		=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'not_null' => '1', 'default' => '0'),
         				'ShippingMode'			=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'use_phrases' => 1, 'options' =>Array (0 => 'la_shipping_AnyAndSelected', 1 => 'la_shipping_Limited'), 'not_null' => 1, 'default' =>0),
 
         				'ProcessingData'		=>	Array ('type' => 'string', 'default' => null),
 
 						'ShippingLimitation'	=>	Array ('type' => 'string', 'default' => NULL),
 						'AssignedCoupon'	=>
 								Array ('type' => 'int', 'not_null' => 1, 'default' => 0,
 											'formatter' => 'kLEFTFormatter',
 											'options' => Array (0 => 'None'),
 											'left_sql' => 'SELECT %s FROM '.TABLE_PREFIX.'ProductsCoupons WHERE `%s` = \'%s\'',
 											'left_key_field' => 'CouponId',
 											'left_title_field' => 'Name'),
 						'MinQtyFreePromoShipping'	=>	Array ('type' => 'int', 'not_null' => 1, 'default' => 0),
 						'MetaKeywords'			=>	Array ('type' => 'string', 'default' => null),
 	            		'MetaDescription'		=>	Array ('type' => 'string', 'formatter' => 'kFormatter', 'using_fck' => 1, 'default' => null),
 					),
 
 					'VirtualFields'	=> 	Array (
 						'Qty'					=>	Array ('type' => 'int', 'formatter' => 'kFormatter', 'regexp' => '/^[\d]+$/', 'default' => 0),
 						'Price'					=>	Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%.2f', 'default' => NULL),
 						'Cost'					=>	Array ('type' => 'float', 'formatter' => 'kFormatter', 'format' => '%.2f', 'default' => NULL),
 						'CategoryFilename'		=>	Array ('type' => 'string', 'default' => ''),
 						'PrimaryCat'			=>	Array ('type' => 'int', 'default' => 0),
 						'IsHot'					=>	Array ('type' => 'int', 'default' => 0),
 						'IsNew'					=>	Array ('type' => 'int', 'default' => 0),
 						'IsPop'					=>	Array ('type' => 'int', 'default' => 0),
 						'Manufacturer'			=>	Array ('type' => 'string', 'default' => ''),
 
 						// export related fields: begin
 						'CategoryId'			=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => 0),
 						'ExportFormat'			=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CSV', /*2 => 'XML'*/), 'default' => 1),
 						'ExportFilename'		=>	Array ('type' => 'string', 'default' => ''),
-						'FieldsSeparatedBy'		=>	Array ('type' => 'string', 'default' => ', '),
+						'FieldsSeparatedBy'		=>	Array ('type' => 'string', 'default' => ','),
 						'FieldsEnclosedBy'		=>	Array ('type' => 'string', 'default' => '"'),
 						'LineEndings'			=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'Windows', 2 => 'UNIX'), 'default' => 1),
 						'LineEndingsInside'		=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'CRLF', 2 => 'LF'), 'default' => 2),
 						'IncludeFieldTitles'	=>	Array (
 					    	'type' => 'int',
 					    	'formatter' => 'kOptionsFormatter',
 					    	'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
 					    	'use_phrases' => 1, 'default' => 1,
 						),
 						'ExportColumns'			=>	Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''),
 						'AvailableColumns'		=>	Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array (), 'default' => ''),
 						'CategoryFormat'		=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_MixedCategoryPath', 2 => 'la_SeparatedCategoryPath'), 'use_phrases' => 1, 'default' => 1),
 						'CategorySeparator'		=>	Array ('type' => 'string', 'default' => ':'),
 						'IsBaseCategory'		=>	Array (
 					    	'type' => 'int',
 					    	'formatter' => 'kOptionsFormatter',
 					    	'options' => Array (0 => 'la_No', 1 => 'la_Yes'),
 					    	'use_phrases' => 1, 'default' => 0,
 						),
 						// export related fields: end
 
 						// import related fields: begin
 						'FieldTitles'			=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Automatic', 2 => 'la_Manual'), 'use_phrases' => 1, 'default' => 1),
 						'ImportSource'			=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Upload', 2 => 'la_Local'), 'use_phrases' => 1, 'default' => 2),
 						'ImportFilename'		=>	Array ('type' => 'string', 'formatter' => 'kUploadFormatter', 'max_size' => MAX_UPLOAD_SIZE, 'upload_dir' => EXPORT_BASE_PATH . '/', 'default' => ''),
 						'ImportLocalFilename'	=>	Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'default' => ''),
 						'CheckDuplicatesMethod'	=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_IDField', 2 => 'la_OtherFields'), 'use_phrases' => 1, 'default' => 1),
 						'ReplaceDuplicates'		=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (0 => 'la_No', 1 => 'la_Yes'), 'use_phrases' => 1, 'default' => 0),
 						'DuplicateCheckFields'	=>	Array ('type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => Array ('Name' => 'NAME'), 'default' => '|Name|'),
 						'SkipFirstRow'			=>	Array ('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array (1 => 'la_Yes', 0 => 'la_No'), 'use_phrases' => 1, 'default' => 1),
 						// import related fields: end
 
 						'ThumbnailImage'		=>	Array ('type' => 'string', 'default' => ''),
 						'FullImage'				=>	Array ('type' => 'string', 'default' => ''),
 						'ImageAlt'				=>	Array ('type' => 'string', 'default' => ''),
 
 						'Filename' 				=>	Array ('type' => 'string', 'default' => ''),
 						'CachedNavbar'			=>	Array ('type' => 'string', 'default' => ''),
 						'ParentPath'			=>	Array ('type' => 'string', 'default' => ''),
 
 						'FileSize'				=>	Array ('type' => 'int', 'formatter' => 'kFilesizeFormatter', 'default' => 0),
 						'FilePath'				=>	Array ('type' => 'string', 'default' => ''),
 						'FileVersion'			=>	Array ('type' => 'string', 'default' => ''),
 
 						// for primary image
 						'AltName'		=>	Array ('type' => 'string', 'default' => ''),
 						'SameImages'	=>	Array ('type' => 'string', 'default' => ''),
 						'LocalThumb'	=>	Array ('type' => 'string', 'default' => ''),
 						'ThumbPath'		=>	Array ('type' => 'string', 'default' => ''),
 						'ThumbUrl'		=>	Array ('type' => 'string', 'default' => ''),
 						'LocalImage'	=>	Array ('type' => 'string', 'default' => ''),
 						'LocalPath'		=>	Array ('type' => 'string', 'default' => ''),
 						'FullUrl'		=>	Array ('type' => 'string', 'default' => ''),
 					),
 
 					'Grids'	=> Array (
 						'Default' => Array (
 							'Icons' => Array (
 								'default' => 'icon16_product.png',
 								0 => 'icon16_product_disabled.png',
 								1 => 'icon16_product.png',
 								2 => 'icon16_product_pending.png',
 								'NEW' => 'icon16_product_new.png',
 							),
 							'Fields' => Array (
 								'ProductId' => Array ( 'title' => 'column:la_fld_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
 								'SKU' => Array ( 'title' => 'la_col_ProductSKU', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
 								'Name' => Array ( 'title' => 'la_col_ProductName', 'data_block' => 'grid_catitem_td', 'filter_block' => 'grid_like_filter', 'width' => 150, ),
 								'Priority' => Array('filter_block' => 'grid_range_filter', 'width' => 65),
 								'Type'	=>	Array ('title' => 'column:la_fld_ProductType', 'filter_block' => 'grid_options_filter', 'width' => 80, ),
 								'Manufacturer'	=>	Array ('filter_block' => 'grid_like_filter', 'width' => 100, ),
 								'Price'	=>	Array ('filter_block' => 'grid_range_filter', 'width' => 70, ),
 								'Status' => Array ('filter_block' => 'grid_options_filter', 'width' => 70, ),
 								'QtyInStock'	=>	Array ('title' => 'column:la_fld_Qty', 'data_block' => 'qty_td', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
 								'QtyBackOrdered'	=>	Array ('title' => 'column:la_fld_QtyBackOrdered', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
 								'OnSale'	=>	Array ('title' => 'column:la_fld_OnSale', 'filter_block' => 'grid_options_filter', 'width' => 70, ),
 								/*'Weight' => Array ( 'title' => 'la_col_ProductWeight', 'filter_block' => 'grid_float_range_filter', 'width' => 150, ),
 								'CreatedOn' => Array ( 'title' => 'la_col_ProductCreatedOn', 'filter_block' => 'grid_date_range_filter', 'width' => 150, ),
 								'BackOrderDate' => Array ( 'title' => 'la_col_ProductBackOrderDate', 'filter_block' => 'grid_date_range_filter', 'width' => 150, ),*/
 							),
 						),
 
 						'Radio' => Array (
 							'Icons' => Array (
 								'default' => 'icon16_product.png',
 								0 => 'icon16_product_disabled.png',
 								1 => 'icon16_product.png',
 								2 => 'icon16_product_pending.png',
 								'NEW' => 'icon16_product_new.png',
 							),
 							'Selector' => 'radio',
 							'Fields' => Array (
 								'ProductId' => Array ( 'title' => 'column:la_fld_Id', 'data_block' => 'grid_radio_td', 'filter_block' => 'grid_range_filter', 'width' => 60, ),
 								'SKU' => Array ( 'title' => 'la_col_ProductSKU', 'filter_block' => 'grid_like_filter', 'width' => 100, ),
 								'Name' => Array ( 'title' => 'la_col_ProductName', 'data_block' => 'grid_catitem_td', 'filter_block' => 'grid_like_filter', 'width' => 150, ),
 								'Priority' => Array('filter_block' => 'grid_range_filter', 'width' => 65),
 								'Type'	=>	Array ('title' => 'column:la_fld_ProductType', 'filter_block' => 'grid_options_filter', 'width' => 80, ),
 								'Manufacturer'	=>	Array ('filter_block' => 'grid_like_filter', 'width' => 100, ),
 								'Price'	=>	Array ('filter_block' => 'grid_range_filter', 'width' => 70, ),
 								'Status' => Array ('filter_block' => 'grid_options_filter', 'width' => 70, ),
 								'QtyInStock'	=>	Array ('title' => 'column:la_fld_Qty', 'data_block' => 'qty_td', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
 								'QtyBackOrdered'	=>	Array ('title' => 'column:la_fld_QtyBackOrdered', 'filter_block' => 'grid_range_filter', 'width' => 80, ),
 
 							),
 						),
 					),
 
 					'ConfigMapping' => 	Array (
 												'PerPage'				=>	'Comm_Perpage_Products',
 												'ShortListPerPage'		=>	'Comm_Perpage_Products_Short',
 												'ForceEditorPick'		=>	'products_EditorPicksAboveRegular',
 												'DefaultSorting1Field'	=>	'product_OrderProductsBy',
 												'DefaultSorting2Field'	=>	'product_OrderProductsThenBy',
 												'DefaultSorting1Dir'	=>	'product_OrderProductsByDir',
 												'DefaultSorting2Dir'	=>	'product_OrderProductsThenByDir',
 
 												'RatingDelayValue'		=>	'product_RatingDelay_Value',
 												'RatingDelayInterval'	=>	'product_RatingDelay_Interval',
 										),
 	);
Index: branches/5.2.x/admin_templates/import.tpl
===================================================================
--- branches/5.2.x/admin_templates/import.tpl	(revision 14681)
+++ branches/5.2.x/admin_templates/import.tpl	(revision 14682)
@@ -1,223 +1,223 @@
 <inp2:adm_SetPopupSize width="780" height="670"/>
 
 <inp2:m_include t="incs/header"/>
 <inp2:p.import_PresetFormFields/>
 <inp2:m_RenderElement name="combined_header" prefix="adm" section="in-portal:main_import" title_preset="import"/>
 
 <!-- ToolBar -->
 <table class="toolbar" height="30" cellspacing="0" cellpadding="0" width="100%" border="0">
 <tbody>
 	<tr>
   	<td>
   		<script type="text/javascript">
 				a_toolbar = new ToolBar();
+
+				a_toolbar.AddButton( new ToolBarButton('prev', '<inp2:m_phrase label="la_ToolTip_Prev" escape="1"/>', function() {
+						location.href = '<inp2:m_Link t="tools/import2"/>';
+					}
+				) );
+
 				a_toolbar.AddButton( new ToolBarButton('import', '<inp2:m_phrase label="la_ToolTip_Import" escape="1"/>', function() {
 
 						document.getElementById('export_columns').value = select_to_string('<inp2:p.import_InputName field="ExportColumns"/>');
 						submit_event('p.import','OnExportBegin');
 
 						}
 					) );
-				a_toolbar.AddButton( new ToolBarButton('cancel', '<inp2:m_phrase label="la_ToolTip_Cancel" escape="1"/>', function() {
-							submit_event('p.import','OnGoBack');
-						}
-				 ) );
 
 				a_toolbar.Render();
 
 				function check_radio($id)
 				{
 					document.getElementById($id).checked = true;
 				}
 
 				// gets value of checked radio button
 				function get_checked($field_name) {
 					var $ret = false;
 					var $fields = document.getElementsByName($field_name);
 
 					for(var $i = 0; $i < $fields.length; $i++) {
 						if ($fields[$i].checked) {
 							$ret = $fields[$i].value;
 							break;
 						}
 					}
 					return $ret;
 				}
 
 				// enable/disable form fields based on other field values
 				function reflectFormFields()
 				{
 					var $auto_fields = get_checked('<inp2:p.import_InputName field="FieldTitles"/>') == 1 ? true : false;
 
 					if ($auto_fields) {
 						document.getElementById('_cb_<inp2:p.import_InputName field="SkipFirstRow"/>').checked = true;
 					}
 					document.getElementById('_cb_<inp2:p.import_InputName field="SkipFirstRow"/>').onchange();
 					document.getElementById('<inp2:p.import_InputName field="ExportColumns"/>').disabled = $auto_fields;
 					document.getElementById('<inp2:p.import_InputName field="AvailableColumns"/>').disabled = $auto_fields;
 
 					var $btn = null;
 					var $btns = Array('up', 'down', 'left', 'right');
 					var $i = 0;
 					while ($i < $btns.length) {
 						$btn = document.getElementById('btn_move_'+$btns[$i]);
 						$btn.disabled = $auto_fields;
 						$btn.className = $auto_fields ? 'button-disabled' : 'button';
 						$i++;
 					}
 				}
 
 				Application.setHook('p.import:OnBeforeOpenSelector',
 					function() {
 						document.getElementById('export_columns').value = select_to_string('<inp2:p.import_InputName field="ExportColumns"/>');
 					}
 				);
 
 				$(document).ready(
 					function() {
 						$('#step_number').text(3);
 					}
 				);
 			</script>
 		</td>
 	</tr>
 </tbody>
 </table>
 
 
 <inp2:p.import_SaveWarning name="grid_save_warning"/>
 <inp2:p.import_ErrorWarning name="form_error_warning"/>
 
-<div id="scroll_container">
-	<table class="edit-form">
-		<inp2:m_RenderElement name="subsection" title="la_section_General"/>
-			<inp2:m_RenderElement design="form_row" prefix="p.import" field="ImportSource" title="la_fld_ImportFilename">
-				<td class="control-cell">
-					<table border="0">
-						<tr>
-							<td>
-								<input type="radio" name="<inp2:p.import_InputName field="ImportSource"/>" id="<inp2:p.import_InputName field="ImportSource"/>_1"<inp2:m_if check="p.import_FieldEquals" field="ImportSource" value="1"> checked</inp2:m_if> value="1" />
-							</td>
-							<td>
-								<label for="<inp2:p.import_InputName field="ImportSource"/>_1">upload</label>
-							</td>
-							<td>
-								<input type="file" name="<inp2:p.import_InputName field="ImportFilename"/>" id="<inp2:p.import_InputName field="ImportFilename"/>" onclick="check_radio('<inp2:p.import_InputName field="ImportSource"/>_1');">
-							</td>
-						</tr>
-
-						<tr>
-							<td>
-								<input type="radio" name="<inp2:p.import_InputName field="ImportSource"/>" id="<inp2:p.import_InputName field="ImportSource"/>_2"<inp2:m_if check="p.import_FieldEquals" field="ImportSource" value="2"> checked</inp2:m_if> value="2" />
-							</td>
-							<td>
-								<label for="<inp2:p.import_InputName field="ImportSource"/>_2">select</label>
-							</td>
-							<td>
-								<select name="<inp2:p.import_InputName field="ImportLocalFilename"/>" onclick="check_radio('<inp2:p.import_InputName field="ImportSource"/>_2');">
-									<inp2:p.import_PredefinedOptions field="ImportLocalFilename" block="inp_option_item" selected="selected"/>
-								</select>
-							</td>
-						</tr>
-
-					</table>
-				</td>
-			</inp2:m_RenderElement>
-
-			<inp2:m_RenderElement name="inp_edit_box" prefix="p.import" field="FieldsSeparatedBy" title="la_fld_FieldsSeparatedBy" size="2" maxlength="1"/>
-			<inp2:m_RenderElement name="inp_edit_box" prefix="p.import" field="FieldsEnclosedBy" title="la_fld_FieldsEnclosedBy" size="2" maxlength="1"/>
-			<inp2:m_RenderElement name="inp_edit_radio" prefix="p.import" field="LineEndings" title="la_fld_LineEndings" use_phrases="0"/>
-			<inp2:m_RenderElement name="inp_edit_checkbox" prefix="p.import" field="SkipFirstRow" title="la_fld_SkipFirstRow"/>
-			<inp2:m_RenderElement name="inp_edit_radio" prefix="p.import" field="FieldTitles" title="la_fld_FieldTitles" onclick="reflectFormFields();"/>
-
-			<inp2:m_RenderElement design="form_row" prefix="p.import" field="ExportColumns" title="la_fld_ImportColumns">
-				<td class="control-cell">
-					<table cellpadding="0" cellspacing="0" border="0">
-						<tr>
-							<td>
-								<input type="button" value="<inp2:m_phrase name="la_btn_Up"/>" id="btn_move_up" onclick="move_options_up('<inp2:p.import_InputName field="ExportColumns"/>', 1)" class="button">
-								<input type="button" value="<inp2:m_phrase name="la_btn_Down"/>" id="btn_move_down" onclick="move_options_down('<inp2:p.import_InputName field="ExportColumns"/>', 1)" class="button"><br />
-								<img src="img/spacer.gif" width="1" height="5" alt=""><br />
-							</td>
-							<td><img src="img/spacer.gif" width="45" height="1" alt=""><br></td>
-							<td><inp2:m_phrase name="la_fld_AvailableColumns"/>:</td>
-						</tr>
-						<tr>
-							<td>
-								<select multiple id="<inp2:p.import_InputName field="ExportColumns"/>" size="15" style="width: 225px;">
-									<inp2:p.import_PredefinedOptions field="ExportColumns" block="inp_option_item" selected="selected"/>
-								</select>
-								<input type="hidden" id="export_columns" name="<inp2:p.import_InputName field="ExportColumns"/>" value="<inp2:p.import_Field field="ExportColumns"/>" />
-							</td>
-							<td align="center">
-								<input type="button" value="&nbsp;&laquo;&laquo;&nbsp;" id="btn_move_left" onclick="move_selected('<inp2:p.import_InputName field="AvailableColumns"/>', '<inp2:p.import_InputName field="ExportColumns"/>')" class="button"><br>
-								<img src="img/spacer.gif" width="1" height="4" alt=""><br>
-								<input type="button" value="&nbsp;&raquo;&raquo;&nbsp;" id="btn_move_right" onclick="move_selected('<inp2:p.import_InputName field="ExportColumns"/>', '<inp2:p.import_InputName field="AvailableColumns"/>'); select_sort('<inp2:p.import_InputName field="AvailableColumns"/>');" class="button">
-							</td>
-							<td>
-								<select multiple id="<inp2:p.import_InputName field="AvailableColumns"/>" size="15" style="width: 225px;">
-									<inp2:p.import_PredefinedOptions field="AvailableColumns" block="inp_option_item" selected="selected"/>
-								</select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</inp2:m_RenderElement>
-
-	<!-- CATEGORY SELECTOR: BEGIN -->
-		<inp2:m_DefineElement name="root_cat_caption">
-			<inp2:m_Phrase name="la_rootcategory_name"/>
-		</inp2:m_DefineElement>
-
-		<inp2:m_DefineElement name="category_caption">
-			<inp2:m_param name="separator"/><inp2:m_param name="cat_name"/>
-		</inp2:m_DefineElement>
-
-		<inp2:m_RenderElement design="form_row" prefix="p.import" field="CategoryId" title="la_fld_ImportCategory">
+<table class="edit-form bordered">
+	<inp2:m_RenderElement name="subsection" title="la_section_General"/>
+		<inp2:m_RenderElement design="form_row" prefix="p.import" field="ImportSource" title="la_fld_ImportFilename">
 			<td class="control-cell">
-				<b><inp2:p.import_CategoryPath separator=" &gt; " root_cat_render_as="root_cat_caption" render_as="category_caption" session_var="ImportCategory"/></b>
-				<input type="hidden" name="<inp2:p.import_InputName field='CategoryId'/>" value="<inp2:p.import_Field field='CategoryId' db='db'/>" />
-				<a href="javascript:openSelector('p.import', '<inp2:adm_SelectorLink prefix="p.import" selection_mode="single" tab_prefixes="none"/>', 'ImportCategory', null, 'OnSaveSettings');"><img src="img/icons/icon24_cat.gif" border="0" align="absmiddle" /></a>
+				<table border="0">
+					<tr>
+						<td>
+							<input type="radio" name="<inp2:p.import_InputName field="ImportSource"/>" id="<inp2:p.import_InputName field="ImportSource"/>_1"<inp2:m_if check="p.import_FieldEquals" field="ImportSource" value="1"> checked</inp2:m_if> value="1" />
+						</td>
+						<td>
+							<label for="<inp2:p.import_InputName field="ImportSource"/>_1">upload</label>
+						</td>
+						<td>
+							<input type="file" name="<inp2:p.import_InputName field="ImportFilename"/>" id="<inp2:p.import_InputName field="ImportFilename"/>" onclick="check_radio('<inp2:p.import_InputName field="ImportSource"/>_1');">
+						</td>
+					</tr>
+
+					<tr>
+						<td>
+							<input type="radio" name="<inp2:p.import_InputName field="ImportSource"/>" id="<inp2:p.import_InputName field="ImportSource"/>_2"<inp2:m_if check="p.import_FieldEquals" field="ImportSource" value="2"> checked</inp2:m_if> value="2" />
+						</td>
+						<td>
+							<label for="<inp2:p.import_InputName field="ImportSource"/>_2">select</label>
+						</td>
+						<td>
+							<select name="<inp2:p.import_InputName field="ImportLocalFilename"/>" onclick="check_radio('<inp2:p.import_InputName field="ImportSource"/>_2');">
+								<inp2:p.import_PredefinedOptions field="ImportLocalFilename" block="inp_option_item" selected="selected"/>
+							</select>
+						</td>
+					</tr>
+
+				</table>
 			</td>
 		</inp2:m_RenderElement>
 
-	<!-- CATEGORY SELECTOR: END -->
-		<inp2:m_RenderElement name="inp_edit_box" prefix="p.import" field="CategorySeparator" title="la_fld_CategorySeparator" size="2" maxlength="1"/>
-		<inp2:m_RenderElement name="inp_edit_checkbox" prefix="p.import" field="ReplaceDuplicates" title="la_fld_ReplaceDuplicates" />
+		<inp2:m_RenderElement name="inp_edit_box" prefix="p.import" field="FieldsSeparatedBy" title="la_fld_FieldsSeparatedBy" size="2" maxlength="1"/>
+		<inp2:m_RenderElement name="inp_edit_box" prefix="p.import" field="FieldsEnclosedBy" title="la_fld_FieldsEnclosedBy" size="2" maxlength="1"/>
+		<inp2:m_RenderElement name="inp_edit_radio" prefix="p.import" field="LineEndings" title="la_fld_LineEndings" use_phrases="0"/>
+		<inp2:m_RenderElement name="inp_edit_checkbox" prefix="p.import" field="SkipFirstRow" title="la_fld_SkipFirstRow"/>
+		<inp2:m_RenderElement name="inp_edit_radio" prefix="p.import" field="FieldTitles" title="la_fld_FieldTitles" onclick="reflectFormFields();"/>
 
-		<inp2:m_RenderElement design="form_row" prefix="p.import" field="CheckDuplicatesMethod" title="la_fld_CheckDuplicatesMethod">
+		<inp2:m_RenderElement design="form_row" prefix="p.import" field="ExportColumns" title="la_fld_ImportColumns">
 			<td class="control-cell">
-				<table cellspacing="0" cellpadding="0">
+				<table cellpadding="0" cellspacing="0" border="0">
 					<tr>
-						<td valign="top">
-							<input type="radio"<inp2:m_if check="p.import_FieldEquals" field="CheckDuplicatesMethod" value="1"> checked</inp2:m_if> name="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>" id="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_1" value="1" />
-						</td>
 						<td>
-							<label for="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_1"><inp2:m_phrase name="la_IDField" />: PRODUCTID</label>
+							<input type="button" value="<inp2:m_phrase name="la_btn_Up"/>" id="btn_move_up" onclick="move_options_up('<inp2:p.import_InputName field="ExportColumns"/>', 1)" class="button">
+							<input type="button" value="<inp2:m_phrase name="la_btn_Down"/>" id="btn_move_down" onclick="move_options_down('<inp2:p.import_InputName field="ExportColumns"/>', 1)" class="button"><br />
+							<img src="img/spacer.gif" width="1" height="5" alt=""><br />
 						</td>
+						<td><img src="img/spacer.gif" width="45" height="1" alt=""><br></td>
+						<td><inp2:m_phrase name="la_fld_AvailableColumns"/>:</td>
 					</tr>
-
 					<tr>
-						<td valign="top">
-							<input type="radio"<inp2:m_if check="p.import_FieldEquals" field="CheckDuplicatesMethod" value="2"> checked</inp2:m_if> name="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>" id="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_2" value="2" />
+						<td>
+							<select multiple id="<inp2:p.import_InputName field="ExportColumns"/>" size="15" style="width: 225px;">
+								<inp2:p.import_PredefinedOptions field="ExportColumns" block="inp_option_item" selected="selected"/>
+							</select>
+							<input type="hidden" id="export_columns" name="<inp2:p.import_InputName field="ExportColumns"/>" value="<inp2:p.import_Field field="ExportColumns"/>" />
+						</td>
+						<td align="center">
+							<input type="button" value="&nbsp;&laquo;&laquo;&nbsp;" id="btn_move_left" onclick="move_selected('<inp2:p.import_InputName field="AvailableColumns"/>', '<inp2:p.import_InputName field="ExportColumns"/>')" class="button"><br>
+							<img src="img/spacer.gif" width="1" height="4" alt=""><br>
+							<input type="button" value="&nbsp;&raquo;&raquo;&nbsp;" id="btn_move_right" onclick="move_selected('<inp2:p.import_InputName field="ExportColumns"/>', '<inp2:p.import_InputName field="AvailableColumns"/>'); select_sort('<inp2:p.import_InputName field="AvailableColumns"/>');" class="button">
 						</td>
 						<td>
-							<label for="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_2"><inp2:m_phrase name="la_OtherFields" />: </label>
-							<inp2:p.import_PredefinedOptions prefix="p.import" field="DuplicateCheckFields" block="inp_checkbox_item" selected="checked"/>
-
-							<inp2:m_RenderElement prefix="p.import" name="inp_edit_hidden" field="DuplicateCheckFields"/>
+							<select multiple id="<inp2:p.import_InputName field="AvailableColumns"/>" size="15" style="width: 225px;">
+								<inp2:p.import_PredefinedOptions field="AvailableColumns" block="inp_option_item" selected="selected"/>
+							</select>
 						</td>
 					</tr>
 				</table>
 			</td>
 		</inp2:m_RenderElement>
 
-		<inp2:m_RenderElement name="inp_edit_filler"/>
-	</table>
-</div>
+<!-- CATEGORY SELECTOR: BEGIN -->
+	<inp2:m_DefineElement name="root_cat_caption">
+		<inp2:m_Phrase name="la_rootcategory_name"/>
+	</inp2:m_DefineElement>
+
+	<inp2:m_DefineElement name="category_caption">
+		<inp2:m_param name="separator"/><inp2:m_param name="cat_name"/>
+	</inp2:m_DefineElement>
+
+	<inp2:m_RenderElement design="form_row" prefix="p.import" field="CategoryId" title="la_fld_ImportCategory">
+		<td class="control-cell">
+			<b><inp2:p.import_CategoryPath separator=" &gt; " root_cat_render_as="root_cat_caption" render_as="category_caption" session_var="ImportCategory"/></b>
+			<input type="hidden" name="<inp2:p.import_InputName field='CategoryId'/>" value="<inp2:p.import_Field field='CategoryId' db='db'/>" />
+			<a href="javascript:openSelector('p.import', '<inp2:adm_SelectorLink prefix="p.import" selection_mode="single" tab_prefixes="none"/>', 'ImportCategory', null, 'OnSaveSettings');"><img src="img/icons/icon24_cat.gif" border="0" align="absmiddle" /></a>
+		</td>
+	</inp2:m_RenderElement>
+
+<!-- CATEGORY SELECTOR: END -->
+	<inp2:m_RenderElement name="inp_edit_box" prefix="p.import" field="CategorySeparator" title="la_fld_CategorySeparator" size="2" maxlength="1"/>
+	<inp2:m_RenderElement name="inp_edit_checkbox" prefix="p.import" field="ReplaceDuplicates" title="la_fld_ReplaceDuplicates" />
+
+	<inp2:m_RenderElement design="form_row" prefix="p.import" field="CheckDuplicatesMethod" title="la_fld_CheckDuplicatesMethod">
+		<td class="control-cell">
+			<table cellspacing="0" cellpadding="0">
+				<tr>
+					<td valign="top">
+						<input type="radio"<inp2:m_if check="p.import_FieldEquals" field="CheckDuplicatesMethod" value="1"> checked</inp2:m_if> name="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>" id="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_1" value="1" />
+					</td>
+					<td>
+						<label for="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_1"><inp2:m_phrase name="la_IDField" />: PRODUCTID</label>
+					</td>
+				</tr>
+
+				<tr>
+					<td valign="top">
+						<input type="radio"<inp2:m_if check="p.import_FieldEquals" field="CheckDuplicatesMethod" value="2"> checked</inp2:m_if> name="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>" id="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_2" value="2" />
+					</td>
+					<td>
+						<label for="<inp2:p.import_InputName field="CheckDuplicatesMethod"/>_2"><inp2:m_phrase name="la_OtherFields" />: </label>
+						<inp2:p.import_PredefinedOptions prefix="p.import" field="DuplicateCheckFields" block="inp_checkbox_item" selected="checked"/>
+
+						<inp2:m_RenderElement prefix="p.import" name="inp_edit_hidden" field="DuplicateCheckFields"/>
+					</td>
+				</tr>
+			</table>
+		</td>
+	</inp2:m_RenderElement>
+
+	<inp2:m_RenderElement name="inp_edit_filler"/>
+</table>
 
 <script language="javascript" type="text/javascript">
 	reflectFormFields();
 </script>
 
 <inp2:m_include t="incs/footer"/>
\ No newline at end of file