public MainPage ()
		{
			InitializeComponent ();

			BindingContext = new {
				SvgAssembly = typeof(App).GetTypeInfo ().Assembly,
				CanvasHeight = App.CanvasHeight
			};

			NavigationPage.SetHasNavigationBar(this, false);

			//TapGestureRecognizer crossTapGestureRecognizer = new TapGestureRecognizer();
			TapGestureRecognizer canvasTapGestureRecognizer = new TapGestureRecognizer();
			PanGestureRecognizer canvasPanGestureRecognizer = new PanGestureRecognizer();


//			crossTapGestureRecognizer.Tapped += (object sender, EventArgs e) => {
//				ChangeTempWindow.Hide();
//				ChangeGeoWindow.Hide();
//			};


			ArrowsInitialize ();
			ChangeTempWindow.Initialize ();
			//ChangeTempWindowCross.GestureRecognizers.Add (crossTapGestureRecognizer);
			ChangeGeoWindow.Initialize ();
			//ChangeGeoWindowCross.GestureRecognizers.Add (crossTapGestureRecognizer);
			ClothWindow.Initialize (true);

			HeadClickZone.GestureRecognizers.Add (canvasTapGestureRecognizer);
			BodyClickZone.GestureRecognizers.Add (canvasTapGestureRecognizer);
			PantsClickZone.GestureRecognizers.Add (canvasTapGestureRecognizer);
			ShoesClickZone.GestureRecognizers.Add (canvasTapGestureRecognizer);

			HeadClickZone.GestureRecognizers.Add (canvasPanGestureRecognizer);
			BodyClickZone.GestureRecognizers.Add (canvasPanGestureRecognizer);
			PantsClickZone.GestureRecognizers.Add (canvasPanGestureRecognizer);
			ShoesClickZone.GestureRecognizers.Add (canvasPanGestureRecognizer);

			ColorPickerWindow.Initialize (false, true);

			AllColorsButton.Clicked += (object sender, EventArgs e) => {
				ColorPickerWindow.Show();
			};

			canvasTapGestureRecognizer.Tapped += (object sender, EventArgs e) => {
				
				ClothType type = ClothType.Head;
				if(sender.Equals(HeadClickZone))
					type = ClothType.Head;
				if(sender.Equals(BodyClickZone))
					type = ClothType.Body;
				if(sender.Equals(PantsClickZone))
					type = ClothType.Pants;
				if(sender.Equals(ShoesClickZone))
					type = ClothType.Shoes;

				if(DBClothes(type).Count == 0)
					return;

				if(type == ClothType.Head && DBHeads[CurrentHead].Id == 142)
					return;

				if(type == ClothType.Pants && DBBodies[CurrentBody].IsDress)
					return;

				ClothWindow.Type = type;


				ClothWindowSvgContainer.Content = new CWCloth {
					SvgPath = "ClothesAndWeather.Images.ClothesDB." + DBClothes(type) [CurrentCloth(type)].ImagePreview,
					Color = ((CWCloth)ClothView(type).Content).Color,
					HorizontalOptions = LayoutOptions.Center,
					VerticalOptions = LayoutOptions.Center,

					WidthRequest = 120,
					HeightRequest = 120,

					Aspect = Aspect.AspectFit
				};

				ClothTitleLabel.Text = DBClothes(type) [CurrentCloth(type)].Name;
				ClothDescLabel.Text = DBClothes(type) [CurrentCloth(type)].Description;
			

				List<ClothExample> examples = Sex == Sex.Male ? DBClothes(type) [CurrentCloth(type)].ManClothes : DBClothes(type) [CurrentCloth(type)].WomanClothes;
				if(examples == null)
					examples = new List<ClothExample>();

				ClothExamples.Children.Clear();
				ClothExamples.Children.Add(new Label { Text = "Похожие вещи в магазине:", FontSize = 12 });

				StackLayout line = new StackLayout();

				for(var i = 0; i < examples.Count; i++)
				{
					if(i % 2 == 0)
						line = new StackLayout { Orientation = StackOrientation.Horizontal, Spacing = 25, HorizontalOptions = LayoutOptions.Center };

					var frame = new CWClothExample();
					frame.Content = new Image { HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center, Aspect = Aspect.AspectFit,
						Source = ImageSource.FromUri(new Uri("http:" + examples[i].Image)) };

					var recognizer = new TapGestureRecognizer();
					string link = examples[i].Link;
					recognizer.Tapped += (object sender1, EventArgs e1) => {
						App.IOSAppDelegate.OpenUrlInBrowser(Utils.AdmitadLink(link));
					};
					frame.GestureRecognizers.Add(recognizer);

					line.Children.Add(frame);

					if(i == examples.Count - 1 && i % 2 == 0)
					{
						line.WidthRequest = (frame.WidthRequest + frame.Padding.Left + frame.Padding.Right) * 2 + line.Spacing;
						frame.HorizontalOptions = LayoutOptions.Start;
					}

					if(i % 2 == 1 || i == examples.Count - 1)
						ClothExamples.Children.Add(line);
				}


				ClothWindow.Show();
			};

			PanUpdatedEventArgs lastPan = new PanUpdatedEventArgs(GestureStatus.Completed, 0, 0, 0);

			canvasPanGestureRecognizer.PanUpdated += (object sender, PanUpdatedEventArgs e) => {

				ClothType type = ClothType.Head;
				if(sender.Equals(HeadClickZone))
					type = ClothType.Head;
				if(sender.Equals(BodyClickZone))
					type = ClothType.Body;
				if(sender.Equals(PantsClickZone))
					type = ClothType.Pants;
				if(sender.Equals(ShoesClickZone))
					type = ClothType.Shoes;

				if(e.StatusType == GestureStatus.Completed)
				{
					double x = lastPan.TotalX;
					double y = lastPan.TotalY;
					System.Diagnostics.Debug.WriteLine(x + " " + y);
					if(Math.Abs(y) <= 25 && Math.Abs(x) >= 40)
					{
						CallArrow(Arrow(type, (int)(x / Math.Abs(x))));
					}
				}

				lastPan = e;
			};



			Action<object, EventArgs> changePreviewColor = (object sender, EventArgs e) => {
				ClothWindowSvgContainer.Content = new CWCloth {
					SvgPath = ((CWCloth)ClothWindowSvgContainer.Content).SvgPath,
					Color = ((Button)sender).BackgroundColor,
					HorizontalOptions = LayoutOptions.Center,
					VerticalOptions = LayoutOptions.Center,

					WidthRequest = 120,
					HeightRequest = 120,

					Aspect = Aspect.AspectFit
				};
			};

			BlackColorButton.Clicked += (object sender, EventArgs e) => {
				changePreviewColor.Invoke(sender, e);
			};

			WhiteColorButton.Clicked += (object sender, EventArgs e) => {
				changePreviewColor.Invoke(sender, e);
			};

			for (int i = 0; i < ColorsGrid.Children.Count; i++)
			{
				((Button)ColorsGrid.Children[i]).Clicked += (object sender, EventArgs e) => {
					changePreviewColor.Invoke(sender, e);
					ColorPickerWindow.Hide();
				};
			}

			ColorReadyButton.Clicked += (object sender, EventArgs e) => {
				SwitchClothColor((ClothType)ClothWindow.Type, ((CWCloth)ClothWindowSvgContainer.Content).Color);
				ClothWindow.Hide();
			};

//			ClothesOnlineButton.Clicked += (object sender, EventArgs e) => {
//				Cloth cloth = DBClothes((ClothType)ClothWindow.Type)[CurrentCloth((ClothType)ClothWindow.Type)];
//				App.IOSAppDelegate.OpenUrlInBrowser(cloth.GetLamodaLink(Sex));
//			};


			#region BottomMenu

			TapGestureRecognizer menuTapGestureRecognizer = new TapGestureRecognizer();
			TapGestureRecognizer menu3TapGestureRecognizer = new TapGestureRecognizer();

			switch (Sex)
			{
			case Sex.Male:
				((SvgImage)menu3.Content).SvgPath = "ClothesAndWeather.Images.menu3m.svg";
				break;
			case Sex.Female:
				((SvgImage)menu3.Content).SvgPath = "ClothesAndWeather.Images.menu3f.svg";
				break;
			}

			menu1.GestureRecognizers.Add (menuTapGestureRecognizer);
			TempLabel.GestureRecognizers.Add(menuTapGestureRecognizer);
			WeatherConditionImage.GestureRecognizers.Add(menuTapGestureRecognizer);
			menu4.GestureRecognizers.Add (menuTapGestureRecognizer);
			CityAndDT.GestureRecognizers.Add (menuTapGestureRecognizer);

			menuTapGestureRecognizer.Tapped += (object sender, EventArgs e) => {

				//SvgImage btn = (SvgImage)sender;
				var btn = sender;

				if(btn.Equals(menu1) || btn.Equals(TempLabel) || btn.Equals(WeatherConditionImage))
				{
					ChangeTempWindow.Show();
				}
				else if(btn.Equals(menu4) || btn.Equals(CityAndDT))
				{
					ChangeGeoWindow.Show();
				}
			};

			menu3.GestureRecognizers.Add (menu3TapGestureRecognizer);
			menu3TapGestureRecognizer.Tapped += (object sender, EventArgs e) => {

				string newpath = "";
				switch(Sex)
				{
				case Sex.Male:
					newpath = "ClothesAndWeather.Images.menu3f.svg";
					App.SetSex(Sex.Female);
					break;
				case Sex.Female:
					newpath = "ClothesAndWeather.Images.menu3m.svg";
					App.SetSex(Sex.Male);
					break;
				}

				menu3.Content = new SvgImage { 
					SvgPath = newpath,
					SvgAssembly = typeof(App).GetTypeInfo().Assembly
				};

				RefreshFilters();
			};


			PlacePicker.Unfocused += async (object sender, FocusEventArgs e) => {

				switch(PlacePicker.SelectedIndex)
				{
				case 0:
					App.SetPlace(Place.Walk);
					await Navigation.PushModalAsync(new SelectWalkTimePage(false), false);
					break;
				case 1:
					App.SetPlace(Place.Business);
					RefreshFilters();
					break;
				case 2:
					App.SetPlace(Place.Formal);
					RefreshFilters();
					break;
				case 3:
					App.SetPlace(Place.Celebration);
					RefreshFilters();
					break;
				case 4:
					App.SetPlace(Place.Sport);
					RefreshFilters();
					break;
				}
			};

			#endregion


			#region TempAndCityWindows

			SetUserTemp.Clicked += (object sender, EventArgs e) => {

				if(String.IsNullOrEmpty(UserTemp.Text) || UserWeatherTagPicker.SelectedIndex == -1)
				{
					if(String.IsNullOrEmpty(UserTemp.Text))
						HighlightView(UserTemp);

					if(UserWeatherTagPicker.SelectedIndex == -1)
						HighlightView(UserWeatherTagPicker);

					return;
				}

				try
				{
					Temperature = Convert.ToInt32(UserTemp.Text);
				}
				catch(Exception ex)
				{
					HighlightView(UserTemp);
					return;
				}

				if(Temperature < -50 || Temperature > 40)
				{
					HighlightView(UserTemp);
					return;
				}

				UserTemp.Unfocus();

				TempLabel.Text = Temperature + " °C";

				WeatherTag = Utils.PickerValueToTag (UserWeatherTagPicker.SelectedIndex);
				WeatherConditionImage.Content = new SvgImage {
					SvgPath = "ClothesAndWeather.Images.Tags." + WeatherTag + ".svg",
					SvgAssembly = typeof(App).GetTypeInfo ().Assembly
				};

				RefreshFilters();
				ChangeTempWindow.Hide();
			};

			SetAutoTemp.Clicked += (object sender, EventArgs e) => {
				GetOpenWeatherData (() => {
					RefreshFilters ();
					ChangeTempWindow.Hide();
				}, () => {
					
				}, true);
			};

			SetUserCity.Clicked += (object sender, EventArgs e) => {
				if(String.IsNullOrEmpty(UserCity.Text))
				{
					HighlightView(UserCity);
					return;
				}

				UserCity.Unfocus();

				string oldCity = City;

				City = UserCity.Text;

				GetOpenWeatherData (() => {
					CityLabel.Text = City;
					RefreshFilters ();
					ChangeGeoWindow.Hide();
				}, () => {
					HighlightView(UserCity);
					City = oldCity;
				}, false);

				GetTimeByCity(() => {});

			};

			SetAutoCity.Clicked += (object sender, EventArgs e) => {
				GetGoogleCityName ();
				GetOpenWeatherData (() => {
					TimeZone = null;
					DTSwitchOnce();
					RefreshFilters();
					ChangeGeoWindow.Hide();
				}, () => {
					
				}, true);
			};

			#endregion


			#region Arrows

			TapGestureRecognizer clothesArrowsTapGestureRecognizer = new TapGestureRecognizer();

			HeadLeft.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer);
			HeadRight.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer);
			BodyLeft.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer);
			BodyRight.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer);
			PantsLeft.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer);
			PantsRight.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer);
			ShoesLeft.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer);
			ShoesRight.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer);

			clothesArrowsTapGestureRecognizer.Tapped += (object sender, EventArgs e) => {

				CWArrow btn = (CWArrow)sender;

				CallArrow(btn);
			};

			#endregion



			EnableDTSwitch ();


			GetGoogleCityName ();

			GetOpenWeatherData (() => {
				RefreshFilters ();
			}, () => {
				
			}, true);

		}
		public void GetOpenWeatherData(Action callback, Action exceptionCallback, bool byCoords)
		{
			WeatherConditionImage.Content = new ActivityIndicator { IsRunning = true, Color = Color.White };
			if (byCoords) {
				((App)App.Current).GetWeatherByCoordinates ((OpenWeatherData result) => {

					try
					{

						Temperature = (int)Math.Round (result.Meteorology.CelsiusTemperature);
						TempLabel.Text = Temperature + " °C";

						WeatherTag = Utils.OpenWeatherDataToTag (result.Weather [0]);
						WeatherConditionImage.Content = new SvgImage {
							SvgPath = "ClothesAndWeather.Images.Tags." + WeatherTag + ".svg",
							SvgAssembly = typeof(App).GetTypeInfo ().Assembly
						};

						callback.Invoke ();
					}
					catch
					{
						exceptionCallback.Invoke();
					}
				});
			}
			else
			{
				((App)App.Current).GetWeatherByCity ((OpenWeatherData result) => {

					try
					{
						Temperature = (int)Math.Round (result.Meteorology.CelsiusTemperature);
						TempLabel.Text = Temperature + " °C";

						WeatherTag = Utils.OpenWeatherDataToTag (result.Weather [0]);
						WeatherConditionImage.Content = new SvgImage {
							SvgPath = "ClothesAndWeather.Images.Tags." + WeatherTag + ".svg",
							SvgAssembly = typeof(App).GetTypeInfo ().Assembly
						};

						callback.Invoke ();
					}
					catch
					{
						exceptionCallback.Invoke();
					}
				}, City);
			}
		}