var urlAuth = "cgi-bin/fidel/authorization.pl";
var urlChecking = "cgi-bin/fidel/sess_update.pl";
var intervalId;
var timer = 5;

function sendAuthorization(){
    var login = $("#login").attr("value");
    var password = $("#password").attr("value");
    $.ajax({
        url: urlAuth,
        dataType: "json",
        type: "post",
        data: {
            login: login,
            password: password,
            action: "authorization"
        },
        success: function(json){
            deleteErrMsg();
            if (true == json.success) {
                if (json.session != undefined) {
                    saveCookie(json.session);
                    profileOutput(json);
                    intervalId = setInterval(checkConnection, 60000);
                }
            }
            else 
                if (false == json.success) {
                    if (json.error) {
                        showError(json.error);
                    }
                    else {
                        showError(json);
                    }
                }
        }
    });
};
function saveCookie(cookieVar){
    $.cookie("session", cookieVar, {});
}

function profileOutput(data){
    $("#userPanel").empty();
    $("<div/>").addClass("helloUser").html("Hello, <b>" + data.login + "</b>!").appendTo("#userPanel");
    $("<div/>").addClass("refreshPage").html("You must refresh the page to look desired information. Or automatic updates will happen in <span id='updater'>15</span> seconds").appendTo("#userPanel");
    updaterCount();
}

function showError(errorMessage){
    errorMsg = $("<div>").attr({"id": "errMessage"}).html(errorMessage + ".<br /> <span onclick='returnToForm()' style='cursor: pointer; text-decoration:underline'>Return to operation panel.</span>");
    $("#userPanel").prepend(errorMsg);
    $("#fields").css("display", "none");
}

function returnToForm(){
    $("#errMessage").remove();
    $("#fields").css("display", "block");
}

function deleteErrMsg(){
    $("#errMessage").remove();
}

function checkConnection(){
    $.ajax({
        url: urlChecking,
        dataType: "json",
        type: "post",
        data: {
            action: "update"
        },
        success: function(json){
            deleteErrMsg()
            if (true == json.success) {
                console.log("Session is live!")
            }
            else 
                if (false == json.success) {
                    if (json.error) {
                        showError(json.error);
                    }
                    else {
                        showError(json);
                    }
                }
        }
    });
}

function logOut(){
    clearInterval(intervalId);
    $.ajax({
        url: urlAuth,
        dataType: "json",
        type: "post",
        data: {
            action: "logout"
        },
        success: function(json){
            deleteErrMsg()
            if (true == json.success) {
                $.cookie("session", null);
                document.location.href = document.location.href;
            }
            else 
                if (false == json.success) {
                    if (json.error) {
                        showError(json.error);
                    }
                    else {
                        showError(json);
                    }
                }
        }
    });
}

function refreshPage(){
    document.location.href = document.location.href;
}

function updaterCount(){
    if (timer == 0) {
        clearInterval(intervalUpdateId);
        refreshPage();
    }
    else {
        $("#updater").html(timer);
        timer--;
        intervalUpdateId = setTimeout(updaterCount, 1000);
    }
}

$(document).ready(function(){
    $("#authBtn").click(function(){
        sendAuthorization();
    })
    $("#logout").click(function(){
        logOut();
    })
    $("#login").keydown(function(event){
        switch (event.keyCode) {
            case 13:
                sendAuthorization();
                break;
            default:
                break;
        }
    });
    $("#password").keydown(function(event){
        switch (event.keyCode) {
            case 13:
                sendAuthorization();
                break;
            default:
                break;
        }
    });
});
///////////////////////////////////////////////////////// 
function formRegistration(){
    var login_reg = $("#login_reg").attr("value");
    var password_reg = $("#password_reg").attr("value");
    var confirm_password_reg = $("#confirm_password_reg").attr("value");
    var first_name_reg = $("#first_name_reg").attr("value");
    var last_name_reg = $("#last_name_reg").attr("value");
    var sex_reg = $("#male").attr("checked") ? 1 : 0;
    var email_reg = $("#email_reg").attr("value");
    var location_reg = $("#location_reg").attr("value");
    
    var validationResult = {};
    validationResult.fieldsInfo = new Array();
    
    if (!Validate.now(Validate.Length, login_reg, { minimum: 4, maximum: 30})) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"Login" field can not be blank and can not contain less than 4 and more than 25 characters');
    }
    if (!Validate.now(Validate.Exclusion, login_reg, { within: [ '>', '<', '=', ';'  ], partialMatch:true})) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"Login" field contains invalid characters');
    }
    Validate.Exclusion( 'pig', { within: [ 'cow', 277, 'catdog' ], allowNull: true, partialMatch: true, caseSensitive: false } );
    
    if (!Validate.now(Validate.Length, password_reg, { minimum: 6, maximum: 30 })) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"Password" field can not be blank and can not contain less than 6 and more than 30 characters');
    }
    if (!Validate.now(Validate.Inclusion, confirm_password_reg, { within: [password_reg] })) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"Confirm password" field does not equal to field "Password"');
    }
    if (!Validate.now(Validate.Length, first_name_reg, { minimum: 2, maximum: 30 })) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"First name" field can not be blank and can not contain less than 2 and more than 30 characters');
    }
    if (!Validate.now(Validate.Length, last_name_reg, { minimum: 2, maximum: 30 })) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"Last name" field can not be blank and can not contain less than 2 and more than 30 characters');
    }
    if (!Validate.now(Validate.Email, email_reg)) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"Mail" field does not contain the valid e-mail');
    }
    
    if (false == validationResult.success) {
        var message = $("<div/>");
        for (var i = 0; i < validationResult.fieldsInfo.length; i++) {
            $("<span/>").html(validationResult.fieldsInfo[i]).appendTo(message);
            $("<br/>").appendTo(message);
        }
        showFormError(message);
        return;
    }
    $.ajax({
        url: urlAuth,
        dataType: "json",
        type: "post",
        data: {
            action: "regist",
            login_reg: login_reg,
            password_reg: password_reg,
            confirm_password_reg: confirm_password_reg,
            first_name_reg: first_name_reg,
            last_name_reg: last_name_reg,
            sex_reg: sex_reg,
            email_reg: email_reg,
            location_reg: location_reg
        },
        success: function(json){
            deleteErrMsg()
            if (true == json.success) {
                showFormSuccess($("<h3/>").attr({
                    "id": "successHeader"
                }).html('Form was successful!'));
            }
            else 
                if (false == json.success) {
                    if (json.error) {
                        showFormError($("<div/>").html(json.error));
                    }
                    else {
                        alert("Unknown Error!");
                    }
                }
        }
    });
}

function showFormError(message){
    var fErrorMessage = $("<div/>").attr({"id": "fErrorMessage"});
    $("<h3/>").attr({"id": "errorHeader"}).html("Form Error!").appendTo(fErrorMessage);
    message.appendTo(fErrorMessage);
    var storeForm = $("#fields_reg").replaceWith(fErrorMessage);
    var revertForm = function(store){
        $("#fErrorMessage").replaceWith(storeForm);
    }
    $("<span/>").attr({"id": "fLink"}).css({"cursor": "pointer", "text-decoration": "underline"}).appendTo("#fErrorMessage");
    $("#fLink").html("Return to form")
    $("#fLink").click(function(){
        revertForm();
    })
}

function showFormSuccess(message){
    var fSuccessMessage = $("<div/>").attr({"id": "fSuccessMessage"});
    message.appendTo(fSuccessMessage);
    var storeForm = $("#fields_reg").replaceWith(fSuccessMessage);
    $("<span/>").attr({"id": "fLink"}).css({"cursor": "pointer", "text-decoration": "underline"}).appendTo("#fSuccessMessage");
    $("#fLink").html("Close form window")
    $("#fLink").click(function(){
        hs.close();
    })
}

function formChangePassword(){
    var old_password_chng = $("#old_password_chng").attr("value");
    var new_password_chng = $("#new_password_chng").attr("value");
    var confirm_password_chng = $("#confirm_password_chng").attr("value");
    
    var validationResult = {};
    validationResult.fieldsInfo = new Array();
    
    if (!Validate.now(Validate.Length, old_password_chng, { minimum: 6, maximum: 30 })) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"Old password" field can not be blank and can not contain less than 6 and more than 30 characters');
    }
    if (!Validate.now(Validate.Length, new_password_chng, { minimum: 6, maximum: 30 })) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"New password" field can not be blank and can not contain less than 6 and more than 30 characters');
    }
    if (!Validate.now(Validate.Inclusion, confirm_password_chng, { within: [new_password_chng] })) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"Confirm password" field does not equal to field "Password"');
    }
    
    if (false == validationResult.success) {
        var message = $("<div/>");
        for (var i = 0; i < validationResult.fieldsInfo.length; i++) {
            $("<span/>").html(validationResult.fieldsInfo[i]).appendTo(message);
            $("<br/>").appendTo(message);
        }
        showFormError(message);
        return;
    }
    $.ajax({
        url: urlAuth,
        dataType: "json",
        type: "post",
        data: {
            action: "chpass",
            ch_old_password: old_password_chng,
            ch_password: new_password_chng,
            ch_confirm_password: confirm_password_chng
        },
        success: function(json){
            deleteErrMsg()
            if (true == json.success) {
                showFormSuccess($("<h3/>").attr({"id": "successHeader"}).html('Password was changed!'));
            }
            else 
                if (false == json.success) {
                    if (json.error) {
                        showFormError($("<div/>").html(json.error));
                    }
                    else {
                        alert("Unknown Error!");
                    }
                }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            showFormError($("<div/>").html(XMLHttpRequest.responseText));
        }
        
    });
}

function formEditProfile(){
    var first_name_reg = $("#first_name_reg").attr("value");
    var last_name_reg = $("#last_name_reg").attr("value");
    var sex_reg = $("#male").attr("checked") ? 1 : 0;
    var location_reg = $("#location_reg").attr("value");
    
    var validationResult = {};
    validationResult.fieldsInfo = new Array();
    
    if (!Validate.now(Validate.Length, first_name_reg, { minimum: 2, maximum: 30 })) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"First name" field can not be blank and can not contain less than 2 and more than 30 characters');
    }
    if (!Validate.now(Validate.Length, last_name_reg, { minimum: 2, maximum: 30 })) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"Last name" field can not be blank and can not contain less than 2 and more than 30 characters');
    }
    
    if (false == validationResult.success) {
        var message = $("<div/>");
        for (var i = 0; i < validationResult.fieldsInfo.length; i++) {
            $("<span/>").html(validationResult.fieldsInfo[i]).appendTo(message);
            $("<br/>").appendTo(message);
        }
        showFormError(message);
        return;
    }
    
    $.ajax({
        url: urlAuth,
        dataType: "json",
        type: "post",
        data: {
            action: "ch_profile",
            first_name_reg: first_name_reg,
            last_name_reg: last_name_reg,
            sex_reg: sex_reg,
            location_reg: location_reg
        },
        success: function(json){
            deleteErrMsg()
            if (true == json.success) {
                showFormSuccess($("<h3/>").attr({"id": "successHeader"}).html('Profile was changed!'));
            }
            else 
                if (false == json.success) {
                    if (json.error) {
                        showFormError($("<div/>").html(json.error));
                    }
                    else {
                        alert("Unknown Error!");
                    }
                }
        }
    });
}
function forgotPassword(){
    var your_mail = $("#your_mail").attr("value");
    
    var validationResult = {};
    validationResult.fieldsInfo = new Array();
    
    if (!Validate.now(Validate.Email, your_mail)) {
        validationResult.success = false;
        validationResult.fieldsInfo.push('"Mail" field does not contain the valid e-mail');
    }
    
    if (false == validationResult.success) {
        var message = $("<div/>");
        for (var i = 0; i < validationResult.fieldsInfo.length; i++) {
            $("<span/>").html(validationResult.fieldsInfo[i]).appendTo(message);
            $("<br/>").appendTo(message);
        }
        showFormError(message);
        return;
    }
    
    $.ajax({
        url: urlAuth,
        dataType: "json",
        type: "post",
        data: {
            action: "forgot_pass",
            email_reg: your_mail
        },
        success: function(json){
            deleteErrMsg()
            if (true == json.success) {
                showFormSuccess($("<h3/>").attr({"id": "successHeader"}).html('Password was send!'));
            }
            else 
                if (false == json.success) {
                    if (json.error) {
                        showFormError($("<div/>").html(json.error));
                    }
                    else {
                        alert("Unknown Error!");
                    }
                }
        }
    });
}
