
var REGISTER_STEP2 = '/register2';
var REGISTER_STEP1 = '/register';
var LOGIN_AFTER_REGISTER_URL = '/profile/view.do'; // '/#login';



function interviewInit() {
    try {
			jQuery('#formInterview').submit(function() { 
        			// inside event callbacks 'this' is the DOM element so we first 
        			// wrap it in a jQuery object and then invoke ajaxSubmit 
				var options = {
					beforeSubmit: function() {
						//jQuery('#interviewDiv').hide(); 
					 	jQuery('#loaderInterview').show(); 
                                         	return true;
 					},
					success:    function() {
						jQuery('#loaderInterview').hide(); 
						jQuery('#divInterview').text('Спасибо за участие в опросе.'); 
        					 
    					},
					error:    function(a,b,c) {
						jQuery('#loaderInterview').hide(); 
						jQuery('#divInterview').text('Спасибо за участие в опросе.'); 
        					 
    					}  
  
				};
        			jQuery(this).ajaxSubmit(options); 
 
        			// !!! Important !!! 
        			// always return false to prevent standard browser submit and page navigation 
        			return false; 
    			}); 
    } catch (e) {
        debug("interviewInit error: " + e.message);
    }
}

function errorDialog(errorText) {

	jQuery("#errorDialog").text(errorText);
	
	jQuery("#errorDialog").dialog({
		modal:"true",
    		position: ["center","center"],
    		buttons: {
      			"Ok": function() { jQuery(this).dialog("close"); }
    			}
	});

}

function infoDialog(text) {

	jQuery("#infoDialog").text(text);

	jQuery("#infoDialog").dialog({
		modal:"true",
    		position: ["center","center"],
    		buttons: {
      			"Ok": function() { jQuery(this).dialog("close"); }
    			}
	});

}

function loginInit() {

    try {

    $("#loginBtn").click(function(){
        redirectIfLoggedIn();
    });

    $(".logout-btn").click(function(){
        Api.logoutNow();
        return true;
    });

    jQuery('#formLogin').submit(function() {

        var loginForm = jQuery(this);

        var options = {
            dataType: 'json',
            data: {ajax: true},
            async: true,
            beforeSend: function(){
                globalVidimaxAjaxBeforeSendHandler(true);
            },
            success: function(response, statusText) {
                try {
//                    globalVidimaxAjaxCompleteHandler();
                    if (statusText == "success" && response.resultCode == 0) {
                        window.location.replace(response.url);
                    } else {
                        errorDialog("Некорректный логин или пароль");
                    }
                } catch (e) {
                    errorDialog("Ошибка при выполнении запроса");
                }
            },
            error:    function() {
//                globalVidimaxAjaxCompleteHandler();
                errorDialog("Ошибка при входе");
            }

        };

        try {
            globalVidimaxAjaxBeforeSendHandler(true);
            Api.login($('#j_username').val(), $('#j_password').val(),
                function () {
                    // запускаем следующий запрос через таймаут, чтобы отработали все обработчики текущего запроса, не пересекаясь со следующим
                    setTimeout(function(){loginForm.ajaxSubmit(options)}, 200);
                },
                function () {
                    setTimeout(function(){loginForm.ajaxSubmit(options)}, 200);
//                    globalVidimaxAjaxCompleteHandler();
//                    errorDialog("Некорректный логин или пароль");
                },
                function () {
                    errorDialog("Ошибка при входе");
                }
            );
        } catch (e) {
            debug("Ошибка Api" + e.message);
//            globalVidimaxAjaxCompleteHandler();
            errorDialog("Ошибка Api");
        }

        return false;
    });

/*
    $('#formLogin').ajaxForm({
        dataType: 'json',
        data: {ajax: true},
        success: function(response, statusText) {
            try {
            if (statusText == "success" && response.resultCode == 0) {
                window.location.replace(response.url);
            } else {
                errorDialog("Некорректный логин или пароль");
            }
            } catch (e) {
                errorDialog("Ошибка при выполнении запроса");
            }
        },
        error: function() {
            errorDialog("Ошибка при входе");
        }
    });
*/

    function showFormRegisterByPhone() {
        $(".register-element").show();
        $(".re-register-element").hide();
        $('#activationCode').val("");
        $('#pinCode').val("");
        showFormRegister();
    }

    function showFormRegisterByCodeAndPhone() {
        $(".re-register-element").show();
        $(".register-element").hide();
        showFormRegister()
    }

    $('#forgotPasswordButton').click(showFormRestore);

    $('.back-to-login-button').click(showFormLogin);

    $('#registerButton').click(showFormRegisterVariants);

    $('#registerByPhoneButton').click(showFormRegisterByPhone);

    $('#registerByCodeAndPhoneButton').click(showFormRegisterByCodeAndPhone);

    $(".sendInviteButton").click(showInviteFriendDialog);

    $(".specialRegisterButton").click(showRegisterDialog);

    $(".specialLoginButton").click(showLoginDialog);



    $('#formRestore').ajaxForm({
        dataType: 'json',
        success: function(response, statusText) {
            try {
                if (statusText == "success") {
                    if (response.result == 0) {
                        if (response.message) {
                            infoDialog(response.message);
                        } else {
                            infoDialog("Новый ПИН отправлен");
                        }
                    }
                    else if (response.result == -1) {
                        errorDialog("Неверный код с картинки");
                        $('#kaptchaImage').click();
                    }
                    else if (response.result == -2) {
                        errorDialog("Ошибка при отправке почтового сообщения. Обратитесь в службу техподдержки");
                        $('#kaptchaImage').click();
                    }
                    else if (response.result == -3) {
                        errorDialog("Пользователь с таким адресом электронной почты не найден");
                        $('#kaptchaImage').click();
                    } else {
                        if (response.error_message) {
                            errorDialog(response.error_message);
                        } else if (response.error_msg_code) {
                            messages.displayMessageCallback(
                                response.error_msg_code,
                                "Ошибка при восстановлении ПИН-кода",
                                function(message){
                                    errorDialog(message);
                                },
                                function(){
                                    errorDialog("Ошибка восстановления ПИН-кода");
                                }
                            );
                        } else {
                            errorDialog("Ошибка восстановления ПИН-кода");
                        }
                        $('#kaptchaImage').click();
                    }
                } else {
                    errorDialog("Ошибка при выполнении запроса");
                    $('#kaptchaImage').click();
                }
            } catch (e) {
				errorDialog("Ошибка при выполнении запроса");
            }
        },
        error: function() {
            errorDialog("Ошибка при выполнении запроса.");
            $('#kaptchaImage').click();
        }
    });
    } catch (e) {
        debug("loginInit error: " + e.message);
    }

}

function registerStep1Init() {

    try {
    $('#formRegister1').ajaxForm({
        dataType: 'json',
//        data: {ajax: true},
        success: function(response, statusText) {
            try {
            if (statusText == "success" && response.success == 0) {
                window.location.replace(REGISTER_STEP2 + '#email=' + $("#email").val());
            } else {
//                errorDialog("Некорректный логин или пароль");
                errorMapping($('#formRegister1'), response.success, response.errors);
            }
            } catch (e) {
                errorDialog("Ошибка при попытке регистрации");
            }
        },
        error: function() {
            errorDialog("Ошибка при выполнении запроса");
        }
    });
    } catch (e) {
        debug("registerStep1Init error: " + e.message);
    }

}

function registerStep2Init() {

    try {
    $('#formRegister2').ajaxForm({
        dataType: 'json',
        success: function(response, statusText) {
            try {
            if (statusText == "success" && response.success == 0) {
                infoDialog("Вы были успешно зарегистрированы на Vidimax.ru!");
                window.location.replace(path + LOGIN_AFTER_REGISTER_URL);
            } else if (statusText == "success" && response.success == -4) {
                infoDialog("Вы были успешно зарегистрированы на Vidimax.ru!");
                var loginBtn = $("#loginBtn");
                if (loginBtn) tb_show(loginBtn.attr("title"), loginBtn.attr("href"));
            } else {
//                errorDialog("Некорректный логин или пароль");
                errorMapping($('#formRegister2'), response.success, response.errors);
            }
            } catch (e) {
                errorDialog("Ошибка при попытке регистрации");
            }
        },
        error: function() {
            errorDialog("Ошибка при выполнении запроса");
        }
    });
    } catch (e) {
        debug("registerStep2Init error: " + e.message);
    }

}

function errorMapping(form, resultCode, errors) {

    form.children(".error").removeClass("error");
    $("#msg_flash").html("");
    $(".error-msg").html("");
    if (resultCode == -2) {
        for (var i = 0; i < errors.length; i++) {
            var error = errors[i];
            if (error.field != "") {
                $("#" + error.field).addClass("error");
                $("#msg_" + error.field).html(error.message);
            } else {
                $("#msg_flash").html($("#msg_flash").html() + "<div>" + error.message + "</div>");
            }
        }
    } else if (resultCode == -1) {
        errorDialog("Для начала регистрации нужно ввести код активации и ПИН-код в форме входа в систему");
        $("#msg_flash").html("Для начала регистрации нужно ввести код активации и ПИН-код в форме входа в систему");
        $("#loginBtn").click();
    }

}

function displayValidationErrors(errors) {

    if (errors) {

        try {
            var errorMap = {};

            for (var i = 0; i < errors.length; i++) {
                // errors[i].key - название поля
                // errors[i].value - код ошибки
                if (errorMap[errors[i].key]) {
                    errorMap[errors[i].key].push(errors[i].value);
                } else {
                    errorMap[errors[i].key] = [errors[i].value]
                }
            }

            for (var key in errorMap) {
//                $("#msg_"+key).html("");
                for (var i = 0; i < errorMap[key].length; i++) {
                    messages.displayMessage(errorMap[key][i], errorMap[key][i], "#msg_"+key, true);
//                    $("#msg_"+key).html($("#msg_"+key).html() + "<br/>" + errorMap[key][i]);
                }
            }
        } catch (e) {
            debug("error mapping error");
            errorDialog("errorMap error");
        }

    }

}

function messageByResultCode(code, message) {

    switch (code) {
        case -52: return "Необходимо авторизоваться";
        case -53: return "Некорректный логин или пароль";
        case -61: return "Некорректный номер";
        case -63: return "Ошибка отправки смс";
        case -65: return "Неправильный ПИН";
        case -68: return "Телефон привязан к другому счету";
        case -69: return "Превышен лимит попыток входа, подождите 5 минут";
        case -199: return "Ошибка валидации";
    }

    return "Error code " + code + " (" + message + ")";

}

var smsHasSent = false;

function registerInit() {
    try {
		jQuery('#formRegister').submit(function() { 
			var options = {
				dataType: 'json',
				success: function(jsonResult, statusText, xhr) {
                    if (jsonResult.success == 0) {
						window.location.replace(REGISTER_STEP1);
					} else {
                        if (jsonResult.success == -2) {
                            errorDialog("Указанные код активации и ПИН уже использованы");
                        } else {
                            errorDialog("Некорректный код активации или ПИН");
                        }
					}

				},
			
				error:    function(a,b,c) {
					errorDialog("Ошибка при регистрации");
				}  
  
			};

			jQuery(this).ajaxSubmit(options); 
			return false;
		}); 

		jQuery('#formRegisterPhone').submit(function(redirect) {

            if (!smsHasSent) {
                try {
//                    globalVidimaxAjaxBeforeSendHandler();
                    Api.requestActivationExisted(
                        $('#activationCode').val(), $('#pinCode').val(),
                        $('#phoneNumber').val(), $('#promoCode').val(),
                        function () {
//                            globalVidimaxAjaxCompleteHandler();
                            // редирект на страницу регистрации
                            alert("На указанный номер был выслан код");
                            smsHasSent = true;
                            jQuery('#formRegisterPhone').submit();
                        },
                        function (response) {
//                            globalVidimaxAjaxCompleteHandler();
                            errorDialog(messageByResultCode(response.resultCode, response.resultMessage));
//                            displayValidationErrors(response.errors);
                        },
                        function () {
//                            globalVidimaxAjaxCompleteHandler();
                            errorDialog("Ошибка при регистрации");
                        }
                    );
                } catch (e) {
                    debug("Ошибка Api" + e.message);
//                    globalVidimaxAjaxCompleteHandler();
                    errorDialog("Ошибка Api");
                }
            }

            return smsHasSent;

		});
    } catch (e) {
        debug("registerInit error: " + e.message);
    }
}


function inviteInit() {

    try {
 			jQuery("#formInvite").validate({
				submitHandler: function(form) {
				if ($("#step").val() != 2) {

					$("#step").val(2);
					$(".ignore").removeClass("ignore");
//					ShowBlock('S1');
                    $(".invitation-form-step-1").toggle();
//					ShowBlock ('S2');
                    $(".invitation-form-step-2").toggle();
					return false;
				};
				var options = {
					forceSync: false,
					beforeSubmit: function() {
 					 	jQuery('#loaderInvite').show();
                        return true;
 					},
					success:    function() {
                        try {
                            var pixel = new Image();
                            pixel.src = "http://ad.adriver.ru/cgi-bin/rle.cgi?sid=174679&sz=connection&bt=55&pz=0";
                        } catch (e){
                            debug("adriver send error: " + e.message);
                        }
						jQuery('#loaderInvite').hide();
						jQuery('#divInvite').text('Спасибо, Ваша заявка принята! На указанный электронный адрес будет направлено письмо с номером заказа и дальнейшей информацией по подключению.');
                    },
					error: function(a,b,c) {
						jQuery('#loaderInvite').hide();
						jQuery('#divInvite').text('Произошел сбой. Ваша заявка не принята');

 					},
                    data: {
                        test: 'value1'
                    }
				};
				jQuery(form).ajaxSubmit(options);
				return false;
				},

				rules: {
					name: { required: true },
					email: { required: true, email: true },
					phone: { required: true },
					city: {required: true},
					ispName: {required: true}
				},

				messages: {
					name: "Введите Ваше имя",
					email: "Введите корректный e-mail",
					phone: "Введите номер контактного телефона",
					city: "Укажите Ваш город",
					ispName: "Укажите Вашего провайдера"
				},
        			wrapper: "div",  // a wrapper around the error message
        			errorLabelContainer: $("#formInvite div.error")
				,
					ignore: ".ignore"
			});
    } catch (e) {
        debug("inviteInit error: " + e.message);
    }

}

function stbOrderFormInit() {

    try {
            jQuery("#formStbOrder").validate({
                submitHandler: function(form) {
                    if ($("#step").val() != 2) {
                        $("#step").val(2);
                    }
                    var options = {
                        forceSync: false,
                        dataType: 'text',
                        beforeSubmit: function() {
                              jQuery('#loaderInvite').show();
                            return true;
                        },
                        success:    function(data, statusText, xhr) {
                            jQuery('#loaderInvite').hide();
                            debug("[order response data] " + data);
                            if (statusText == "success" && data.indexOf("\"result\" : 0,") > -1) { //jsonResult.result == 0
                                $("#orderFormBlock").hide();
                                $("#successOrderBlock").show();
                            } else {
                                errorDialog("Произошел сбой. Ваша заявка не принята");
                            }
                        },
                        error: function(a,b,c) {
                            jQuery('#loaderInvite').hide();
                            debug("[formStbOrder submit error] " + b);
                            errorDialog("Произошел сбой. Ваша заявка не принята");
                        },
                        data: {
                            test: 'value1'
                        }
                    };
                    jQuery(form).ajaxSubmit(options);
                    return false;
                },

                rules: {
                    name: { required: true },
                    email: { required: true, email: true },
                    phone: { required: true },
                    city: {required: true},
                    ispName: {required: true}
                },

                messages: {
                    name: "Введите Ваше имя",
                    email: "Введите корректный e-mail",
                    phone: "Введите номер контактного телефона",
                    city: "Укажите Ваш город",
                    ispName: "Укажите Вашего провайдера"
                },

                //wrapper: "div",  // a wrapper around the error message
                //errorLabelContainer: $("#formStbOrder div.error"),
                ignore: ".ignore",
                //focusCleanup: true,
                //onkeyup: false,

                errorPlacement: function(error, element) {
                    error.appendTo( element.parents("div.vl").next("div.err") );
                }

            });
        jQuery("#formStbOrder input[type=text]").click(function(){
        $(this).next().detach();
    });
    } catch (e) {
        debug("stbOrderFormInit error: " + e.message);
    }

}


function questionInit() {

    try {
 			jQuery("#formQuestion").validate({ 
				submitHandler: function(form) {
					var options = {
						forceSync: false,
						beforeSubmit: function() {
					 		jQuery('#loaderQuestion').show(); 
                                         		return true; 
 						},
						success:    function() {
							jQuery('#loaderQuestion').hide(); 
							jQuery('#divForm').hide(); 
							jQuery('#finalText').text('Ваша заявка принята!');
							jQuery('#finalText').show();		
    						},
						error:    function(a,b,c) {
							jQuery('#loaderQuestion').hide(); 
							jQuery('#divForm').hide(); 
							jQuery('#finalText').text('Ваша заявка принята!');
							jQuery('#finalText').show();		
    						}  
  
					};
					jQuery(form).ajaxSubmit(options);
					return false;
				},

				rules: {
					firstName: { required: true },
					lastName: {required: true},   
					email: { required: true, email: true}
				},
   
				messages: {
					firstName: "Укажите имя",
					lastName: "Укажите фамилию",   
					email: "Укажите корректный адрес"  
				},
       				errorElement: "div", 
        			wrapper: "div",  // a wrapper around the error message 
        			errorPlacement: function(error, element) { 
            				offset = element.offset(); 
            				error.insertBefore(element) 
            				error.addClass('message');  // add a class to the wrapper 
            				error.css('position', 'absolute'); 
            				error.css('left', offset.left); 
            				error.css('top', offset.top - element.outerHeight()+10);  
        				} 

			});   
    } catch (e) {
        debug("questionInit error: " + e.message);
    }

}

function feedbackInit() {

    try {
 			jQuery("#formFeedback").validate({
				submitHandler: function(form) {
				var options = {
					forceSync: false,
					beforeSubmit: function() {
					 	jQuery('#loaderFeedback').show(); 
                                         	return true;
 					},
					success: function() {
						jQuery('#loaderFeedback').hide(); 
						jQuery('#divFeedback').hide(); 
						jQuery('#divFeedbackComment').text('Сообщение отправлено'); 
    					},
					error: function(a,b,c) { 						
						jQuery('#loaderFeedback').hide(); 
						jQuery('#divFeedback').hide(); 
						jQuery('#divFeedbackComment').text('Сообщение отправлено'); 
 					}
  
				};
				jQuery(form).ajaxSubmit(options);
				return false;
				},

				rules: {   
					email: { required: true, email: true  },
					name: {required: true}
				},
   
				messages: {   
					email: "Укажите корректный адрес",
					name: "Укажите Ваше имя"  
				},
       				errorElement: "div", 
        			wrapper: "div",  // a wrapper around the error message 
        			errorPlacement: function(error, element) { 
            				offset = element.offset(); 
            				error.insertBefore(element) 
            				error.addClass('message');  // add a class to the wrapper 
            				error.css('position', 'absolute'); 
            				error.css('left', offset.left); 
            				error.css('top', offset.top - element.outerHeight()+10);  
        				} 

			});   
    } catch (e) {
        debug("feedbackInit error: " + e.message);
    }

}

function addFavoriteInit() {

    try {
    $('#formAddFavorite').ajaxForm({
        dataType: 'json',
        data: {ajax: true},
        success: function(response, statusText) {
            try {
            if (statusText == "success" && response.resultCode == 0) {
                $("#favoriteResult").html("<div class='flash-success'>Успешно добавлено в избранное</div>");
                $('#formAddFavorite').hide();
                $('#formDelFavorite').show();
//                delFavoriteInit();
            } else {
                $("#favoriteResult").html("<div class='flash-error'>Неудалось добавить в избраное</div>");
            }
            } catch (e) {
				errorDialog("Ошибка при выполнении запроса");
            }
        },
        error: function() {
            $("#favoriteResult").html("<div class='flash-error'>Ошибка при добавлении в избранное</div>");
        }
    });
    } catch (e) {
        debug("addFavoriteInit error: " + e.message);
    }

}

function delFavoriteInit() {

    try {
    $('#formDelFavorite').ajaxForm({
        dataType: 'json',
        data: {ajax: true},
        success: function(response, statusText) {
            try {
            if (statusText == "success" && response.resultCode == 0) {
                $("#favoriteResult").html("<div class='flash-success'>Успешно удалено из избранного</div>");
                $('#formDelFavorite').hide();
                $('#formAddFavorite').show();
//                addFavoriteInit();
            } else {
                $("#favoriteResult").html("<div class='flash-error'>Неудалось удалить из избранного</div>");
            }
            } catch (e) {
				errorDialog("Ошибка при выполнении запроса");
            }
        },
        error: function() {
            $("#favoriteResult").html("<div class='flash-error'>Ошибка при удалении из избранного</div>");
        }
    });
    } catch (e) {
        debug("delFavoriteInit error: " + e.message);
    }

}

function actualizeAccountInfo() {
        try {
            $.ajax({ async: true, url: path + "profile/accountInfo.do",
                dataType: 'json', data: {ajax: true}, type: "POST",
                beforeSend: function(){
                    // do not hide flash messages immediately this time;
                },
                success: function(response, statusText){
                    if (statusText == "success" && response.resultCode == 0) {
                        $("#accountAmount").html(response.accounrAmountFormatted);
                        $("#tariffName").html(response.currentTariffName);
                        $("#tariffPrice").html(response.currentTariffPrice);
                    }
                }
            });
        } catch (e) {
            debug("actualizeAccountInfo error: " + e.message);
        }
}

function subscriptionInit() {
    formInit('#formSubscribtion', {
        "0": "Ваш тарифный план был успешно изменен",
        "1": "Тариф будет действовать до окончания текущего рассчетного периода",
        "-1": "Невозможно сохранить изменения подписки",
        "-2": "Недостаточно денег на счете"
    }, actualizeAccountInfo);
}

function inviteFriendInit() {
    formInit('#formInviteFriendInit', {
        "0": "Приглашение отправлено",
        "-1": "Вы уже отсылали приглашение",
        "-2": "Слишком длинный email",
        "-3": "Некорректный email",
        "-4": "Укажите email",
        "-5": "Укажите получателя",
        "-6": "Необходимо залогиниться"
    }, function (){
        window.location.replace(path);
    }, true, true, 'Ошибка при отправке сообщения');
}

function detailMessage(messageMap, response, defaultMessage, addMessage) {
    if (!!messageMap && !!response && messageMap[response.resultCode]) {
        return messageMap[response.resultCode] + (addMessage?(" " + addMessage):"");
    } else return defaultMessage?defaultMessage:'';
}

function formInit(formSelector, messageMap, onSuccess, useDialog, notUpdateForm, errorMessage) {

    try {

        var formObject = $(formSelector);

        var originalValues = formObject.serialize();

        formObject.submit(function() {

            debug("[submit form] " + formSelector);
            var options = {

                dataType: 'json',
                data: {ajax: true},
                success: function(response, statusText) {
                    debug("[submit form success] " + formSelector);
                    try {
                        if (statusText == "success" && (response.resultCode == 0 || response.resultCode == 1)) {
                            originalValues = formObject.serialize();
                            if (useDialog)
                                infoDialog(detailMessage(messageMap, response, 'Изменения успешно сохранены'));
                            else
                                formResultMessage(formObject, detailMessage(messageMap, response, 'Изменения успешно сохранены', response.expiredDate));
                            if (typeof onSuccess == "function") {
                                onSuccess(response, messageMap);
                            }
                        } else {
                            if (useDialog)
                                errorDialog(detailMessage(messageMap, response, errorMessage?errorMessage:'Невозможно сохранить изменения'));
                            else
                                formErrorMessage(formObject, detailMessage(messageMap, response, errorMessage?errorMessage:'Невозможно сохранить изменения'));
                        }
                    } catch (e) {
                        debug(formSelector + ".ajaxForm error: " + e.message);
                    }
                },
                complete: function(){
                    globalVidimaxAjaxCompleteHandler(10000);
                },
                error: function() {
                    debug("[submit form error] " + formSelector);
                    if (useDialog)
                        errorDialog('Ошибка при выполнении запроса');
                    else
                        formErrorMessage(formObject, 'Ошибка при выполнении запроса');
                }

            };

            if (notUpdateForm || originalValues != formObject.serialize()) {

                if (!$("#" + formObject.attr("id")+"_confirmationMessage").length && $(".confirmationMessage").length) {
                    $(".confirmationMessage").attr("id", formObject.attr("id")+"_confirmationMessage");
                }

                if ($("#" + formObject.attr("id")+"_confirmationMessage").length > 0) {

                    $("#" + formObject.attr("id")+"_confirmationMessage").dialog({
                        title: "Сохранить изменения",
                        width: 470,
                        modal: true,
                        position: ["center","center"],
                        buttons: {
                            "Сохранить изменения": function() {
                                $(this).dialog("close");
                                formObject.ajaxSubmit(options);
                            },
                            "Отмена": function() {
                                $(this).dialog("close");
                            }
                        }
                    });

                } else {

                    formObject.ajaxSubmit(options);

                }

            } else {

                if (useDialog)
                    infoDialog('Изменений не требуется');
                else
                    formResultMessage(formObject, 'Изменений не требуется', true);

            }

            return false;

        });

    } catch (e) {
        debug("formInit error: " + e.message);
    }

}

function formResultMessage(form, message, startHideTimer) {
    debug(form);
    form.before("<div class='flash-success'>" + message + "</div>");
    if (startHideTimer) globalVidimaxAjaxCompleteHandler();
}

function formErrorMessage(form, message, startHideTimer) {
    debug(form);
    form.before("<div class='flash-error'>" + message + "</div>");
    if (startHideTimer) globalVidimaxAjaxCompleteHandler();
}

function redirectIfLoggedIn() {
    try {
        showFormLogin();
        Api.checkLogin(
            function () {
                $.ajax({ async: false, url: path + "check.do",
                    dataType: 'json', data: {ajax: true}, type: "POST",
                    success: function(response, statusText){
                        if (statusText == "success" && response.resultCode == 0 && response.loggedIn) {
                            document.location.replace(path);
                            return false;
                        }
                        return true;
                    }
                });
            }/*,
            function () {

            },
            function () {

            }*/
        );
    } catch (e) {
        debug("redirectIfLoggedIn error: " + e.message);
    }
}

function isGranted(role) {
    try {
        if (window.grantedAuthorities && window.grantedAuthorities.length) {
            for (var i in window.grantedAuthorities) {
                if (window.grantedAuthorities[i] == role) {
                    return true
                }
            }
        }
    } catch (e) {
        debug("isGranted error: " + e.message);
    }
    return false;
}

function isVidimaxTestUser() {

    return isGranted("VIDIMAX_TEST");

}

function showInnerMenuIfLoggedIn() {
    try {
        $.ajax({ async: true, url: path + "check.do",
            dataType: 'json', data: {ajax: true}, type: "POST",
            success: function(response, statusText){
                if (statusText == "success" && response.resultCode == 0 && response.newyearaction) {
                    $(".newyearaction").show();
                } else if (statusText == "success" && response.resultCode == 0 && !response.newyearaction) {
                    $(".block-guest").hide();
                    $(".block-registered").hide();
                    $(".block-expired").show();
                }
                if (statusText == "success" && response.resultCode == 0 && response.loggedIn) {
                    window.vidimaxLoggedIn = true;
                    window.grantedAuthorities = response.authorities;
                    $(".MenuCenter").load(path + " .MenuCenter", null, null);
                    $(".LinkOffice").html("<a href=\"" + path + "j_spring_security_logout\" title=\"Выход из системы\">Выход</a>");
                    $(".loggedin").show();
                    if (isVidimaxTestUser()) {
                        $(".loggedin_test").show();
                    }
                    $(".HeadLogo a").attr("href", "/us-portal/");
                    $(".block-registered").show();
                    $(".block-guest").hide();
                    return false;
                }
                return true;
            }
        });
    } catch (e) {
        debug("redirectIfLoggedIn error: " + e.message);
    }
}

/*
function showInnerMenuIfNotLoggedIn() {
    try {
        $.ajax({ async: true, url: path + "check.do",
            dataType: 'json', data: {ajax: true}, type: "POST",
            success: function(response, statusText){
                if (statusText == "success" && response.resultCode == 0 && !response.loggedIn) {
                    window.vidimaxLoggedIn = false;
                    window.grantedAuthorities = [];
//                    $(".MenuCenter").load("http://www.vidimax.ru .MenuCenter", null, null);
                    $(".HeadLogo a").attr("href", "http://www.vidimax.ru");
                    return false;
                }
                return true;
            }
        });
    } catch (e) {
        debug("redirectIfLoggedIn error: " + e.message);
    }
}

*/

var path = "/";

function globalVidimaxAjaxBeforeSendHandler(bg) {
    debug("globalVidimaxAjaxBeforeSendHandler bg=" + bg);
    try {
        $(".flash-error,.flash-success").each(function(index) {
            if (!$(this).hasClass("no-hide")) {
                $(this).slideUp("slow");
            }
        });
    } catch (e) {}
    try {
        loaderImg.showLoaderImg(bg);
    } catch (e) {}
}

function globalVidimaxAjaxCompleteHandler(delay) {
    try {
        loaderImg.hideLoaderImg();
    } catch (e) {}
    try {
        $(".flash-error,.flash-success").each(function(index) {
            if (!$(this).hasClass("no-hide")) {
                $(this).delay(delay?delay:3000).slideUp("slow");
            }
        });
    } catch (e) {}
}

function vidimaxInit(apath) {

    path = apath?apath:"/";

   	jQuery.ajaxSetup({
		timeout:7000,
        beforeSend: function(){
            globalVidimaxAjaxBeforeSendHandler();
        },
        complete: function(){
            globalVidimaxAjaxCompleteHandler();
        }
	});

	jQuery('<div id="errorDialog" style="display:none;font-size:80%;" title="Ошибка"></div>').insertAfter('.FrameBigBot');

	jQuery('<div id="infoDialog" style="display:none;font-size:80%;" title="Информация"></div>').insertAfter('.FrameBigBot');

	loginInit();
	registerInit();
    inviteInit();
    registerStep1Init();
    registerStep2Init();
	interviewInit();
    addFavoriteInit();
    delFavoriteInit();
    subscriptionInit();
    inviteFriendInit();
}

function execInitFromPool() {
    for (var i in window.initpool) {
        if (typeof window.initpool[i] == 'function') {
            window.initpool[i]();
        }
    }
    window.initpool = [];
}

function execLoadLaters() {
    $("input.load-later-url").each(function(){
        this.className = "load-later-url-init";
        var blockId = this.id.replace(/-url/, "");
        var url = this.value;
        debug("init loadlater before load blockId: " + blockId);
        $("#" + blockId).load(
            url,
            null,
            function (response, status, xhr) {
                debug("init loadlater callback. status: " + status);
                try{
//                    initFilter(Filter.settings.r?Filter.settings.r:ratingValue);
//                    window.floatsInit = false;
//                    initSheet();
                    setTimeout(execInitFromPool, 200);
                } catch (e) {
                    debug("init loadlater error: " + e.message);
                }
                try {
                    loaderImg.hideLoaderImg();
                } catch (e) {
				    errorDialog("Ошибка при выполнении запроса");
                }
                debug("init loadlater loaded");
            }
        );
    });
}


var messages = function(){

    var _message = function(messageCode, defaultMessage, onSuccess, onError) {

        $.ajax({
            url: path + "message/get.do",
            dataType: 'json',
            data: {
                code: messageCode,
                defaultMessage: defaultMessage
            },
            type: "POST",
            success: function (response, statusText) {
                if (statusText == "success" && response.resultCode == 0) {
                    if (typeof onSuccess == "function") {
                        onSuccess(response);
                    }
                } else {
                    if (typeof onError == "function") {
                        onError(response);
                    }
                }
            },
            error: function () {
                if (typeof onError == "function") {
                    onError();
                }
            }
        });

    };

    return {

        displayMessage: function(messageCode, defaultMessage, elementSelector, append) {

            _message(
                messageCode,
                defaultMessage,
                function (response) {
                    var text = $(elementSelector).html();
                    $(elementSelector).html((append && text != ""?text + "<br/>":"") + response.message);
                },
                function (response) {
                    var text = $(elementSelector).html();
                    $(elementSelector).html((append && text != ""?text + "<br/>":"") + "message not found");
                }
            )

        },

        displayMessageCallback: function(messageCode, defaultMessage, successCallback, errorCallback) {

            _message(
                messageCode,
                defaultMessage,
                function (response) {
                    if (typeof successCallback == "function") {
                        successCallback(response.message);
                    }
                },
                function (response) {
                    if (typeof errorCallback == "function") {
                        errorCallback(response);
                    }
                }
            )

        }

    }

}();
