/*
 * 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 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 dcard_var = ''; //номер дисконтной карточки

	var currentClientId = ''; // ID Клиента (из ьаблицы Clients).
	// Возможно лучшим решением в данном случае будет использование составного
	// первичного ключа (phone, vendorid), вместо того, чтобы заморачиваться
	// с этим ID

	var allClientTag = document.getElementById('id_all_client_tag').value; // По умолчанию загружаем только те быстрые адреса, которые принадлежат данному клиенту

	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; // показывать таблицу с компаниями или нет
	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 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();
	if (vendor.rules.pre == 1) STAT_VAR = false;

	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 = 'Ваш комментарий к заказу для администрации';

	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.Store({
		proxy: new Ext.data.ScriptTagProxy({
			url: common_url + 'action.php?action=const_getdata&vendorid=' + vendorid_var
		}),
		reader: new Ext.data.JsonReader({
			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,
		autoload: true
	});
	dsStat.setDefaultSort('tag', 'asc');
	dsStat.load({
		params: {
			start: 0,
			limit: 10
		}
	});

	var ds_clients = new Ext.data.Store({
		proxy: new Ext.data.ScriptTagProxy({
			url: common_url + 'action.php?action=search_client&clientphone='
					+ initialPhone + '&vendorid=' + vendorid_var
		}),
		reader: new Ext.data.JsonReader({
			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.Store({
		proxy: new Ext.data.ScriptTagProxy({
			url: common_url + 'action.php?action=const_getorder&messageid=' + messageid_var
		}),
		reader: new Ext.data.JsonReader({
			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.Store({
			url: common_url + 'action.php?action=getstreet',
			reader: new Ext.data.JsonReader({
				totalProperty: 'totalCount',
				root: 'refstreet'
			},
			[{ name: 'street' }]),
			autoLoad: true
		});
		//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
		})
		]),

		{

			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 Ext.form.TextField({
						name: 'phone',
						fieldLabel: 'Телефон',
						id: 'id_phone_text_field',
						emptyText: 'моб.: ххх-ххх-хх-хх, город: ххх-хх-хх',
						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: 'Имя клиента',
						autoWidth: true
					}), 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: [

					tb(var_before_combo_refplace_help_text),

					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: [

					tb(var_before_combo_refplace_dest_help_text),

					combo_refplace_dest = new Ext.form.AddressComboBox({
						id: 'refplace_dest1',
						hiddenName: 'refplace_dest',
						value: def(url_fields.addressto)
					}),

					tb(var_combo_refplace_dest_help_text),

					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: "Добавить адрес",
								handler: AddAddress
							}),
							addressto_del = new Ext.Button({
								text: "Удалить адрес",
								hidden:true,
								handler: DeleteAddress
							})
						]
					})
					]
				}),

				data_time_set = new Ext.form.FieldSet({
					title: 'Дата и время подачи',
					collapsible: 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',
						//minValue: '12:00 AM',
						//maxValue: '11:00 PM',
						increment: 60,
						format: 'H'
						, width: 127
						, readOnly: false
						, emptyText: whentime_hour_empty_text
						, value: def(url_fields.pretime_hours)  
				}),

					whentime_minute = new Ext.form.ComboBox({
						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.form.FieldSet({
					title: 'Дополнительно',
					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_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),

					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: 150
						, width: 250
						//, anchor: '1%'
					}),

					const_flag = getConstantOrder(),

					tb(var_const_flag_help_text)

					] //new Ext.form.FieldSet({ items [
				})//,

				//Список такси
				//new Ext.form.FieldSet({
				//    title: 'Заказ для компаний',
				//    autoHeight: true,
				//    autoWidth: true,
				//    //width : 640 - 20,
				//    defaultType: 'textfield',
				//    items: [
				//
				//    ]
				//})

				///
				]

			},
			{
				//разделитель
				columnWidth: .1,
				autoHeight: true,
				layout: 'form'
			},
			{
				//правая колонка
				columnWidth: .39,
				cls: 'right-column',
				autoHeight: true,
				layout: 'form',
				items: [

				// Добавим Таблицу со списком постоянных заказов
				gridStat = new Ext.grid.GridPanel({
					autoHeight: 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
				}}),
				{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() {}
	});

	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); });
	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;
	});*/

	phone.on('blur',
	function() {
		formatPhone(Ext.get('id_phone_text_field').getValue());

		//поиск телефона в клиентах
		searchClientByPhone();

		//*поиск телефона в клиентах

		//формирование лога справа
		if (LOGGING_VAR == 1) {
			proxy_right = new Ext.data.ScriptTagProxy({
				url: common_url + 'action.php?action=log_client&clientphone=' + Ext.get('id_phone_text_field').getValue() + '&password=' + Ext.get('id_dcard').getValue()
			});
			dsright.proxy = proxy_right;
			dsright.load();
		}
		//*формирование лога справа

		var str = Ext.get('id_phone_text_field').getValue();
		var city_filter = /^((\(\d{3}\) ?)|(\d{3}-))?\d{2}-\d{2}$/; //( (123) 456-7890 | 123-45-78 )
		var mobil_filter = /^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{2}-\d{2}$/; //( (123) 456-7890 | 066-123-45-78 )
		if ((!city_filter.test(str) && !mobil_filter.test(str)) || str == '') {
			Ext.MessageBox.alert('Добавление заказов', 'Не корректный формат телефона(например 352-45-58 - для городского и 097-125-02-19 - моб.)!'
				/*,function() { Ext.get('id_phone_text_field').focus(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('blur',
	function() {
		//формирование лога справа
		proxy_right = new Ext.data.ScriptTagProxy({
			url: common_url + 'action.php?action=log_client&clientphone=' + Ext.get('id_phone_text_field').getValue() + '&password=' + Ext.get('id_dcard').getValue()
		});
		dsright.proxy = proxy_right;
		dsright.load();
		//*формирование лога справа

		dcard_var = '';
		//найдем д\код дисконтной карты, если есть
		Ext.Ajax.request({
			url: common_url + 'action.php?action=getdcard&password=' + Ext.get('id_dcard').getValue(),
			method: 'GET',
			success: function(result, request) {
				srcresult = Ext.util.JSON.decode(result.responseText);
				dcard_var = srcresult.vendorcardscode;
			}
		});
	})

	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());
	})

	/*
	  Обработчик события "Выделение" постоянного заказа.
	  Мы должны загрузить в элементы формы данные из выбранного заказа
	*/
	gridStat.on('rowclick',
		function onStatOrderSelect(grid, rowIndex, e) {
			record = grid.getSelectionModel().getSelected();
			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'));
			const_flag.setValue(false);
			phone.onBlur();
	})

	submit.on('click',
	function(this_el, is_premessages) {
		var city_filter = /^((\(\d{3}\) ?)|(\d{3}-))?\d{2}-\d{2}$/; //( (123) 456-7890 | 123-45-78 )
		var mobil_filter = /^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{2}-\d{2}$/; //( (123) 456-7890 | 066-123-45-78 )
		var datetime_filter = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/
		var phone_var = Ext.get('id_phone_text_field').getValue(); //номер телафона
		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_desr_var = Ext.get('refplace_dest1').getValue(); //адрес куда
		var street_from_var = Ext.get('id_street_from').getValue(); //улица откуда забрать
		var street_desr_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 ref_type_var = Ext.get('id_ref_type').getValue(); // Тип оплаты
		//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 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 (contact_person_var == 'Контактное лицо') { contact_person_var = ''; }
		if (additional_var == additional_empty_text) { additional_var = ''; }
		if (phone_var == 'моб.: ххх-ххх-хх-хх, город: ххх-хх-хх') { phone_var = ''; }
		if (address_from_var == 'Быстрый адрес') { address_from_var = ''; }
		if (address_desr_var == 'Быстрый адрес') { address_desr_var = ''; }
		if (street_from_var == 'Улица с которой необх. забрать') { street_from_var = ''; }
		if (street_desr_var == 'Улица куда ехать') { street_desr_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();

				/*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_desr_var, street_from_var, street_desr_var,
											contact_person_var, prim_var, ref_type_var, comment_var, whentime_var, dcard_var,
											timelimit_var, ignored_vendors);
										return;
				}
			});
		}
				else */
		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_desr_var,
		  street_from_var, street_desr_var, contact_person_var, prim_var, ref_type_var, comment_var,
		  whentime_var, dcard_var, timelimit_var, ignored_vendors);
		} 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_desr: address_desr_var,
					street_desr: street_desr_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: '1',
					dcard: dcard_var, //найденная карта по dcard blur
					client_id: currentClientId,
					client_personal_phone: client_personal_phone_var,
					client_phone: phone_var,
					client_name: client_name_var,
					timelimit: timelimit_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.CheckPrices();
				}
			});
		}

		// 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_desr_var, street_from_var, street_desr_var,
		contact_person_var, prim_var, ref_type_var, comment_var, whentime_var, dcard_var, timelimit_var, ignored_vendors) {
			//если сделать постоянным заказом

			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_desr_var, street_from_var, street_desr_var, contact_person_var,
								prim_var, ref_type_var, comment_var, whentime_var, dcard_var,
								timelimit_var, ignored_vendors);

								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(),
										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_desr: street_desr_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,
										ordertype: '1'
									},
									//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_desr_var, street_from_var,
					street_desr_var, contact_person_var, prim_var, ref_type_var, comment_var,
					whentime_var, dcard_var, timelimit_var, ignored_vendors);
			} //флажок установлен
			//*если сделать постоянным заказом
		}

	// Когда загрузили наш постоянный список быстрых адресов, надо обновить
	// промежуточное хранилище
	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_desr_var, street_from_var, street_desr_var, contact_person_var, prim_var, ref_type_var,
		comment_var, whentime_var, dcard_var, timelimit_var, ignored_vendors) {
		/* ---------------------------Отправка запроса серверу---------------- */
		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_desr: address_desr_var,
				street_desr: street_desr_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: '1',
				dcard: dcard_var, //найденная карта по dcard blur
				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,
				dest_addresses: CalcAddresses()
			},

			waitMsg: 'Сохранение даных...',
			success: function(response, options) {
				Ext.MessageBox.show({
					title: 'Новый заказ',
					msg: 'Заказ успешно сохранен!',
					buttons: Ext.MessageBox.OK,
					icon: Ext.MessageBox.Alert,
					fn: function() {
						msgid = response.responseText;
						if(msgid!='') {
							/*if(window.document.getElementById('redirect_to_card').value && whentime_var == '') {*/
								location.href = './../order_card/order_card.php' + ADD_URL_PARAMS + '&messageid=' + msgid;
							/*} else {
								location.href = './../grid/grid.php' + ADD_URL_PARAMS;
							}*/
						}
					}
				});
			},
			failure: function(response, options) {
				Ext.MessageBox.error('', "Сохранение невозможно: " + response.responseText);
				dialog.hide();
				return;
			}
		});
	}

	/*
	  Ищет клиента с данным номером (указан в поле номер телефона
	  у данного вендора в таблице clients.

	  Если находит - загружает полученные данные в поля Имя клиента и
	  Личный телефон
	*/
	function searchClientByPhone() {
		proxy_clients = new Ext.data.ScriptTagProxy({
			url: common_url + 'action.php?action=search_client&clientphone='
				+ Ext.get('id_phone_text_field').getValue()
				+ '&vendorid=' + vendorid_var
		});
		ds_clients.proxy = proxy_clients;
		ds_clients.load();
		setCurrentClientId('');
	}

	/**
	Устанавливаем новый ID клиента, который нашли по номеру телефона.<b>
	Т.к. текущий список мест зависит от id клиента, мы обновим и его (точнее,
	ту часть, которая зависит).
	*/
	function setCurrentClientId(newId){
		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: Ext.get('id_phone_text_field').getValue(),
						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 formatPhone(value) {
		result = value.replace(/-/g, '');
		result = result.replace(/ /g, '');
		if(result.length == 11) result = result.substr(1);
		if(result.length == 7) // город: ххх-хх-хх
		{
			result = result.replace(/(\d{3})(\d{2})(\d{2})/g, "$1-$2-$3");
		}
		else if (result.length == 10) // моб.: ххх-ххх-хх-хх
		{
			result = result.replace(/(\d{3})(\d{3})(\d{2})(\d{2})/g, "$1-$2-$3-$4");
		}
		else result = value;

		Ext.getCmp('id_phone_text_field').setValue(result);
	}
	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;
	}

});
