$(document).ready(function()
{
    init_menu();
});

/**
 * Delay for a number of milliseconds
 */
function sleep(delay)
{
    var start = new Date().getTime();
    while (new Date().getTime() < start + delay)
        ;
}

function reload_menu()
{
    var postdata = {
        option : 'menu',
        action : 'load'
    };

    $.post("server.php", postdata, function(data)
    {
        $('#menu').html(data);
        init_menu();
    }, "html");
}

function doLogout()
{
    var postdata = {
        option : 'login',
        action : 'logout'
    };

    $.post("server.php", postdata, function(jsonObj)
    {
        var isLoggedIn = jsonObj.result.isLoggedIn;
        var message = jsonObj.result.message;

        if (!isLoggedIn) {
            reload_menu();
        }
        showInfoMessage(message, "Afmelden gelukt");
    }, "json");
}
function showMessage(msg, title, type)
{
    $.pnotify({
        pnotify_title: title,
        pnotify_text: msg,
        pnotify_type: type,
        pnotify_shadow: true,
        pnotify_history: false
    });
}

function showErrorMessage(msg, title)
{
    showMessage(msg, title, 'error');
}

function showInfoMessage(msg, title)
{
    showMessage(msg, title, '');
}

function swap_content(option, action, id, subaction)
{
    if (action == undefined) action = "";
    if (id == undefined) id = "";
    if (subaction == undefined) subaction = "";

    $('.error').each(function(el)
    {
        el.css('display', 'none');
    });

    showPageLoading();

    var postdata = {
        option : option,
        action : action,
        outputtype : 'flat',
        subaction : subaction,
        id : id
    };

    $.post("index.php", postdata, function(data)
    {
        $('#innercontent').html(data);
        hidePageLoading();
    }, "html");
}

function showPageLoading()
{
    // We need to set css without effects, because it needs to be visible
    // immediately
    $('#page_disabled').css('display', 'block');
}
function hidePageLoading()
{
    $('#page_disabled').fadeOut();
}

function edit_row(option, action, id, returndiv, fields)
{
    if (action == undefined) action = "";
    if (id == undefined) id = "";
    if (returndiv == undefined || returndiv == '') returndiv = "row_" + id;
    if (fields == undefined) fields = "";

    var current_time = new Date();
    var url = 'server.php?t=' + current_time.getTime();

    if (fields.length > 0) {
        field_keys = fields.split(",");
        for ( var i = 0; i < field_keys.length; i++) {
            url = url + "&" + field_keys[i] + '=' + $(field_keys[i]).value;
        }
    }

    var request = new Request.JSON({
        method : 'post',
        url : url,
        data : {
            option : option,
            action : action,
            id : id
        },
        onComplete : function(jsonObj)
        {
            var newhtml = jsonObj.result.html;
            var newmessage = jsonObj.result.message;

            $(returndiv).set('html', newhtml);
            showMessage(newmessage);

        }
    }).send();
}

/*
 * New Form Things
 */
// Login form
function doLogin()
{
    showPageLoading();

    // Get the translations
    var translations = {};
    $.ajax({
        url : "server.php",
        data : {
            option : "translation",
            action : "LOGIN"
        },
        async : false,
        success : function(data)
        {
            $.extend(translations, data.result.data);
        }
    });

    $('#dialog_holder').html('<div id="dialog"></div>');
    $('#dialog').html('<div id="loginform"></div>');
    $("#loginform").dsForm({
        title : '',
        form : {
            id : "formLogin",
            action : "server.php",
            name : "form_login"
        },
        data : [ {
            type : 'hidden',
            name : 'option',
            value : 'login'
        }, {
            type : 'hidden',
            name : 'action',
            value : 'login'
        }, {
            type : 'hidden',
            name : 'id',
            value : '2'
        }, {
            type : 'inputtext',
            name : 'login_name',
            label : translations.DS_MOD_LOGIN_NAME,
            value : '',
            required : 'true'
        }, {
            type : 'password',
            name : 'login_pass',
            label : translations.DS_MOD_LOGIN_PASS,
            value : '',
            required : 'true'
        }, {
            type : 'spacer'
        }, {
            type : 'submit',
            label : translations.DS_MOD_LOGIN_SUBMIT
        } ],
        errorValidate : function(msg)
        {
            showErrorMessage(msg);
        },
        afterSubmit : function(data)
        {
            if (data.result.isLoggedIn) {
                $('#dialog').dialog("destroy").remove();
                reload_menu();
                showInfoMessage(data.result.message, "Aanmelden gelukt");
            } else {
                showErrorMessage(data.result.message, "Aanmelden mislukt");
                $("#login_pass").val("");
                $("#login_name").focus();
            }

            hidePageLoading();
        }

    });

    $('#dialog').dialog({
        modal : true,
        height : 'auto',
        width : 550,
        title : translations.DS_MOD_LOGIN_FORMTITLE,
        open : function(event, ui)
        {
            $("#login_name").focus();
        },
        close : function(ev, ui)
        {
            $(this).dialog("destroy").remove();
        }
    });

    hidePageLoading();

}

// Register form
function doRegister()
{
    showPageLoading();

    // Get the translations
    var translations = {};
    $.ajax({
        url : "server.php",
        data : {
            option : "translation",
            action : "REG"
        },
        async : false,
        success : function(data)
        {
            $.extend(translations, data.result.data);
        }
    });
    $.ajax({
        url : "server.php",
        data : {
            option : "translation",
            action : "USERS"
        },
        async : false,
        success : function(data)
        {
            $.extend(translations, data.result.data);
        }
    });

    hidePageLoading();

    $('#dialog_holder').html('<div id="dialog"></div>');
    $('#dialog').html('<div id="registerform"></div>');
    $("#registerform").dsForm({
        title : '',
        form : {
            id : "formRegister",
            action : "server.php",
            name : "form_register"
        },
        data : [ {
            type : 'hidden',
            name : 'option',
            value : 'login'
        }, {
            type : 'hidden',
            name : 'action',
            value : 'register'
        }, {
            type : 'hidden',
            name : 'id',
            value : '2'
        }, {
            type : 'inputtext',
            name : 'login_name',
            label : translations.DS_MOD_USERS_USERNAME,
            value : '',
            required : 'true'
        }, {
            type : 'password',
            name : 'login_pass',
            label : translations.DS_MOD_USERS_PASSWORD,
            required : 'true'
        }, {
            type : 'password',
            name : 'login_pass2',
            label : translations.DS_MOD_USERS_PASSWORD2,
            required : 'true'
        }, {
            type : 'spacer'
        }, {
            type : 'inputtext',
            name : 'user_fullname',
            label : translations.DS_MOD_USERS_FULLNAME,
            value : ''
        }, {
            type : 'inputtext',
            name : 'user_address',
            label : translations.DS_MOD_USERS_ADDRESS,
            value : ''
        }, {
            type : 'inputtext',
            name : 'user_zipcode',
            label : translations.DS_MOD_USERS_ZIPCODE,
            value : ''
        }, {
            type : 'inputtext',
            name : 'user_city',
            label : translations.DS_MOD_USERS_CITY,
            value : ''
        }, {
            type : 'inputtext',
            name : 'user_telephone',
            label : translations.DS_MOD_USERS_TELEPHONE,
            value : ''
        }, {
            type : 'inputtext',
            name : 'user_email',
            label : translations.DS_MOD_USERS_EMAIL,
            value : '',
            required : 'true'
        }, {
            type : 'spacer'
        }, {
            type : 'submit',
            label : translations.DS_MOD_REGISTER_SUBMIT
        } ],
        extendValidate : function()
        {
            // Check for password length
            if ($('#login_pass').val().length < 5) {
                showErrorMessage("Wachtwoord moet minimaal 5 karakters bevatten.", "Validatie");
                $('#login_pass').addClass('validateerror');
                $('#login_pass').css("border", "1px solid red");
                $('#login_pass2').addClass('validateerror');
                $('#login_pass2').css("border", "1px solid red");
                return false;
            }

            // Check for password fields
            if ($('#login_pass').val() !== $('#login_pass2').val()) {
                showErrorMessage("Wachtwoorden zijn niet gelijk aan elkaar.", "Validatie");
                $('#login_pass').addClass('validateerror');
                $('#login_pass').css("border", "1px solid red");
                $('#login_pass2').addClass('validateerror');
                $('#login_pass2').css("border", "1px solid red");
                return false;
            }

            // Check email format
            var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
            var address = $('#user_email').val();
            if (reg.test(address) == false) {
                $('#user_email').addClass('validateerror');
                $('#user_email').css("border", "1px solid red");
                showErrorMessage("Email adres onjuist.", "Validatie");
                return false;
            }

            return true;
        },
        errorValidate : function(msg)
        {
            showErrorMessage(msg, "Validatie");
        },
        afterSubmit : function(data)
        {
            if (data.result.success) {
                showMessage("Gebruiker is aangemaakt, u kunt nu inloggen", "Registratie gelukt");
                $('#dialog').dialog("destroy").remove();
            } else {
                showErrorMessage(data.result.message, "Registratie mislukt");
            }

            hidePageLoading();
        }
    });

    $('#dialog').dialog({
        modal : true,
        height : 'auto',
        width : 550,
        title : translations.DS_MOD_REGISTER_FORMTITLE,
        close : function(ev, ui)
        {
            $(this).dialog("destroy").remove();
        }
    });
}
