YPajax = {};
YPajax.registrator = {

    processReply: function (json){
        if(json.success){
        	$('#signup-form').html('<div class="title">Регистрация прошла успешно!</div> <p>После подтверждения регистрации вы сможете войти в Личный кабинет. Пожалуйста, проверьте Вашу почту и следуйте инструкциям в письме.</p>');
        } else {
            if(json.errors.email){
                $('#email-error').html(json.errors.email[0]);
				$('#email-error').show();
				$('#reg-email').addClass('error-input');
				$('#reg-email').focus(function() {
					$(this).css('border-color', 'red');
				})
            } else {
                $('#email-error').html('');
				$('#email-error').show();
            }
            if(json.errors.confirmPassword){
                $('#password-error').html(json.errors.confirmPassword[0]);
                $('#reg-password').addClass('error-input');
                $('#password-error').show();
            } else if (json.errors.password) {
                $('#password-error').html(json.errors.password[0]);
				$('#password-error').show();
            } else {
                $('#password-error').html('');
            }
            
            if(json.errors.screenName){
                $('#scrname-error').html(json.errors.screenName[0]);
            } else {
                $('#scrname-error').html('');
            }
        }
    },

    sendRegistrationRequest : function(){
        var email = $('#signup-form #reg-email').val();
        var password = $('#signup-form #reg-password').val();
        var ref = $('#signup-form #reg-refer-url').length > 0 ? $('#signup-form #reg-refer-url').val() : window.location.href; 
        var opts = {"email": email, "password": password, "referurl": encodeURIComponent(ref)};
        var reg_new_url = $('#reg-ext-url').length > 0 ? $('#reg-ext-url').val() : 'register'; 
        $.getJSON(reg_new_url, opts, YPajax.registrator.processReply);
        return false;
    }
};

YPajax.login = {
		
	    processReply: function (json, isExt){
            if (json.success) {
                YPajax.login.sendGetUserNameRequest();
            } else {
                $('#login-form .error').css('display', 'block');
                $('#user-login').trigger({type : 'userLoginFailed', message : isExt ? 'Ошибка авторизации' : 'Неправильный логин или пароль'});
            }
	    },
	    processGetNameReply: function (json){
	        if(json.success && json.success.username){
				$('#personal-nav .profile-link').attr('id',(json.success.userID[0]));
                $('#personal-nav .profile-link').attr('href',(json.success.myellink[0]));
	        	$('#personal-nav .profile-link, .top-usr-nav .usrname').html(json.success.username[0]);
				$('#personal-nav .logout-link, #personal-nav .profile-link, #results .tools .save-comp, #company-main-info .send-message-link, #toolbox .send-message-link, #toolbox .save-comp, .company-info .send-message-link, .toolbar-save .save-comp').removeClass('hide');
				$('#personal-nav .login-link, #results .tools .login-link, #company-main-info .login-link, #toolbox .login-link, .toolbar-save .login-link, .company-info .login-link').addClass('hide');
				$('#user-login').hide();
                overlayToggle(2);
                $('#user-login, .top-usr-nav').trigger({ type : 'userNameReceived', nickname : json.success.username[0], avatar : json.success.avatar[0], isext : json.success.isext[0] });
	        } 
	    },
	    sendLoginRequest : function(){
	        var email = $('#login-form #login-email').val();
	        var password = $('#login-form #login-password').val();
            var rememberMe = $('#login-form #remember-user').is(':checked').toString();
	        var url=$('#reg-url').val();
	        var ajax = "ajax";
	        var opts = {"j_username": email, "j_password": password, "ajax": ajax, "_spring_security_remember_me" : rememberMe};
            $.post(url, opts, function(json){
                YPajax.login.processReply(json, false);
            }, 'json');
	        return false;
	    },
        sendExtLoginRequest : function(extId, srvId, tkn){
            var url = $('#reg-url').val();
            var opts = { "ext_id" : extId, "srv_id" : srvId, "ajax" : "ajax", "ext" : "1", "ext_tkn" : tkn };
            $.post(url, opts, function(json) {
                YPajax.login.processReply(json, true);
                if (!json.success) { $('.ext-login-error').removeClass('hide').show(); }
            }, 'json');
        },
	    sendGetUserNameRequest : function(){
	        var opts = {};
	        $.getJSON(YPajaxURL.get_user_name_url, opts, YPajax.login.processGetNameReply);
	        return false;
	    },
        sendLinkLoginRequest : function(url, extId, srvId, tkn){
            var opts = { "extId" : extId, "srvId" : srvId, "extTkn" : tkn };
            $.post(url, opts, function(json) {
                if (json.success) {
                    $('#user-login, .top-usr-nav').trigger('externalUserLinked');
                } else {
                    YPajax.login.sendExtLoginRequest(extId, srvId, tkn);
                }
            }, 'json');
        }
};

YPajax.remindMePass = {

		processReply: function (json){
		    if(json.success){	
		    	$('#pass-recall-form div.message').hide();
				$('#pass-recall-form div.success').show();
				
		    }else {
		        if(json.errors.email){
		        	$('#pass-recall-form div.message').hide();
		            $('#pass-recall-form div.error').show();
			    $('#remind-me-pass-email').addClass('error-input');
			    $('#remind-me-pass-email').focus(function() {
				$(this).css('border-color', 'red');
			    });
			    
		        } else if(json.errors.emailNotFound){
					$('#pass-recall-form div.message').hide();
					$('#pass-recall-form div.nouser').show();		            
		        }	            
		    } 
		},

	    sendRemindMePassRequest : function(){
	        var email = $('#remind-me-pass-email').val();
	        var opts = {"email": email};
	        $.getJSON("remind-me-pass", opts, YPajax.remindMePass.processReply);
	        return false;
	    }
};

YPajax.categorySearcher = {
    processReply: function (json){
        $("#rubrics-list li, #category-search #rubrics-list").remove();
		$("#category-search").append("<ul id='rubrics-list'></ul>");
        for(var i = 0; i < json.length; i++){
            var el = json[i];
            var liString = "<li><a href=\"" + el.uri + "\">" + el.value + "</a></li>";
            $("#rubrics-list").append(liString);
        }

    },

    processReply2: function (json){
        $("#rubric-search-result option").remove();
        for(var i = 0; i < json.length; i++){
            var el = json[i];
            var liString = "<option value=\"" + el.path + "\">" + el.value + "</option>";
            $("#rubric-search-result").append(liString);
        }

    },

    processReply3: function (json){
        $("#rubrics-list li, #category-search #rubrics-list").remove();
		$("#category-search").append("<ul id='rubrics-list'></ul>");
        for(var i = 0; i < json.length; i++){
            var el = json[i];
            var liString = "<li><a href=\"#\">" + el.value + "</a></li>";
            $("#rubrics-list").append(liString);
        }

    },

    processReply4: function (json){
        $("#rubrics-list li, #category-search #rubrics-list").remove();
		$("#category-search").append("<ul id='rubrics-list'></ul>");
        for(var i = 0; i < json.length; i++){
            var el = json[i];
            var liString = "<li><a id="+ el.id + " href=\"#\">" + el.value + "</a></li>";
            $("#rubrics-list").append(liString);
        }

    },
    
     sendRequest : function(callback){
        var searchString = $('#rubric-search-field').val();
        var opts = {"q": searchString};
        $.getJSON("/category-search-service/query", opts, callback);
        return false;
    }
};

YPajax.favoritesManager = {
    addCallBack : function(json){
        
    },

    sendAddRequest : function(companyId){
		var userId = $('#personal-nav .profile-link').attr('id');
        if(! userId ) return false;
        var opts = {"action": "add", "userId":userId, "companyId":companyId, "ajax":true};
        $.getJSON("my-notes-update", opts, YPajax.favoritesManager.addCallBack);
        return false;
    }
};

YPajax.errorFeedback = {
    sendFeedback : function(url) {
        $('#error-feedback-message-field-error').hide();
        $('#error-feedback-captcha-field-error').hide();
        $.post(url, $('#errorFeedbackForm').serialize(), YPajax.errorFeedback.processReply, 'json');
    },

    processReply : function(json) {
        var errForm = $('#error-feedback-load form');
        var resHolder = $('#listing-error-company-name p.centered');
        var cmpHolder = $('#listing-error-company-name-p');
        if (json.success) {
            errForm.hide();
            cmpHolder.hide();
            resHolder.removeClass('hide').show().find('strong').each(function(){
                $(this).html(json.message);
                $(this).parent().css("padding-top", ($(this).parent().height() - $(this).height()) / 2 + "px");
            });
        } else {
            resHolder.hide().find('strong').empty();
            if (json.errors.errorMessage)
                $('#error-feedback-message-field-error').removeClass('hide').show().find('li span').html(json.errors.errorMessage[0]);
            if (json.errors.jCaptchaResponse)
                $('#error-feedback-captcha-field-error').removeClass('hide').show().find('li span').html(json.errors.jCaptchaResponse[0]);
            if (cmpHolder.is(':hidden')) cmpHolder.show();
            if (errForm.is(':hidden')) errForm.show();
            var submitButton = $('#error-feedback-submit');
            if (submitButton.attr('disabled')) submitButton.removeAttr('disabled').val('отправить');
            $('#errorFeedbackForm').trigger('shown');
        }
    },

    resetForm : function() {
        var errForm = $('#error-feedback-load form');
        var resHolder = $('#listing-error-company-name p.centered');
        var cmpHolder = $('#listing-error-company-name-p');

        resHolder.hide().find('strong').html('');
        if (cmpHolder.is(':hidden')) cmpHolder.show();
        if (errForm.is(':hidden')) errForm.show();

        errForm.find('.field-error').hide();
        errForm.find('input[name=jCaptchaResponse]').val('');

        var submitButton = $('#error-feedback-submit');
        if (submitButton.attr('disabled')) {
            submitButton.removeAttr('disabled').val('отправить');
        }
    }
};

YPajax.messenger = {
    processReply : function(json) {
        var rMessBox = $('#message-userprofile');
        var rHolder = $('#message-userprofile #message-result');
        var rHolderTxt = $('#message-userprofile #message-result-txt');
        if (json.success) {
        	//rMessBox.css('width','864px')
        	//rMessBox.css('margin-left','-432px')
        	rHolder.html('Написать сообщение.');
        	rHolderTxt.html('Cообщение успешно отправлено.');
            $('#message-userprofile-form').hide();
            return true;
        } else {
            if (json.errors && json.errors.length > 0) {
                rHolder.html('');
                rHolder.append('<ul>');
                for (var i = 0; i < json.errors.length; i++) {
                    rHolder.append('<li>' + json.errors[i] + '</li>');
                }
                rHolder.append('</ul>');
                rHolder.css('border', '1px red dotted');
            }
            if (json.shouldLogin) {
                var lgHolder = $('#message-userprofile-form p.your-email');
                $('em', lgHolder).removeClass('hide').show();
                $('span', lgHolder).hide();
            }
            $('#message-userprofile-form').show();
            $('#message-userprofile').show();
            $('#message-userprofile-form').trigger('shown');
            return false;
        }
    },
    
    resetForm : function() {
        $('#message-userprofile #message-result').html('').css('border-width', '0');
        $('#message-userprofile-form').show();
        var lgHolder = $('#message-userprofile-form p.your-email');
        $('em', lgHolder).hide();
        $('span', lgHolder).show();
        $('#message-userprofile-form .nonreg-email-div').show();
    },
    
    sendMessage : function(url, backref) {
        $('#message-userprofile #message-result').html('').css('border-width', '0');
        $('#overlay').hide();
        $('#message-userprofile').hide();
        var val = parseInt($('#message-userprofile-form select[name=type] option:selected').val());
        $.post(url, $('#message-userprofile-form').serialize(), function(json){
            var success = YPajax.messenger.processReply(json);
            if (success) {
                if (val == 2 && backref) {
                    window.location.href = backref;
                } else {
                    window.location.reload(true);
                }
            }
        }, 'json');
    }
};

