Event.observe(window, 'load', init, false);

var repositoryListHeading;
var userListHeading;
var editStatus;
var emailAlreadyChanged = false;

function init(){
    editStatus = "";

    //$$('#userInfoMessage').invoke('observe', 'click', function(event) {
    //    closeUserInfoMessage();
    //});

}

function closeUserInfoMessage() {
    new Ajax.Request('/include/php/confirm_message.php', {
        method:'get',
        parameters: {disableMessage: 'true'},
        onSuccess: function(transport){
            //var tmp = transport.responseText; alert(""+tmp);
            $('userInfoMessage').hide();
        },
        onFailure: function(transport) {var tmp = transport.responseText;alert("An error occured. Please try again!");}
    });
}

function loadRepositoryList(){
    var myAjax = new Ajax.Updater('repositoryListLoad', 'repository_list.php', {method: 'get'});
    var alsoAjax = new Ajax.Updater('repositoryStatistic', 'statisticbox.php', {method: 'get'});
    $('repositoryStatistic').show();
}

function findRepository(){
    var find =  $F('find').toLowerCase() ; 
    var count = 0;

    /*
        if (find = "") {
        updateRepositoryListCounter(0);
        return;
    }
     */

    /* Magic "id:NUMBER" entry gives back single repository */
    if (find.substring(0, 1) == "#") {
 	var number = find.substring(1);
	if (number > 0) {
            showRepositoryDetails( number );
            return;
	}
    } 
    
    /* Update list */
    $$('.repositoryListElement').each( function ( repository ) {
        if (repository.innerHTML.match(find)) {
            repository.show();
            count++;
            repositoryId = repository.readAttribute('id');
        } else {
            repository.hide();
        }
    });
    updateRepositoryListCounter(count);
    if (count == 1) {
        showRepositoryDetails( repositoryId );
    } else {
        $('repositoryList').show();
        $('repositoryDetail').hide();
    }
}

function updateRepositoryListCounter(count) {
    if(typeof repositoryListHeading =='undefined') {
        repositoryListHeading = $('repositoryListHeading').innerHTML;
    }
    if (count > 0) {
        $('repositoryListHeading').innerHTML = repositoryListHeading+" ("+count+" matches)";
    } else {
        $('repositoryListHeading').innerHTML = repositoryListHeading;
    }
}

function showRepositoryDetails(id) {
    $('repositoryDetailInfo').innerHTML = "<span style='padding-left: 25px; color: #808080;'>Loading repository information</span>";
    $('repositoryLogfile').innerHTML = "<span style='padding-left: 25px; color: #808080;'>Loading logfile</span>";
    $('repositoryDetail').show();
    $('repositoryList').hide();

    // Logfile parameters
    var conds = new Object();
    conds['conds[0]'] = 'id_repository = ' + id;
    logfile_fetch('repositoryLogfile', conds);
    $F('find').innerHTML = "#id="+id;

    // Load repository details and wait until it loads before updating metadata count
    var myAjax = new Ajax.Updater('repositoryDetailInfo', 'repository_details.php', {method: 'get', parameters: {id: id}, asynchronous: false});

    //$('repositoryMetadataCount').innerHTML = "<span class='loadingMessage'>Counting</span>";
    //$('repositoryDocumentCount').innerHTML = "<span class='loadingMessage'>Counting</span>";
    //var myAjax = new Ajax.Updater('repositoryMetadataCount', 'admin_repository_count_metadata.php', {method: 'get', parameters: {id: id}});
    //var myAjax = new Ajax.Updater('repositoryDocumentCount', 'admin_repository_count_document.php', {method: 'get', parameters: {id: id}});
}

function resetRepositoryList(id) {
    $('repositoryList').show();
    $('repositoryDetail').hide();
    $$('.repositoryListElement').each( function ( repository ) {
        repository.show();
    });
    updateRepositoryListCounter(0);
    $F('find').innerHTML = "";
}

function findUser(){
    var find =  $F('find').toLowerCase() ; 
    var count = 0;

    /* Update list */
    $$('.userListElement').each( function ( user ) {
        if (user.innerHTML.match(find)) {
            user.show();
            count++;
            userEmail = repository.readAttribute('email');
        } else {
            user.hide();
        }
    });
    updateUserListCounter(count);
    if (count == 1) {
        showUserDetails( userEMail );
    } else {
        $('userList').show();
        $('userDetail').hide();
    }
}

function updateUserListCounter(count) {
    if(typeof userListHeading =='undefined') {
        userListHeading = $('userListHeading').innerHTML;
    }
    if (count > 0) {
        $('userListHeading').innerHTML = userListHeading+" ("+count+" matches)";
    } else {
        $('userListHeading').innerHTML = userListHeading;
    }
}

function showUserDetails(email) {
    $('userDetailInfo').innerHTML = "<span style='padding-left: 25px; color: #808080;'>Loading user information</span>";
    //$('userDetail').show();
    //$('userList').hide();
    var myAjax = new Ajax.Updater('userDetailInfo', 'user_details.php', {method: 'get', parameters: {email: email}});
    $F('find').innerHTML = "#id="+email;
}

function showUserDetailsNew(email) {
    $('loading').innerHTML = "<span style='padding-left: 25px; color: #808080;'>Loading user information</span>";
              
    new Ajax.Request('user_details.php', {
        method:'get',
        parameters: {email: email},
        onSuccess: function(transport){
            var json = transport.responseText.evalJSON();
            $('userFirstname').innerHTML = json.firstname;
            $('userLastname').innerHTML = json.lastname;
            $('userEmail').innerHTML = json.email;
            $('userInstitution').innerHTML = json.institution;
            $('userCreated').innerHTML = json.created;
            $('userAdminstatus').innerHTML = json.adminstatus;
            $('userPermission').innerHTML = json.permission;
             
            $('submitFirstname').innerHTML = '<input type="text" id="firstname" value="[user.dfjgghj]" onchange=");" />';
             
            $('loading').innerHTML = "&nbsp;";
        },
        onFailure: function(transport) {var tmp = transport.responseText;alert("Failure: "+tmp);}
    });
     

}



function resetUserList(id) {
    $('userList').show();
    $('userDetail').hide();
    $$('.userListElement').each( function ( user ) {
        user.show();
    });
    updateUserListCounter(0); 
    $F('find').innerHTML = "";
}

function search_query(from, query) {
    var myAjax = new Ajax.Updater(
    'searchResults',
    from,
    {
        method: 'post',
        parameters: {
            q: query
        },
    });
}

function logfile_fetch(element, conds, page, order) {
    $(element).update('Fetching data..');

    if(page)
        conds['page'] = (page+0);
    if(order) {
        conds['ord'] = order;
        conds['asc'] = conds['asc'] ? 0 : 1;
    }

    // Send the AJAX request
    var myAjax = new Ajax.Updater($(element), '/admin/logfile/?ajax', {
        method: 'post',
        evalScripts: true,
        parameters: conds
    });

    logfile_lastElement = element;
    logfile_lastConds = conds;

}

function logfile_topage(page) {
    return logfile_fetch(logfile_lastElement, logfile_lastConds, page);
}

function logfile_orderby(order) {
    return logfile_fetch(logfile_lastElement, logfile_lastConds, 1, order);
}

function logfile_update(form, page, order) {
    var field, conds = new Object(), i = 0;

    $$('label').invoke('removeClassName', 'log_filter_error');

    // Clean up the errors (for now)
    $$('label').invoke('removeClassName', 'log_filter_error');
    $('logfileDetails').update('Fetching data..');

    // Date FROM
    field = form.elements['date_from'];
    if(field.value)
        conds['conds[' + (i++) + ']'] = 'date > ' + field.value;

    // Date TO
    field = form.elements['date_to'];
    if(field.value)
        conds['conds[' + (i++) + ']'] = 'date < ' + field.value;

    // Type FROM
    field = $RF(form, 'type_from');
    if(field && field != null)
        conds['conds[' + (i++) + ']'] = 'type > ' + field;

    // Type TO
    field = $RF(form, 'type_to');
    if(field && field != null)
        conds['conds[' + (i++) + ']'] = 'type < ' + field;

    // Creator LIKE
    field = form.elements['creator'];
    if(field.value)
        conds['conds[' + (i++) + ']'] = 'creator = ' + field.value;

    // Message LIKE
    field = form.elements['message'];
    if(field.value)
        conds['conds[' + (i++) + ']'] = 'message = ' + field.value;

    logfile_fetch($('logfileDetails'), conds, page, order);

    return false;
}

// Called by the ajax update, indicates all fields with errors
function setErrors(errs) {
    errs.each(function(e) {
        $$('label[for=' + e + ']').invoke('addClassName', 'log_filter_error');
    });
}

function edit(action, field) {
    if (action == "showedit") {
        if (editStatus != "") {
            edit("cancel", editStatus);
        }
        $(field).hide();
        $(field+'Edit').show();
        editStatus = field;
        
    } else if (action == "cancel") {
        $(field+'Edit').hide();
        $(field).show();
        editStatus = "";
    } 
    if (action == "commit") {
        if ($('email').getValue() != "" && emailAlreadyChanged == true) {
            //email = $('email').getValue();
            //alert(email);
        }
        var myAjax = new Ajax.Updater(field,'user_details_change.php', {method: 'get', onSuccess: function(transport){var response = transport.responseText || "Kein Antworttext!";alert("Erfolgreich uebertragen! \n\n" + response);},onFailure: function(){alert('FEHLER !!!')},parameters: {toChange: dbField, dbValue : $(dbField).getValue(), email:email}});
        $(field+'Edit').hide();
        $(field).show();
        if (dbField == "email") {
            emailAlreadyChanged = true;
        }
    }
}

function newUserPassword(userEmail,field) {
    if (userEmail) {
        var myAjax = new Ajax.Request('user_details_change.php', {method: 'get', onSuccess: function(transport){var response = transport.responseText || "Kein Antworttext!";alert("Erfolgreich uebertragen! \n\n" + response);},onFailure: function(){alert('FEHLER !!!')},parameters: {toChange: 'password', email:userEmail}});
        $(field+'Edit').hide();
        $(field).show();
    }
}

function documentDetails(id) {
    $(id).innerHTML = "<span style='padding-left: 25px; color: #808080;'>Loading metadata information</span>";
    $(id).show();
    var myAjax = new Ajax.Updater(id, 'documentDetails.php', {method: 'get', parameters: {id: id}});
}

function toggleLanguageSelect() {
    if ( $('languageSelect').style.display != 'none' ) {
        $('languageSelect').hide();
    }
    else {
        var myStyle = new Array();
        myStyle['top'] = $('headerinfo').getHeight();
        $('languageSelect').setStyle( myStyle );

        Event.observe(document.body,'click', function() {
            toggleLanguageSelect();
            Event.stopObserving(document.body, 'click');
        });
        $('languageSelect').show();
    }
}

function selectLanguage(url) {
    window.location.replace(url);
}
function toggleData (id) {
    if (document.getElementById(id).style.display == 'none') {
        document.getElementById(id).style.display = '';
    } else {
        document.getElementById(id).style.display = 'none';
    }
}

function editUser (userId) {
    toggleData('editUserButton' + userId);
    toggleData('cancelEdittingUserButton' + userId);
    toggleData('editableTable' + userId);
    toggleData('nonEditableTable' + userId);
}

function cancelEdittingUser (userId) {
    stopEdittingUser(userId);
    refreshEdditingFields(userId);
}

function stopEdittingUser (userId) {
    toggleData('editUserButton' + userId);
    toggleData('cancelEdittingUserButton' + userId);
    toggleData('editableTable' + userId);
    toggleData('nonEditableTable' + userId);    
}

function submitEditedUser (userId) {

    var editableForm = document.getElementById("editableForm" + userId);

    new Ajax.Request('/admin/user/user_details_change.php', {
        method:'post',
        parameters: {id: userId, form: editableForm.serialize()},
        onSuccess: function(transport){
            //var tmp = transport.responseText; alert(""+tmp);
            //alert(transport.responseText);
            stopEdittingUser(userId);
            refreshNonEdditingFields(userId);
        },
        onFailure: function(transport) {
            //var tmp = transport.responseText;
            //alert(tmp);
            //document.write(tmp);
            alert("An error occured. Please try again!");}
    });


}

function refreshNonEdditingFields (userId) {    
    var editableForm = document.getElementById("editableForm" + userId);
    var nonEditableForm = document.getElementById("nonEditableForm" + userId);
    var numberOfElements = editableForm.elements.length;
    for(i=0; i<numberOfElements; i++){
        if (editableForm.elements[i].type == "radio" || editableForm.elements[i].type == "checkbox") {
            nonEditableForm.elements[i].checked = editableForm.elements[i].checked;
        }
        if (editableForm.elements[i].type == "text") {
            nonEditableForm.elements[i].value = editableForm.elements[i].value;
        }
    }
    document.getElementById("nonEditableNameField" + userId).innerHTML = document.getElementById("editableSurname" + userId).value + ((document.getElementById("editableName" + userId).value != "" && document.getElementById("editableSurname" + userId).value != "") ? ", " : "") + document.getElementById("editableName" + userId).value;
}

function refreshEdditingFields (userId) {    
    var editableForm = document.getElementById("editableForm" + userId);
    var nonEditableForm = document.getElementById("nonEditableForm" + userId);
    var numberOfElements = editableForm.elements.length;
    for(i=0; i<numberOfElements; i++){
        if (editableForm.elements[i].type == "radio" || editableForm.elements[i].type == "checkbox") {
            editableForm.elements[i].checked = nonEditableForm.elements[i].checked;
        }
        if (editableForm.elements[i].type == "text") {
            editableForm.elements[i].value = nonEditableForm.elements[i].value;
        }
    }
}

function sendPassword (userId) {
    if(confirm("Do you want to send a new random password to the user's email address?")) {
        new Ajax.Request('/admin/user/newPassword.php', {
            method:'post',
            parameters: {id: userId},
            onSuccess: function(transport){
                //var tmp = transport.responseText; alert(""+tmp);
                if(transport.responseText != "") {
                    alert(transport.responseText);
                }
            },
            onFailure: function(transport) {
                //var tmp = transport.responseText;
                //alert(tmp);
                //document.write(tmp);
                alert("An error occured. Please try again!");}
        });
    }
}

