$(document).ready(function(){
	var respon = $(".respon"); // блок статуса отправки данных
	var work_block = $("#work_block");
	var error_ajax = "Ошибка передачи данных. Попробуйте ещё раз чуть позже. Спасибо.";
	var status_login = $(".status_login").text(); // определяем статус пользователя.
	
 	// ставим стандартное значение
 	if (status_login == 2) { // гость
 			var change_start = "start";
 			var change_profile = "profile";
 	} else { // пользователь
 			var change_start = "profile";
 			var change_profile = "start";
 	}
    var AppState = Backbone.Model.extend({
        defaults: {
            state: change_start,
				inner_subject: ""
        }
    });
    var appState = new AppState();
    
    var Controller = Backbone.Router.extend({
        routes: {
         "": change_start, // Пустой hash-тэг
         "!/": change_start, // Начальная страница
         "!/login": "login", // страница пользователя
         "!/profile": change_profile, // страница пользователя
			"!/password_lost": "password_lost", // восстановление пароля
			"!/reject_email": "reject_email", // проверка email на наличие в бд 
			"!/error": "error" // ошибка
        },
	
        start: function () { // входная страница
        		if (change_start == "start") {
        			appState.set({ state: "start" });
        		} else {
            	appState.set({ state: "profile" });
            }
        },
        
       login: function () { // дубль для авторизации
        			appState.set({ state: "start" });
        },
		
		password_lost: function () { // напоминание пароля
            appState.set({ state: "password_lost" });
        },
        
        profile: function () { // профиль пользователя
        		if (change_start == "start") {
        			appState.set({ state: "start" });
        		} else {
            	appState.set({ state: "profile" });
            }
        },
        
         exit: function () { // выход с сайта
            appState.set({ state: "exit" });
        },
        
         reject_email: function () { // проверка email
            appState.set({ state: "reject_email" });
        },
        
        error: function () { // ошибка
            appState.set({ state: "error" });
        },
               
    });

    var controller = new Controller(); // Создаём контроллер
    
    var Block = Backbone.View.extend({
        el: work_block, // DOM элемент widget'а

        templates: { // Шаблоны на разное состояние
            "start": _.template($('#start').html()),
				"password_lost": _.template($('#password_lost').html()),
				"profile": _.template($('#profile').html()),
				"reject_email": _.template($('#reject_email').html())
        },

        events: {
			"click .try_login": "try_login", // вход на сайт
			"click .try_password": "try_password", // восстанавливаем доступ к сайту
			"click .try_exit": "try_exit", // выходим из системы
			"click .try_reject_check": "try_reject_check", // проверяем указанный почтовый ящик по коду
			"click .try_reject_email": "try_reject_email" // запрашиваем ещё раз код подтверждения
        },

        initialize: function () { // Подписка на событие модели
            this.model.bind('change', this.render, this);
        },
		
		// вход на сайт
		try_login: function () {
            $('.notification').jnotifyAddMessage({text: "Выполняется отправка данных, немного подождите", type: 'clear'});
				var form = this.el.find("form"); // форма
				this.el.find("button").append("<input name='ajax' value='1' type='hidden'>");
				var content = form.formSerialize(); // данные
				$.ajax({
				  url: ave_path,
				  data: content,
				  type: "post",
				  success: function( data ) {
					if (data.action == "clear") {
						$('.notification').jnotifyAddMessage({text: "Всё хорошо, вы вошли, сейчас будем обновлять профиль, подождите немного.", type: data.status});
						$('.welcom_message').html("Добро пожаловать, "+data.respons.user_name+"!");
						data.respons.link = 	(data.respons.user_group == 1) ? '<li><span class="padding-for-icons mode"><a href="'+ave_path+'index.php?module=login&amp;action=wys&amp;sub=on">Включить редактор</a></span></li>' : '<li><span class="padding-for-icons support"><a href="'+ave_path+'message/write/1/">Служба поддержки</a></span></li>';
						appState.set({"state": "profile", "inner_subject": data.respons});
						check_user_permission(1, data.respons);
					} else if(data.action == "reject") {
						$('.notification').jnotifyAddMessage({text: data.respons, type: data.status});
						appState.set({"state": "reject_email", "inner_subject": data.respons});
					} else {
						$('.notification').jnotifyAddMessage({text: data.respons, type: data.status});
						//appState.set({"state": "error", "inner_subject": data.respons});
					}	
					
				  },
				  error: function(data) {
						$('.notification').jnotifyAddMessage({text: error_ajax, type: 'error'});
				  }
				});	
        },
			
		// восстанавливаем доступ к сайту
		try_password: function () {
          	$('.notification').jnotifyAddMessage({text: "Выполняется отправка данных, немного подождите", type: 'clear'});
				var form = this.el.find("form"); // форма
				this.el.find("button").append("<input name='ajax' value='1' type='hidden'>");
				var content = form.formSerialize(); // данные
				$.ajax({
				  url: ave_path,
				  data: content,
				  type: "post",
				  success: function( data ) {
					$('.notification').jnotifyAddMessage({text: data.respons, type: data.status});
					if (data.action == "clear") {
						appState.set({"state": "start", "inner_subject": data.respons});
					} else {
						//appState.set({"state": "error", "inner_subject": data.respons});
					}
				  },
				  error: function(data) {
						$('.notification').jnotifyAddMessage({text: error_ajax, type: 'error'});
				  }
				});
        },
		
		// выходим из системы
        try_exit: function () {
			$.ajax({
			  url: ave_path+'login/ajax/exit/',
			  data: "",
			  success: function( data ) {
			  	$('.notification').jnotifyAddMessage({text: data.respons, type: data.status});
			  	$('.welcom_message').html("До встречи, ждём вас в гости ещё");
				appState.set({"state": "start"});
				check_user_permission(0, 0);
			  },
			  error: function(data) {
					$('.notification').jnotifyAddMessage({text: error_ajax, type: 'error'});
			  }
			});	
        },
        
        
       // повторная отправка данных
       try_reject_email: function () {
       	$('.notification').jnotifyAddMessage({text: "Выполняется отправка данных, немного подождите", type: 'clear'});
       	var form = this.el.find("form"); // форма
			this.el.find("button").append("<input name='ajax' value='1' type='hidden'>");
			var content = form.formSerialize(); // данные

			$.ajax({
			  url: ave_path+'login/ajax/reject_email/',
			  data: content,
			  type: "post",
			  success: function( data ) {
			  	$('.notification').jnotifyAddMessage({text: data.respons, type: data.status});
			  	if (data.respons.action == "clear") {
					appState.set({"state": "start"});
					check_user_permission(0, 0);
				}
			  },
			  error: function(data) {
					$('.notification').jnotifyAddMessage({text: error_ajax, type: 'error'});
			  }
			});		
        },
        
              
       //  проверяем указанный почтовый ящик по коду
       try_reject_check: function () {
       	$('.notification').jnotifyAddMessage({text: "Выполняется отправка данных, немного подождите", type: 'clear'});
       	var form = this.el.find("form"); // форма
			this.el.find("button").append("<input name='ajax' value='1' type='hidden'>");
			var content = form.formSerialize(); // данные

			$.ajax({
			  url: ave_path+'login/register/final/',
			  data: content,
			  type: "post",
			  success: function( data ) {
			  	$('.notification').jnotifyAddMessage({text: data.respons, type: data.status});
				  	if (data.action == "clear") {
						appState.set({"state": "start"});
						check_user_permission(0, 0);
					} else {
						$('.notification').jnotifyAddMessage({text: "Проверочный код введен не верно, если нужно, мы можем выслать новую версию", type: 'error'});
					}
			  },
			  error: function(data) {
					$('.notification').jnotifyAddMessage({text: error_ajax, type: 'error'});
			  }
			});		
        },
        
        
        render: function () {
            var state = this.model.get("state");
            $(this.el).html(this.templates[state](this.model.toJSON()));
            return this;
        }
    });

    var block = new Block({ model: appState }); // создадим объект

    appState.trigger("change"); // Вызовем событие change у модели
    appState.bind("change:state", function () { // подписка на смену состояния для контроллера
        var state = this.get("state");
        if (state == "start") 
            controller.navigate("!/", false); // false потому, что нам не надо 
                                              						// вызывать обработчик у Router                   						
         else 
            controller.navigate("!/" + state, false); 
    });
    
    //Backbone.history.start();  // Запускаем HTML5 History push    

    // обрабатываем статус пользователя
    function check_user_permission (status, data) {
 	    	if (status == 1) {
	 	    		// авторизация
	 	    		$("input[name = 'author_name']").val(data.user_name); 
	 	    		$("input[name = 'author_email']").val(data.user_email); 
	 	    		$(".work_bookmark").show();
	 	    		$(".status_login").text(data.user_group);
 	    	} else {
 	    			// выход из системы
 	    			$("input[name = 'author_name']").val(['']); 
 	    			$("input[name = 'author_email']").val(['']); 
 	    			$(".work_bookmark").hide();
 	    			$(".status_login").text("2");
 	    }		  	
    }
});
