package kz.istt.locust;

import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.Settings;
import android.provider.Settings.Secure;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.GridLayout;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.Toast;

import androidx.core.app.ActivityCompat;
import androidx.core.content.FileProvider;
import androidx.fragment.app.FragmentActivity;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import java.util.zip.CRC32;

import dbfields.AutoCompleteTextViewDB;
import dbfields.StringDB;
import dbfields.fieldDB;
import dbfields.selectDB;
import tools.LatLonListener;
import tools.OnClickListenerDateTime;

public class LocustDelActivity extends FragmentActivity implements LocationListener, LatLonListener
{
	private LocationManager _lm;
	private ScrollView scrollView1						= null;

	private double			_lat							= 0;					// c GPS приёмника
	private double			_lon							= 0;					// c GPS приёмника

	public String uid								= null;				// Unique identifier of the record
	public Integer del								= null;
	public Long seq									= null;				// Дата Изменения записи секунд с 1970 года
	public StringDB m_Filled						= new StringDB("1");	// 1- все обяз. поля заполнены, 0 - не все обяз. поля заполнены
	// public Long created = null; // Дата создания записи секунд с 1970 года
	//public Integer			user_id							= null;

	public String ImageName							= null;				// Название файла рисунка
	public String tmp_ImageName						= null;				// Временное название файла

	public EditText edtImage1						= null;				// Фото
	public EditText edtImage2						= null;				// Фото
	public EditText edtImage3						= null;				// Фото
	public View spiCountry							= null;				// страна
	public View spiRegion							= null;				// Область
	public EditText edtArea							= null;				// Район
	public EditText edtDistrict						= null;				// Сельский округ
	public EditText edtVillage						= null;				// Посёлка
	public EditText edtTerrain						= null;				// Название местности либо урочища
	
	public EditText edtObserver						= null;

	public EditText edtDate							= null; // Дата (передаётся в секундах с 1970 года)
	public EditText edtTimeZone 					= null;

	public EditText edtLatCenter					= null;				// Широта
	public EditText edtLonCenter					= null;				// Долгота
	public ListView latlonList						= null;

	public EditText edtInfestedArea					= null;				// заселенная площадь(га)
	public EditText edtTreatedArea					= null;				// обработанная площадь(га)
	public View spiVegType							= null;				// Тип(дикая, культурная)
	public EditText edtVegHeight					= null;				// Высота (м)
	public View spiVegCover							= null;				// Растительный покров (Редкий, Ср., Густой)
	public EditText edtVegCrop						= null;				// Перечисление культур
	public View spiVegDamage						= null;				// Повреждения растительного покрова(%)
	public EditText edtVegDamageArea				= null;				// Площадь повреждений (га)
	public EditText edtInsName						= null;				// коммерческое название
	public EditText edtInsActiveSubstance			= null;				// Наименование активного вещества отравы
	public EditText edtInsConcentration				= null;				// концентрация(г д.в./л или%)
	public View spiInsFormulation					= null;				// формуляция(УМО, КЭ, др.)
	public EditText edtInsDose						= null;				// норма расхода(л/га)
	public View spiInsDiluted						= null;				// Коммерческий припарат разбавлен?
	public EditText edtInsProportion				= null;				// пропорция разбавления рабочей жидкости
	public EditText edtInsRate						= null;				// расход рабочей жидкости(л/га)
	public EditText edtInsUsedVolume				= null;				// Общий объем использованной рабочей жидкости (л)

	// public DateInput edtInsExpiryDate = null; // окончание срока действия (дата)
	// public SpinnerDB spiInsMixed = null; // смешивается ли инсектицид с водой или растворителем?
	// public EditText edtInsMixedName = null; // Если да то с каким
	// public EditText edtInsMixedRatio = null; // если да, то в каком соотношении (%)
	public View spiWeaTimeStart						= null;				// время начала
	public View spiWeaTimeEnd						= null;				// время окончания
	public EditText edtWeaTemperatureStart			= null;				// Температура нач.(°C)
	public EditText edtWeaTemperatureEnd			= null;				// Температура кон.(°C)
	public EditText edtWeaWindSpeedStart			= null;				// скорость ветра нач. (м/с)
	public EditText edtWeaWindSpeedEnd				= null;				// скорость ветра кон. (м/с)

	public View spiWindDirectionStart				= null;				// направление ветра нач.
	public View spiWindDirectionEnd					= null;				// направление ветра кон.
	public View spiSprayDirectionStart				= null;				// направление опрыскивания нач.
	public View spiSprayDirectionEnd				= null;				// направление опрыскивания кон.

	public View spiLocSpecies						= null;				// вид: CIT, DMA, LMI, др.
	public View spiLocHoppers						= null;				// Стадии личинок, возраста: Младшие Средние Старшие
	public EditText edtLocDensity					= null;				// плотность на м2
	public View spiMainPurpose						= null;				// Основная цель при обработке (Имаго,Кулиги,Стаи,Разреженные)

	public View spiLocustPhaseId					= null;				// Фара саранчи
	public View spiSprPlatform						= null;				// Вид опрыскивания

	public View spiSprPlatformA						= null;				// «Авиа» - выпадающий список:«Самолет», «Вертолет», «Дельтаплан».
	public View spiSprPlatformG						= null;				// «Наземное» - выпадающий список:«Трактор», «Машина», «Аэроз.генераторG».
	public View spiSprPlatformH						= null;				// «Ручное» - выпадающий список:«Ранцевый», «Моторный», «Батарейный».

	// public SpinnerDB spiSprOperator				= null;				// Оператор (пилот, водитель, др...)
	// public EditText edtSprOperatorName = null; // �?мя оператора
	public EditText edtSprManufacturer				= null;				// Марка опрыскивателя
	public EditText edtSprModel						= null;				// Модель опрыскивателя
	// public DateInput edtDateCalibration = null; // Дата последней калибровки
	public EditText edtSprHeight					= null;				// Высота над поверхностью почвы (м)
	// public EditText edtSprWidth = null; // Ширина захвата (м)
	// public EditText edtSprSpacing = null; // Расстояние между проходами опрыскивателя (м) (Надия Рашидовна сказала удалить)
	public View spiSprBarrier						= null;				// Барьеры (да, нет)
	//public EditText edtSprBarrierWidth				= null;				// ширина (м)
	public EditText edtSprBarrierSpace				= null;				// промежуток (м)
	public EditText edtSprSpeed						= null;				// Скорость движения (км/ч)
	public View spiSprMarking						= null;				// Наземная маркировка(Сиг-нальщики, GPS, Машина, Нет)

	public CheckBox cbEffectiveness					= null;				// Галочка чтоб сделать поля не обязательными

	//public View spiTypeImpact						= null;				// Тип оцениваемого биологического воздействия
	public GridLayout glBiologicalImpact			= null;				// Тип оцениваемого биологического воздействия (grid)
	public EditText edtBiologicalImpact				= null;				// Тип оцениваемого биологического воздействия (список значений)

	public EditText edtEffMortality					= null;				// смертность саранчи(%)
	public EditText edtEffTime						= null;				// Прошло времени после обработки в часах
	public View spiEffMethod						= null;				// метод подсчета смертности

	public CheckBox cbSafClothingGoggles			= null;				// Какой защитной одеждой пользовался оператор: Очки
	public CheckBox cbSafClothingMasks				= null;				// Какой защитной одеждой пользовался оператор: Маска
	public CheckBox cbSafClothingGloves				= null;				// Какой защитной одеждой пользовался оператор: Перчатки
	public CheckBox cbSafClothingOveralls			= null;				// Какой защитной одеждой пользовался оператор: Комбинезон
	public CheckBox cbSafClothingCaps				= null;				// Какой защитной одеждой пользовался оператор: Кепка
	public CheckBox cbSafClothingBoots				= null;				// Какой защитной одеждой пользовался оператор: Сапоги
	public CheckBox cbSafClothingAbsent				= null;				// Какой защитной одеждой пользовался оператор: Отсутствуют

	public EditText edtClothing						= null;				// Сборная колонка

	public View spiOperatorExposedInsecticide		= null;
	public EditText edtDescription					= null;
	public CheckBox cbTest; //Тестовая ли анкета

	public CheckBox cbSafInformFarmer				= null;				// Кто был оповещен об обработках? Фермер
	public CheckBox cbSafInformShepherd				= null;				// Кто был оповещен об обработках? Пастух
	public CheckBox cbSafInformVillager				= null;				// Кто был оповещен об обработках? Сельский житель
	public CheckBox cbSafInformOfficial				= null;				// Кто был оповещен об обработках? Чиновник
	public CheckBox cbSafInformBeekeeper			= null;				// Кто был оповещен об обработках? Пчеловод
	public CheckBox cbSafInformOther				= null;				// Кто был оповещен об обработках? Другие
	public EditText edtInform						= null;				// Сборная колонка для (Фермер,Сельский житель,Чиновник,Пчеловод,Другие)

	//public SpinnerDB spiSafEmptyСontainers		= null;				// Пустые контейнеры
	public CheckBox cbTripleRinsed					= null;
	public CheckBox cbPunctured						= null;
	public CheckBox cbTakenBackToBase				= null;
	public CheckBox cbLeftInField					= null;
	public CheckBox cbBuried						= null;
	public CheckBox cbBurned						= null;
	public EditText edtSafEmptyContainers			= null;				//Для накопления значений выбора галочек пустых контейнеров


	public View spiSafNonTarget					= null;				// воздействие на нецелевые организмы
	public EditText edtSafNonTargetEffect		= null;				// если да, то какое
	public View spiSafIncident					= null;
	public EditText edtSafIncidentEffect		= null;

	public EditText edtComments					= null;				// КОММЕНТАРИИ

	public View btnOk							= null;
	public View btnCancel						= null;
	public View btnGetGPSCenter					= null;
	public View btnDelGPSCenter					= null;
	public View btnOnMap						= null;

	public View btnImage1						= null;
	public View btnImage2						= null;
	public View btnImage3						= null;
	public View btnShowImage1					= null;
	public View btnShowImage2					= null;
	public View btnShowImage3					= null;
	public View btnDelImage1					= null;
	public View btnDelImage2					= null;
	public View btnDelImage3					= null;

	private Uri mImageUri						= null;
	private DBGUITable		guiTable			= null;


	private boolean isInRange(double a, double b, double c)
	{
		return b > a ? c >= a && c <= b : c >= b && c <= a;
    }

	public String checkMinMaxI(EditText txt, double min, double max)
	{
		try{
            double input = Double.parseDouble(txt.getText().toString());
            if (isInRange(min, max, input))
                return "";
            else 
            	return "MIN="+ Double.toString(min)+" MAX="+ Double.toString(max)+" !";
        } catch (NumberFormatException nfe) { }
		return "";
	}

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_locust_del);

		//Загрузка сохранёного языка
		Tools.loadLocale(this);
		
		DbOpenHelper dboh;
		Cursor cursor;

		Intent intent = getIntent();
		uid = intent.getStringExtra("uid"); // Параметр для Активити

		guiTable = new DBGUITable(this, "frmlocustdel");
		guiTable.add(uid, "uid");

		Integer user_id = null;
		/*DbOpenHelper dboh = new DbOpenHelper(this);
		SQLiteDatabase db = dboh.getReadableDatabase();
		Cursor cursor = db.rawQuery("select id from _user where del=0;", null);
		if (cursor.moveToFirst())
		{
			user_id = Integer.valueOf(cursor.getInt(cursor.getColumnIndex("id")));
		}
		cursor.close();
		dboh.close();*/
		guiTable.add(user_id, "user_id"); //Пользователя больше нет!!!
		String device_id= Secure.getString(getContentResolver(), Secure.ANDROID_ID);
		guiTable.add(device_id, "device_id"); //Идентификатор устройства

		List<String> list;
		ArrayAdapter<String> dataAdapter;

		scrollView1 = (ScrollView) findViewById(R.id.scrollView1);

		guiTable.add(m_Filled, "filled");

		edtImage1 = (EditText) findViewById(R.id.edtImage1); // Фото
		guiTable.add(edtImage1, "image_name1");
		edtImage2 = (EditText) findViewById(R.id.edtImage2); // Фото
		guiTable.add(edtImage2, "image_name2");
		edtImage3 = (EditText) findViewById(R.id.edtImage3); // Фото
		guiTable.add(edtImage3, "image_name3");

		spiCountry = findViewById(R.id.spiCountry); // страна
		guiTable.add(spiCountry, "country_id");
		((selectDB)spiCountry).addField("", "");
		// Выбираем страны и заполняем поля
		dboh = new DbOpenHelper(this);
		SQLiteDatabase rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery("select id, name from countries where del=0 order by name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiCountry).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		// Чтоб при изменении страны обновлялся список регионов
		((selectDB)spiCountry).setOnChangeValueListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				((selectDB)spiRegion).clearFields();
				((selectDB)spiRegion).addField("", "");

				if(((selectDB)spiCountry).getValue() != null && !((selectDB)spiCountry).getValue().equals(""))
				{
					DbOpenHelper dboh = new DbOpenHelper(LocustDelActivity.this);
					SQLiteDatabase rdb = null;
					Cursor cursor = null;
					try {
						rdb = dboh.getReadableDatabase();
						cursor = rdb.rawQuery("select id, name from countriesregions where del=0 and country_id=" + ((selectDB)spiCountry).getValue() + " order by name", null);
						if (cursor.moveToFirst())
						{
							do
							{
								((selectDB)spiRegion).addField(cursor.getString(cursor.getColumnIndex("name")),
										cursor.getString(cursor.getColumnIndex("id")));
							} while (cursor.moveToNext());
						}
					}catch(Exception e){
						e.printStackTrace();
					}finally{
						if(cursor!=null){ cursor.close(); }
						if(rdb!=null){ rdb.close(); }
					}
					dboh.close();
				}
			}
		});

		spiRegion = findViewById(R.id.spiRegion); // Регион
		guiTable.add(spiRegion, "region_id");

		edtArea = (EditText) findViewById(R.id.edtArea); // Район
		guiTable.add(edtArea, "area");
		edtDistrict = (EditText) findViewById(R.id.edtDistrict);
		guiTable.add(edtDistrict, "district");

		edtVillage = (EditText) findViewById(R.id.edtVillage); // Название местности либо урочища
		guiTable.add(edtVillage, "village");
		edtTerrain = (EditText) findViewById(R.id.edtTerrain); // Название местности либо урочища
		guiTable.add(edtTerrain, "terrain");

		edtObserver = (EditText) findViewById(R.id.edtObserver);
		guiTable.add(edtObserver, "observer");
		edtDate = (EditText) findViewById(R.id.edtDate); // Должна быть уникальной
		guiTable.add(edtDate, "date");

		View btnGetDate = (View) findViewById(R.id.btnGetDate);
		btnGetDate.setOnClickListener(new OnClickListenerDateTime((fieldDB)edtDate,this));

		edtTimeZone = (EditText) findViewById(R.id.edtTimeZone);
		guiTable.add(edtTimeZone,"timezone");

		edtLatCenter = (EditText) findViewById(R.id.edtLatCenter); // Широта
		guiTable.add(edtLatCenter, "lat_center");
		edtLonCenter = (EditText) findViewById(R.id.edtLonCenter); // Долгота
		guiTable.add(edtLonCenter, "lon_center");

		ArrayList<LatLon> latlon = new ArrayList<LatLon>();
		latlon.add(new LatLon(UUID.randomUUID().toString(), 0, 0));
		latlonList = findViewById(R.id.latlonList);
		LatLonAdapter adapter = new LatLonAdapter(this, R.layout.list_lat_lon, latlon, this, latlonList, false);
		latlonList.setAdapter(adapter);
		adapter.clc=new OnClickListener() {
			@Override
			public void onClick(View view) {
				Tools.setListViewHeightBasedOnItems(LocustDelActivity.this.latlonList);
			}
		};

		edtInfestedArea = (EditText) findViewById(R.id.edtInfestedArea); // заселенная площадь(га)
		guiTable.add(edtInfestedArea, "infested_area");
		edtTreatedArea = (EditText) findViewById(R.id.edtTreatedArea); // обработанная площадь(га)
		guiTable.add(edtTreatedArea, "treated_area");

		spiVegType = findViewById(R.id.spiVegType); // Тип(Дикая, Культурная)
		guiTable.add(spiVegType, "vegetation_type_id");
		((selectDB)spiVegType).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery("select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
										+ Tools.getLang() + "' LIMIT 1),d.name) name from list_vegetation d where d.del=0 order by d.sort, d.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiVegType).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		edtVegHeight = (EditText) findViewById(R.id.edtVegHeight); // Высота (м)
		guiTable.add(edtVegHeight, "vegetation_height");

		spiVegCover = findViewById(R.id.spiVegCover); // Густота растительного покрова(%)
		guiTable.add(spiVegCover, "vegetation_cover_id");
		((selectDB)spiVegCover).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from list_cover d where d.del=0 order by d.sort, d.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiVegCover).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		edtVegCrop = (EditText) findViewById(R.id.edtVegCrop); // Перечисление культур
		guiTable.add(edtVegCrop, "vegetation_crop");

		spiVegDamage = findViewById(R.id.spiVegDamage); // Повреждения растительного покрова(%)
		guiTable.add(spiVegDamage, "vegetation_damage");
		((selectDB)spiVegDamage).addField("", "");
		// Выбираем страны и заполняем поля
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from list_damage d where d.del=0 order by d.sort, d.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiVegDamage).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		edtVegDamageArea = (EditText) findViewById(R.id.edtVegDamageArea); // Площядь повреждения
		guiTable.add(edtVegDamageArea, "vegetation_damage_area");

		edtInsName = (EditText) findViewById(R.id.edtInsName); // коммерческое название
		guiTable.add(edtInsName, "insecticide_name");
		edtInsActiveSubstance = (EditText) findViewById(R.id.edtInsActiveSubstance); // Наименование активного вещества отравы
		guiTable.add(edtInsActiveSubstance, "insecticide_active_substance");
		edtInsConcentration = (EditText) findViewById(R.id.edtInsConcentration); // концентрация(г д.в./л или%)
		guiTable.add(edtInsConcentration, "insecticide_concentration");
		//edtInsConcentration.setFilters(new InputFilter[] { new InputFilterMinMax("0", "100") }); потому что текст

		spiInsFormulation = findViewById(R.id.spiInsFormulation); // формуляция(УМО, КЭ, др.)
		guiTable.add(spiInsFormulation, "insecticide_formulation_id");
		((selectDB)spiInsFormulation).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor=null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from list_formulation d where d.del=0 order by d.sort, d.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiInsFormulation).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		edtInsDose = (EditText) findViewById(R.id.edtInsDose); // норма расхода(л/га)
		guiTable.add(edtInsDose, "insecticide_dose");
		spiInsDiluted = findViewById(R.id.spiInsDiluted); // Коммерческий припарат разбавлен?
		guiTable.add(spiInsDiluted, "insecticide_diluted_id");
		((selectDB)spiInsDiluted).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from list_diluted d where d.del=0 order by d.sort, d.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiInsDiluted).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();
		edtInsProportion = (EditText) findViewById(R.id.edtInsProportion); // расход рабочей жидкости(л/га)
		guiTable.add(edtInsProportion, "insecticide_proportion");


		edtInsRate = (EditText) findViewById(R.id.edtInsRate); // расход рабочей жидкости(л/га)
		guiTable.add(edtInsRate, "insecticide_rate");
		edtInsUsedVolume = (EditText) findViewById(R.id.edtInsUsedVolume); // Общий объем использованной рабочей жидкости (л)
		guiTable.add(edtInsUsedVolume, "insecticide_used_volume");

		spiWeaTimeStart = findViewById(R.id.spiWeaTimeStart); // время начала
		guiTable.add(spiWeaTimeStart, "weather_time_start");
		((selectDB)spiWeaTimeStart).addField("", "");
		for (int i = 0; i < 24; i++) {
			((selectDB) spiWeaTimeStart).addField(String.valueOf(i), String.valueOf(i)+".0");
		}
		spiWeaTimeEnd = findViewById(R.id.spiWeaTimeEnd); // время окончания
		guiTable.add(spiWeaTimeEnd, "weather_time_end");
		((selectDB)spiWeaTimeEnd).addField("", "");
		for (int i = 0; i < 24; i++) {
			((selectDB) spiWeaTimeEnd).addField(String.valueOf(i), String.valueOf(i)+".0");
		}
		edtWeaTemperatureStart = (EditText) findViewById(R.id.edtWeaTemperatureStart); // Температура нач.(°C)
		guiTable.add(edtWeaTemperatureStart, "weather_temperature_start");
		edtWeaTemperatureEnd = (EditText) findViewById(R.id.edtWeaTemperatureEnd); // Температура кон.(°C)
		guiTable.add(edtWeaTemperatureEnd, "weather_temperature_end");

		edtWeaWindSpeedStart = (EditText) findViewById(R.id.edtWeaWindSpeedStart); // скорость ветра нач. (м/с)
		guiTable.add(edtWeaWindSpeedStart, "weather_wind_speed_start");
		edtWeaWindSpeedEnd = (EditText) findViewById(R.id.edtWeaWindSpeedEnd); // скорость ветра кон. (м/с)
		guiTable.add(edtWeaWindSpeedEnd, "weather_wind_speed_end");

		spiWindDirectionStart = findViewById(R.id.spiWindDirectionStart); // направление ветра нач.
		guiTable.add(spiWindDirectionStart, "weather_direction_start");
		((selectDB)spiWindDirectionStart).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name, degree from list_directions d where d.del=0 order by d.degree", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiWindDirectionStart).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		spiWindDirectionEnd = findViewById(R.id.spiWindDirectionEnd); // направление ветра кон.
		guiTable.add(spiWindDirectionEnd, "weather_direction_end");
		((selectDB)spiWindDirectionEnd).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery("select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name, degree from list_directions d where d.del=0 order by d.degree", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiWindDirectionEnd).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		spiSprayDirectionStart = findViewById(R.id.spiSprayDirectionStart); // направление опрыскивания нач.
		guiTable.add(spiSprayDirectionStart, "weather_spray_direction_start");
		((selectDB)spiSprayDirectionStart).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name, d.degree from list_directions d where d.del=0 and d.degree>=0 order by d.degree",
							null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiSprayDirectionStart).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		spiSprayDirectionEnd = findViewById(R.id.spiSprayDirectionEnd); // направление опрыскивания кон.
		guiTable.add(spiSprayDirectionEnd, "weather_spray_direction_end");
		((selectDB)spiSprayDirectionEnd).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name, degree from list_directions d where d.del=0 and d.degree>=0 order by d.degree",
							null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiSprayDirectionEnd).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		// locuststypes
		spiLocSpecies = findViewById(R.id.spiLocSpecies);
		guiTable.add(spiLocSpecies, "locust_type_id");
		((selectDB)spiLocSpecies).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select lt.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = lt.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),lt.name) name from LocustsTypes lt where lt.del=0 order by lt.sort,lt.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiLocSpecies).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		spiLocHoppers = findViewById(R.id.spiLocHoppers); // Стадии личинок
		guiTable.add(spiLocHoppers, "locust_hoppers_id");
		((selectDB)spiLocHoppers).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery("select lt.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = lt.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),lt.name) name from list_age lt where lt.del=0 order by lt.sort,lt.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiLocHoppers).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		/*
		 * list = new ArrayList<String>(); list.add(""); list.add(getString(R.string.Younger)); // Младшие list.add(getString(R.string.Middle)); // Средние list.add(getString(R.string.Senior)); // Старшие list.add(getString(R.string.Adult)); // Имаго
		 *
		 * dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spiLocHoppers.setAdapter(dataAdapter);
		 */

//		spiImago = findViewById(R.id.spiImago); // Стаи (да, нет)
//		guiTable.add(spiImago, "locust_imago");
//		((selectDB)spiImago).addField("", "");
//		((selectDB)spiImago).addField(getString(R.string.Have), "1");
//		((selectDB)spiImago).addField(getString(R.string.No), "0");

		edtLocDensity = (EditText) findViewById(R.id.edtLocDensity); // плотность на м2
		guiTable.add(edtLocDensity, "locust_density");

//		spiKuliguli = findViewById(R.id.spiKuliguli); // Кулиги (да, нет)
//		guiTable.add(spiKuliguli, "locust_kuliguli");
//		((selectDB)spiKuliguli).addField("", "");
//		((selectDB)spiKuliguli).addField(getString(R.string.Have), "1");
//		((selectDB)spiKuliguli).addField(getString(R.string.No), "0");

//		spiSwarm = findViewById(R.id.spiSwarm); // Стаи (да, нет)
//		guiTable.add(spiSwarm, "locust_swarm");
//		((selectDB)spiSwarm).addField("", "");
//		((selectDB)spiSwarm).addField(getString(R.string.Have), "1");
//		((selectDB)spiSwarm).addField(getString(R.string.No), "0");

//		spiSparse = findViewById(R.id.spiSparse); // Разреженные (да, нет)
//		guiTable.add(spiSparse, "locust_sparse");
//		((selectDB)spiSparse).addField("", "");
//		((selectDB)spiSparse).addField(getString(R.string.Have), "1");
//		((selectDB)spiSparse).addField(getString(R.string.No), "0");

		spiMainPurpose = findViewById(R.id.spiMainPurpose);
		guiTable.add(spiMainPurpose, "locust_purpose_id");
		((selectDB)spiMainPurpose).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery("select lt.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = lt.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),lt.name) name from list_purpose lt where lt.del=0 order by lt.sort,lt.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiMainPurpose).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();


		spiLocustPhaseId = findViewById(R.id.spiLocustPhaseId);
		guiTable.add(spiLocustPhaseId, "locust_phase_id");
		((selectDB)spiLocustPhaseId).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from list_phase d where d.del=0 order by d.sort,d.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiLocustPhaseId).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		spiSprPlatform = findViewById(R.id.spiSprPlatform); // Вид опрыскивания
		guiTable.add(spiSprPlatform, "spray_platform");
		((selectDB)spiSprPlatform).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery("select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from sprayers_types d where d.del=0 order by d.sort,d.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiSprPlatform).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		spiSprPlatformA = findViewById(R.id.spiSprPlatformA); // «Авиа» - выпадающий список:«Самолет», «Вертолет», «Дельтаплан».
		guiTable.add(spiSprPlatformA, "spray_platform_a");
		((selectDB)spiSprPlatformA).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from sprayers d where d.del=0 and d.sprayer_type_id=1 order by d.sort,d.name",
							null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiSprPlatformA).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		spiSprPlatformG = findViewById(R.id.spiSprPlatformG); // «Наземное» - выпадающий список:«Трактор», «Машина», «Аэроз.генераторG».
		guiTable.add(spiSprPlatformG, "spray_platform_g");
		((selectDB)spiSprPlatformG).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from sprayers d where d.del=0 and d.sprayer_type_id=3 order by d.sort,d.name",
							null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiSprPlatformG).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		spiSprPlatformH = findViewById(R.id.spiSprPlatformH); // «Ручное» - выпадающий список:«Ранцевый», «Моторный», «Батарейный».
		guiTable.add(spiSprPlatformH, "spray_platform_h");
		((selectDB)spiSprPlatformH).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from sprayers d where d.del=0 and d.sprayer_type_id=5 order by d.sort,d.name",
							null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiSprPlatformH).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		/*
		 * spiSprOperator = findViewById(R.id.spiSprOperator); // Оператор (пилот, водитель, др...) guiTable.add(spiSprOperator,"spray_operatortype_id"); spiSprOperator.addField(this, "", ""); dboh = new DbOpenHelper(this); cursor =
		 * dboh.getReadableDatabase().rawQuery("select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"+Tools.getLang()+"' LIMIT 1),d.name) name from list_operatorstypes d where d.del=0 order by d.sort,d.name", null); if (cursor.moveToFirst()) { do { spiSprOperator.addField(this, cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id"))); } while
		 * (cursor.moveToNext()); } cursor.close(); dboh.close();
		 */

		// edtSprOperatorName = (EditText) findViewById(R.id.edtSprOperatorName); // Имя оператора
		// guiTable.add(edtSprOperatorName,"spray_operator_name");
		edtSprManufacturer = (EditText) findViewById(R.id.edtSprManufacturer); // Марка опрыскивателя
		guiTable.add(edtSprManufacturer, "spray_manufacturer_name");
		//edtSprModel = (EditText) findViewById(R.id.edtSprModel); // Модель опрыскивателя
		//guiTable.add(edtSprModel, "spray_model_name");

		// edtDateCalibration = (DateInput) findViewById(R.id.edtDateCalibration); // Дата последней калибровки
		// guiTable.add(edtDateCalibration,"spray_date_calibration");
		// edtDateCalibration.setVisibleDMY("my"); //Кроме дня

		edtSprHeight = (EditText) findViewById(R.id.edtSprHeight); // Высота над поверхностью почвы (м)
		guiTable.add(edtSprHeight, "spray_height");
		// edtSprWidth = (EditText) findViewById(R.id.edtSprWidth); // Ширина захвата (м)
		// guiTable.add(edtSprWidth,"spray_width");
		// edtSprSpacing = (EditText) findViewById(R.id.edtSprSpacing); // Расстояние между проходами опрыскивателя (м)
		// guiTable.add(edtSprSpacing,"spray_spacing");
		spiSprBarrier = findViewById(R.id.spiSprBarrier); // Барьеры (да, нет)
		guiTable.add(spiSprBarrier, "spray_barrier");
		((selectDB)spiSprBarrier).addField("", "");
		((selectDB)spiSprBarrier).addField(getString(R.string.Barriers), "1");
		((selectDB)spiSprBarrier).addField(getString(R.string.Continuous), "0");
		//edtSprBarrierWidth = (EditText) findViewById(R.id.edtSprBarrierWidth); // ширина (м)
		//guiTable.add(edtSprBarrierWidth, "spray_barrier_width");
		edtSprBarrierSpace = (EditText) findViewById(R.id.edtSprBarrierSpace); // промежуток (м)
		guiTable.add(edtSprBarrierSpace, "spray_barrier_space");

		edtSprSpeed = (EditText) findViewById(R.id.edtSprSpeed); // Скорость движения (км/ч)
		guiTable.add(edtSprSpeed, "spray_speed");

		spiSprMarking = findViewById(R.id.spiSprMarking); // Наземная маркировка(Сиг-нальщики, GPS, Машина, Нет)
		guiTable.add(spiSprMarking, "spray_marking_id");
		((selectDB)spiSprMarking).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from list_markings d where d.del=0 order by d.sort,d.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiSprMarking).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		cbEffectiveness = (CheckBox) findViewById(R.id.cbEffectiveness);
		guiTable.add(cbEffectiveness, "efficiency");

		OnClickListener oclCbBoxEggs = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				CheckBox cbx=(CheckBox)v;
				if(!cbx.isChecked()) {
					AlertDialog.Builder adb = new AlertDialog.Builder(LocustDelActivity.this, R.style.AlertDialogTheme);
					adb.setTitle(getString(R.string.Warning));
					adb.setMessage(LocustDelActivity.this.getResources().getString(R.string.Cancel_filling_section));
					adb.setPositiveButton(LocustDelActivity.this.getResources().getString(R.string.Yes), new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int id) {
							updateAlpha();
						}
					});
					adb.setNegativeButton(LocustDelActivity.this.getResources().getString(R.string.No), new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int id) {
							cbx.setChecked(true);
						}
					});
					AlertDialog ad = adb.show();
					ad.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.BLACK);
					ad.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.BLACK);


				}else{
					updateAlpha();
				}

			}
		};
		cbEffectiveness.setOnClickListener(oclCbBoxEggs);

		/*spiTypeImpact = findViewById(R.id.spiTypeImpact); //Тип оцениваемого биологического воздействия
		guiTable.add(spiTypeImpact, "efficacy_impact_id");
		((selectDB)spiTypeImpact).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery("select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from list_impact d where d.del=0 order by d.sort,d.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiTypeImpact).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();*/

		//Type of biological impact being assessed (I build a table of checkboxes)
		edtBiologicalImpact = findViewById(R.id.edtBiologicalImpact);
		guiTable.add(edtBiologicalImpact, "efficacy_impact");
		CompoundButton.OnCheckedChangeListener occlBiologicalImpact = new CompoundButton.OnCheckedChangeListener()
		{
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
			{
				StringBuilder val = new StringBuilder();
				// loop through all elements inside the GridLayout
				for (int i = 0; i < glBiologicalImpact.getChildCount(); i++) {
					View child = glBiologicalImpact.getChildAt(i);
					if (child instanceof CheckBox) {
						CheckBox cb = (CheckBox) child;
						if (cb.isChecked()) {
							val.append(cb.getTag().toString()).append(",");
						}
					}
				}
				// remove the last comma if there is one
				if (val.length() > 0 && val.charAt(val.length() - 1) == ',') {
					val.deleteCharAt(val.length() - 1);
				}
				// save in editText
				LocustDelActivity.this.edtBiologicalImpact.setText(val.toString());
			}
		};

		edtBiologicalImpact.addTextChangedListener(new TextWatcher()
		{
			public void afterTextChanged(Editable s){}
			public void beforeTextChanged(CharSequence s, int start, int count, int after){}
			public void onTextChanged(CharSequence s, int start, int before, int count)
			{
				String str = LocustDelActivity.this.edtBiologicalImpact.getText().toString();
				for (int i = 0; i < glBiologicalImpact.getChildCount(); i++) {
					View child = glBiologicalImpact.getChildAt(i);
					if (child instanceof CheckBox) {
						CheckBox cb = (CheckBox) child;
						String val = cb.getTag().toString();
						if(str.contains(val) && !cb.isChecked()) {
							cb.setChecked(true);
						}
					}
				}
			}
		});

		glBiologicalImpact = findViewById(R.id.glBiologicalImpact);
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery("select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
					+ Tools.getLang() + "' LIMIT 1),d.name) name from list_impact d where d.del=0 order by d.sort,d.name", null);
			if (cursor.moveToFirst())
			{
				int row = 0;
				int col = 0;
				int colCount = glBiologicalImpact.getColumnCount(); // например 2
				do
				{
					String name = cursor.getString(cursor.getColumnIndexOrThrow("name"));
					String id = cursor.getString(cursor.getColumnIndexOrThrow("id"));

					CheckBox cb = new CheckBox(this);
					cb.setText(name);
					cb.setTag(id);
					cb.setLayoutParams(new GridLayout.LayoutParams(
							GridLayout.spec(row, 1f),   // row index
							GridLayout.spec(col, 1f)    // column index
					));
					cb.setOnCheckedChangeListener(occlBiologicalImpact);
					glBiologicalImpact.addView(cb);

					col++;
					if (col >= colCount) {
						col = 0;
						row++;
					}
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();





		edtEffMortality = (EditText) findViewById(R.id.edtEffMortality); // смертность саранчи(%)
		guiTable.add(edtEffMortality, "efficacy_mortality");
		//edtEffMortality.setFilters(new InputFilter[] { new InputFilterMinMax("0", "100") });

		edtEffTime = (EditText) findViewById(R.id.edtEffTime); // Прошло времени после обработки
		guiTable.add(edtEffTime, "efficacy_passed_time");

		spiEffMethod = findViewById(R.id.spiEffMethod); // метод подсчета смертности "Визуальный", "Учётная рамка".
		guiTable.add(spiEffMethod, "efficacy_mortality_method");
		((selectDB)spiEffMethod).addField("", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from list_mortality d where d.del=0 order by d.sort,d.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					((selectDB)spiEffMethod).addField(cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));
				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		OnCheckedChangeListener cclsl = new OnCheckedChangeListener()
		{
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
			{
				String val = "";
				if (LocustDelActivity.this.cbSafClothingGoggles.isChecked())
					val += '1';
				if (LocustDelActivity.this.cbSafClothingMasks.isChecked())
					val += '2';
				if (LocustDelActivity.this.cbSafClothingGloves.isChecked())
					val += '3';
				if (LocustDelActivity.this.cbSafClothingOveralls.isChecked())
					val += '4';
				if (LocustDelActivity.this.cbSafClothingCaps.isChecked())
					val += '5';
				if (LocustDelActivity.this.cbSafClothingBoots.isChecked())
					val += '6';

				if (LocustDelActivity.this.cbSafClothingAbsent.isChecked())
				{
					val = "7";
					LocustDelActivity.this.cbSafClothingGoggles.setEnabled(false);
					LocustDelActivity.this.cbSafClothingMasks.setEnabled(false);
					LocustDelActivity.this.cbSafClothingGloves.setEnabled(false);
					LocustDelActivity.this.cbSafClothingOveralls.setEnabled(false);
					LocustDelActivity.this.cbSafClothingCaps.setEnabled(false);
					LocustDelActivity.this.cbSafClothingBoots.setEnabled(false);
				} else
				{
					LocustDelActivity.this.cbSafClothingGoggles.setEnabled(true);
					LocustDelActivity.this.cbSafClothingMasks.setEnabled(true);
					LocustDelActivity.this.cbSafClothingGloves.setEnabled(true);
					LocustDelActivity.this.cbSafClothingOveralls.setEnabled(true);
					LocustDelActivity.this.cbSafClothingCaps.setEnabled(true);
					LocustDelActivity.this.cbSafClothingBoots.setEnabled(true);
				}
				LocustDelActivity.this.edtClothing.setText(val);
			}
		};
		cbSafClothingGoggles = (CheckBox) findViewById(R.id.cbSafClothingGoggles);
		cbSafClothingGoggles.setOnCheckedChangeListener(cclsl);
		cbSafClothingMasks = (CheckBox) findViewById(R.id.cbSafClothingMasks);
		cbSafClothingMasks.setOnCheckedChangeListener(cclsl);
		cbSafClothingGloves = (CheckBox) findViewById(R.id.cbSafClothingGloves);
		cbSafClothingGloves.setOnCheckedChangeListener(cclsl);
		cbSafClothingOveralls = (CheckBox) findViewById(R.id.cbSafClothingOveralls);
		cbSafClothingOveralls.setOnCheckedChangeListener(cclsl);
		cbSafClothingCaps = (CheckBox) findViewById(R.id.cbSafClothingCaps);
		cbSafClothingCaps.setOnCheckedChangeListener(cclsl);
		cbSafClothingBoots = (CheckBox) findViewById(R.id.cbSafClothingBoots);
		cbSafClothingBoots.setOnCheckedChangeListener(cclsl);
		cbSafClothingAbsent = (CheckBox) findViewById(R.id.cbSafClothingAbsent);
		cbSafClothingAbsent.setOnCheckedChangeListener(cclsl);

		edtClothing = (EditText) findViewById(R.id.edtClothing);
		guiTable.add(edtClothing, "safety_clothing");

		edtClothing.addTextChangedListener(new TextWatcher()
		{
			public void afterTextChanged(Editable s)
			{
			}

			public void beforeTextChanged(CharSequence s, int start, int count, int after)
			{
			}

			public void onTextChanged(CharSequence s, int start, int before, int count)
			{
				String str = LocustDelActivity.this.edtClothing.getText().toString();

				if (str.indexOf("1") != -1)
					LocustDelActivity.this.cbSafClothingGoggles.setChecked(true);
				if (str.indexOf("2") != -1)
					LocustDelActivity.this.cbSafClothingMasks.setChecked(true);
				if (str.indexOf("3") != -1)
					LocustDelActivity.this.cbSafClothingGloves.setChecked(true);
				if (str.indexOf("4") != -1)
					LocustDelActivity.this.cbSafClothingOveralls.setChecked(true);
				if (str.indexOf("5") != -1)
					LocustDelActivity.this.cbSafClothingCaps.setChecked(true);
				if (str.indexOf("6") != -1)
					LocustDelActivity.this.cbSafClothingBoots.setChecked(true);
				if (str.indexOf("7") != -1)
					LocustDelActivity.this.cbSafClothingAbsent.setChecked(true);

			}
		});

		spiOperatorExposedInsecticide = findViewById(R.id.spiOperatorExposedInsecticide);
		guiTable.add(spiOperatorExposedInsecticide, "safety_operator_health");
		((selectDB)spiOperatorExposedInsecticide).addField("", "");
		((selectDB)spiOperatorExposedInsecticide).addField(getString(R.string.Yes), "1");
		((selectDB)spiOperatorExposedInsecticide).addField(getString(R.string.No), "0");

		edtDescription = (EditText) findViewById(R.id.edtDescription); // если да, то какое
		guiTable.add(edtDescription, "description");

		cbTest = (CheckBox) findViewById(R.id.cbTest);
		guiTable.add(cbTest, "test");

		OnCheckedChangeListener ccl = new OnCheckedChangeListener()
		{
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
			{
				String val = "";
				if (LocustDelActivity.this.cbSafInformFarmer.isChecked())
					val += '1';
				if (LocustDelActivity.this.cbSafInformShepherd.isChecked())
					val += '6';
				if (LocustDelActivity.this.cbSafInformVillager.isChecked())
					val += '2';
				if (LocustDelActivity.this.cbSafInformOfficial.isChecked())
					val += '3';
				if (LocustDelActivity.this.cbSafInformBeekeeper.isChecked())
					val += '4';
				if (LocustDelActivity.this.cbSafInformOther.isChecked())
					val += '5';
				LocustDelActivity.this.edtInform.setText(val);
			}
		};
		cbSafInformFarmer = (CheckBox) findViewById(R.id.cbSafInformFarmer); // Кто был оповещен об обработках? Фермер
		cbSafInformFarmer.setOnCheckedChangeListener(ccl);
		cbSafInformShepherd = (CheckBox) findViewById(R.id.cbSafInformShepherd); // Кто был оповещен об обработках? Пастух
		cbSafInformShepherd.setOnCheckedChangeListener(ccl);
		cbSafInformVillager = (CheckBox) findViewById(R.id.cbSafInformVillager); // Кто был оповещен об обработках? Сельский житель
		cbSafInformVillager.setOnCheckedChangeListener(ccl);
		cbSafInformOfficial = (CheckBox) findViewById(R.id.cbSafInformOfficial); // Кто был оповещен об обработках? Чиновник
		cbSafInformOfficial.setOnCheckedChangeListener(ccl);
		cbSafInformBeekeeper = (CheckBox) findViewById(R.id.cbSafInformBeekeeper); // Кто был оповещен об обработках? Пчеловод
		cbSafInformBeekeeper.setOnCheckedChangeListener(ccl);
		cbSafInformOther = (CheckBox) findViewById(R.id.cbSafInformOther); // Кто был оповещен об обработках? Другие
		cbSafInformOther.setOnCheckedChangeListener(ccl);

		edtInform = (EditText) findViewById(R.id.edtInform);
		guiTable.add(edtInform, "safety_inform");

		edtInform.addTextChangedListener(new TextWatcher()
		{
			public void afterTextChanged(Editable s)
			{
			}

			public void beforeTextChanged(CharSequence s, int start, int count, int after)
			{
			}

			public void onTextChanged(CharSequence s, int start, int before, int count)
			{
				String str = LocustDelActivity.this.edtInform.getText().toString();

				if (str.indexOf("1") != -1)
					LocustDelActivity.this.cbSafInformFarmer.setChecked(true); // Кто был оповещен об обработках? Фермер
				if (str.indexOf("6") != -1)
					LocustDelActivity.this.cbSafInformShepherd.setChecked(true); // Кто был оповещен об обработках? Фермер
				if (str.indexOf("2") != -1)
					LocustDelActivity.this.cbSafInformVillager.setChecked(true); // Кто был оповещен об обработках? Сельский житель
				if (str.indexOf("3") != -1)
					LocustDelActivity.this.cbSafInformOfficial.setChecked(true); // Кто был оповещен об обработках? Чиновник
				if (str.indexOf("4") != -1)
					LocustDelActivity.this.cbSafInformBeekeeper.setChecked(true); // Кто был оповещен об обработках? Пчеловод
				if (str.indexOf("5") != -1)
					LocustDelActivity.this.cbSafInformOther.setChecked(true); // Кто был оповещен об обработках? Пчеловод

			}
		});


		//spiSafEmptyСontainers = findViewById(R.id.spiSafEmptyContainers); // Что сделали с пустыми контейнерами
		//guiTable.add(spiSafEmptyСontainers, "safety_container_id");
		//spiSafEmptyСontainers.addField(this, "", "");
		dboh = new DbOpenHelper(this);
		rdb = null;
		cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery(
							"select d.id, COALESCE((SELECT translation FROM _translations t JOIN _languages l ON t.language_id=l.id WHERE t.del = 0 AND identifier = d.name AND l.short_name='"
									+ Tools.getLang() + "' LIMIT 1),d.name) name from list_containers d where d.del=0 order by d.sort,d.name", null);
			if (cursor.moveToFirst())
			{
				do
				{
					//spiSafEmptyСontainers.addField(this, cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("id")));

					if(cursor.getLong(cursor.getColumnIndex("id"))==1)
						((CheckBox) findViewById(R.id.cbTripleRinsed)).setText(cursor.getString(cursor.getColumnIndex("name")));
					if(cursor.getLong(cursor.getColumnIndex("id"))==2)
						((CheckBox) findViewById(R.id.cbPunctured)).setText(cursor.getString(cursor.getColumnIndex("name")));
					if(cursor.getLong(cursor.getColumnIndex("id"))==3)
						((CheckBox) findViewById(R.id.cbTakenBackToBase)).setText(cursor.getString(cursor.getColumnIndex("name")));
					if(cursor.getLong(cursor.getColumnIndex("id"))==4)
						((CheckBox) findViewById(R.id.cbLeftInField)).setText(cursor.getString(cursor.getColumnIndex("name")));
					if(cursor.getLong(cursor.getColumnIndex("id"))==5)
						((CheckBox) findViewById(R.id.cbBuried)).setText(cursor.getString(cursor.getColumnIndex("name")));
					if(cursor.getLong(cursor.getColumnIndex("id"))==6)
						((CheckBox) findViewById(R.id.cbBurned)).setText(cursor.getString(cursor.getColumnIndex("name")));

				} while (cursor.moveToNext());
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();

		ccl = new OnCheckedChangeListener()
		{
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
			{
				String val = "";
				if (LocustDelActivity.this.cbTripleRinsed.isChecked())
					val += '1';
				if (LocustDelActivity.this.cbPunctured.isChecked())
					val += '2';
				if (LocustDelActivity.this.cbTakenBackToBase.isChecked())
					val += '3';
				if (LocustDelActivity.this.cbLeftInField.isChecked())
					val += '4';
				if (LocustDelActivity.this.cbBuried.isChecked())
					val += '5';
				if (LocustDelActivity.this.cbBurned.isChecked())
					val += '6';
				LocustDelActivity.this.edtSafEmptyContainers.setText(val);
			}
		};
		cbTripleRinsed = (CheckBox) findViewById(R.id.cbTripleRinsed);
		cbTripleRinsed.setOnCheckedChangeListener(ccl);
		cbPunctured = (CheckBox) findViewById(R.id.cbPunctured);
		cbPunctured.setOnCheckedChangeListener(ccl);
		cbTakenBackToBase = (CheckBox) findViewById(R.id.cbTakenBackToBase);
		cbTakenBackToBase.setOnCheckedChangeListener(ccl);
		cbLeftInField = (CheckBox) findViewById(R.id.cbLeftInField);
		cbLeftInField.setOnCheckedChangeListener(ccl);
		cbBuried = (CheckBox) findViewById(R.id.cbBuried);
		cbBuried.setOnCheckedChangeListener(ccl);
		cbBurned = (CheckBox) findViewById(R.id.cbBurned);
		cbBurned.setOnCheckedChangeListener(ccl);

		edtSafEmptyContainers = (EditText) findViewById(R.id.edtSafEmptyContainers);
		guiTable.add(edtSafEmptyContainers, "safety_container");
		edtSafEmptyContainers.addTextChangedListener(new TextWatcher()
		{
			public void afterTextChanged(Editable s)
			{
			}

			public void beforeTextChanged(CharSequence s, int start, int count, int after)
			{
			}

			public void onTextChanged(CharSequence s, int start, int before, int count)
			{
				String str = LocustDelActivity.this.edtSafEmptyContainers.getText().toString();
				if (str.indexOf("1") != -1)
					LocustDelActivity.this.cbTripleRinsed.setChecked(true);
				if (str.indexOf("2") != -1)
					LocustDelActivity.this.cbPunctured.setChecked(true);
				if (str.indexOf("3") != -1)
					LocustDelActivity.this.cbTakenBackToBase.setChecked(true);
				if (str.indexOf("4") != -1)
					LocustDelActivity.this.cbLeftInField.setChecked(true);
				if (str.indexOf("5") != -1)
					LocustDelActivity.this.cbBuried.setChecked(true);
				if (str.indexOf("6") != -1)
					LocustDelActivity.this.cbBurned.setChecked(true);
			}
		});

		spiSafNonTarget = findViewById(R.id.spiSafNonTarget); // воздействие на нецелевые организмы
		guiTable.add(spiSafNonTarget, "safety_non_target");
		((selectDB)spiSafNonTarget).addField("", "");
		((selectDB)spiSafNonTarget).addField(getString(R.string.Yes), "1");
		((selectDB)spiSafNonTarget).addField(getString(R.string.No), "0");

		edtSafNonTargetEffect = (EditText) findViewById(R.id.edtSafNonTargetEffect); // если да, то какое
		guiTable.add(edtSafNonTargetEffect, "safety_non_target_effect");

		// "safety_incident boolean," + //Другие инциденты по здоровью или окружающей среде, возникшие возможно при обработке
		// "safety_incident_effect text," + //Если Да, тип инцидента и кем сообщен (описание)
		spiSafIncident = findViewById(R.id.spiSafIncident); // Другие инциденты по здоровью или окружающей среде, возникшие возможно при обработке
		guiTable.add(spiSafIncident, "safety_incident");
		((selectDB)spiSafIncident).addField("", "");
		((selectDB)spiSafIncident).addField(getString(R.string.Yes), "1");
		((selectDB)spiSafIncident).addField(getString(R.string.No), "0");

		edtSafIncidentEffect = (EditText) findViewById(R.id.edtSafIncidentEffect); // Если Да, тип инцидента и кем сообщен (описание)
		guiTable.add(edtSafIncidentEffect, "safety_incident_effect");

		edtComments = (EditText) findViewById(R.id.edtComments); // КОММЕНТАР�?�?
		guiTable.add(edtComments, "comments");

		// *** Кнопки ***
		btnGetGPSCenter = (View) findViewById(R.id.btnGetGPSCenter);
		OnClickListener oclBtnGetGPSCenter = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				DecimalFormatSymbols custom = new DecimalFormatSymbols(new Locale("en", "US"));
				custom.setDecimalSeparator('.');

				DecimalFormat df = new DecimalFormat("0.0000000");
				df.setDecimalFormatSymbols(custom);

				if(LocustDelActivity.this._lat!=0 && LocustDelActivity.this._lon!=0) {
					LocustDelActivity.this.edtLatCenter.setText(df.format(LocustDelActivity.this._lat));
					LocustDelActivity.this.edtLonCenter.setText(df.format(LocustDelActivity.this._lon));
				}
				//Checking if the GPS is active and if it is inactive, I display a warning about it
				LocationManager locationManager = (LocationManager) LocustDelActivity.this.getSystemService(Context.LOCATION_SERVICE);;
				if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
					Toast.makeText(LocustDelActivity.this, LocustDelActivity.this.getResources().getString(R.string.Please_activate_GPS), Toast.LENGTH_LONG).show();
				}
			}
		};
		btnGetGPSCenter.setOnClickListener(oclBtnGetGPSCenter);

		btnDelGPSCenter = (View) findViewById(R.id.btnDelGPSCenter);
		btnDelGPSCenter.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				LocustDelActivity.this.edtLatCenter.setText("");
				LocustDelActivity.this.edtLonCenter.setText("");
			}
		});

		btnOnMap = (View) findViewById(R.id.btnOnMap);
		OnClickListener oclBtnOnMap = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				Intent intent = new Intent(LocustDelActivity.this, MapsActivity.class);
				intent.putParcelableArrayListExtra("LatLon", ((LatLonAdapter)latlonList.getAdapter()).latlonList);
				intent.putExtra("uid", uid);
				startActivityForResult(intent,4);
			}
		};
		btnOnMap.setOnClickListener(oclBtnOnMap);

		// android:id="@+id/btnOk"
		btnOk = (View) findViewById(R.id.btnOk);
		OnClickListener oclBtnOk = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				saveData();
			}
		};
		btnOk.setOnClickListener(oclBtnOk);

		btnCancel = (View) findViewById(R.id.btnCancel);
		OnClickListener oclBtnCancel = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				AlertDialog.Builder adb = new AlertDialog.Builder(LocustDelActivity.this, R.style.AlertDialogTheme);
				adb.setTitle(getString(R.string.Warning));
				adb.setMessage(LocustDelActivity.this.getResources().getString(R.string.Cancel_filling_form));
				adb.setPositiveButton(LocustDelActivity.this.getResources().getString(R.string.Yes), new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int id) {
						LocustDelActivity.this.finish();
					}
				});
				adb.setNegativeButton(LocustDelActivity.this.getResources().getString(R.string.No), new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {

					}
				});
				AlertDialog ad = adb.show();
				ad.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.BLACK);
				ad.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.BLACK);
			}
		};
		btnCancel.setOnClickListener(oclBtnCancel);
		/*
		 * btnImage = (View) findViewById(R.id.btnImage); OnClickListener oclBtnImage = new OnClickListener() {
		 *
		 * @Override public void onClick(View v) { File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "Pictures" + File.separator + "Locust"); directory.mkdirs();
		 *
		 * tmp_ImageName = "locust_" + (System.currentTimeMillis() / 1000L) + ".jpg";
		 *
		 * File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName); mImageUri = Uri.fromFile(file);
		 *
		 * Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); startActivityForResult(intent, 1); } }; btnImage.setOnClickListener(oclBtnImage);
		 */

		btnImage1 = (View) findViewById(R.id.btnImage1);
		OnClickListener oclBtnImage = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				// Создаём папку если её нет
				File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "Pictures" + File.separator + "Locust");
				directory.mkdirs();

				tmp_ImageName = "locust_" + (System.currentTimeMillis() / 1000L) + ".jpg";

				File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName);

				if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
					mImageUri = FileProvider.getUriForFile(LocustDelActivity.this, BuildConfig.APPLICATION_ID + ".provider",file);
				else
					mImageUri = Uri.fromFile(file);

				Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
				intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
				startActivityForResult(intent, 1);
			}
		};
		btnImage1.setOnClickListener(oclBtnImage);

		btnImage2 = (View) findViewById(R.id.btnImage2);
		oclBtnImage = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				// Создаём папку если её нет
				File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "Pictures" + File.separator + "Locust");
				directory.mkdirs();

				tmp_ImageName = "locust_" + (System.currentTimeMillis() / 1000L) + ".jpg";

				File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName);
				if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
					mImageUri = FileProvider.getUriForFile(LocustDelActivity.this, BuildConfig.APPLICATION_ID + ".provider",file);
				else
					mImageUri = Uri.fromFile(file);


				Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
				intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
				startActivityForResult(intent, 2);
			}
		};
		btnImage2.setOnClickListener(oclBtnImage);

		btnImage3 = (View) findViewById(R.id.btnImage3);
		oclBtnImage = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				// Создаём папку если её нет
				File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "Pictures" + File.separator + "Locust");
				directory.mkdirs();

				tmp_ImageName = "locust_" + (System.currentTimeMillis() / 1000L) + ".jpg";

				File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName);
				if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
					mImageUri = FileProvider.getUriForFile(LocustDelActivity.this, BuildConfig.APPLICATION_ID + ".provider",file);
				else
					mImageUri = Uri.fromFile(file);

				Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
				intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
				startActivityForResult(intent, 3);
			}
		};
		btnImage3.setOnClickListener(oclBtnImage);

		/*
		 * btnShowImage = (View) findViewById(R.id.btnShowImage1); OnClickListener oclBtnShowImage = new OnClickListener() {
		 *
		 * @Override public void onClick(View v) { File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + edtImage1.getText().toString()); Intent i = new Intent(); i.setAction(android.content.Intent.ACTION_VIEW); i.setDataAndType(Uri.fromFile(file), "image/jpg"); startActivity(i); } }; btnShowImage.setOnClickListener(oclBtnShowImage);
		 */

		btnShowImage1 = (View) findViewById(R.id.btnShowImage1); // Отобразить фотографию 1 в новом окне
		OnClickListener oclBtnShowImage = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + edtImage1.getText().toString());
				if(!file.isFile()) file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + edtImage1.getText().toString());
				if (file.isFile()) {
					//Uri uri = Uri.fromFile(file);
					Uri uri = FileProvider.getUriForFile(LocustDelActivity.this, BuildConfig.APPLICATION_ID + ".provider", file);

					Intent i = new Intent();
					i.setAction(android.content.Intent.ACTION_VIEW);
					i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
					i.setDataAndType(uri, "image/jpg");
					startActivity(i);
				}
			}
		};
		btnShowImage1.setOnClickListener(oclBtnShowImage);

		btnShowImage2 = (View) findViewById(R.id.btnShowImage2); // Отобразить фотографию 1 в новом окне
		oclBtnShowImage = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + edtImage2.getText().toString());
				if(!file.isFile()) file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + edtImage2.getText().toString());
				if (file.isFile()) {
					//Uri uri = Uri.fromFile(file);
					Uri uri = FileProvider.getUriForFile(LocustDelActivity.this, BuildConfig.APPLICATION_ID + ".provider", file);

					Intent i = new Intent();
					i.setAction(android.content.Intent.ACTION_VIEW);
					i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
					i.setDataAndType(uri, "image/jpg");
					startActivity(i);
				}
			}
		};
		btnShowImage2.setOnClickListener(oclBtnShowImage);

		btnShowImage3 = (View) findViewById(R.id.btnShowImage3); // Отобразить фотографию 3 в новом окне
		oclBtnShowImage = new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + edtImage3.getText().toString());
				if(!file.isFile()) file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/_" + edtImage3.getText().toString());
				if (file.isFile()) {
					//Uri uri = Uri.fromFile(file);
					Uri uri = FileProvider.getUriForFile(LocustDelActivity.this, BuildConfig.APPLICATION_ID + ".provider", file);

					Intent i = new Intent();
					i.setAction(android.content.Intent.ACTION_VIEW);
					i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
					i.setDataAndType(uri, "image/jpg");
					startActivity(i);
				}
			}
		};
		btnShowImage3.setOnClickListener(oclBtnShowImage);

		btnDelImage1 = (View) findViewById(R.id.btnDelImage1);
		btnDelImage1.setOnClickListener(
				new OnClickListener()
				{
					@Override
					public void onClick(View v)
					{
						edtImage1.setText("");
					}
				}
		);

		btnDelImage2 = (View) findViewById(R.id.btnDelImage2);
		btnDelImage2.setOnClickListener(
				new OnClickListener()
				{
					@Override
					public void onClick(View v)
					{
						edtImage2.setText("");
					}
				}
		);

		btnDelImage3 = (View) findViewById(R.id.btnDelImage3);
		btnDelImage3.setOnClickListener(
				new OnClickListener()
				{
					@Override
					public void onClick(View v)
					{
						edtImage3.setText("");
					}
				}
		);


		// Взависимости от параметров создание или редактирование
		editData(uid);
		adapter.notifyDataSetChanged();
		Tools.setListViewHeightBasedOnItems(latlonList);

		//updateAlpha(); movied to onResume

		// Чтоб слушать GPS (в конце метода чтобы успели присвоиться  GUI компоненты локальным переменным)
		_lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
		if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
			return;
		}
		_lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 1, this);
	}

	@Override
	public void onResume(){
		super.onResume();

		if(spiCountry.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiCountry).updateAdapter(this);
		if(spiRegion.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiRegion).updateAdapter(this);
		if(spiVegType.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiVegType).updateAdapter(this);
		if(spiVegCover.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiVegCover).updateAdapter(this);
		if(spiVegDamage.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiVegDamage).updateAdapter(this);
		if(spiInsFormulation.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiInsFormulation).updateAdapter(this);
		if(spiWeaTimeStart.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiWeaTimeStart).updateAdapter(this);
		if(spiWeaTimeEnd.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiWeaTimeEnd).updateAdapter(this);
		if(spiWindDirectionStart.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiWindDirectionStart).updateAdapter(this);
		if(spiWindDirectionEnd.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiWindDirectionEnd).updateAdapter(this);
		if(spiSprayDirectionStart.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprayDirectionStart).updateAdapter(this);
		if(spiSprayDirectionEnd.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprayDirectionEnd).updateAdapter(this);
		//if(spiLocSpecies.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiLocSpeciese).updateAdapter(this);
		if(spiLocHoppers.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiLocHoppers).updateAdapter(this);
		//if(spiImago.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiImago).updateAdapter(this);
		//if(spiKuliguli.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiKuliguli).updateAdapter(this);
		//if(spiSwarm.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSwarm).updateAdapter(this);
		//if(spiSparse.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSparse).updateAdapter(this);
		if(spiMainPurpose.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiMainPurpose).updateAdapter(this);
		if(spiLocustPhaseId.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiLocustPhaseId).updateAdapter(this);
		if(spiSprPlatform.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprPlatform).updateAdapter(this);
		if(spiSprPlatformA.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprPlatformA).updateAdapter(this);
		if(spiSprPlatformG.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprPlatformG).updateAdapter(this);
		if(spiSprPlatformH.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprPlatformH).updateAdapter(this);
		if(spiSprBarrier.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprBarrier).updateAdapter(this);
		if(spiSprMarking.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSprMarking).updateAdapter(this);
		if(spiEffMethod.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiEffMethod).updateAdapter(this);
		if(spiOperatorExposedInsecticide.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiOperatorExposedInsecticide).updateAdapter(this);
		if(spiSafNonTarget.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSafNonTarget).updateAdapter(this);
		if(spiSafIncident.getClass().toString().indexOf("dbfields.AutoCompleteTextViewDB")!=-1) ((AutoCompleteTextViewDB)spiSafIncident).updateAdapter(this);

		updateAlpha();
	}

	// Сохраняются настройки перед уничтожением формы
	@Override
	protected void onSaveInstanceState(Bundle outState)
	{
		super.onSaveInstanceState(outState);
		if (mImageUri != null)
		{
			outState.putString("cameraImageUri", mImageUri.toString());
		}
		// Сохраняем название рисунка (Не знаю почему но автоматом не сохраняет)
		outState.putString("ImageName", edtImage1.getText().toString());
		//Сохраняю список координат LatLon
		LatLonAdapter adapter = (LatLonAdapter)latlonList.getAdapter();
		ArrayList<LatLon> list = adapter.latlonList;
		for(int i=0;i<list.size();i++){
			outState.putParcelableArrayList("LatLon", list);
		}
	}

	// Востанавливаются настройки после созания формы
	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState)
	{
		super.onRestoreInstanceState(savedInstanceState);
		if (savedInstanceState.containsKey("cameraImageUri"))
		{
			mImageUri = Uri.parse(savedInstanceState.getString("cameraImageUri"));
			File f = new File("" + mImageUri);
			tmp_ImageName = f.getName();
		}
		edtImage1.setText(savedInstanceState.getString("ImageName")); // Восстанавливаем название рисунка
		//Загружаю список координат LatLon
		LatLonAdapter adapter = (LatLonAdapter)latlonList.getAdapter();
		adapter.latlonList=savedInstanceState.getParcelableArrayList("LatLon");
		adapter.notifyDataSetChanged();
		Tools.setListViewHeightBasedOnItems(latlonList);
	}

	// Событие нажатия выпадающего меню правый вершний угол
	@Override
	public boolean onOptionsItemSelected(MenuItem item)
	{
		switch (item.getItemId())
		{
			case R.id.action_settings: // Форма настроек

				Intent intent = new Intent(this, SetupActivity.class);
				startActivity(intent);

				break;
			default:
				return false;
		}
		return true;
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		if (requestCode == 1 || requestCode == 2 || requestCode == 3)
		{
			switch (resultCode)
			{
				case 0:
					break;
				case -1:
					ImageName = tmp_ImageName;
					InputStream file = null;
					try
					{
						//Изменяю разрешение фотографии на 1024 x 768 пикселей
						Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName);
						if(Math.max(bm.getWidth(),bm.getHeight())!=1920)
							bm = Tools.getResizeBMP(bm, 1920); //Изменяем размер фото
						FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName);
						bm.compress(Bitmap.CompressFormat.JPEG, 90, out);
						out.flush();
						out.close();

						file = new BufferedInputStream(new FileInputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName));
						CRC32 crc = new CRC32();
						crc.reset();
						int cnt;

						while ((cnt = file.read()) != -1)
						{
							crc.update(cnt);
						}
						// ImageName = Long.toHexString(crc.getValue()) + "_" + ImageName;
						ImageName = Long.toHexString(crc.getValue()) + "_" + tmp_ImageName;
						file.close();

						// Переименовываем файл
						File renamed = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + tmp_ImageName);
						renamed.renameTo(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Locust/" + ImageName));

						if (requestCode == 1)
							edtImage1.setText(ImageName);
						if (requestCode == 2)
							edtImage2.setText(ImageName);
						if (requestCode == 3)
							edtImage3.setText(ImageName);

					} catch (IOException e)
					{
						Log.e("CCALM", "Error: ", e);
						//e.printStackTrace();
					}
					// Для сохранения названия рисунка в базу
					break;
			}
		}
		if (requestCode == 4)
		{
			switch (resultCode)
			{
				case 0:
					break;
				case -1:
					ArrayList<LatLon> points = data.getParcelableArrayListExtra("LatLon");
					LatLonAdapter adapter = (LatLonAdapter)latlonList.getAdapter();
					ArrayList<LatLon> list = adapter.latlonList;
					list.clear();
					for(int i=0;i<points.size();i++){
						if(points.get(i)!=null && points.get(i).lon!=0 && points.get(i).lat!=0) {
							list.add(new LatLon(points.get(i).uid, points.get(i).lat, points.get(i).lon));
						}
					}
					list.add(new LatLon(UUID.randomUUID().toString(),0, 0));
					adapter.notifyDataSetChanged();
					Tools.setListViewHeightBasedOnItems(latlonList);
					break;
			}
		}
	}

	/*
	 * Задать доступность свойств по поставленным галочкам
	 */
	public void updateAlpha()
	{
		boolean f;
		int c;
		//Галочка: "Контроль эффективности"
		if (cbEffectiveness.isChecked())
		{
			f = true;
			c = 0xff000000;

			LinearLayout llEffectiveness = (LinearLayout) findViewById(R.id.llEffectiveness);
			llEffectiveness.setVisibility(View.VISIBLE);
		} else
		{
			for (int i = 0; i < glBiologicalImpact.getChildCount(); i++) {
				View child = glBiologicalImpact.getChildAt(i);
				if (child instanceof CheckBox) {
					CheckBox cb = (CheckBox) child;
					cb.setChecked(false);
				}
			}
			edtEffMortality.setText("");
			edtEffTime.setText("");
			((selectDB)spiEffMethod).setValue("");

			f = false;
			c = 0xff888888;
			LinearLayout llEffectiveness = (LinearLayout) findViewById(R.id.llEffectiveness);
			llEffectiveness.setVisibility(View.GONE);
		}

		edtEffMortality.setTextColor(c);
		edtEffMortality.setFocusable(f);
		edtEffMortality.setFocusableInTouchMode(f);
		edtEffMortality.setClickable(f);

		edtEffTime.setTextColor(c);
		edtEffTime.setFocusable(f);
		edtEffTime.setFocusableInTouchMode(f);
		edtEffTime.setClickable(f);
		// spiSwarmLaying.setTextColor(c);
		spiEffMethod.setFocusable(f);
		// spiSwarmLaying.setFocusableInTouchMode(f);
		spiEffMethod.setClickable(f);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.locust_del, menu);
		return true;
	}

	//Сохраняем список координат в базу
	public void saveLocations(String uid){
		if(uid==null) return;
		DbOpenHelper dboh = new DbOpenHelper(LocustDelActivity.this);
		SQLiteDatabase rdb = null;
		try {
			rdb = dboh.getReadableDatabase();
			rdb.execSQL("update frmlocustdel_locations set del=1 where frmlocustdel_uid=\'" + uid+"\'");
			ArrayList<LatLon> list = ((LatLonAdapter)latlonList.getAdapter()).latlonList;
			for(int i=0;i<list.size();i++)
			{
				if(list.get(i)!=null && list.get(i).lon!=0 && list.get(i).lat!=0){
					boolean exists=false;
					SQLiteDatabase wdb = null;
					try {
						wdb = dboh.getWritableDatabase();
						SQLiteStatement stmt = wdb.compileStatement("select 1 from frmlocustdel_locations where uid=?");
						stmt.bindString(1, list.get(i).uid);
						try {
							long result = stmt.simpleQueryForLong();
							exists = result == 1;
						} catch (Exception e) {
						}
						if(exists){
							stmt = wdb.compileStatement("update frmlocustdel_locations set del=0,frmlocustdel_uid=?,pos=?,lat=?,lon=? where uid=?");
							stmt.bindString(1, uid);
							stmt.bindLong(2, i);
							stmt.bindDouble(3, list.get(i).lat);
							stmt.bindDouble(4, list.get(i).lon);
							stmt.bindString(5, list.get(i).uid);
							stmt.executeUpdateDelete();
						}else{
							stmt = wdb.compileStatement("insert into frmlocustdel_locations(frmlocustdel_uid,pos,lat,lon,uid)values(?,?,?,?,?)");
							stmt.bindString(1, uid);
							stmt.bindLong(2, i);
							stmt.bindDouble(3, list.get(i).lat);
							stmt.bindDouble(4, list.get(i).lon);
							stmt.bindString(5, list.get(i).uid);
							stmt.executeInsert();
						}
					}catch(Exception e){
						e.printStackTrace();
					}finally{
						if(wdb!=null){ wdb.close(); }
					}
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();
	}

	@Override
	public void onLocationChanged(Location location)
	{
		_lat = location.getLatitude(); // от устройства
		_lon = location.getLongitude(); // от устройства

		if(_lat!=0 && _lon!=0){
			if((((selectDB)spiCountry).getValue() == null || ((selectDB)spiCountry).getValue().equals("")) && (((selectDB)spiRegion).getValue()==null || ((selectDB)spiRegion).getValue().equals(""))){
				String prefName = "Identify";
				SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
				String checked = prefs.getString(prefName, "");
				if(checked.equals("") || checked.equals("1")) {
					//Пытаюсь найти какому региону принадлежит точка
					DbOpenHelper dboh = new DbOpenHelper(this);
					Integer i1 = new Integer(0);
					int[] ids = dboh.inPerimeter((float) _lon, (float) _lat);
					if (ids[0] != 0 && ids[1] != 0) {
						((selectDB)spiCountry).setValue(String.valueOf(ids[0]));
						((selectDB)spiRegion).setValue(String.valueOf(ids[1]));
					}
					dboh.close();
				}
			}
		}

	}

	@Override
	public void onProviderDisabled(String provider)
	{
		// Log.e("CCALM", "provider disabled " + provider);
	}

	@Override
	public void onProviderEnabled(String provider)
	{
		// Log.e("CCALM", "provider enabled " + provider);
	}

	@Override
	public void onStatusChanged(String provider, int status, Bundle extras)
	{
		// Log.e("CCALM", "status changed to " + provider + " [" + status + "]");
	}

	/**
	 * Редактирование данных по id если null то создание иначе редактирование
	 */
	public void editData(String uid)
	{
		if (uid == null || uid.isBlank())
		{
			((fieldDB)edtDate).setValue(String.valueOf((new Date()).getTime()/1000));
			edtTimeZone.setText(Tools.getTimezone());
		}
		guiTable.read(uid);
		//Читаю список координат из базы данных
		if (uid != null)
		{
			LatLonAdapter adapter = (LatLonAdapter)latlonList.getAdapter();
			ArrayList<LatLon> list = adapter.latlonList;
			list.clear();
			DbOpenHelper dboh = new DbOpenHelper(this);
			SQLiteDatabase rdb = null;
			Cursor cursor = null;
			try {
				rdb = dboh.getReadableDatabase();
				String sql="select uid,lat,lon from frmlocustdel_locations where del=0 and frmlocustdel_uid='" + uid + "' order by pos";
				cursor = rdb.rawQuery(sql, null);
				if (cursor.moveToFirst())
				{
					do
					{
						list.add(new LatLon(cursor.getString(0), cursor.getDouble(1), cursor.getDouble(2)));
					} while (cursor.moveToNext());
				}
			}catch(Exception e){
				e.printStackTrace();
			}finally{
				if(cursor!=null){ cursor.close(); }
				if(rdb!=null){ rdb.close(); }
			}
			dboh.close();
			list.add(new LatLon(UUID.randomUUID().toString(),0, 0));
		}
	}

	/***
	 * Переместить и сфокусировать на переданном элементе
	 */
	public void scrollTo(View item)
	{
		int top = 0;
		View tmp = item;
		while (tmp != null)
		{
			if (tmp == scrollView1)
			{
				scrollView1.scrollTo(0, top);
				item.requestFocus();
				break;
			}

			top += tmp.getTop();
			tmp = (View) tmp.getParent();
		}
	}

	public void alert(String text)
	{
		AlertDialog.Builder adb = new AlertDialog.Builder(this,R.style.AlertDialogTheme);
		adb.setTitle(getString(R.string.Warning));
		adb.setMessage(text);
		adb.setPositiveButton("OK", new DialogInterface.OnClickListener() // Кнопка открыть
				{
					@Override
					public void onClick(DialogInterface arg0, int arg1)
					{
					}
				});
		AlertDialog ad = adb.show();
		ad.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.BLACK);
	}

	public boolean isGONE(View view)
	{
		if (!view.isClickable())
			return true;
		try {
			while (view != null) {
				if (view.getVisibility() == View.GONE)
					return true;

				view = (View) view.getParent();
				if(view==getWindow().getDecorView().getRootView())
					break;
			}
		}catch (Exception e)
		{}
		return false;
	}

	/**
	 * Save to the database
	 */
	public void saveData()
	{
		// Checking for fullness of fields
		String atxt = getString(R.string.Not_filled); // Текст для алерта: "Не заполнено поле".
		boolean eFields = false; // У анкеты 2 состояния 1) Заполнены все обяз поля 2) Не заполнены все обяз поля

		if (!eFields && !isGONE(spiCountry) && ((selectDB)spiCountry).getText().toString().isBlank())
		{
			scrollTo(spiCountry);
			atxt = atxt + ": \"" + getResources().getString(R.string.Country) + "\"!"; //@string/Country
			eFields = true;
		}
		if (!eFields && !isGONE(spiRegion) && (((selectDB)spiRegion).getValue() == null || ((selectDB)spiRegion).getValue().equals("")))
		{
			scrollTo(spiRegion);
			atxt = atxt + ": \"" + getResources().getString(R.string.Region) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(edtArea) && edtArea.getText().toString().isBlank())
		{
			scrollTo(edtArea);
			atxt = atxt + ": \"" + getResources().getString(R.string.Area) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(edtVillage) && edtVillage.getText().toString().isBlank())
		{
			scrollTo(edtVillage);
			atxt = atxt + ": \"" + getResources().getString(R.string.Name_of_the_village) + "\"!";
			eFields = true;
		}
		if(!eFields && !isGONE(edtObserver) && edtObserver.getText().toString().isBlank())
		{
			scrollTo(edtObserver);
			atxt = atxt + ": \"" + getResources().getString(R.string.Name_of_survey_team_leader) + "\"!";
			eFields = true;
		}

		if (!eFields && !isGONE(edtDate) && (((fieldDB)edtDate).getValue() == null || ((fieldDB)edtDate).getValue().equals("")))
		{
			scrollTo(edtDate);
			atxt = atxt + ": \"" + getResources().getString(R.string.Date) + "\"!";
			eFields = true;
		}
		// TODO Не забыть раскоментировать при публикации новой версии
		if (!eFields && (!isGONE(edtLatCenter) && edtLatCenter.getText().toString().isBlank() || Tools.getDouble(edtLatCenter.getText().toString(),0.0) == 0))
		{
			scrollTo(edtLatCenter);
			atxt = atxt + ": \"" + getResources().getString(R.string.Lat_center) + "\"!";
			eFields = true;
		}
		if (!eFields && (!isGONE(edtLonCenter) && edtLonCenter.getText().toString().isBlank() || Tools.getDouble(edtLonCenter.getText().toString(),0.0) == 0))
		{
			scrollTo(edtLonCenter);
			atxt = atxt + ": \"" + getResources().getString(R.string.Lon_center) + "\"!";
			eFields = true;
		}

		if (!eFields && !isGONE(edtInfestedArea))
		{
			if(edtInfestedArea.getText().toString().isBlank())
			{
				scrollTo(edtInfestedArea);
				atxt = atxt + ": \"" + getResources().getString(R.string.Area_infested_ha) + "\"!";
				eFields = true;
			}else
			if(!checkMinMaxI(edtInfestedArea,0,1000).isEmpty())
			{
				scrollTo(edtInfestedArea);
				atxt = checkMinMaxI(edtInfestedArea,0,1000) + " \"" + getResources().getString(R.string.Area_infested_ha) + "\"!";
				eFields = true;
			}
		}
		if (!eFields && !isGONE(edtTreatedArea))
		{
			if(edtTreatedArea.getText().toString().isBlank())
			{
				scrollTo(edtTreatedArea);
				atxt = atxt + ": \"" + getResources().getString(R.string.Area_treated_ha) + "\"!";
				eFields = true;
			}else
			if(!checkMinMaxI(edtTreatedArea,0,1000).isEmpty())
			{
				scrollTo(edtTreatedArea);
				atxt = checkMinMaxI(edtTreatedArea,0,1000) + " \"" + getResources().getString(R.string.Area_treated_ha) + "\"!";
				eFields = true;
			}
		}
		if (!eFields && !isGONE(spiVegType) && ((selectDB)spiVegType).getText().toString().isBlank())
		{
			scrollTo(spiVegType);
			atxt = atxt + ": \"" + getResources().getString(R.string.Vegetation_type) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(edtVegHeight))
		{
			if(edtVegHeight.getText().toString().isBlank())
			{
				scrollTo(edtVegHeight);
				atxt = atxt + ": \"" + getResources().getString(R.string.Height_cm) + "\"!";
				eFields = true;
			}else
			if(!checkMinMaxI(edtVegHeight,0,600).isEmpty())
			{
				scrollTo(edtVegHeight);
				atxt = checkMinMaxI(edtVegHeight,0,600) + " \"" + getResources().getString(R.string.Height_cm) + "\"!";
				eFields = true;
			}
		}
		if (!eFields && !isGONE(spiVegCover) && ((selectDB)spiVegCover).getText().toString().isBlank())
		{
			scrollTo(spiVegCover);
			atxt = atxt + ": \"" + getResources().getString(R.string.Del_Vegetation_cover) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(spiVegDamage) && ((selectDB)spiVegDamage).getText().toString().isBlank())
		{
			scrollTo(spiVegDamage);
			atxt = atxt + ": \"" + getResources().getString(R.string.Damage) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(edtVegDamageArea))
		{
			if(!checkMinMaxI(edtVegDamageArea,0,100000).isEmpty())
			{
				scrollTo(edtVegDamageArea);
				atxt = checkMinMaxI(edtVegDamageArea,0,100000) + " \"" + getResources().getString(R.string.Damage_area_ha) + "\"!";
				eFields = true;
			}
		}
		if (!eFields && !isGONE(edtInsName) && edtInsName.getText().toString().isBlank())
		{
			scrollTo(edtInsName);
			atxt = atxt + ": \"" + getResources().getString(R.string.Trade_name) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(edtInsActiveSubstance) && edtInsActiveSubstance.getText().toString().isBlank())
		{
			scrollTo(edtInsActiveSubstance);
			atxt = atxt + ": \"" + getResources().getString(R.string.The_active_substance) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(edtInsConcentration))
		{
			if(edtInsConcentration.getText().toString().isBlank())
			{
				scrollTo(edtInsConcentration);
				atxt = atxt + ": \"" + getResources().getString(R.string.Concentration_A_S) + "\"!";
				eFields = true;
			}/*else
			if(!checkMinMaxI(edtInsConcentration,0,100).isEmpty())
			{
				scrollTo(edtInsConcentration);
				atxt = checkMinMaxI(edtInsConcentration,0,100) + " \"" + getResources().getString(R.string.Concentration_A_S) + "\"!";
				eFields = true;
			}*/
		}
		if (!eFields && !isGONE(spiInsFormulation) && ((selectDB)spiInsFormulation).getText().toString().isBlank())
		{
			scrollTo(spiInsFormulation);
			atxt = atxt + ": \"" + getResources().getString(R.string.Formulation) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(edtInsDose))
		{
			if(!checkMinMaxI(edtInsDose,0.005f,5).isEmpty())
			{
				scrollTo(edtInsDose);
				atxt = checkMinMaxI(edtInsDose,0.005f,5) + " \"" + getResources().getString(R.string.Dose_rate_l_of_commercial_product_ha) + "\"!";
				eFields = true;
			}
		}
		if (!eFields && !isGONE(edtInsRate))
		{
			if(!checkMinMaxI(edtInsRate,0.1f,600).isEmpty())
			{
				scrollTo(edtInsRate);
				atxt = checkMinMaxI(edtInsRate,0.1f,600) + " \"" + getResources().getString(R.string.Rate_of_working_solution_l_ha) + "\"!";
				eFields = true;
			}
		}
		if (!eFields && !isGONE(edtInsUsedVolume))
		{
			if(edtInsUsedVolume.getText().toString().isBlank())
			{
				scrollTo(edtInsUsedVolume);
				atxt = atxt + ": \"" + getResources().getString(R.string.Total_volume_of_working_solution_actually_applied_l) + "\"!";
				eFields = true;
			}else
			if(!checkMinMaxI(edtInsUsedVolume,1,450000).isEmpty())
			{
				scrollTo(edtInsUsedVolume);
				atxt = checkMinMaxI(edtInsUsedVolume,1,450000) + " \"" + getResources().getString(R.string.Total_volume_of_working_solution_actually_applied_l) + "\"!";
				eFields = true;
			}
		}
		if (!eFields && !isGONE(spiWeaTimeStart) && ((selectDB)spiWeaTimeStart).getText().toString().isBlank())
		{
			scrollTo(spiWeaTimeStart);
			atxt = atxt + ": \"" + getResources().getString(R.string.Time_start) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(spiWeaTimeEnd) && ((selectDB)spiWeaTimeEnd).getText().toString().isBlank())
		{
			scrollTo(spiWeaTimeEnd);
			atxt = atxt + ": \"" + getResources().getString(R.string.Time_end) + "\"!";
			eFields = true;
		}		
		if (!eFields && !isGONE(edtWeaTemperatureStart))
		{
			if(!checkMinMaxI(edtWeaTemperatureStart,0,50).isEmpty())
			{
				scrollTo(edtWeaTemperatureStart);
				atxt = checkMinMaxI(edtWeaTemperatureStart,0,50) + " \"" + getResources().getString(R.string.Temperature_start) + "\"!";
				eFields = true;
			}
		}
		if (!eFields && !isGONE(edtWeaTemperatureEnd))
		{
			if(!checkMinMaxI(edtWeaTemperatureEnd,0,50).isEmpty())
			{
				scrollTo(edtWeaTemperatureEnd);
				atxt = checkMinMaxI(edtWeaTemperatureEnd,0,50) + " \"" + getResources().getString(R.string.Temperature_end) + "\"!";
				eFields = true;
			}
		}

		if (!eFields && !isGONE(edtWeaWindSpeedStart))
		{
			if(!checkMinMaxI(edtWeaWindSpeedStart,0,20).isEmpty())
			{
				scrollTo(edtWeaWindSpeedStart);
				atxt = checkMinMaxI(edtWeaWindSpeedStart,0,20) + " \"" + getResources().getString(R.string.Wind_speed_start_m_s) + "\"!";
				eFields = true;
			}
		}
		if (!eFields && !isGONE(edtWeaWindSpeedEnd))
		{
			if(!checkMinMaxI(edtWeaWindSpeedEnd,0,20).isEmpty())
			{
				scrollTo(edtWeaWindSpeedEnd);
				atxt = checkMinMaxI(edtWeaWindSpeedEnd,0,20) + " \"" + getResources().getString(R.string.Wind_speed_end_m_s) + "\"!";
				eFields = true;
			}
		}
		if (!eFields && !isGONE(spiLocSpecies) && ((selectDB)spiLocSpecies).getText().toString().isBlank())
		{
			scrollTo(spiLocSpecies);
			atxt = atxt + ": \"" + getResources().getString(R.string.Type) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(spiLocHoppers) && ((selectDB)spiLocHoppers).getText().toString().isBlank())
		{
			scrollTo(spiLocHoppers);
			atxt = atxt + ": \"" + getResources().getString(R.string.Hopper_stages) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(edtLocDensity))
		{
			if(edtLocDensity.getText().toString().isBlank())
			{
				scrollTo(edtLocDensity);
				atxt = atxt + ": \"" + getResources().getString(R.string.Density_m2) + "\"!";
				eFields = true;
			}else
			if(!checkMinMaxI(edtLocDensity,0,80000).isEmpty())
			{
				scrollTo(edtLocDensity);
				atxt = checkMinMaxI(edtLocDensity,0,80000) + " \"" + getResources().getString(R.string.Density_m2) + "\"!";
				eFields = true;
			}				
		}

		if (!eFields && !isGONE(spiMainPurpose) && ((selectDB)spiMainPurpose).getText().toString().isBlank())
		{
			scrollTo(spiMainPurpose);
			atxt = atxt + ": \"" + getResources().getString(R.string.Main_purpose_of_treatment) + "\"!";
			eFields = true;
		}
//		if (!eFields && !isGONE(spiKuliguli) && ((selectDB)spiKuliguli).getText().toString().isBlank())
//		{
//			scrollTo(spiKuliguli);
//			atxt = atxt + ": \"" + getResources().getString(R.string.Bands) + "\"!";
//			eFields = true;
//		}
//		if (!eFields && !isGONE(spiSwarm) && ((selectDB)spiSwarm).getText().toString().isBlank())
//		{
//			scrollTo(spiSwarm);
//			atxt = atxt + ": \"" + getResources().getString(R.string.Swarms) + "\"!";
//			eFields = true;
//		}
//		if (!eFields && !isGONE(spiSparse) && ((selectDB)spiSparse).getText().toString().isBlank())
//		{
//			scrollTo(spiSparse);
//			atxt = atxt + ": \"" + getResources().getString(R.string.Del_Scattered) + "\"!";
//			eFields = true;
//		}
		if (!eFields && !isGONE(spiSprPlatform) && ((selectDB)spiSprPlatform).getText().toString().isBlank())
		{
			scrollTo(spiSprPlatform);
			atxt = atxt + ": \"" + getResources().getString(R.string.Spray_platform) + "\"!";
			eFields = true;
		}
		if (!eFields && !isGONE(edtSprHeight))
		{
			if(!checkMinMaxI(edtSprHeight,1,100).isEmpty())
			{
				scrollTo(edtSprHeight);
				atxt = checkMinMaxI(edtSprHeight,1,100) + " \"" + getResources().getString(R.string.Atomizer_height_above_ground_m) + "\"!";
				eFields = true;
			}
		}
		if (!eFields && !isGONE(spiSprBarrier) && ((selectDB)spiSprBarrier).getText().toString().isBlank())
		{
			scrollTo(spiSprBarrier);
			atxt = atxt + ": \"" + getResources().getString(R.string.Barriers) + "\"!";
			eFields = true;
		}

//		if (!eFields && !isGONE(edtSprBarrierWidth))
//		{
//			if(!checkMinMaxI(edtSprBarrierWidth,1,300).isEmpty())
//			{
//				scrollTo(edtSprBarrierWidth);
//				atxt = checkMinMaxI(edtSprBarrierWidth,1,300) + " \"" + getResources().getString(R.string.Barrier_width_m) + "\"!";
//				eFields = true;
//			}
//		}
		if (!eFields && !isGONE(edtSprBarrierSpace))
		{
			if(edtSprBarrierSpace.getText().toString().isBlank())
			{
				scrollTo(edtSprBarrierSpace);
				atxt = atxt + ": \"" + getResources().getString(R.string.Spacing_of_barriers_m) + "\"!";
				eFields = true;
			}else
			if(!checkMinMaxI(edtSprBarrierSpace,1,1000).isEmpty())
			{
				scrollTo(edtSprBarrierSpace);
				atxt = checkMinMaxI(edtSprBarrierSpace,1,1000) + " \"" + getResources().getString(R.string.Spacing_of_barriers_m) + "\"!";
				eFields = true;
			}
		}

		if (!eFields && !isGONE(edtSprSpeed))
		{
			if(edtSprSpeed.getText().toString().isBlank())
			{
				scrollTo(edtSprSpeed);
				atxt = atxt + ": \"" + getResources().getString(R.string.Forward_speed_km_h) + "\"!";
				eFields = true;
			}else
			if(!checkMinMaxI(edtSprSpeed,1,300).isEmpty())
			{
				scrollTo(edtSprSpeed);
				atxt = checkMinMaxI(edtSprSpeed,1,300) + " \"" + getResources().getString(R.string.Forward_speed_km_h) + "\"!";
				eFields = true;
			}
		}
		if(!eFields && !isGONE(edtEffMortality) )
		{
			if(edtEffMortality.getText().toString().isBlank())
			{
				scrollTo(edtEffMortality);
				atxt = atxt + ": \"" + getResources().getString(R.string.Biological_efficiency_of_treatment) + "\"!";
				eFields = true;
			}else
			if(!checkMinMaxI(edtEffMortality,0,100).isEmpty())
			{
				scrollTo(edtEffMortality);
				atxt = checkMinMaxI(edtEffMortality,0,100) + " \"" + getResources().getString(R.string.Biological_efficiency_of_treatment) + "\"!";
				eFields = true;
			}				
		}
		if(!eFields && !isGONE(edtEffTime))
		{
			if(edtEffTime.getText().toString().isBlank())
			{
				scrollTo(edtEffTime);
				atxt = atxt + ": \"" + getResources().getString(R.string.Time_after_treatment_hours) + "\"!";
				eFields = true;
			}else
			if(!checkMinMaxI(edtEffTime,0,240).isEmpty())
			{
				scrollTo(edtEffTime);
				atxt = checkMinMaxI(edtEffTime,0,240) + " \"" + getResources().getString(R.string.Time_after_treatment_hours) + "\"!";
				eFields = true;
			}			
		}
		if(!eFields && !isGONE(edtClothing) && edtClothing.getText().toString().isBlank())
		{
			scrollTo(edtClothing);
			atxt = atxt + ": \"" + getResources().getString(R.string.Protective_clothing) + "\"!";
			eFields = true;
		}
		if(!eFields && !isGONE(spiSafNonTarget) && ((selectDB)spiSafNonTarget).getText().toString().isBlank()) // воздействие на нецелевые организмы
		{
			scrollTo(spiSafNonTarget);
			atxt = atxt + ": \"" + getResources().getString(R.string.Effect_on_non_target_organism) + "\"!";
			eFields = true;
		}
		if (eFields) // Если не заполнены все обязательные поля
		{
			m_Filled.setValue("0");

			AlertDialog.Builder adb = new AlertDialog.Builder(this,R.style.AlertDialogTheme);
			adb.setTitle(getString(R.string.Warning));

			adb.setMessage(atxt + "\n" + getString(R.string.not_filled_fields));
			adb.setPositiveButton(getString(R.string.Yes), new DialogInterface.OnClickListener()
			{
				@Override
				public void onClick(DialogInterface arg0, int arg1)
				{
					// Do nothing
				}
			});
			adb.setNegativeButton(getString(R.string.No), new DialogInterface.OnClickListener()
			{
				@Override
				public void onClick(DialogInterface arg0, int arg1)
				{
					String uid=guiTable.write(); //Add or save data
					saveLocations(uid);
					LocustDelActivity.this.finish(); // Close the form
				}
			});
			AlertDialog ad = adb.show();
			ad.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(Color.BLACK);
			ad.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.BLACK);

		} else
		{
			m_Filled.setValue("1");

			String uid=guiTable.write(); //Добавляем либо сохраняем данные
			saveLocations(uid);

			startService(new Intent(this, MainService.class).putExtra(MainService.PARAM_ACTION, "1")); // Чтоб вызвать событие таймера в сервисе
			LocustDelActivity.this.finish(); // Закрываем форму
		}

	}

	/**
	 * СМ. http://developer.android.com/reference/android/app/Activity.html Событие происходит при старте и при возврате на этот Activity
	 * */
	@Override
	public void onStart() {
		super.onStart();
		DbOpenHelper dboh = new DbOpenHelper(this);
		SQLiteDatabase rdb = null;
		Cursor cursor = null;
		try {
			rdb = dboh.getReadableDatabase();
			cursor = rdb.rawQuery("select * from terminals where del=0 and serial='"+ Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID)+"';", null);
			if(!cursor.moveToFirst())
			{
				Toast toast = Toast.makeText(getApplicationContext(),
						getResources().getString(R.string.Please_authorize_the_tablet), Toast.LENGTH_LONG);
				toast.show();
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){ cursor.close(); }
			if(rdb!=null){ rdb.close(); }
		}
		dboh.close();
	}

	@Override
	public double getLat() {
		return this._lat;
	}

	@Override
	public double getLon() {
		return this._lon;
	}
}
