var errorText = "";

var regAttempt = undefined;



function registerEvents() {    // function called after body loaded

    var regNick = document.getElementById("nick");

    var regMail = document.getElementById("mail");

    var regPassword = document.getElementById("password");

    var loginName = document.getElementById("loginName");

    var loginPassword = document.getElementById("loginPassword");



    regNick.onfocus = inputTextOnFocus;

    regNick.onblur = inputTextOnBlur;

    regNick.onkeyup = registrationSubmit;

    regNick.onkeydown = ffKeyDownHandler;

    

    regMail.onfocus = inputTextOnFocus;

    regMail.onblur = inputTextOnBlur;

    regMail.onkeyup = registrationSubmit;

    regMail.onkeydown = ffKeyDownHandler;    // необходимо при автокомплите



    regPassword.onfocus = inputTextOnFocus;

    regPassword.onblur = inputTextOnBlur;

    regPassword.onkeyup = registrationSubmit;

    regPassword.onkeydown = ffKeyDownHandler;



    loginName.onfocus = inputTextOnFocus;

    loginName.onblur = inputTextOnBlur;

    loginName.onkeyup = authorizationSubmit;

    loginName.onkeydown = ffKeyDownHandler;



    loginPassword.onfocus = inputTextOnFocus;

    loginPassword.onblur = inputTextOnBlur;

    loginPassword.onkeyup = authorizationSubmit;

    loginPassword.onkeydown = ffKeyDownHandler;

}



var temporaryText = '';        // for FF keyDown event - autocomplete selected

ffKeyDownHandler = function(e) {

    if (isEnterKeyPressed(e)) {

        temporaryText = getTarget(e).value;

    }

}



isEnterKeyPressed = function(e) {

    var ENTER = 13;    // code

    var key = (window.event) ? window.event.keyCode : e.which;

    if (key == ENTER) {

        return true;

    } else {

        return false;

    }

}



registrationSubmit = function(e) {

	trackGFillRegistration();

    if (isEnterKeyPressed(e)) {

        var currentFieldText = getTarget(e).value;

        if (currentFieldText != temporaryText) { // for Firefox

            return;

        } else {

            registering();

        }

    }

}



authorizationSubmit = function(e) {

    if (isEnterKeyPressed(e)) {

        var currentFieldText = getTarget(e).value;

        if (currentFieldText != temporaryText) { // for Firefox

            return;

        } else {

            authorization();

        }

    }

}



showMark = function(elementToMark) {

    elementToMark.style.color = 'red';

};



hideMark = function(elementToUnmark) {

    elementToUnmark.style.color = 'black';

};



showError = function() {

    // отобразить ошибку - errorText

    el('registerErrorDiv').innerHTML = errorText;

    el('registerErrorDiv').style.display = 'block';

};



showLoginError = function() {

    // отобразить ошибку - errorText

    el('loginErrorDiv').innerHTML = errorText;

    el('loginErrorDiv').style.display = 'block';

};



hideError = function() {

    el('registerErrorDiv').innerHTML = "";

    el('registerErrorDiv').style.display = 'none';

};



el = function(elementId) {

    return document.getElementById(elementId);

};



function callfree_success() {

    trackG("callfree_success_LP_ukraine");

}



function registration_clickHandler() {

    setAcriveForm(REGISTRATION); 

    document.getElementById('nick').focus();

}



function auth_clickHandler() {

    setAcriveForm(AUTHORIZATION);

    document.getElementById('loginName').focus();

}



validateName = function() {

    var nick = el("nick").value;

    if(nick.length < 1) {

        errorText = "Это поле обязательно";

        return false;

    }

    var regexCheck = /^[\s0-9]+/;

    if (nick.match(regexCheck)) {

        errorText = "Используйте буквы и цифры. Первый символ - буква.";

        return false;

    }

    regexCheck = /^[a-zA-Z]{1}[_0-9]*([\s]?[a-zA-Z]+[_0-9]*)*$/;

    if (nick.match(regexCheck) == null) {

        errorText = "Это поле может содержать латинские символы, пробел и цифры. Пример: Joon Door";

        return false;

    }

    if (nick.length < 4){

        errorText = "Не менее трех и не более шестнадцати символов";

        return false;

    }

    if (nick.length > 16){

        errorText = "Не менее трех и не более шестнадцати символов";

        return false;

    }

    return true;

};

validateMail = function() {

    var mail = el("mail").value;

    if(mail.length == 0) {

        errorText = "Это поле обязательно";

        return false;

    }

    var regexCheck = /^(\w+)([\-+.][\w]+)*@(\w[\-\w]*\.)+([A-Za-z]){2,4}$/;

    if (mail.match(regexCheck) == null) {

        errorText = "В этом поле должен быть e-mail адрес в формате 'user@domain.com'";

        return false;

    }

    return true;

}



validatePassword = function() {

    var password = el("password").value;



    if (password.length == 0){

        errorText = "Введите пароль";

        return false;

    }



    var regexCheck = /^[a-zA-Z0-9_]*$/;

    if (password.match(regexCheck) == null) {

        errorText = "Пароль может содержать буквы латинского алфавита и цифры";

        return false;

    }

    return true;

}



//            validateCaptcha = function() {

//                var captcha = el("captcha").value;

//

//                if (captcha.length < 4){

//                    errorText = "Минимум 3 символа в капче";

//                    return false;

//                }

//

//                if (captcha.length > 5){

//                    errorText = "Максимум 5 символов в капче";

//                    return false;

//                }

//

//                var regexCheck = /^[a-zA-Z0-9]*$/;

//                if (captcha.match(regexCheck) == null) {

//                    errorText = "В капче могут быть только буквы и цифры";

//                    return false;

//                }

//                return true;

//            }



allValidated = function() {

    hideMark(el('nickField'));

    hideMark(el('mailField'));

    hideMark(el('passwordField'));

//                hideMark(el('captchaField'));



    if (!validateName()) {

        showError();

        showMark(el('nickField'));

        //focus_change(el('nick'));

        return false;

    }



    if (!validateMail()) {

        showError();

        showMark(el('mailField'));

        //focus_change(el('mail'));

        return false;

    }



    if (!validatePassword()) {

        showError();

        showMark(el('passwordField'));

        //focus_change(el('password'));

        return false;

    }



//                if (!validateCaptcha()) {

//                    showError();

//                    showMark(el('captchaField'));

//                }



    return true;

};



//            reloadCaptcha = function() {

//                console.info("reload capcha");

//                var time = (new Date()).getTime();

//                el("captchaImage").src = '/captcha?id=' + time;

//            };



registering = function() {

	trackG("registration_LP_ukraine/submitPressed");

   

    if (!allValidated()) {

        return;

    }



    var httpRequest;

    if (window.XMLHttpRequest) {

        httpRequest = new XMLHttpRequest();

    } else {

        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");

    }

    httpRequest.onreadystatechange = function() {

        if (httpRequest.readyState == 4 && httpRequest.status == 200) {

            if (httpRequest.responseText == "success") {

            	trackG("registration_LP_ukraine/success");

//               location.href = "/";

                document.getElementById("form").innerHTML = "Пожалуйста, для подтверждения регистрации в течении трех дней перейдите по ссылке, отправленной вам по электронной почте.";

            } else {

//                            reloadCaptcha();

                var responseText = httpRequest.responseText;

                if (responseText == 'wrong captcha') {

//                                showMark(el('captchaField'));

//                                errorText = "Введены неверные символы";

//                                showError();

                } else if (responseText.match(/^user/)) {

                    errorText = "Пользователь с таким ником существует.";

                    showMark(el('nickField'));

                    showError();

                } else if (responseText == "email exists") {

                    errorText = "Пользователь с таким E-mail адресом существует.";

                    showMark(el('mailField'));

                    showError();

                }



            }

        }

    }



    var name = 'nick=' + el("nick").value + "&";

    var email = 'email=' + el("mail").value + "&";

    var password = 'password=' + el("password").value + "&";

    var remember = 'remember=' + el('reg-remember').checked + "&";

//                var captcha = 'captcha=' + el("captcha").value + "&";



    var t = (new Date().getTimezoneOffset()/60 * -1) | 0;

    var timezone = 'timezone=' + t;



    httpRequest.open("POST","/landingUserService/registration?" + name + email + password + remember + timezone, true);

    httpRequest.send();

}



trackGFillRegistration = function() {

	if (!regAttempt) {

		trackG("registration_LP_ukraine/attempt");

       	regAttempt = true;

	}

}	



loginValidate = function() {

    var login = el('loginName').value;



    var loginRegex1 = /^[a-zA-Z]{1}[_0-9]*([\s]?[a-zA-Z]+[_0-9]*)*$/;

    var loginRegex2 = /^(\w+)([\-+.][\w]+)*@(\w[\-\w]*\.)+([A-Za-z]){2,4}$/;



    if (login.length == 0) {

        return false;

    }



    if (!login.match(loginRegex1) && !login.match(loginRegex2)) {

        return false;

    }



    return true;



}



authorization = function() {

	trackG("login_LP_ukraine/submitPressed");

	
    hideMark(el('loginNameField'));

    hideMark(el('loginPasswordField'));



    if (!loginValidate()) {

        showMark(el('loginNameField'));

        errorText = "Поле логин может содержать латинские символы, знак '@', точки и пробел";

        showLoginError();

        return;

    }



    var password = el('loginPassword').value;

    if (password.length == 0) {

        showMark(el('loginPasswordField'));

        errorText = "Введите пароль";

        showLoginError();

        return;

    }



    var httpRequest;

    if (window.XMLHttpRequest) {

        httpRequest = new XMLHttpRequest();

    } else {

        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");

    }



    httpRequest.onreadystatechange = function() {

        if (httpRequest.readyState == 4 && httpRequest.status == 200) {

            if (httpRequest.responseText == "success") {

            	trackG("login_LP_ukraine/success");

               
                location.href = "/";

            } else {

                errorText = httpRequest.responseText;

                showLoginError();

            }

        }

    }



    var loginName = 'login=' + el("loginName").value + "&";

    var loginPassword = 'password=' + el("loginPassword").value + "&";

    var loginRemember = 'remember=' + el("login-remember").checked;



    httpRequest.open("POST","/landingUserService/login?" + loginName + loginPassword + loginRemember, true);

    httpRequest.send();

}



var AUTHORIZATION = "authorization";

var REGISTRATION = "registration";

function setAcriveForm(formID) {

    if (formID == AUTHORIZATION) {

        addClass(document.getElementById("regForm"), "hide");

        removeClass(document.getElementById("regForm"), "show");

        addClass(document.getElementById("authForm"), "show");

        removeClass(document.getElementById("authForm"), "hide");



        addClass(document.getElementById("authTab"), "tab");

        removeClass(document.getElementById("authTab"), "tab-inactive");

        addClass(document.getElementById("regTab"), "tab-inactive");

        removeClass(document.getElementById("regTab"), "tab");



    } else if (formID == REGISTRATION) {

        addClass(document.getElementById("regForm"), "show");

        removeClass(document.getElementById("regForm"), "hide");

        addClass(document.getElementById("authForm"), "hide");

        removeClass(document.getElementById("authForm"), "show");



        addClass(document.getElementById("authTab"), "tab-inactive");

        removeClass(document.getElementById("authTab"), "tab");

        addClass(document.getElementById("regTab"), "tab");

        removeClass(document.getElementById("regTab"), "tab-inactive");

    }

}



function addClass(ele,cls) {

    if (!this.hasClass(ele,cls)) ele.className += " "+cls;

}

function removeClass(ele,cls) {

    if (hasClass(ele,cls)) {

        var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');

        ele.className=ele.className.replace(reg,' ');

    }

}

function hasClass(ele,cls) {

    return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));

}



function inputTextOnFocus(e) {

    target = getTarget(e);

    addClass(target, "inputTextOnFocus");

}



function inputTextOnBlur(e) {

    target = getTarget(e);

    removeClass(target, "inputTextOnFocus");

}



function getTarget(e) {

   if (!e) { e = window.event; }

   return e.target ? e.target : e.srcElement;

}


