var action1='';
/*
 * Ext JS Library 2.0.2
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 *
 * http://extjs.com/license
 */

Ext.onReady(function() {
    
	function def(value, def_value) { return ((value) ? value : def_value); };

	common_url = document.getElementById('id_common_url').value;
	user_data = document.getElementById('id_user_data').value;
	
	var useSmsField;
	var additionalFields;
	var phone;
	var refOrderTypeFields = [];
	var getRefOrderTypes = function(){
	    var res = ['1'];
	    Ext.each(refOrderTypeFields, function(field){
	        if (field.getValue()) {
	            res.push(field.refTypeId);
	        }
	    });
	    res.sort();
	    return res.toString();
	};
	
	var startPointObjectTypeCombo;
	var destPointObjectTypeCombo;
	
	//Хранилище данных для типов объектов
    var destPointStore;
    
    //Хранилище данных для объектов (для пунктов отправки и прибытия)
	var getDestPointStore = function(){
        if (!destPointStore) {
            destPointStore = new Ext.data.JsonStore({
        		url: common_url + 'action.php',
        		baseParams: {
        		    action: 'getplace'
        		},
                root: 'refplace',
                fields: ['id', 'name'],
                remoteSort: true
            });
        }
        return destPointStore;
    }

	var zt_phone_var = document.getElementById('id_zt_phone').value; //переданный телефон из заказ-такси
	var oper_var = document.getElementById('id_oper').value; // Переданный опер
	var zt_var = document.getElementById('id_zt').value; //мы на заказ-такси
	var zp_var = document.getElementById('id_zp').value; //мы на заказ-такси
	var initialPhone = (zt_var != '') ? zt_var: "" + (zp_var != '') ? zp_var: "";

	messageid_var = document.getElementById('id_messageid_var').value; //если 0-новая запись, иначе код заказа
	vendorid_var = document.getElementById('id_vendorid').value; //код текущего вендора

	var win;
	var dcard_var = ''; //номер дисконтной карточки
	var conf_pwd = '';
	var need_toconfirm = false;

	var currentClientId = ''; // ID Клиента (из ьаблицы Clients).
	// Возможно лучшим решением в данном случае будет использование составного
	// первичного ключа (phone, vendorid), вместо того, чтобы заморачиваться
	// с этим ID

	var allClientTag = document.getElementById('id_all_client_tag').value; // По умолчанию загружаем только те быстрые адреса, которые принадлежат данному клиенту
	var vendor = Ext.util.JSON.decode(document.getElementById('id_vendor').value); //Получение параметров вендор
	if (vendor.rules) {
		vendor.rules = Ext.util.JSON.decode(vendor.rules);
	} else vendor.rules = new Array();
	
	var HELP_VAR = document.getElementById('id_help').value; //если 1 или 2 - то помощь
	var LOGGING_VAR = document.getElementById('id_logging').value; //если 0 или 1 - то таблица лога справа
	var STAT_VAR    = document.getElementById('id_stat').value; // показывать таблицу с постоянными заказами или нет
	COMPANY_VAR = document.getElementById('id_company').value; // показывать таблицу с компаниями или нет
	COMPANY_VAR = 1;
	STAT_VAR = 1;
	
	var urlParams = Ext.urlDecode(window.location.search.substr(1));
	
    if (urlParams.hasOwnProperty('company')) {
        COMPANY_VAR = 1*urlParams.company ? 1 : 0;
    }
    if (urlParams.hasOwnProperty('stat')) {
        STAT_VAR = 1*urlParams.stat ? 1 : 0;
    }
    
    if (1*vendor.rules.constant > 0) {
        STAT_VAR = 0;
    }
	
//	if (vendor.rules.pre == 1) {
//	    STAT_VAR = 0;
//	}
	SYMBOL_REFPLACE_ADDR = document.getElementById('id_symbol_refplace_addr').value; //первый знак в быстрых адресах из постоянных заказов
	var width_var = parseInt(document.getElementById('id_width').value); //ширина таблицы в пикселах

	var url_fields = Ext.util.JSON.decode(document.getElementById('id_urldata').value); //Получение параметров GET-запроса
	if (url_fields.pretime) {
		pretime_match = url_fields.pretime.match('([0-9]{4}-[0-9]{2}-[0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})');
		if (pretime_match.length >= 3) {
			url_fields.pretime_date    = pretime_match[1];
			url_fields.pretime_hours   = pretime_match[2];
			url_fields.pretime_minutes = pretime_match[3];
		}
	}	//Ext.urlDecode(location.href);

	var ADD_URL_PARAMS =
		  '?idid='+Ext.get('id_idid').getValue()
		+ (oper_var != 0 ? '&oper=' + oper_var: '')
		+ (HELP_VAR != 1 ? '' : '&help=' + HELP_VAR)
		+ (LOGGING_VAR != 1 ? '' : '&logging=' + LOGGING_VAR)
		+ (STAT_VAR != 1 ? '' : '&stat=' + STAT_VAR)
		+ (COMPANY_VAR != 1 ? '' : '&company=' + COMPANY_VAR)
		+ (width_var != '' ? '&width=' + width_var : '')
		+ (zt_var != '' ? '&zt=' + zt_var: '')
		+ (zp_var != '' ? '&zp=' + zp_var: '');

	var additional_empty_text = 'Ваша информация о заказе, которая не будет доступна диспетчерам такси';
	var primech_empty_text = 'Примечание для водителя для точной подачи машины';
	var whentime_empty_text = 'Дата выполнения (необязательно)'; // 'Сейчас'
	var comment_empty_text = 'Ваш комментарий к заказу для администрации';
	
	var EMPTY_PHONE_CODE = '---';

	BuildVendors();

	var dt = new Date();
	var when_date_empty_text = dt.getFullYear() + '-';
	if(dt.getMonth() < 9) when_date_empty_text += '0';
	when_date_empty_text += (dt.getMonth()+1) + '-';
	if(dt.getDate() < 10) when_date_empty_text += '0';
	when_date_empty_text += dt.getDate();

	var whentime_hour_empty_text = get_current_hour();
	var whentime_minute_empty_text = get_current_minute();

	function get_current_hour() {
	  var dt_now = new Date();
	  return ( (dt_now.getHours() < 10) ? ('0' + dt_now.getHours()) : dt_now.getHours() );
	}
	function get_current_minute() {
	  var dt_now = new Date();
	  return ( (dt_now.getMinutes() < 10) ? ('0' + dt_now.getMinutes()) : dt_now.getMinutes() );
	}

	/*var days = new Array();
	for(var i = 0; i < 60; i++) {
		days[i] = new Array( ( (i < 10) ? ('0' + i) : i.toString() ) );
	}*/
	/*var day_store = new Ext.data.SimpleStore({
		fields: ['value'],
		data: days
	});*/

	//debugger;
	/*Определяем источники данных*/
	var dsright = new Ext.data.JsonStore({
		url: common_url + 'action.php?action=log_client&clientphone=' + initialPhone,
		root: 'logs',
		fields: ['cnt'],
		totalProperty: 'totalCount',
		remoteSort: true,
		autoLoad: true
	});

	var logTemplate = new Ext.XTemplate(
		'<div id="log-messages-container"><b>Сообщения:</b><ul>',
			'<tpl for=".">',
				'<li><span id="log-entry">{cnt}</span></li>',
			'</tpl>',
		'</ul></div>');

	var logView = new Ext.DataView({
		id: 'logs-panel',
		store: dsright,
		tpl:  logTemplate,
		emptyText: '<div id="log-messages-container"><b>Сообщения:</b></div>',
		hidden: (LOGGING_VAR != 1)
	});

	if (LOGGING_VAR == 1) {
		dsright.load();
	}

	/* Источник данных для постоянных заказов */
	var dsStat = new Ext.data.JsonStore({
		url: common_url + 'action.php',
		baseParams: {
		    action: 'const_getdata',
		    vendorid: vendorid_var
		},
		id: 'threadid',
		root: 'orders',
		totalProperty: 'totalCount',
		fields: ['threadid', 'phone', 'street', 'house', 'kvart', 'podezd', 'date_create',
				 'street_dest', 'house_dest', 'person', 'type_pay', 'comment', 'vendorname',
				 'vendorphone', 'note', 'tag', 'whentime', 'dcard'],
		remoteSort: true,
		autoload: true
	});
	dsStat.setDefaultSort('tag', 'asc');
	dsStat.load({
		params: {
			start: 0,
			limit: 10
		}
	});

	/*var ds_clients = new Ext.data.JsonStore({
	    url: common_url + 'action.php',
	    baseParams: {
	        action: 'search_client',
	        clientphone: initialPhone,
	        vendorid: vendorid_var
	    },
	    root: 'clients',
		totalProperty: 'totalCount',
		id: 'threadid',
		fields: ['threadid', 'clientname', 'personal'],
		remoteSort: true
	});
	ds_clients.setDefaultSort('threadid', 'desc');
	ds_clients.load();
    */
	// загрузим постоянный заказ для дальнейшего редактирования
	var rDs = new Ext.data.JsonStore({
	    url: common_url + 'action.php',
	    baseParams: {
	        action: 'const_getorder',
	        messageid: messageid_var
	    },
	    root: 'orders',
		totalProperty: 'totalCount',
		id: 'threadid',
		fields: ['threadid', 'phone', 'street', 'house', 'kvart',
			 'podezd', 'date_create', 'street_dest', 'house_dest',
			 'person', 'type_pay', 'comment', 'vendorname',
			 'vendorphone', 'note', 'tag', 'whentime'],
		remoteSort: true
	});
	rDs.setDefaultSort('threadid', 'desc');
	//* загрузим постоянный заказ для дальнейшего редактирования


	/* Это прмежуточное хранилище данных о быстрых адресах.
	 Дело в том, что данные о быстрых адресах состоят из двух частей:
	 Условно постоянной (собственно, refplace) и переменной, которая
	 зависит от текущего id пользователя.
	 Постоянная часть достаточно большая, и если ее таскать каждый раз,
	 когда меняется пользователь - будет плохо.
	 Данное хранилище будет обновляться всякий раз, когда одно из хранилищ
	 обновляется - this.store (для refplaces) или clientRefPlaces
	*/
	/*refPlaceStore = new Ext.data.Store({});*/

	// Этот источник данных определяет только ту часть постоянных адресов,
	//что зависит от пользователя
	/*var clientsRefPlaceStore = new Ext.data.Store({
		url: common_url + 'action.php',
		reader: new Ext.data.JsonReader({
				totalProperty: 'totalCount',
				root: 'refplace'
			},
			[{name: 'id', mapping: 'id'},
			 {name: 'name', mapping: 'name'}]),
		autoLoad: true
	});*/


	/*if (!this.store) { // REFPLACE
		this.store = new Ext.data.Store({
			url: common_url + 'action.php?action=getplace&vendorid=' + vendorid_var,
			reader: new Ext.data.JsonReader({
				totalProperty: 'totalCount',
				root: 'refplace'
			},
			[{ name: 'id' }, { name: 'name' }]),
			autoLoad: true
		});
		this.store.setDefaultSort('name', 'acs');
	}*/

	/* ----------//----------- */

	if (!this.store_street) { // Street
		this.store_street = new Ext.data.SimpleStore({
		    fields: ['street'],
//			url: common_url + 'action.php?action=getstreet',
			/*reader: new Ext.data.JsonReader(
                {
    				totalProperty: 'totalCount',
    				root: 'refstreet'
    			},
                ['street']
			),*/
			data: Taxi.PreloadedData.streets
		});
		//this.store_street.on('load', function() { alert('streets load'); });
	}

	/* ----------//----------- */

	/*if (!this.store_refordertype) { // refordertype
		this.store_refordertype = new Ext.data.Store({
			url: common_url + 'action.php?action=getrefordertype',
			reader: new Ext.data.JsonReader({
				totalProperty: 'totalCount',
				root: 'reftype'
			},
			[{ name: 'id' }, { name: 'ref_type' }]),
			autoLoad: true
		});
	}*/

	BuildAddresses();

	/* ----------//----------- */

	/* Панель кнопок */
	var cm = new Ext.grid.ColumnModel([{
			id: 'topic',
			header: "Код",
			dataIndex: 'threadid',
			width: 20
		},{
			header: "Телефон",
			dataIndex: 'phone',
			width: 200,
			hidden: false
		},{
			header: "Улица",
			dataIndex: 'street',
			width: 350,
			align: 'right'
		},{
			id: 'last',
			header: "Номер дома",
			dataIndex: 'house',
			width: 150,
			align: 'center'
		},{
			header: "Квартира",
			dataIndex: 'kvart',
			width: 100,
			align: 'right'
		},{
			header: "Подъезд",
			dataIndex: 'podezd',
			width: 100,
			align: 'right'
		},{
			header: "Дата",
			dataIndex: 'date_create',
			width: 100,
			align: 'right',
			hidden: true
		},{
			header: "Улица(куда)",
			dataIndex: 'street_dest',
			width: 350,
			align: 'right'
		},{
			header: "Номер дома (куда)",
			dataIndex: 'house_dest',
			width: 150,
			align: 'right'
		},{
			header: "Контактное лицо",
			dataIndex: 'person',
			width: 300,
			align: 'right'
		},{
			header: "Тип",
			dataIndex: 'type_pay',
			width: 50,
			align: 'right'
		},{
			header: "Примечание",
			//поле content /meet=
			name: 'meet',
			dataIndex: 'comment',
			width: 250,
			align: 'right',
			value: def(url_fields.meet)
		},{
			header: "Сообщение",
			//поле note
			dataIndex: 'note',
			width: 250,
			align: 'right'
		},{
			header: "Взял",
			dataIndex: 'vendorname',
			width: 250,
			align: 'right'
		},{
			header: "Телефон",
			dataIndex: 'vendorphone',
			width: 250,
			align: 'right'
		},{
			header: "Метка",
			dataIndex: 'tag',
			width: 250,
			align: 'left'
		},{
			header: "Время выполнения",
			dataIndex: 'whentime',
			width: 250,
			align: 'left'
		}
	]);

	//рисуем скрытую таблицу
	var grid = new Ext.grid.GridPanel({
		//el:'form-ct1',
		autoWidth: true,
		height: 10,
		hidden: true,
		//title:'Список заказов. Пользователь: '+ Ext.get('id_user_data').getValue(),
		store: rDs,
		cm: cm,
		trackMouseOver: false,
		animCollapse: false,
		selModel: new Ext.grid.RowSelectionModel({
			singleSelect: true
		}),
		viewConfig: {
			forceFit: true,
			enableRowBody: true,
			showPreview: true
		},
		bbar: new Ext.PagingToolbar({
			pageSize: 10,
			store: rDs,
			displayInfo: true,
			displayMsg: 'Показано записей {0} - {1} из {2}',
			emptyMsg: "Нет записей для отображения",
			items: ['-']
		})
	});
	grid.render('form-ct');
	rDs.load({
		params: {
			start: 0,
			limit: 10
		}
	});

	var cm_clients = new Ext.grid.ColumnModel([{
		id: 'topic',
		header: "Код",
		dataIndex: 'threadid',
		width: 20
	},{
		header: "clientname",
		dataIndex: 'clientname',
		width: 200,
		hidden: false
	},{
		header: "personal",
		dataIndex: 'personal',
		width: 200,
		hidden: false
	}]);

	//рисуем скрытую таблицу
	/*var grid_clients = new Ext.grid.GridPanel({
		//el:'form-ct1',
		autoWidth: true,
		height: 150,
		hidden: true,
		store: ds_clients,
		cm: cm_clients,
		trackMouseOver: false,
		animCollapse: false,
		selModel: new Ext.grid.RowSelectionModel({
			singleSelect: true
		}),
		viewConfig: {
			forceFit: true,
			enableRowBody: true,
			showPreview: true
		},
		bbar: new Ext.PagingToolbar({
			pageSize: 10,
			store: rDs,
			displayInfo: true,
			displayMsg: 'Показано записей {0} - {1} из {2}',
			emptyMsg: "Нет записей для отображения",
			items: ['-']
		})
	});*/

	/*grid_clients.render('form-ct');*/
	//grid_clients.load({params:{start:0, limit:10}});

	//alert('G o o d !');

	/* Панель для формы */

	var cmStat = new Ext.grid.ColumnModel([
			{id: 'tag', header: "Метка", dataIndex: 'tag', width: 50, sortable: true},
			{id: 'phone', header: "Телефон", dataIndex: 'phone', width: 65, sortable: false},
			{id: 'street', header: "Улица", dataIndex: 'street', width: 75, sortable: false},
			{id: 'house', header: "Дом", dataIndex: 'house', width: 20, sortable: false}
	]);

	var fs = new Ext.FormPanel({
		frame: true,
		title: 'Форма заказа "ТАКСИ". Пользователь: ' + user_data,
		labelAlign: 'left',
		labelWidth: 180,
		//autoWidth: true,
		width: ((LOGGING_VAR != 1) && (STAT_VAR != 1) && (COMPANY_VAR != 1)) ? 500 : 800,
		autoHeight: true,
		waitMsgTarget: true,
		items: [
		tb_buttons = new Ext.Toolbar(
		[
		new Ext.TabsButton({
			text: 'Профайл',
			handler: function() {
				location.href = './../profile/profile.php' + ADD_URL_PARAMS;
				return;
			}
		}), new Ext.TabsButton({
			text: 'Новый заказ',
			handler: function() {
				location.href = './../form/form.php' + ADD_URL_PARAMS;
				return;
			}
		}), new Ext.TabsButton({
			text: 'Список заказов',
			hidden: (vendor.rules.orderlist == 1),
			handler: function() {
				location.href = './../grid/grid.php' + ADD_URL_PARAMS;
				return;
			}
		}), new Ext.TabsButton({
			text: 'Постоянные заказы',
			hidden: (vendor.rules.constant == 1),
			handler: function() {
				location.href = './../grid_const/grid_const.php' + ADD_URL_PARAMS;
				return;
			}
		}),	new Ext.TabsButton({
				text: 'Претензия',
				handler: Claim
		}),
			new Ext.LogoutButton()
		]),

		{

			xtype: 'fieldset',
			//title: 'Колонки',
			autoWidth: true,
			autoHeight: true,
			labelwidth: 85,
			layout: 'column',
			items: [{

				//левая колонка
				columnWidth: ((LOGGING_VAR != 1) && (STAT_VAR != 1) && (COMPANY_VAR != 1)) ? 1 : 0.6,
				layout: 'form',
				items: [

				//
				{
					xtype: 'fieldset',
					title: 'Контактная информация',
					autoHeight: true,
					autoWidth: true,
					labelwidth: 85,
					items: [

					tb(var_before_phone_help_text),

					phone = new TaxiForm.PhoneField({
						hideLabel: (zp_var != ''),
						name: 'phone',
						id: 'id_phone_text_field',
						autoWidth: true,
						value: initialPhone,
						disabled: (zp_var != '') ? true: false
					})
					, tb(var_phone_help_text),

					personal_phone = new Ext.form.Checkbox({
						name: 'personal_phone',
						//fieldLabel: 'Личный телефон',
						boxLabel: (vendor.rules.clients == 1 ? '' : 'личный телефон'),
						hidden: (vendor.rules.clients == 1),
						hideLabel: true,
						id: 'id_personal_phone',
						layout: 'id_phone_text_field'
						//width      : 150
					}), tb(var_personal_phone_help_text),
					

					clientname = new Ext.form.TextField({
						name: 'clientname',
						fieldLabel: 'Имя (кто заказывает такси)',
						hidden: (vendor.rules.clients == 1),
						hideLabel: (vendor.rules.clients == 1),
						id: 'id_clientname',
						emptyText: 'Имя клиента',
						width: 150
					}), tb(var_clientname_help_text),

					additional = new Ext.form.TextArea({
						name: 'additional'
						, id: 'id_additional'
						, fieldLabel: 'Дополнительная информация'
						, emptyText: additional_empty_text
						, hidden: (vendor.rules.private == 1)
						, hideLabel: (vendor.rules.private == 1)
						, height: 35
						, width: 250
					}), tb(var_clientname_help_text)]
				},

				new Ext.form.FieldSet({
					title: 'Место подачи',
					autoWidth: true,
					autoHeight: true,
					items: [
					
					startPointObjectTypeCombo = new TaxiForm.AddressObjectTypeCombo({
					    width: 250
					}),
					tb(var_before_combo_refplace_help_text),
					combo_refplace = new TaxiForm.AddressObjectCombo({
					    id: 'refplace1',
						hiddenName: 'refplace',
						value: def(url_fields.address),
						objectTypeCombo: startPointObjectTypeCombo,
                		width: 250
					}),

					/*combo_refplace = new Ext.form.AddressComboBox({
						id: 'refplace1',
						hiddenName: 'refplace',
						value: def(url_fields.address)

					}),*/ tb(var_combo_refplace_help_text),

					combo_street = new Ext.form.StreetComboBox({
						id: 'id_street_from',
						emptyText: 'Улица с которой необх. забрать',
						value: def(url_fields.street)
					}), tb(var_combo_street_help_text),

					house = new Ext.form.TextField({
						name: 'house',
						fieldLabel: 'Номер дома',
						id: 'house_text_field',
						width: 50,
						value: def(url_fields.house)
					}),

					tb(house_help_text),

					office = new Ext.form.TextField({
						name: 'office',
						id: 'id_office',
						fieldLabel: 'Квартира',
						width: 50,
						value: def(url_fields.office)
					}),

					tb(var_office_help_text),

					podezd = new Ext.form.TextField({
						name: 'podezd',
						id: 'id_podezd',
						fieldLabel: 'Подъезд',
						width: 50,
						value: def(url_fields.podezd)
					}),

					tb(var_podezd_help_text),

					primech = new Ext.form.TextArea({
						name: 'primech'
						, id: 'id_primech'
						, fieldLabel: 'Примечание'
						, emptyText: primech_empty_text
						, height: 35
						, width: 250
						, value: def(url_fields.primech)
					}),

					tb(var_primech_help_text)
					/*refPlaceFromButton =new Ext.Button({
						text: "Добавить персональную метку",
						hidden:(window.document.getElementById('id_add_new_points').value == 0),
						handler: onRefPlaceFromButton
					})*/
					]
				}),

				addressto_fieldset = new Ext.form.FieldSet({
					title: 'Куда ехать',
					autoHeight: true,
					autoWidth: true,
					//width : 640 - 20,
					defaultType: 'textfield',
					items: [
					
    					destPointObjectTypeCombo = new TaxiForm.AddressObjectTypeCombo({
    					    width: 250
    					}),
    					tb(var_combo_refplace_dest_help_text),
    					combo_refplace_dest = new TaxiForm.AddressObjectCombo({
    					    id: 'refplace_dest1',
    						hiddenName: 'refplace_dest',
    						value: def(url_fields.addressto),
    						objectTypeCombo: destPointObjectTypeCombo,
                    		width: 250
    					}),

					/*combo_refplace_dest = new Ext.form.AddressComboBox({
						id: 'refplace_dest1',
						hiddenName: 'refplace_dest',
						value: def(url_fields.addressto)
					}),*/


					combo_street_dest = new Ext.form.StreetComboBox({
						id: 'id_street_dest',
						hiddenName: 'street_dest',
						value: def(url_fields.streetto)
					}),// tb(var_combo_street_dest_help_text),

					house_dest = new Ext.form.TextField({
						name: 'house_dest',
						fieldLabel: 'Номер дома',
						id: 'id_house_dest',
						width: 50,
						value: def(url_fields.houseto)
					}),
					//tb(var_house_dest_help_text),
					addressto_panel = new Ext.Panel({
						buttonAlign: 'left',
						height: 20,
						buttons: [
							/*refPlaceToButton = new Ext.Button({
								text: "Добавить персональную метку",
								hidden:(window.document.getElementById('id_add_new_points').value == 0),
								handler: onRefPlaceToButton
							}),*/
							/*addressto_add = new Ext.Button({
								text: "Добавить адрес",
								hidden: true,
								handler: AddAddress
							}),*/
							/*addressto_del = new Ext.Button({
								text: "Удалить адрес",
								hidden:true,
								handler: DeleteAddress
							})*/
						]
					})
					]
				}),

				data_time_set = new Ext.form.FieldSet({
					title: 'Дата и время подачи',
//					collapsible: true,
					checkboxToggle: true,
					collapsed: (url_fields.pretime_date == undefined),
					hidden: (vendor.rules.pre == 1),
					autoHeight: true,
					autoWidth: true,

					items: [
					when_date = new Ext.form.DateField({
						name: 'when_date',
						fieldLabel: 'Дата',
						id: 'id_when_date',
						width: 127,
						readOnly: false,
						format: 'Y-m-d',
						emptyText: when_date_empty_text,
						value: def(url_fields.pretime_date)
					}),

//fucking timeshift bug

					whentime_hour = new Ext.form.TimeField({
						fieldLabel: 'Часы',
						id: 'id_whentime_hour',
						increment: 60,
						format: 'H'
						, width: 127
						, readOnly: false
						, emptyText: whentime_hour_empty_text
						, value: def(url_fields.pretime_hours)  
				    }),

					whentime_minute = new Ext.form.TimeField({
						increment: 1,
						format: 'i',
						fieldLabel: "Минуты",
						id: 'id_whentime_minute'
						/*name:"shift",
						hiddenName:"shift",
						store: day_store,
						valueField: 'value',
						displayField:'value',
						typeAhead: true,
						mode: 'local',
						triggerAction: 'all',
						selectOnFocus:true*/
						, readOnly: false
						, width: 127
						, emptyText: whentime_minute_empty_text
						, value: def(url_fields.pretime_minutes)
					}),
					new Ext.Button({
					  text: "На сейчас",
					  handler: function() {
						whentime_hour_empty_text = whentime_hour.emptyText = get_current_hour();
						whentime_minute_empty_text = whentime_minute.emptyText = get_current_minute();

						when_date.setValue('');
						whentime_hour.setValue('');
						whentime_minute.setValue('');
						// close FieldSet
						data_time_set.collapse(true);
					  }
					}),
					new Ext.Panel({
					    html:'Предварительные заказы передаются в такси компании за 45 минут до времени подачи машины.',
					    border: false
					})
					]
				}),

				additionalFields = new Ext.form.FieldSet({
					title: 'Дополнительно',
					checkboxToggle: true,
					collapsed: true,
					autoHeight: true,
					autoWidth: true,
					//width : 640 - 20,
					defaultType: 'textfield',
					items: [
					/*tb(var_before_whentime_help_text),
					whentime = new Ext.form.DateField({
						name: 'whentime',
						fieldLabel: 'Дата выполнения',
						id: 'id_whentime',
						width: 250,
						//format: 'Y-m-d H:i:s',
						readOnly: true,
						emptyText: whentime_empty_text,
						invalidText: 'Формат даты неверный. Дата должна быть вида YYYY-MM-DD HH:MM:SS'
						//, parseDate: function(value) { return whentime_parse_date(this, value); }
						//, preValidateDate: function(value, format) {
						//    return whentime_preValidateDate(value, format);
						//}
					}),

					ClearDate = new Ext.Button({
					  text: "На сейчас",
					  handler: FClearDate
					}),*/
					tb(var_before_timelimit_help_text),

					timeLimit = new Ext.form.NumberField({
						name: 'timelimit',
						fieldLabel: 'Длительность поиска (мин.)',
						id: 'id_timelimit',
						emptyText: 'Оставьте пустым, чтобы не ограничивать время поиска',
						invalidText: 'Введите целое число (время в минутах)',
						width: 250,
						allowDecimals: false,
						allowNegative: false,
						value: def(url_fields.waittime)
					}),

					/*combo_ref_type = new Ext.form.ComboBox({
						hideLabel: true,
						hidden: true,
						type: 'combobox',
						displayField: 'ref_type',
						fieldLabel: 'Выберите тип',
						hiddenName: 'ref_type',
						id: 'id_ref_type',
						valueField: 'ref_type',
						//было id
						mode: 'local',
						emptyText: 'Выберите тип',
						store: this.store_refordertype,
						typeAhead: true,
						selectOnFocus: true,
						width: 250,
						disabled: true
					}),*/

					tb(/*var_whentime_help_text*/var_contact_person_help_text),

					contact_person = new Ext.form.TextField({
						name: 'contact_person',
						id: 'id_contact_person',
						fieldLabel: 'Контактное лицо',
						emptyText: 'Контактное лицо',
						hidden: (vendor.rules.clients == 1),
						hideLabel: (vendor.rules.clients == 1),
						width: 250
					}),

					tb(var_contact_person_help_text),

					dcard = new Ext.form.TextField({
						name: 'dcard',
						id: 'id_dcard',
						fieldLabel: 'Скидка',
						emptyText: 'Номер дисконтной карты',
						hidden: (vendor.rules.dcard == 1),
						hideLabel: (vendor.rules.dcard == 1),
						width: 250
					}),

					tb(var_dcard_help_text),

					//{xtype:'label', text:'', width:200},
					dcard_info = new Ext.form.Label({
						name: 'dcard_info',
						id: 'dcard_info',
						fieldLabel: 'Инфо',
						style: 'padding-left: 185px;',
						//emptyText: 'Номер дисконтной карты',
						hidden: (vendor.rules.dcard == 1),
						hideLabel: (vendor.rules.dcard == 1),
						forId: 'id_dcard',
						width: 250
					}),

					comment = new Ext.form.TextArea({
						name: 'comment'
						//, type: 'textarea'
						, id: 'id_comment'
						, fieldLabel: 'Комментарий'
						, emptyText: comment_empty_text
						, hidden: (vendor.rules.comment == 1)
						, hideLabel: (vendor.rules.comment == 1)
						, height: 50
						, width: 250
						//, anchor: '1%'
					}),
					
                    useSmsField = new Ext.form.Checkbox({
						name: 'use_sms',
						id: 'id_use_sms',
						checked: Ext.util.JSON.decode(document.getElementById('id_vendor').value).use_sms * 1,
						fieldLabel: 'Уведомлять по СМС'
						//, anchor: '1%'
					}),
                    
					const_flag = getConstantOrder(),

					tb(var_const_flag_help_text)

					] //new Ext.form.FieldSet({ items [
				}), {
					title: 'Тип заказа',
					xtype: 'fieldset',
					checkboxToggle: true,
					collapsed: true,
					autoHeight: true,
					autoWidth: true,
					defaultType: 'checkbox',
					defaults: {
					    hideLabel: true
					},
					listeners: {
					    render: function(fieldSet){
					        
					        var types = Taxi.PreloadedData.orderTypes;
					        
					        if (types) {
    					        for(var typeId in types) {
    					            if (types.hasOwnProperty(typeId)) {
    					                var newCheckBox = fieldSet.add({
            					            refTypeId: typeId,
            					            boxLabel: types[typeId]
            					        });
            					        
            					        refOrderTypeFields.push(newCheckBox);
    					            }
    					        }
    					        if (fieldSet.layout.layout) {
    					            fieldSet.doLayout();
    					        }
    					        
					        } else {
					            fieldSet.hide();
					        }
					        
					        /*Ext.Ajax.request({
                				url: common_url + 'action.php?action=getrefordertype',
                				method: 'GET',
                				success: function(result, request) {
                				    try {
                    					var res = Ext.decode(result.responseText);
                    					
                    					if (res.reftype && Ext.isArray(res.reftype)) {
                    					    Ext.each(res.reftype, function(type){
                    					        var newCheckBox = fieldSet.add({
                    					            refTypeId: type.id,
                    					            boxLabel: type.ref_type
                    					        });
                    					        
                    					        refOrderTypeFields.push(newCheckBox);
                    					    });
                    					    fieldSet.doLayout();
                    					} else {
                    					    fieldSet.hide();
                    					}
                				    } catch (e) {
                				        if (console && console.log) {
                				            console.log(e);
                				        }
                				    }
                				}
                			});*/
					    }
					}
				}
				]
			},
			{
				//разделитель
				columnWidth: .1,
				autoHeight: true,
				layout: 'form'
			},
			{
				//правая колонка
				columnWidth: .39,
				cls: 'right-column',
				autoHeight: true,
				layout: 'form',
				items: [

				// Добавим Таблицу со списком постоянных заказов
				gridStat = new Ext.grid.GridPanel({
					height: 218,
					style: 'margin:6px',
               		frame: true,
					autoWidth: true,
					hidden: STAT_VAR != 1,
					title: 'Постоянные заказы',
					store: dsStat,
					cm: cmStat,
					trackMouseOver: false,
					animCollapse: false,
					selModel: new Ext.grid.RowSelectionModel({
						singleSelect: true
					}),
					viewConfig: {
						forceFit: true,
						enableRowBody: true,
						showPreview: true
				    },
				    listeners: {
				        render: function(){
				            new Ext.KeyMap(gridStat.body, {
                                key: 13, // or Ext.EventObject.ENTER
                                fn: function(key, e) {
                                    gridStat.fireEvent('rowclick', gridStat);
                                }
                            });
				        },
				        rowclick: function (grid) {
                			var record = grid.getSelectionModel().getSelected();
                			
                			if (record) {
                    			phone.setValue(record.get('phone'));
                    			combo_refplace.setValue(record.get('refplace'));
                    			combo_street.setValue(record.get('street'));
                    			house.setValue(record.get('house'));
                    			office.setValue(record.get('kvart'));
                    			podezd.setValue(record.get('podezd'));
                    			house_dest.setValue(record.get('house_dest'));
                    			primech.setValue(record.get('note'));
                    			combo_refplace_dest.setValue(record.get('refplace_dest'));
                    			combo_street_dest.setValue(record.get('street_dest'));
                    			contact_person.setValue(record.get('person'));
                    			comment.setValue(record.get('comment'));
                    			dcard.setValue(record.get('dcard'));
                    			const_flag.setValue(false);
                    			phone.onBlur();
                    			dcard.fireEvent('change', dcard);
                    			gridStat.submitButton.enable();
                			}
				        }
				    },
				    tbar:['Поиск:', {
				        xtype: 'textfield',
				        enableKeyEvents: true,
				        width: 100,
				        listeners: {
				            keyup: function(field, e) {
				                gridStat.store.clearFilter();
				                var value = field.getValue();
				                if (value) {
				                    gridStat.store.filter('tag', value, true);
				                }
				                
				                var key = e.getKey();
				                if (key == Ext.EventObject.TAB || key == Ext.EventObject.ENTER) {
				                    var recordIndex = gridStat.store.find('tag', field.getValue(), 0, true);
				                    var record = gridStat.store.getAt(recordIndex);
				                    if (record) {
				                        gridStat.selModel.selectRecords([record]);
				                        try {
				                            Ext.query('a[class="x-grid3-focus"]', gridStat.el.dom)[0].focus();
				                        } catch (e) {}
				                    } else if (key == Ext.EventObject.TAB) {
				                        e.stopEvent();
			                            field.focus();
				                    }
				                    
				                } else {
				                    gridStat.selModel.clearSelections();
				                    gridStat.submitButton.disable();
				                }
				            },
				            render: function(field){
				                gridStat.searchField = field;
				            }
				        }
				    }, '->', '-', {
				        xtype: 'button',
				        text: 'Отправить заказ',
                		disabled: true,
                		listeners: {
                		    render: function(btn){
                		        gridStat.submitButton = btn;
                		    }
                		},
                		handler: function() {
                		    submit.fireEvent('click', submit);
                		}
				    }]
				}),
				{id: 'log-div', xtype:'box', autoEl: 'div'},

				// Добавим Таблицу со списком вендоров
				gridVendors
				]

			}]
			//правая колонка
		}

		,

		tb(var_before_button_text)] //общая панель var fs = new Ext.FormPanel({
	});

	submit = fs.addButton({
		text: 'Отправить заказ',
		disabled: false,
		handler: function() {}
	});
	dcard_info.hide();
	
	function set_to_default(o) { if(o.combo.getValue() != o.query && o.query == '') o.cancel = true; } 
//	combo_refplace.on('beforequery', function(o) { set_to_default(o); }); /* commented by kirill */
//	combo_refplace_dest.on('beforequery', function(o) { set_to_default(o); });
	//combo_street.on('beforequery', function(o) { set_to_default(o); });


	//gridright.render('form-ct');

	/* -------------------------Обработка событий------------------------------  */

	/*this.store_refordertype.on('load',
		function() {
			combo_ref_type.setValue('Такси');
	});*/

	/*whentime.on('change',
	function(field, o, n) {

		current_value = new String(field.value); // new String ( Ext.get('id_whentime').getValue() );

		//попробуем перевести в сегодня + время
		if (current_value.length == 5) {

			var var_year = new String(dt.getFullYear());
			var var_month = new String((dt.getMonth() + 1));
			var var_date = new String(dt.getDate());

			var var_month = '0' + var_month;
			var var_date = '0' + var_date;

			if (var_date.length > 2) var_date = var_date.substring(1, 3);
			if (var_month.length > 2) var_month = var_month.substring(1, 3);

			now_value = var_year + '-' + var_month + '-' + var_date;

			var_reg = /\-/g;

			current_value = current_value.replace(var_reg, ':')
			//n =  Date.parse( now_value + ' ' +  current_value + ':00' );
			n = dt;
			return true;
		}
		return false;
	});*/

	combo_refplace_dest.street = combo_street_dest;
	combo_refplace_dest.house = house_dest;
	combo_street_dest.house = house_dest;

	combo_refplace.on('blur',
	  function(f) {
		if(f.selectedIndex == -1) {
		  combo_street.setValue('');
		  house.reset();
		  office.reset();
		  podezd.reset();
		}
	  }
	);

	combo_refplace_dest.on('blur', combo_refplace_dest_blur
	);

	combo_refplace.on('select',
	function() {

		if (combo_refplace.getValue() == 0) {
			//если код=о, значит очистка поля!!!
			combo_street.setValue('');
			house.reset();
			office.reset();
			podezd.reset();
			combo_refplace.setValue('');
			return;
		}
		//если  в конце символ *, значит ищем адрес в клиентских адресах
		displayValue = Ext.get('refplace1').getValue();

		if (displayValue.substr(displayValue.length - 1, 1) == SYMBOL_REFPLACE_ADDR) {

			combo_street.setValue('');
			house.reset();
			office.reset();
			podezd.reset();
			//combo_refplace.setValue('');

			Ext.Ajax.request({
				url: common_url + 'action.php?action=getaddress1&id=' + Ext.get('refplace').getValue(),
				method: 'GET',
				success: function(result, request) {
					srcresult = Ext.util.JSON.decode(result.responseText);
					combo_street.setValue(srcresult.street);
					house.setValue(srcresult.house);
					office.setValue(srcresult.apart);
					podezd.setValue(srcresult.porch);
				}
			});
			return false;
		};

		if (!this.store_street) {
			Ext.Ajax.request({
				url: common_url + 'action.php?action=getadress&id=' + combo_refplace.getValue(),
				method: 'GET',
				success: function(result, request) {
					srcresult = Ext.util.JSON.decode(result.responseText);
					combo_street.setValue(srcresult.street);
					house.setValue(srcresult.house);
				}
			});
		}
	});

	combo_street.on('select',
	function() {
		if (combo_street.getValue() == '&nbsp;') {
			//если код=о, значит очистка поля!!!
			combo_street.reset();
			house.reset();
			office.reset();
			podezd.reset();
			return;
		}
	});

	combo_street_dest.on('select', combo_street_dest_select);

	combo_refplace_dest.on('select', combo_refplace_dest_select);

	dcard.on('change',
	function(field) {
		//формирование лога справа
		proxy_right = new Ext.data.ScriptTagProxy({
			url: common_url + 'action.php?action=log_client&clientphone=' + phone.getValue() + '&password=' + Ext.get('id_dcard').getValue()
		});
		dsright.proxy = proxy_right;
		dsright.load();
		//*формирование лога справа

		dcard_var = '';
		//найдем д\код дисконтной карты, если есть
		if (field.getValue()!='')
		Ext.Ajax.request({
			url: common_url + 'action.php?action=getdcard&password=' + Ext.get('id_dcard').getValue(),
			method: 'GET',
			success: function(result, request) {
				if (!dcard_info.isVisible()) dcard_info.show();
				if (result.responseText != '')
				{
					result = Ext.util.JSON.decode(result.responseText);
					dcard_info.setText("Найдена "+result.dcard+" карточка!");
					need_toconfirm = result.need_toconfirm;
					dcard_var = field.getValue();
					
					if (Ext.isArray(result.ignored_vendors) && window.gridVendors) {
					    var sm = gridVendors.selModel;
					    var store = gridVendors.store;
					    Ext.each(result.ignored_vendors, function(ignoredVendor){
					        var id = ignoredVendor['vendor_id'];
					        
					        var recordIndex = store.find('id', id);
					        sm.deselectRow(recordIndex);
					    });
					}
					
					//dcard_info.setText("");
					//getConfirmation();
					//win.show();
				} else
				{
					dcard_info.getEl().setStyle("color: red;");
					dcard_info.setText("Карточка не найдена.");
				}
				
			}
		});
	})
	
	function getConfirmation(fn)
	{
		win = new Ext.Window({
			title: "Введите пароль используемой карточки",
			width: 286,
			height: 130,
			items:[
			   f = new Ext.form.FormPanel({
			       url:common_url+'action.php', 
				   labelAlign: 'left',
				   labelWidth: 70,
				   autoHeight: true,
				   waitMsgTarget: true,
				   frame: true,
				   monitorValid:true,
				   bodyStyle:'padding:12px',
				   buttons:[{
					   text:"Подтвердить",
		               formBind: true,	 
		               // Function that fires when user clicks the button 
		               handler:function(){
		                    f.getForm().submit({
		                        method:'POST', 
		                        waitTitle:'Соединение', 
		                        waitMsg:'Отправляются данные...',
		                        success: function(form, action)
		                    	{
		                    		dcard_var = Ext.get('id_dcard').getValue();
		                            conf_pwd = action.result.confirm_password;
		                        	Ext.Msg.alert('Статус', 'Данные подтверждения приняты!', function(btn, text){
		                                win.destroy();
		                                win = null;
		                                if (fn) fn();
		                            });
		                    	},
		 
		                        failure:function(form, action){
		                            if(action.response.status == 200){ 
		                                //obj = Ext.util.JSON.decode(action.response.responseText);
				                        dcard_var = '';
				                        conf_pwd = '';

		                                Ext.Msg.show({
		                                	   title:'Данные подтверждения не приняты!',
		                                	   msg: 'Пароль подтверждения неверный',
		                                	   buttons: Ext.Msg.OK,
		                                	   icon: Ext.MessageBox.ERROR
		                                });
		                                
		                                //Ext.Msg.alert('Данные подтверждения не приняты!', obj.errors.reason); 
		                            }else{ 
				                        dcard_var = '';
				                        conf_pwd = '';
		                                Ext.Msg.show({
		                                	   title:'Предупреждение!',
		                                	   msg: 'Ошибка с сервера : ' + action.response.responseText,
		                                	   buttons: Ext.Msg.OK,
		                                	   icon: Ext.MessageBox.ERROR
		                                });
		                            } 
		                            f.getForm().reset();
		                        } 
		                    }); 
					   }
				   }],
				   items:[
				      {xtype:'hidden', name:'password', height:1, hidden:true, hideLabel:true, value:Ext.get('id_dcard').getValue()},
				      {xtype:'hidden', name:'action', height:1, hidden:true, hideLabel:true, value:'confirmate_dcard_password'},
				      {
				    	xtype:'textfield',
						name: 'confirm_password',
						fieldLabel: 'Пароль',
						inputType: 'password',
						id: 'id_сonfirm_password',
						emptyText: '',
						width: 160
				      }
				   ],
				   onClose: function(th)
				   {
						f.getForm().reset();
						win.hide();
				   }
			   })
			]
		});
		
		  win.fieldFocus = function(){
		    var fn = function(){
		        try {
		            Ext.get('id_сonfirm_password').focus();
		        } catch (e) {}
		    }
		    fn();
		    // если эту функцию вызывать внутри обработчика события,
		    // то это событие может отменить фокус
            fn.defer(500)
		};
	}

	clientname.on('blur',
	function() {
		if (personal_phone.checked) contact_person.setValue(clientname.getValue());
	})

	personal_phone.on('check',
	function() {
		if (personal_phone.checked) contact_person.setValue(clientname.getValue());
	})

	/*
	  Обработчик события "Выделение" постоянного заказа.
	  Мы должны загрузить в элементы формы данные из выбранного заказа
	*/
	
	var processed_dcard = null;

	submit.on('click',
	function(this_el, is_premessages) {
		var datetime_filter = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/
		var oper_var = document.getElementById('id_oper').value;
		var additional_var = Ext.get('id_additional').getValue(); //Дополнительно
		var address_from_var = Ext.get('refplace1').getValue(); //адрес откуда забрать
		var address_dest_var = Ext.get('refplace_dest1').getValue(); //адрес куда
		var street_from_var = Ext.get('id_street_from').getValue(); //улица откуда забрать
		var street_dest_var = Ext.get('id_street_dest').getValue(); //улица куда
		var comment_var = Ext.get('id_comment').getValue(); // Комментарий
		var prim_var = Ext.get('id_primech').getValue(); // Примечание
		var contact_person_var = Ext.get('id_contact_person').getValue(); // Контакты
		var use_sms_var = useSmsField.getValue(); // Контакты
//		var ref_type_var = Ext.get('id_ref_type').getValue(); // Тип оплаты
		var ref_type_var = 'Такси'; // Тип заказа
		//var whentime_var = Ext.get('id_whentime').getValue(); //Время выполнения заказа
		var when_date_var = Ext.get('id_when_date').getValue(); // Дата выполнения заказа
		var whentime_hour_var = Ext.get('id_whentime_hour').getValue(); // Час выполнения заказа
		var whentime_minute_var = Ext.get('id_whentime_minute').getValue(); // Минута выполнения заказа
		var whentime_var = when_date_var + ' ' + whentime_hour_var + ':' + whentime_minute_var + ':00';
		var timelimit_var = Ext.get('id_timelimit').getValue(); //timeLimit.getValue();

		// Получаем ID клиента, если он конечно задан =)
		var client_name_var = Ext.get('id_clientname').getValue() == "Имя клиента" ? '' : Ext.get('id_clientname').getValue();
		var client_personal_phone_var = personal_phone.getValue() ? 1 : 0;
		var ref_order_type = getRefOrderTypes();
		//var dcard_var  = Ext.get('id_dcard').getValue(); // Номер дисконтной карты
		//if  (dcard_var  == 'Номер дисконтной карты') dcard_var = '';
		/*if (whentime_var == whentime_empty_text) {
			whentime_var = '';
		}*/
		if(when_date_var == when_date_empty_text &&
			whentime_hour_var == whentime_hour_empty_text &&
			whentime_minute_var == whentime_minute_empty_text)
		{
			whentime_var = '';
		}

		if (timelimit_var == 'Оставьте пустым, чтобы не ограничивать время поиска') { timelimit_var = ''; }

		if (!datetime_filter.test(whentime_var) && whentime_var != '') {
			Ext.MessageBox.alert('Добавление заказов', 'Не корректный формат даты выполнения заказа!',
				function() { Ext.get('id_whentime').focus(true); } );
			return false;
		}
		
		if (!phone.validatePhone())
		{
			Ext.MessageBox.alert('Добавление заказов', 'Не корректный формат номера телефона!',
					function() { Ext.get('id_phone_text_field').focus(true); } );
			return false;
		} else phone_var = phone.getValue();

		if (contact_person_var == 'Контактное лицо') { contact_person_var = ''; }
		if (additional_var == additional_empty_text) { additional_var = ''; }
		if (address_from_var == 'Быстрый адрес') { address_from_var = ''; }
		if (address_dest_var == 'Быстрый адрес') { address_dest_var = ''; }
		if (street_from_var == 'Улица с которой необх. забрать') { street_from_var = ''; }
		if (street_dest_var == 'Улица куда ехать') { street_dest_var = 'По городу'; }
		if (prim_var == primech_empty_text) { prim_var = ''; }
		if (comment_var == comment_empty_text) { comment_var = ''; }
		if (ref_type_var == 'Выберите тип') { ref_type_var = 'Такси'; }

		if (street_from_var == '') {
			Ext.MessageBox.alert('Добавление заказов', 'Не заполненно поле "Улица (откуда)"!',
				function() { Ext.get('id_street_from').focus(true); } );
			return false;
		}

		ignored_vendors = gridVendors.getList();
		
		function save()
		{
		    var dcard_var = '';
		    if (processed_dcard) {
		        dcard_var = processed_dcard.value;
		    }
		    
    		if (is_premessages != 1) {
    				_send_vendor_order(phone_var, oper_var, additional_var, getCurrentClientId(),
    		  client_name_var, client_personal_phone_var, address_from_var, address_dest_var,
    		  street_from_var, street_dest_var, contact_person_var, prim_var, ref_type_var, comment_var,
    		  whentime_var, dcard_var, conf_pwd, timelimit_var, ignored_vendors, ref_order_type, use_sms_var);
    		} else { // Рассчет стоимости заказа
    			Ext.Ajax.request({
    				method: 'POST',
    				url: common_url + 'action.php',
    				params: {
    					action: 'add_premessage',
    					vendorid: Ext.get('id_vendorid').getValue(),
    					idid: Ext.get('id_idid').getValue(),
    					phone: phone_var,
    					oper: oper_var,
    					additional: additional_var,
    					address_from: address_from_var,
    					street_from: street_from_var,
    					house: Ext.get('house_text_field').getValue(),
    					office: Ext.get('id_office').getValue(),
    					podezd: Ext.get('id_podezd').getValue(),
    					address_dest: address_dest_var,
    					street_dest: street_dest_var,
    					house_dest: Ext.get('id_house_dest').getValue(),
    					contact_person: contact_person_var,
    					primech: prim_var,
    					tp_order: ref_type_var,
    					comment: comment_var,
    					whentime: whentime_var,
    					ordertype: ref_order_type,
    					dcard: dcard_var, //найденная карта по dcard
    					confirm_password: conf_pwd, // подтверждение пароля
    					client_id: currentClientId,
    					client_personal_phone: client_personal_phone_var,
    					client_phone: phone_var,
    					client_name: client_name_var,
    					timelimit: timelimit_var,
    					use_sms: use_sms_var,
    					ignored_vendors: ignored_vendors
    				},
    				success: function(response, options) {
    					premessage_id = response.responseText;
    					stop_price = false;
    					Ext.getCmp('start_calc_prices_button').disable();
    					Ext.getCmp('stop_calc_prices_button').enable();
    					gridVendors.startCheckPrices();
    				}
    			});
    		}
		}
		
		var dcard_value = Ext.get('id_dcard').getValue();
		
		if (dcard_value !== 'Номер дисконтной карты') {
		    
		    if (!processed_dcard || dcard_value !== processed_dcard.value) {
		
		        processed_dcard = null;
		        
        		Ext.Ajax.request({
        			url: common_url + 'action.php?action=getdcard&password=' + dcard_value,
        			method: 'GET',
        			success: function(result, request) {
        			    
        		        if (!dcard_info.isVisible()) {
        		            dcard_info.show();
        		        }
        				if (result.responseText != '') {
        					result = Ext.util.JSON.decode(result.responseText);
        					dcard_info.setText("Найдена "+result.dcard+" карточка!");
        					need_toconfirm = result.need_toconfirm;
        					dcard_var = dcard_value;
        					
        					if (Ext.isArray(result.ignored_vendors) && window.gridVendors) {
        					    var sm = gridVendors.selModel;
        					    var store = gridVendors.store;
        					    Ext.each(result.ignored_vendors, function(ignoredVendor){
        					        var id = ignoredVendor['vendor_id'];
        					        
        					        var recordIndex = store.find('id', id);
        					        sm.deselectRow(recordIndex);
        					    });
        					}
        					
        					processed_dcard = {
        					    value: dcard_value,
        					    confirm: result.need_toconfirm ? 1 : 0
        					};
        					
        					submit.fireEvent('click', submit, is_premessages);
        
        				} else {
        					alert("Карточка не найдена.");
        				}
        			}
        		});
		    } else if (processed_dcard) {
		        if (processed_dcard.confirm) {
					getConfirmation(save);
					win.show();
					win.fieldFocus();
					return false;
				} else {
					save();
				}
		    } else {
		        save();
		    }
		} else {
		    processed_dcard = null;
		    save();
		}

		
				/*if (!city_filter.test(phone_var) && !mobil_filter.test(phone_var) && phone_var != '') {
			Ext.MessageBox.show({
				title: 'Добавление заказов',
				msg: 'Не корректный формат телефона(например 352-45-58 - для городского и 097-125-02-19 - моб.)!',
				buttons: Ext.MessageBox.OK,
				icon: Ext.MessageBox.ERROR,
				fn: function() {
					_send_vendor_order(phone_var, oper_var, additional_var, getCurrentClientId(),
						client_name_var, client_personal_phone_var, address_from_var, address_dest_var, street_from_var, street_dest_var,
											contact_person_var, prim_var, ref_type_var, comment_var, whentime_var, dcard_var,
											timelimit_var, ignored_vendors);
										return;
				}
			});
		}
				else */

		// See bug 106#9
		/*else if (Ext.get('house_text_field').getValue() == '') {
			Ext.MessageBox.show({
				title:'Добавление заказов',
				msg: 'Не заполненно поле "Номер дома (Откуда)"!',
				buttons: Ext.Msg.OK,
				fn: function(buttonId) {
					proceedEmpty = (buttonId == Ext.MessageBox.YES);
					Ext.get('house_text_field').focus(true);
				}

			});
			return false;
		}*/

	}); //submit

	function _send_vendor_order(phone_var, oper_var, additional_var, currentClientId, client_name_var,
		client_personal_phone_var, address_from_var, address_dest_var, street_from_var, street_dest_var,
		contact_person_var, prim_var, ref_type_var, comment_var, whentime_var, dcard_var, confirm_password,
		timelimit_var, ignored_vendors, ref_order_type, use_sms_var) {
			//если сделать постоянным заказом

			if (const_flag.checked) {
				//спросим название заказа
				var tag_name_var = '';
				//спросим как звать постоянный заказ будет
				tag_name_var = '';
				var win1 = Ext.getCmp('win1');
				if (!win1) {
					win1 = new Ext.Window({
						id: 'win1',
						title: 'Добавить заказ в постоянные',
						modal: true,
						closeAction: 'hide',
						width: 500,
						height: 120,
						layout: 'fit',
						plain: true,
						bodyStyle: 'padding:5px;',
						buttonAlign: 'center',
						items: [form = new Ext.form.FormPanel({
							labelAlign: 'left',
							labelWidth: 150,
							baseCls: 'x-plain',
							items: [new Ext.form.TextField({
								name: 'win1_textnote',
								type: 'textfield',
								fieldLabel: 'Введите название метки',
								id: 'id_win1_textnote',
								width: 300
							})]
						})],
						//items: [
						buttons: [{
							text: 'Добавить',
							handler: function() {
								tag_name_var = Ext.get('id_win1_textnote').getValue();
								//не даем сделать пустою метку
								if (tag_name_var == '') return false;
								SendData(phone_var, oper_var, additional_var, currentClientId,
								client_name_var, client_personal_phone_var, address_from_var,
								address_dest_var, street_from_var, street_dest_var, contact_person_var,
								prim_var, ref_type_var, comment_var, whentime_var, dcard_var, confirm_password,
								timelimit_var, ignored_vendors, ref_order_type);

								win1.close();
								//формируем постоянный заказ новый
								Ext.Ajax.request({
									method: 'POST',
									url: common_url + 'action.php',
									params: {
										action: 'const_new',
										vendorid: Ext.get('id_vendorid').getValue(),
										idid: Ext.get('id_idid').getValue(),
										dcard: dcard_var, //найденная карта по dcard
										confirm_password: confirm_password, // подтверждение пароля
										phone: phone_var,
										oper: oper_var,
										additional: additional_var,
										street_from: street_from_var,
										house: Ext.get('house_text_field').getValue(),
										office: Ext.get('id_office').getValue(),
										podezd: Ext.get('id_podezd').getValue(),
										street_dest: street_dest_var,
										house_dest: Ext.get('id_house_dest').getValue(),
										contact_person: contact_person_var,
										primech: prim_var,
										tp_order: ref_type_var,
										comment: comment_var,
										tag: tag_name_var,
										whentime: whentime_var,
										messageid: messageid_var,
										use_sms: use_sms_var,
										ordertype: ref_order_type
									},
									//params:
									waitMsg: 'Сохранение даных...',

									success: function(response, options) {
										//Ext.MessageBox.alert("Данные сохранены! ");
										location.href = './../grid/grid.php' + ADD_URL_PARAMS;
										return true;
									},

									failure: function(response, options) {
										Ext.MessageBox.error('', "Сохранение невозможно: " + response.responseText);
										return false;
									}
								}); //Ext.Ajax.request({ method:'POST',

							} //function()
						},
						{
							text: 'Закрыть',
							handler: function() {
									win1.close();
							}
						}]
					}); //win1 = new Ext.Window(
				}
				win1.show(); //выведем вопрос о названии метки
			} else {
				SendData(phone_var, oper_var, additional_var, currentClientId, client_name_var,
					client_personal_phone_var, address_from_var, address_dest_var, street_from_var,
					street_dest_var, contact_person_var, prim_var, ref_type_var, comment_var,
					whentime_var, dcard_var,confirm_password, timelimit_var, ignored_vendors, ref_order_type, use_sms_var);
			} //флажок установлен
			//*если сделать постоянным заказом
		}

	// Когда загрузили наш постоянный список быстрых адресов, надо обновить
	// промежуточное хранилище
	/*this.store.on('datachanged', function(){
		updateRefPlaceStore();
	});*/

	/*clientsRefPlaceStore.on('datachanged', function(){
		updateRefPlaceStore();
	});*/


	/*function updateRefPlaceStore(){
		refPlaceStore.removeAll();
		refPlaceStore.add(this.store.getRange());
		refPlaceStore.add(clientsRefPlaceStore.getRange());
	}*/

	// Just to be sure...
	/*refPlaceStore.on('add',  function (){ });*/

	//как только прочли, кидаем данные на форму
	rDs.on('datachanged',
	function() {
		if (messageid_var != 0) {
			grid.selModel.selectFirstRow();
			selections = grid.selModel.getSelected();
			//tag.setValue(selections.json.tag);
			phone.setValue(selections.json.phone);
			combo_refplace.setValue('');
			combo_street.setValue(selections.json.street);
			house.setValue(selections.json.house);
			house_dest.setValue(selections.json.house_dest);
			office.setValue(selections.json.kvart);
			podezd.setValue(selections.json.podezd);
			primech.setValue(selections.json.note);
			combo_refplace_dest.setValue('');
			combo_street_dest.setValue(selections.json.street_dest);
			contact_person.setValue(selections.json.person);
			comment.setValue(selections.json.comment);
			//whentime.setValue(selections.json.whentime);
		}
	});

	function dsright_onload(){
		if (LOGGING_VAR == 1) { // Just to be sure we won't accidentally draw log panel
			logTemplate.overwrite('log-div', dsright.reader.jsonData.logs, true);
		}
	}
	dsright.on('load', dsright_onload);

	//как только прочли, кидаем данные на форму
	/*ds_clients.on('datachanged',
	function() {
		grid_clients.selModel.selectFirstRow();
		selections = grid_clients.selModel.getSelected();
		if (selections.get('clientname') != '') { clientname.setValue(selections.get('clientname')); }
		if (selections.get('personal') != '') { personal_phone.setValue(selections.get('personal')); }
		if (selections.json.personal == 1) contact_person.setValue(selections.json.clientname);
		setCurrentClientId(selections.get('threadid'));
	});*/

	fs.render('form-ct1');

//	if (vendor.rules.register == 1)
//		fs.getEl().insertHtml('afterEnd', '<a href="./../register/register.php?idid='+Ext.get('id_idid').getValue()+'">создать персональный аккаунт в систем Единого Такси</a>');

	//текст помощи по ?help=2
	sethelp(phone.el, var_phone_help_text);
	sethelp(clientname.el, var_clientname_help_text);
	sethelp(personal_phone.el, var_personal_phone_help_text);
	sethelp(combo_refplace.el, var_combo_refplace_help_text);
	sethelp(combo_street.el, var_combo_street_help_text);
	sethelp(house.el, house_help_text);
	sethelp(house_dest.el, var_office_help_text);
	sethelp(office.el, var_podezd_help_text);
	sethelp(podezd.el, var_podezd_help_text);
	sethelp(primech.el, var_primech_help_text);
	sethelp(combo_refplace_dest.el, var_combo_refplace_dest_help_text);
	sethelp(combo_street_dest.el, var_combo_street_dest_help_text);
	sethelp(contact_person.el, var_contact_person_help_text);
	sethelp(dcard.el, var_dcard_help_text);
	sethelp(comment.el, var_comment_help_text);
	//sethelp(whentime.el, var_whentime_help_text);
	sethelp(const_flag.el, var_const_flag_help_text);

	sethelp(submit.el, var_before_button_text);

	//*текст помощи

	//текст помощи по ?help=2
	function sethelp(element_var, text_var) {
		if (HELP_VAR != 2) return;
		new Ext.ToolTip({
			showDelay: 100,
			trackMouse: true,
			target: element_var,
			html: text_var,
			title: 'Подсказка:'
		});
	};

	//текст помощи по ?help=1
	// Changedby Denis: Мы не показываем тулбар, если текст на нем пустой.
	function tb(var_text) {
		return new Ext.Toolbar({
			hidden: (HELP_VAR != 1) || (var_text=='') ? true: false,
			items: [new Ext.Toolbar.TextItem({
				css: 'display: none;',
				text: '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + var_text
			})]
		})
	};

	function SendData(phone_var, oper_var, additional_var, client_id_var, client_name_var, client_personal_phone_var,
		address_from_var, address_dest_var, street_from_var, street_dest_var, contact_person_var, prim_var, ref_type_var,
		comment_var, whentime_var, dcard_var, confirm_password, timelimit_var, ignored_vendors, ref_order_type, use_sms_var) {
		/* ---------------------------Отправка запроса серверу---------------- */
		Ext.Ajax.request({
			method: 'POST',
			url: common_url + 'action.php',
			params: {
				action: 'save',
				vendorid: Ext.get('id_vendorid').getValue(),
				idid: Ext.get('id_idid').getValue(),
				phone: phone_var,
				oper: oper_var,
				additional: additional_var,
				address_from: address_from_var,
				street_from: street_from_var,
				house: Ext.get('house_text_field').getValue(),
				office: Ext.get('id_office').getValue(),
				podezd: Ext.get('id_podezd').getValue(),
				address_dest: address_dest_var,
				street_dest: street_dest_var,
				house_dest: Ext.get('id_house_dest').getValue(),
				contact_person: contact_person_var,
				primech: prim_var,
				tp_order: ref_type_var,
				comment: comment_var,
				whentime: whentime_var,
				ordertype: ref_order_type,
				dcard: dcard_var, //найденная карта по dcard
				confirm_password: confirm_password,
				client_id: client_id_var,
				client_personal_phone: client_personal_phone_var,
				client_phone: phone_var,
				client_name: client_name_var,
				timelimit: timelimit_var,
				ignored_vendors: ignored_vendors,
				use_sms: use_sms_var,
				dest_addresses: CalcAddresses()
			},

			waitMsg: 'Сохранение даных...',
			success: function(response, options) {
				result = Ext.util.JSON.decode(response.responseText);
				if (result.success)
				Ext.MessageBox.show({
					title: 'Новый заказ',
					msg: 'Заказ успешно сохранен!',
					buttons: Ext.MessageBox.OK,
					icon: Ext.MessageBox.Alert,
					fn: function() {
						if(result.message!='' && result.message>0) {
							/*if(window.document.getElementById('redirect_to_card').value && whentime_var == '') {*/
								location.href = './../order_card/order_card.php' + ADD_URL_PARAMS + '&messageid=' + result.message;
							/*} else {
								location.href = './../grid/grid.php' + ADD_URL_PARAMS;
							}*/
						}
					}
				});
				else
					Ext.MessageBox.error('', "Сохранение невозможно: " + result.message);
			},
			failure: function(response, options) {
				Ext.MessageBox.error('', "Сохранение невозможно: " + response.responseText);
				dialog.hide();
				return;
			}
		});
	}

	/*
	  Ищет клиента с данным номером (указан в поле номер телефона
	  у данного вендора в таблице clients.

	  Если находит - загружает полученные данные в поля Имя клиента и
	  Личный телефон
	*/
	/*function searchClientByPhone() {
		proxy_clients = new Ext.data.HttpProxy({
			url: common_url + 'action.php',
			baseParams: {
			    action: 'search_client',
			    clientphone: getPhone(),
			    vendorid: vendorid_var
			}
		});
		ds_clients.proxy = proxy_clients;
		ds_clients.load();
		setCurrentClientId('');
	}*/

	/**
	Устанавливаем новый ID клиента, который нашли по номеру телефона.<b>
	Т.к. текущий список мест зависит от id клиента, мы обновим и его (точнее,
	ту часть, которая зависит).
	*/
	/*function setCurrentClientId(newId){
	    return;
		currentClientId = newId;
		for (record in clientsRefPlaceStore.getRange()) {
			refPlaceStore.remove(record);
		}
		if ((currentClientId == '') && (allClientTag == 0) ) {
			clientsRefPlaceStore.removeAll();
			updateRefPlaceStore();
		}
		else {
			clientsRefPlaceStore.proxy.conn.url = common_url + 'action.php?action=getclientrefplace&vendorid='
					+ vendorid_var + '&all=' + allClientTag + '&clientid=' + newId;
			clientsRefPlaceStore.load();
		}
	}*/

	function getCurrentClientId(){
		return currentClientId;
	}

	function FClearDate(){
	   //addClientRefPlace(Ext.get('id_street_dest').getValue(), Ext.get('id_house_dest').getValue(), '', '');
	   whentime.setValue('');
	}

	/*function onRefPlaceToButton(butt) {
		var n = dest_arr.length + 1;
		var i = -1;
		for (var pos=0; pos<addressto_fieldset.items.length; pos++) {
			if (addressto_fieldset.items.items[pos].getXType() == 'panel')
				if (addressto_fieldset.items.items[pos].buttons[0].id == butt.id)
					{i = Math.floor((pos-3)/4); break; }
		}
		var street = (addressto_fieldset.items.items[pos-1]);
		var house  = (addressto_fieldset.items.items[pos-2]);

		addClientRefPlace(street.getValue(), house.getValue(), '', '');
	}*/

	/*function onRefPlaceFromButton() {
		addClientRefPlace(Ext.get('id_street_from').getValue(),
			Ext.get('house_text_field').getValue(),
			Ext.get('id_podezd').getValue(),
			Ext.get('id_office').getValue());
	}*/

	/**
		Обрабатывает добавление нового быстрого адреса для клиента.
		Одна из основных обязанностей данной функции - диспетчерезация
		текущего состояния клиента.
	*/
	function addClientRefPlace(_street, _house, _porch, _apart) {
		client_id = getCurrentClientId();
		if (client_id == '') {
			p = phone.getValue();
			if ((p != '') && (p != null) && (p != undefined)) {
				Ext.Ajax.request({
					method: 'GET',
					url: common_url + 'action.php',
					params: {
						action: 'add_client',
						client_personal_phone: personal_phone.getValue() ? 1 : 0,
						client_phone: getPhone(),
						client_name: clientname.getValue(),
						vendorid: vendorid_var
					},
					waitMsg: 'Сохранение даных о пользователе...',

					success: function(response, options) {
						srcresult = Ext.util.JSON.decode(response.responseText);
						if (srcresult.id != '') {
							/*setCurrentClientId(srcresult.id);*/
							internalAddClientRefPlace(_street, _house, _porch, _apart);
							return true;
						}
						else {
							Ext.MessageBox.error('', "Невозможно добавить быстрый адрес: ошибка при сохранении клиента (" + response.responseText + ")");
							return false;
						}
						return false;
					},

					failure: function(response, options) {
						Ext.MessageBox.error('', "Невозможно добавить быстрый адрес: ошибка при сохранении клиента (" + response.responseText + ")");
						return;
					}
				});
			}
			else {
				Ext.MessageBox.error('Новый быстрый адрес', 'Нельзя задать быстрый адрес для клиента без телефона!');
				return false;
			}
		}
		else {
			internalAddClientRefPlace(_street, _house, _porch, _apart);
		}
	}

	function internalAddClientRefPlace(_street, _house, _porch, _apart) {
		rpfw = new Ext.Window({
			id: 'rpfw',
			title: 'Добавить адрес в быстрые адреса',
			modal: true,
			closeAction: 'hide',
			width: 500,
			height: 120,
			//layout: 'fit',
			plain: true,
			bodyStyle: 'padding:5px;',
			buttonAlign: 'center',
			items: [
				//форма
				new Ext.form.TextField({
					title: 'Новый быстрый адрес',
					name: 'textnote',
					type: 'textfield',
					fieldLabel: 'Название быстрого адреса',
					id: 'rpfw_textnote',
					width: 470,
					height: 40
				})
			],

			buttons: [
				{text: 'Добавить',
				handler: function() {
					   if (Ext.get('rpfw_textnote') == undefined || Ext.get('rpfw_textnote').getValue() == '') {
						   Ext.MessageBox.error('Новый быстрый адрес', 'Название быстрого адреса не может быть пустым!');
						   return false;
					   }
						  Ext.Ajax.request({
							  method: 'GET',
							  url: common_url + 'action.php',
							  params: {
								  action: 'add_refplace',
								  street: _street,
								  house: _house,
								  porch: _porch,
								  apart: _apart,
								  name: Ext.get('rpfw_textnote').getValue(),
								  vendorid: vendorid_var,
								  clientid: getCurrentClientId()
							  },
							  waitMsg: 'Сохранение даных...',

							  success: function(response, options) {
								  Ext.MessageBox.alert('Добавление быстрого адреса', 'Новый быстрый адрес успешно добавлен!');
								  return false;
							  },

							  failure: function(response, options) {
								  Ext.MessageBox.error('', "Невозможно добавить быстрый адрес: " + response.responseText);
								  return;
							  }
						  });
						rpfw.close();
				 }
				},
				{
					text: 'Отмена',
					handler: function() {
					rpfw.hide();
				}
			 }]
		});
		rpfw.show();
	};

	init_fields();

	function init_fields() {
		var ids = ["id_zaf", "id_zaw", "id_zsf", "id_zsw", "id_zhf", "id_zhw", "id_zpf", "id_note", "id_pinfo", "id_dc", "id_tw"];
		var fields_ids = ["refplace1", "refplace_dest1", "id_street_from", "id_street_dest", "house_text_field",
											"id_house_dest", "id_podezd", "id_primech", "id_additional", "id_dcard", "id_whentime"];
		for(var i = 0; i < ids.length; i++) {
			value = document.getElementById(ids[i]).value;
			if(value!='') document.getElementById(fields_ids[i]).value = value;
		}
	};
	function getConstantOrder() {
		return ((document.getElementById('id_constant_order').value == 0) ?
			(new Ext.form.Hidden()) :
			(new Ext.form.Checkbox({
				name: 'const_flag',
				hidden: (vendor.rules.constant == 1),
				hideLabel: true,
				fieldLabel: 'Сделать постоянным',
				boxLabel: (vendor.rules.constant == 1 ? '' : 'Добавить заказ в список Ваших постоянных заказов'),
				id: 'id_const_flag',
				//disabled:,
				//width      : 150,
				checked: false
			}))
		);
	};

	function whentime_parse_date(el, value) {
		current_value = value;

		if (current_value.length < 16) {

			//вытащим время
			var r = /[-:]/;
			var valueParts = current_value.split(r);

			var var_hour = '0' + valueParts[0];
			var var_min = '0' + valueParts[1];
			var var_sec = (valueParts.length > 2) ? '0' + valueParts[2] : '00';

			if (var_hour.length > 2) var_hour = var_hour.substring(1, 3);
			if (var_min.length > 2) var_min = var_min.substring(1, 3);
			if (var_sec.length > 2) var_sec = var_sec.substring(1, 3);

			//вытащим текущую дату
			var var_year = new String(dt.getFullYear());
			var var_month = new String((dt.getMonth() + 1));
			var var_date = new String(dt.getDate());

			var var_month = '0' + var_month;
			var var_date = '0' + var_date;

			if (var_date.length > 2) var_date = var_date.substring(1, 3);
			if (var_month.length > 2) var_month = var_month.substring(1, 3);

			value = var_year + '-' + var_month + '-' + var_date + ' ' + var_hour + ':' + var_min + ':' + var_sec;
		}
		if (!value || value instanceof Date) {
			return value;
		}
		if (el.preValidateDate(value, el.format)) {
			var v = Date.parseDate(value, el.format);
		}
		if (!v && el.altFormats) {
			if (!el.altFormatsArray) {
				el.altFormatsArray = el.altFormats.split("|");
			}
			for (var i = 0,
			len = el.altFormatsArray.length; i < len && !v; i++) {
				if (el.preValidateDate(value, el.altFormatsArray[i])) {
					v = Date.parseDate(value, el.altFormatsArray[i]);
				}
			}
		}
		return v;
	}

	function Claim() {	////// Претензия
		window._messageid = 0;
		Order.Claim();
		//store_notes.load();
	}	// Претензия

	function whentime_preValidateDate(value, format) {
		var d, m, y, r = /[-\/\\.]/;
		var valueParts = value.split(r);
		var formatParts = format.split(r);

		if (!valueParts || !formatParts) return false;
		for (var i = 0; i < formatParts.length; i++) {
			switch (formatParts[i]) {
			case 'm':
				//leading 0
			case 'n':
				//no leading 0
				m = valueParts[i];
				break;
			case 'd':
				//leading 0
			case 'j':
				//no leading 0
				d = valueParts[i];
				break;
			case 'y':
				//2-digit
			case 'Y':
				//4-digit
				y = valueParts[i];
				break;
			}
		}
		if (m && (m < 1 || m > 12)) return false;
		if (d) {
			y = y || new Date().getFullYear();
			var isLeapYear = ((y & 3) == 0 && (y % 100 || (y % 400 == 0 && y)));
			var daysInMonth = [31, (isLeapYear ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
			m = m ? m - 1 : new Date().getMonth();
			var days = daysInMonth[m];
			if (d < 1 || d > days) return false;
		}
		return true;
	}
	
	// HOT KEYS
	// http://extjs.com/forum/showthread.php?t=22812 (Extjs Forum: AccessKeys (Global keymap) )
	var globalKeyMap = new Ext.KeyMap(document);
    globalKeyMap.accessKey = function(key, handler, scope) {
        var h = function(n, e) {
            e.preventDefault();
            handler.call(scope || this, n, e);
        };
        this.on(key, h, scope);
    };
	
    globalKeyMap.accessKey(Ext.EventObject.F2, function(){
        
        phone.setValue();
		combo_refplace.setValue();
		combo_street.setValue();
		house.setValue();
		office.setValue();
		podezd.setValue();
		house_dest.setValue();
		primech.setValue();
		combo_refplace_dest.setValue();
		combo_street_dest.setValue();
		contact_person.setValue();
		comment.setValue();
		dcard.setValue();
		const_flag.setValue(false);
		phone.onBlur();
		dcard.fireEvent('change', dcard);
		gridStat.submitButton.disable();
		clientname.setValue();
		additional.setValue();
		
		//По Ф2 - нужно фокус сатвить на ввод телефона
		phone.focus();
    });

    //F3 - ввод номер дисконтной карточки при ввода заказа
    globalKeyMap.accessKey(Ext.EventObject.F3, function() {
        additionalFields.expand();
        dcard.focus();
    });
    //F4 - указание времнеи на когда при вволда заказа
    globalKeyMap.accessKey(Ext.EventObject.F4, function() {
        data_time_set.expand();
        whentime_hour.focus();
    });
    //Ctrl+s включать отключать уведомление по СМС
    globalKeyMap.accessKey({key: Ext.EventObject.S, ctrl: true}, function() {
        additionalFields.expand();
        useSmsField.toggleValue();
    });
    //F6 - переход на комментарий к заказу
    globalKeyMap.accessKey(Ext.EventObject.F6, function() {
        additionalFields.expand();
        comment.focus();
    });
    //ctrl+d - длительность поиска
    globalKeyMap.accessKey({key: Ext.EventObject.D, ctrl: true}, function() {
        additionalFields.expand();
        timeLimit.focus();
    });
    globalKeyMap.accessKey(Ext.EventObject.F9, function() {
        submit.fireEvent('click', submit);
    });
    globalKeyMap.accessKey(Ext.EventObject.F8, function() {
        gridVendors.startCalculate();
    });
});
