var NeedLogin;
var Logout;
var FeedBack;
var NewVersion
var NiceAppearence;
Event.bind('pattern.init', function(){
	jQuery(function(){
		NiceAppearence = (function(){
			var holders = jQuery('.nice-appearance');
			if (holders.length > 0){
				Event.bind('map.beforeSetSize', function(){
					holders.show();
				});
			}
		})();
		FeedBack = (function(){
			var initFeedBack = function(fakeForm){
				var self = this;
				self.fakeInput = fakeForm.find('input');
				self.userLocation = 'none';
				self.fakeInput.focus(function(){
					self.detectLocation();
					self.fakeInput.blur();
					self.initPopup();
				})
			}
			initFeedBack.prototype = {
				detectLocation: function(){
					var self = this;
					if ((!(typeof(YMaps)=='undefined'))&&(isset(YMaps.location))){
						self.userLocation = YMaps.location.city;
					}
				},
				success: function(){
					var self = this;
					self.enable = false;
					self.form.html(Pattern('feedback.success'));
					self.form.find('button').click(function(){
						self.popup.close();
					});
				},
				send: function(){
					var self = this;
					self.buttons.send.wait();
					ServerAction({
						method: 'maplos/feedback',
						data: {
							email: trim(self.email.val()),
							message: trim(self.textarea.val()),
							location: self.userLocation
						},
						handler: function(){
							self.success();
						}
					});
				},
				checkFill: function(){
					var self = this;
					if ((trim(self.textarea.val()+self.email.val())).length > 0){
						self.buttons.send.reset();
						self.enable = true;
					}else{
						self.buttons.send.disable();
						self.enable = false;
					}
				},
				initPopup: function(){
					var self = this;
					self.enable = false;
					self.main = jQuery(Pattern('feedback.form'));
					self.popup = Popup.open(self.main);
					self.form = self.main.find('form');
					self.form.submit(function(){
						if (self.enable){
							self.send();
						}
						return false;
					});
					self.buttons = Buttons(self.form);
					self.textarea = self.form.find('textarea');
					self.email = self.form.find('input[name=email]');
					self.email.bind('keyup', function(){
						self.checkFill();
					})
					self.textarea.bind('keyup', function(){
						self.checkFill();
					})
					self.textarea.focus();
					self.buttons.send.disable();
					self.buttons.cancel.click = function(){
						self.popup.close();
						return false;
					}
					ServerAction({
						method: 'maplos/session_ajax_set',
						data: {
							key: 'feedback_open',
							value: 'yes'
						}
					});
				}
			}
			jQuery('#feedback').each(function(){
				new initFeedBack(jQuery(this));
			})
		})();
		NewVersion = (function(){
			var initNewVersion = function(button){
				var self = this;
				if((Env.get('session.new_version'))=='yes'){
					button.click(function(){
						PageReload(self.redirectUrl());
					});
				}else{
					button.click(function(){
						self.popupForm = jQuery(Pattern('newVersion.popup'));
						self.popup 				= Popup.open(self.popupForm);
						self.popupButtons = Buttons(self.popupForm);
						self.popupButtons.go.click = function(){
							self.popupButtons.go.wait();
							self.popupButtons.cancel.disable();
							self.setNewVersion('yes', function(){
								PageReload(self.redirectUrl());
							});
						}
						self.popupButtons.cancel.click = function(){
							self.popupButtons.cancel.wait();
							self.popupButtons.go.disable();
							self.setNewVersion('no', function(){
								self.popup.close();
							});
						}
					});
					if(
						((AjaxHistory.getHash()).match(new RegExp('new-version','i')))
						||(
							(Env.get('session.new_version')!='no')
							&&(((Env.get('session_life_time'))*1)>3600*24)
						)
					){
						button.click();
					}
				}
			}
			initNewVersion.prototype = {
				redirectUrl: function(){
					var self = this;
					var href = (document.location.href+'')
						.replace(new RegExp('kiev/favorites', 'gi'), 'favorites')
						.replace(new RegExp('kiev/', 'gi'), 'search/')
						.replace(new RegExp('/kiev', 'gi'), '/')
						.replace(new RegExp('//maplos', 'gi'), '//kiev.maplos');
					return href;
				},
				setNewVersion: function(value, handler){
					var self = this;
					ServerAction({
						method: 'maplos/session_ajax_set',
						data: {
							key: 'new_version',
							value: value
						},
						handler: handler
					});
				}
			}
			jQuery('#new-version-button').each(function(){
				new initNewVersion(jQuery(this));
			})
		})();
		NeedLogin = (function(){
			var initNeedLogin = function(type){
				var self = this;
				self.content = jQuery(Pattern('needLogin.main'));
				self.content.find('.message').append(Pattern('needLogin.messages.'+type));
				self.popup = Popup.open(self.content);
				self.buttons = Buttons(self.content);
				self.buttons.login.click = function(){
					this.wait();
					PageReload('/account/sign-in');
				}
				self.buttons.cancel.click = function(){
					self.popup.close();
				}
			}
			return function(type){
				if (Logout.check()){
					return true;
				}
				new initNeedLogin(type);
				return false;
			}
		})();
		Logout = (function(){
			var hasUser = false;
			var initLogout = function(main){
				var self = this;
				self.main = main;
				self.logoutButton = self.main.find('.logout-button');
				self.logoutButton.click(function(){
					ServerAction({
						method: 'auth/logout',
						handler: {
							success: function(){
								PageReload();
							}
						}
					})
				});
			}
			jQuery('#login div.logout').each(function(){
				new initLogout(jQuery(this));
				hasUser = true;
			});
			return {
				check: function(){
					return hasUser;
				}
			}
		})();
	});
});
