function setlang(lang)
{
    set_cookie("lang", lang);
    window.location.reload(true);
}


function logout()
{
    var url = "srv_code/dispatch.php";
    var param = "task=logout";
    send_xmlhttprequest(url, param, goto_login);

}

function goto_login()
{
    if (xmlhttp.readyState == 4 || xmlhttp.readyState == "complete") {
        var session_name = xmlhttp.responseText;
        session_name = chop(session_name);
        expire_cookie(session_name);
        window.open("edit.php", '_self');
    }    
}

function expire_cookie(cookie_name)
{
    var current = new Date();
    current.setDate(current.getDate() - 1);
    document.cookie = cookie_name + "=" + "1" + ";expires=" 
        + current.toGMTString();
}

function set_cookie(cookie_name, cookie_value)
{
    document.cookie = cookie_name  + "=" + cookie_value + ";path=/";
}

function chop(str)
{
    var re = /\s+$/g;
    return str.replace(re, "");
}

function get_row_id(row)
{
    return row.cells[0].innerHTML;
}

function get_dbcolname_row(table)
{
    return table.rows[1];
}

function get_subpagename(db_colname_row)
{
    return db_colname_row.lastChild.innerHTML;
}

function get_input_id(db_colname_row, i)
{
    return db_colname_row.childNodes[i].innerHTML;
}

function refresh(subpage)
{
    var url = "srv_code/dispatch.php";
    var param = "task=" + subpage
    send_xmlhttprequest(url, param, statechanged);
}

function get_save_btn()
{
    var save_button = document.getElementById("submit_btn");
    save_button.value = "Save";
    return save_button;
}

function create_cancel_btn(task)
{
    var cancel_btn = document.createElement("input");
    cancel_btn.name = task;
    cancel_btn.onclick = function() {
        refresh(this.name);
    }
    cancel_btn.type = "button";
    cancel_btn.value = "Cancel";
    return cancel_btn;
}

function create_save_btn()
{
    var btn = document.createElement("input");
    btn.type = "submit";
    btn.value = "Save";
    return btn;
}

function create_add_btn()
{
    var btn = document.createElement("input");
    btn.type = "submit";
    btn.value = "Add";
    btn.onclick = function() {
        var update = document.getElementById("update");
        update.value = "0";
    }
    return btn;
}

function hide_row(link)
{
    var row = link.parentNode.parentNode;
    row.style.display = "none";
}
// set the row of this link edtiable
function edit_row(link)
{
    link.innerHTML = "editing";
    link.onclick = null;
    var row = link.parentNode.parentNode;
    row.style.backgroundColor = "lightGrey";
    var db_colname_row = get_dbcolname_row(row.parentNode);
    var param = "task=update_" + get_subpagename(db_colname_row);
    var url = "srv_code/worker.php";

    var i = 0;
    var formIndex = -1;
    var input_name;
    var input;
    var update_input = document.getElementById("update");
    update_input.value = "1";
    while (i < db_colname_row.cells.length - 1) {
        input_id = get_input_id(db_colname_row, i);
        if (input_id != "file_form") {
            input = document.getElementById(input_id);
            if (input != null) { 
                input.value = row.childNodes[i].innerHTML;
            }
        }
        else {
            var add_files_link_row = document.getElementById("add_files_link");
            var inline_table = row.childNodes[i].firstChild;
            var j;
            for (j = 0; j < inline_table.rows.length; ++j) {
                var inline_file_row = inline_table.rows[j];
                var file_row = document.createElement("tr");
                file_row.appendChild(document.createElement("td"));
                var k;
                for (k = 0; k < inline_file_row.cells.length; ++k) {
                    var td = inline_file_row.cells[k].cloneNode(true);
                    file_row.appendChild(td);
                }
                var remove_link = create_remove_row_link(function() {
                    var row = this.parentNode.parentNode;
                    row.style.display = "none";
                });
                var remove_link_td = document.createElement("td");
                remove_link_td.appendChild(remove_link);
                file_row.appendChild(remove_link_td);
                add_files_link_row.parentNode.insertBefore(
                    file_row, add_files_link_row);
            }
            add_files_link_row.cells[add_files_link_row.cells.length - 1].innerHTML = 
                inline_table.rows.length;
        }
        ++i;
    }
    var save_btn = get_save_btn();
    var cancel_btn = create_cancel_btn(get_subpagename(db_colname_row));
    var cancel_td = document.createElement("td");
    cancel_td.appendChild(cancel_btn);
    save_btn.parentNode.parentNode.appendChild(cancel_td);
    if (document.getElementById("file_frame") == null) {
        save_btn.onclick = function () {
            return save_form("update")
        };
    }
    else {
        save_btn.onclick = save_file_form;
    }
}

function save_form(action)
{
    var inputs = document.getElementsByTagName("input");
    var i = 0;
    var url = "srv_code/worker.php";
    var params = "";
    var param_name;
    for (i = 0; i < inputs.length; ++i) {
        param_name = inputs[i].id;
        if (param_name == "task") {
            params += inputs[i].id + "=" +  action + "_" + inputs[i].value;
        }
        else {
            params += inputs[i].id + "=" + inputs[i].value;
        }
        params += "&";
    }
    var textareas = document.getElementsByTagName("textarea");
    for (i = 0; i < textareas.length; ++i) {
        param_name = textareas[i].id;
       
        params += textareas[i].id + "=" + textareas[i].value;
        
        params += "&";
    }
    params = params.substr(0, params.length - 1); // chop the last delimeter
    send_xmlhttprequest(url, params, statechanged);
    return false;
}

function save_file_form()
{
    var update = document.getElementById("update");
    update.value = "1";
    var params = "";
    params = "task=" + "delete_files_" + document.getElementById("task").value;
    params += "&ids=";
    var add_files_link_row = document.getElementById("add_files_link");
    var table = add_files_link_row.parentNode;
    var n = 0;
    while (table.rows[n] != add_files_link_row) {
        ++n;
    }
    var counter_cell = add_files_link_row.cells[add_files_link_row.cells.length - 1];
    var files_num = Number(counter_cell.innerHTML);
    var file_row;
    var i = 0;
    while (i < files_num) {
        file_row = table.rows[n - 1 - i];
        if (file_row.style.display == "none") {
            params += file_row.cells[2].innerHTML + ",";
        }
        ++i;
    }
    
    params = params.substr(0, params.length - 1); // chop the last delimeter
    var url = "srv_code/worker.php";
    send_xmlhttprequest(url, params, null);
}



function error_msg(msg)
{
    error_prompt = document.getElementById('error');
    error_prompt.innerHTML = msg;
}

// PASSWORD function
// *****************************************************************************

function change_passwd()
{
    if (verify_passwd()) {
        var url = "srv_code/worker.php";
        var username, old_passwd, new_passwd;
        old_passwd = document.getElementById('old_passwd').value;
        new_passwd = document.getElementById('new_passwd').value;
        var param = "task=" + "change_passwd";
        param += "&old_passwd=" + old_passwd;
        param += "&new_passwd=" + new_passwd;
        send_xmlhttprequest(url, param, statechanged);
        
    }
    return false;
        
}

function verify_passwd()
{
    var new_passwd = document.getElementById('new_passwd').value;
    var confirm_passwd = document.getElementById('confirm_passwd').value;
    if (new_passwd != confirm_passwd) {
        error_msg("Two new passwords are not the same");
        return false;
    }
    else {
        return true;
    }
}

function delete_item(link)
{
    var row = link.parentNode.parentNode;
    var table = row.parentNode;
    var task = get_subpagename(get_dbcolname_row(table));
    var url = "srv_code/worker.php";
    var param = "task=" + "delete_" + task;
    param += "&id=" + get_row_id(row);
    send_xmlhttprequest(url, param, statechanged);
}
// NEWS function
// *****************************************************************************


function delete_news(link)
{
    var row = link.parentNode.parentNode;
    var url = "srv_code/worker.php";
    var param = "task=" + "delete_news";
    param += "&id=" + get_row_id(row);
    send_xmlhttprequest(url, param, statechanged);
}


// SEMINAR function
// *****************************************************************************

function delete_seminar(link)
{
    var row = link.parentNode.parentNode;
    var url = "srv_code/worker.php";
    var param = "task=" + "delete_seminar";
    param += "&id=" + get_row_id(row);
    send_xmlhttprequest(url, param, statechanged);
}


function add_slides_input(link, need_extra_cell)
{
    var row = link.parentNode.parentNode;
    var counter = row.cells[row.cells.length - 1];
    var file_input_row, file_input_td, file_input;
    var file_input_remove;
    file_input_row = document.createElement("tr");
    file_input_td = document.createElement("td");
    file_input = document.createElement("input");
    file_input.setAttribute("type", "file");
    file_input.name = file_input.id = "file" + counter.innerHTML;
    counter.innerHTML = String(Number(counter.innerHTML) + 1);
    file_input_td.appendChild(file_input);
    var file_input_remove = create_remove_row_link( function() {
        remove_self_row(this);
    });
    if (need_extra_cell)
        file_input_row.appendChild(document.createElement("td"));
    file_input_row.appendChild(file_input_td);
    var href_td = document.createElement("td");
    href_td.appendChild(file_input_remove);
    file_input_row.appendChild(href_td);
    row.parentNode.insertBefore(file_input_row, row);
    
}

function remove_self_row(link)
{
    var row = link.parentNode.parentNode;
    row.parentNode.removeChild(row);
}


function create_remove_row_link(onclick_handler)
{
    var remove_link = document.createElement("a");
    remove_link.setAttribute("href", "javascript:;")
    remove_link.appendChild(document.createTextNode("remove"));
    remove_link.onclick = onclick_handler;
    return remove_link;
}

// Functions for publication 
// *****************************************************************************

function entry_type_change(select)
{
    var url = "srv_code/worker.php";
    var param = "task=generate_entry_form" + "_" + "publication";
    param += "&entry_type=" + select.options[select.selectedIndex].value;
    send_xmlhttprequest(url, param, receive_publication_input);
    return true;
}

function receive_publication_input()
{
    if (xmlhttp.readyState == 4 || xmlhttp.readyState == "complete") {
        var errormsg_start = xmlhttp.responseText.indexOf("MYSQLERROR");
        if (errormsg_start == -1) {
            var entry_input_div = 
                document.getElementById("entry_input_div");
            entry_input_div.innerHTML = xmlhttp.responseText;
            var entry_input_table = document.getElementById("entry_input_table");
            var btns = new Array();
            if (publication_is_editing()) {
                var save_btn = create_save_btn();
                save_btn.onclick = save_file_form;
                btns.push(save_btn);
                btns.push(create_cancel_btn("publication"));
            }
            else {
                btns.push(create_add_btn());               
            }
            
            entry_input_table.insertRow(-1);
            var btn_row = entry_input_table.rows[
                entry_input_table.rows.length - 1];
            btn_row.appendChild(document.createElement("td"));
            var i;
            for (i = 0; i < btns.length; ++i) {
                var btn_td = document.createElement("td");
                btn_td.appendChild(btns[i]);
                btn_row.appendChild(btn_td);
            }
            var error = document.getElementById('error');
            error.innerHTML = '';
        }
        else {
            var error = document.getElementById('error');
            error.innerHTML = xmlhttp.responseText.substr("MYSQLERROR".length);
        }    
        var info = document.getElementById("info");
        info.innerHTML = "";
    }
}

function pub_add_field(link)
{
    var optional_field_select = document.getElementById("optional_fields");
    if (optional_field_select.selectedIndex >= 0 &&
        optional_field_select.selectedIndex < 
        optional_field_select.options.length) {
        var optional_field = optional_field_select.options[
            optional_field_select.selectedIndex].value;

        var row = link.parentNode.parentNode;
        var field_input_row = document.createElement("tr");

        var field_input_label_td = document.createElement("td");
        field_input_label_td.style.textAlign = "right";
        var field_input_label = document.createElement("label");
        field_input_label.appendChild(document.createTextNode(optional_field));
        field_input_label_td.appendChild(field_input_label);
        field_input_row.appendChild(field_input_label_td);
        
        var field_input_td = document.createElement("td");
        var field_input = document.createElement("input");
        field_input.name = field_input.id = optional_field;
        field_input.setAttribute("type", "text");
        field_input_td.appendChild(field_input);
        field_input_row.appendChild(field_input_td);

        var field_input_remove_td = document.createElement("td");
        var field_input_remove = create_remove_row_link( function() {
            remove_optional_field_row(this);
        });
        field_input_remove_td.appendChild(field_input_remove);
        field_input_row.appendChild(field_input_remove_td);
        
        row.parentNode.insertBefore(field_input_row, row);
        optional_field_select.remove(optional_field_select.selectedIndex);
    }
}

function remove_optional_field_row(link)
{
    var optional_field_select = document.getElementById("optional_fields");
   
    var row = link.parentNode.parentNode;
    var option = document.createElement("option");
    // use the label as the new text;
    option.value = option.text = row.cells[0].firstChild.innerHTML; 
    row.parentNode.removeChild(row);
    _add_option_to_select_tail(optional_field_select, option)
    
}

function _add_option_to_select_tail(optional_field_select, option)
{
    if (navigator.userAgent.search('MSIE') != -1) {
        optional_field_select.add(option);
    }
    else {
        optional_field_select.add(option, null);
    }
}

function edit_publication(link)
{
    set_editing_state();
    var row = link.parentNode.parentNode;
    var table = row.parentNode;
    var task = get_subpagename(get_dbcolname_row(table));
    var url = "srv_code/worker.php";
    var param = "task=" + "edit_" + task;
    param += "&id=" + get_row_id(row);
    send_xmlhttprequest(url, param, receive_publication_input);
}

function set_editing_state()
{
    var editing_state = document.getElementById("is_editing");
    editing_state.value = "1";
}

function publication_is_editing()
{
    var editing_state = document.getElementById("is_editing");
    return editing_state.value == "1";
}

function update_entry_type(select)
{
    var url = "srv_code/worker.php";
    var param = "task=edit" + "_" + "publication";
    var id_input = document.getElementById("id");
    param += "&entry_type=" + select.options[select.selectedIndex].value;
    param += "&id=" + id_input.value;
    send_xmlhttprequest(url, param, receive_publication_input);
    return true;
}

function cancel_edit_publication()
{
    refresh("publication");
}