/**
 * @author Vladimir Maluchenko
 */

var forgotBlock;
var forgot = false;
var spinnerHtml = '<img class="ligin-spinner" src="/wp-content/themes/iresume/images/spinner/firefox-spinner.gif" alt=""/>';

var Signup = function() {
    var URL = SCHEME + 'signup.' + DOMAIN;
    var actions = {
        validate: 'validate',
        signup: 'do-signup'
    };

    var sinupSpinner = $('.spinner');

    sinupSpinner.show = function() {
        this.css({visibility: 'visible'});
    }

    sinupSpinner.hide = function() {
        this.css({visibility: 'hidden'});
    }

    this.validate = function(obj) {
        var data = {
            field: obj.attr('name'),
            value: obj.val()
        };

        if (data.field == 'captcha') {
            captchaValidate(data.value);
            return;
        }
        
        $.getJSON(composeUrl(actions.validate), data, onValidateResult);
    }

    this.doSignup = function() {
        if (captchaValidate() && checkTerms()) {
            var data = $('#signup-form').serialize();
            sinupSpinner.show();
            $.getJSON(composeUrl(actions.signup), data, onSignupResult);
        }
    }

    var onValidateResult = function(response) {
        var field = response.field;
        
        getElement('#' + field).val(response.values[field]);
        
        if (response.result) {
            getElement('.' + field + '-error').text('');
        } else {
            getElement('.' + field + '-error').text(response.errors[field]);
        }
    }

    var onSignupResult = function(response) {
        if (response.result == true) {
            _redirect(response.redirect);
        } else {
            _show_errors(response.errors, response.values);
        }
        sinupSpinner.hide();
    }

    var captchaValidate = function(value) {

        if (null == value) {
            value = $('#captcha').val();
        }

        var _result = false;
        
        $.ajax({
            type: 'post',
            url: '/wp-ajax.php?action=captcha',
            data: {value: value},
            dataType: 'json',
            async: false,
            success: function(response) {
                if (response.result == true) {
                    getElement('.captcha-error').text('');
                } else {
                    getElement('.captcha-error').text('The security code you entered was incorrect.');
                }
                _result = response.result;
            }
        });

        return _result;
    }

    var checkTerms = function() {
        if (!$('#immediately').is(':checked')) {
            show_error('conditions', 'You must agree with our Terms & Conditions and Privacy Policy to proceed.');
            return false;
        }
        return true;
    }

    var composeUrl = function(action) {
        return URL + '/' + action + '?callback=?'
    }
}

var Login = function() {
    var URL = SCHEME + 'auth.' + DOMAIN;
    var COOKIE_NAME = 'z_domain';
    var actions = {
        check: 'wp-check-login',
        forgot: 'wp-forgot',
        login: 'wp-login'
    };

    var loginSpinner = $('.ligin-spinner');

    var checkSpinner = $('#check-spinner');

    checkSpinner.show = function() {
        this.css({visibility: 'visible'});
    }

    checkSpinner.hide = function() {
        this.css({visibility: 'hidden'});
    }

    this.checkLogin = function() {
        checkSpinner.show();

        var cookie = getCookie(COOKIE_NAME);
        if (!cookie.length) {
            _openPopup();
        } else {
            var url = SCHEME + cookie + '.' + DOMAIN;
            $.getJSON(url + '/login/' + actions.check + '?callback=?', {}, function(response) {
                if (response == 1) {
                    _redirect(url);
                } else {
                    _openPopup();
                }
            });
        }
    }

    this.doLogin = function(data) {
        loginSpinner.show();

        $.getJSON(composeUrl(actions.login), data, function(response) {
            if (response.validate == true) {
                setCookie(COOKIE_NAME, response.sub_domain, 14);
                _redirect(response.redirect_to);
            } else {
                _show_errors(response.validate);
            }
            loginSpinner.hide();
        });
    }

    this.doForgot = function(data) {
        loginSpinner.show();
        
        $.getJSON(composeUrl(actions.forgot), data, function(response) {
            if (response.result == true) {
                $('.success').text('Check your e-mail to get new password');
            } else {
                _show_errors(response.errors);
            }
            loginSpinner.hide();
        });
    }

    var setCookie = function(c_name, value, expiredays) {
        var exdate = new Date();
        exdate.setDate(exdate.getDate() + expiredays);

        document.cookie =
            c_name + "=" + escape(value) +
            ((expiredays == null) ? "" : ";expires=" + exdate.toUTCString()) +
            ";path=/";
    }

    var getCookie = function(c_name) {
        if (document.cookie.length > 0) {
            var c_start = document.cookie.indexOf(c_name + "=");
            if (c_start != -1) {
                c_start = c_start + c_name.length+1;
                var c_end = document.cookie.indexOf(";" , c_start);
                if (c_end == -1) c_end = document.cookie.length;
                return unescape(document.cookie.substring(c_start, c_end));
            }
        }
        return "";
    }

    var composeUrl = function(action) {
        return URL + '/' + action + '?callback=?'
    }
}

$(function() {

    var signup  = new Signup();
    var login   = new Login();

    $('#login-link').click(function() {
        login.checkLogin();
    });

    $('#login-form').live('submit', function() {
        var data = $('#login-form').serialize();
        on_close();
        if (forgot) {
            login.doForgot(data);
        } else {
            login.doLogin(data);
        }
        return false;
    });
    $('#signup-form').live('submit', function() {
        signup.doSignup();
        return false;
    });
    $('#signup-submit').click(function() {
        signup.doSignup();
        return false;
    });

    $('#organization').live('keyup', function() {
        var val = $(this).val().toLowerCase();
        val = val.replace(/[^a-z]+/g, '');
        $('#site_address').val(val);
    });

    $('#forgot').live('click', function() {
        on_close();
        $('.sign-error').hide();
        $('#firstname_block').hide();
        $('.heading', $('#popup-login')).children('strong').html('Forgot Your Password? ' + spinnerHtml);
        forgotBlock = $('#forgot_block').html();
        forgot = true;
        $('#forgot_block').html('<span><a href="#" id="back_to_login">back to login</a></span>')
        $('#login_submit').val('Submit');
    });
    $('#back_to_login').live('click', function() {
        forgot = false;
        on_close('popup-login');
    });

    $('.validate', $('#signup-form')).live('blur', function() {
        signup.validate($(this));
    });
    $('.js-validate').live('blur', function() {
        var val = $(this).val().trim();
        var field = $(this).attr('name');
        if (!val.length) {
            show_error(field, 'An entry is required in this field.');
        } else {
            show_error(field, '');
        }
        $(this).val(val);
    });
    $('#immediately').click(function() {
        if ($(this).attr('checked')) {
            show_error('conditions', '');
        } else {
            show_error('conditions', 'You must agree with our Terms & Conditions and Privacy Policy to proceed.');
        }
    }).blur(function() {
        if ($(this).attr('checked')) {
            show_error('conditions', '');
        } else {
            show_error('conditions', 'You must agree with our Terms & Conditions and Privacy Policy to proceed.');
        }
    });

    // contact form captcha
    if ($('.wpcf7').find('#captcha').length) {
        _initContactCapthcha();
    }
    
});

function _initContactCapthcha() {
    var form = $('.wpcf7');
    var captchaCount = 1;

    var captchaValidate = function(value) {

        if (null == value) {
            value = $('#captcha', form).val();
        }

        var _result = false;

        $.ajax({
            type: 'post',
            url: '/wp-ajax.php?action=captcha',
            data: {value: value},
            dataType: 'json',
            async: false,
            success: function(response) {
                if (response.result == true) {
                    getElement('.captcha-error', form).text('');
                } else {
                    getElement('.captcha-error', form).text('The security code you entered was incorrect.');
                }
                _result = response.result;
            }
        });

        return _result;
    }

    $('#refresh-captcha', form).click(function() {
        $('#img-captcha', form).attr('src', '/mvv-captcha.php?count=' + captchaCount++);
    });
    $('.wpcf7-form').submit(function() {
        return captchaValidate();
    });
}

function on_close(id) {
    $('.errors').text('');
    $('.success').text('');

    if (id == 'popup-login') {
        $('#firstname_block').show();
        $('#forgot_block').html(forgotBlock);
        $('#login_submit').val('Login');
        $('.heading', $('#' + id)).children('strong').html('Login ' + spinnerHtml);
    }
}

function _redirect(url) {
    window.location.href = (url == null) ? '/' : url;
}

function _show_errors(errors, data) {
    $('.errors-field').text('');
    for (var err in errors) {
        show_error(err, errors[err]);
    }
    if (data) {
        for (var val in data) {
            $('#' + val).val(data[val]);
        }
    }
}

function show_error(field, error) {
    getElement('.' + field + '-error').html(error);
}

// caching simple elements
var elements = new Array();
function getElement(element) {
    if (!elements[element]) {
        elements[element] = $(element);
    }
    return elements[element];
}

function _openPopup() {

    $('#check-spinner').css({
        visibility: 'hidden'
    });
            
    var _this = $('#popup-login');
    var fader = $('.fader');
    var el = document.getElementById('login-link');

    if (document.documentElement.scrollTop > document.body.scrollTop)
        el.position = document.documentElement.scrollTop;
    else
        el.position = document.body.scrollTop;

    $(fader).css({
        display: "block",
        height: document.documentElement.scrollHeight
    }).find(".b").css({
        height: document.documentElement.scrollHeight - 81
    });

    $(fader).animate({
        opacity: 0.5
    }, {
        duration: 250
    });
    _this.css({
        display: "block",
        top: el.position,
        'margin-left': -_this.width()/2 - 75
    });

    _this.addClass("popup-opened");

    _this.find(".btn-close").click(function() {
        _this.css({
            display: "none"
        });
        $(fader).css({
            display: "none",
            opacity: 0
        });
        _this.removeClass("popup-opened");
        return false;
    });

    clearInputs();
}


