function toggle(tag, hideStr, detailsStr) {
    var element = document.getElementById(tag);
    var v = element.style.display!="block";
    element.style.display = v ? "block" : "none";
    document.getElementById(tag+"Button").firstChild.nodeValue = v ? hideStr : detailsStr;
}
function toggle0(tag) {
    var element = document.getElementById(tag);
    element.style.display = element.style.display!="block" ? "block" : "none";
}
function byebye() {
    window.close();
}
var changeFlag = true;
       
function sync( field ) {
    if(!changeFlag) return (false);
         
    changeFlag = false;
    for (var i=0; i<field.form.length; i++) {
       	 if(field.form.elements[i].name == field.name && field.form.elements[i] != field)
       	      field.form.elements[i].value = field.value;
     }
       	      
     changeFlag = true;
     return( false );
}

// -------------------------------
// Statistics Report Script
// -------------------------------

var req;
var packages;
var langs;
var showoption;
var isIE;

function validateInput() {
    var url = "statistics.html";
    var params = "ajax=true";

    // find the DOM element that contains the first name input
    packages = document.getElementById("package");
    for(var i = 0; i < packages.options.length; i++) {
        if (packages.options[i].selected)
            params += "&package=" + packages.options[i].value;
    }

    langs = document.getElementById("lang");
    for(var i = 0; i < langs.options.length; i++) {
        if (langs.options[i].selected)
            params += "&lang=" + langs.options[i].value;
    }
    showoption = document.getElementById("showoption0");
    if (showoption.checked)
        params += "&showoption=" + showoption.value;
    showoption = document.getElementById("showoption1");
    if (showoption.checked)
        params += "&showoption=" + showoption.value;

    // Create the request object
    initRequest();

    // Identify the function to call when we get a response to the request
    req.onreadystatechange = processResponse;

    //  Call the remote procedure using the request's open and send methods
    //  The first argument to open is the method (GET or POST), 
    //  The last argument, true, indicates that the request is to
    //  be sent asynchronously. When the last argument is false,
    //  the execution of the JavaScript stops until the call ends.
    req.open("POST", url, true);

    // Send the proper header information along with the request
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    req.setRequestHeader("Content-length", params.length);
    req.setRequestHeader("Connection", "close");
    req.send(params);
}

function initRequest() {
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        isIE = true;
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }
}

// This function is called when we get a response to the request
function processResponse() {
    if (req.readyState == 4) {
        // ready state = loaded

        if (req.status == 200) {
            // status = OK, the remote procedure ended successfully
            var message = req.responseText;

            // find the DOM element that displays the search result
            messageComponent = document.getElementById("report");
            // If not valid, update the HTML DOM to display the message
            if (message != "") {
                messageComponent.innerHTML = req.responseText;
            } else {
                messageComponent.innerHTML = "<div style=\"color:red\">There is no related statistics data.</div>";
            }
        }
    }
}


// -------------------------------
// Functions for checking date
// -------------------------------

var dateField;
function setVar(obj) {
    if (obj)
        dateField = obj;
    //alert(dateField.type);
}
function setDate() {
    if (dateField != null && dateField.type == "text")
        dateField.value = document.calendar.getDate();
}

function checkDate() {
    withdate = document.getElementById("withdate");
    if (!withdate.checked)
        return true;
    dateStart = document.getElementById("dateStart");
    dateEnd = document.getElementById("dateEnd");

    date = new Date();

    y = date.getFullYear();
    m = date.getMonth() + 1;
    d = date.getDate();
    if (m < 10)
        m = "0" + m;
    if (d < 10)
        d = "0" + d;
    today = y + "-" + m + "-" + d;

    from = dateStart.value;
    to = dateEnd.value;

    if (from.length==10 && to.length==10) {
        if (to < from) {
            alert("You put the end-date before the start-date, please correct it!");
            dateStart.value = today.substring(0,8);
            dateEnd.value = today.substring(0,8);
            dateStart.focus();
            return false;
        }
        return true;
    }
    else {
        alert("Please input the start-date and end-date correctly!\nClick the date input box first, then click a day from right side Calendar.");
        dateStart.value = today.substring(0,8);
        dateEnd.value = today.substring(0,8);
        if (from.length < 10)
            dateStart.focus();
        else
            dateEnd.focus();
        return false;
    }
}


// -------------------------------
// Annotation Scripts
// -------------------------------

var elemID;
var isEditFormOpened;
function validateNewNote(action, baseURL, classTag) {
    if (action == "newnote" && isEditFormOpened) {
        var idElement = document.getElementById("noteid");
        validateNotes("cancel", baseURL, classTag, idElement.value);
        setTimeout("validateNotes('"+action+"','"+baseURL+"','"+classTag+"',"+"0)", 500);
    }
    else
        validateNotes(action, baseURL, classTag, 0);
}
function validateNotes(action, baseURL, classTag, noteID) {
    var url = baseURL + "/" + classTag;
    var params = "action="+action;

    var noteIDName = classTag.replace(/\//g, ".");
    isEditFormOpened = false;
    if (action == "newnote") {
        noteIDName = "F." + noteIDName;
    }
    else if (action == "cancelnewnote") {
        noteIDName = "F." + noteIDName;
        newNoteComponent = document.getElementById(noteIDName);
        newNoteComponent.innerHTML = "";
        elemID = "";
        return;
    }
    else if (action == "create") {
        for(var i=0; i<3; i++) {
            category = document.forms["newNoteForm"].category[i];
            if (category.checked)
                params += "&category=" + category.value;
        }
        content = document.getElementById("content");
        if (content.value == "") {
            alert("Your input is empty, please add your comments again!");
            content.focus();
            return;
        }
        params += "&content=" + content.value;

        noteIDName = "Notes." + noteIDName;
    }
    else if (action == "edit") {
        isEditFormOpened = true;
        params += "&id=" + noteID;

        noteIDName = "N." + noteID;
    }
    else if (action == "cancel") {
        params += "&id=" + noteID;

        noteIDName = "N." + noteID;
    }
    else if (action == "save") {
        params += "&id=" + noteID;
        elemId = "content" + noteID;
        content = document.getElementById(elemId);
        if (content.value == "") {
            alert("Your input is empty, please add your comments again!");
            content.focus();
            return;
        }
        params += "&content=" + content.value;

        noteIDName = "N." + noteID;
    }
    else if (action == "vote") {
        params += "&id=" + noteID;
        for(var i=0; i<5; i++) {
            star = eval("document.forms['noteRatingForm"+noteID+"'].star"+noteID+"[i]");
            if (star.checked)
                params += "&star=" + star.value;
        }

        noteIDName = "N." + noteID;
    }
    else if (action == "addtrans") {
        params += "&id=" + noteID;

        noteIDName = "NVForm." + noteID;
    }
    else if (action == "savetrans") {
        params += "&id=" + noteID;
        elemId = "translation" + noteID;
        translation = document.getElementById(elemId);
        if (translation.value == "") {
            alert("Your input is empty, please add your translation!");
            translation.focus();
            return;
        }
        params += "&translation=" + translation.value;

        noteIDName = "nvContainer." + noteID;
    }
    else if (action == "canceltrans") {
        params += "&id=" + noteID;

        noteIDName = "NVForm." + noteID;
    }

    if (elemID != null && elemID != "" && elemID.charAt(0) == "F") {
        newNoteComponent = document.getElementById(elemID);
        if (newNoteComponent.innerHTML != "") {
            newNoteComponent.innerHTML = "";
            if (elemID == noteIDName) {
                elemID = "";
                return;
            }
        }
    }
    elemID = noteIDName;

    // Create the request object
    initRequest();

    // Identify the function to call when we get a response to the request
    req.onreadystatechange = processNoteResponse;

    //  Call the remote procedure using the request's open and send methods
    //  The first argument to open is the method (GET or POST), 
    //  The last argument, true, indicates that the request is to
    //  be sent asynchronously. When the last argument is false,
    //  the execution of the JavaScript stops until the call ends.
    req.open("POST", url, true);

    // Send the proper header information along with the request
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    req.setRequestHeader("Content-length", params.length);
    req.setRequestHeader("Connection", "close");
    req.send(params);
}

// This function is called when we get a response to the request
function processNoteResponse() {
    if (req.readyState == 4) {
        // ready state = loaded
        if (req.status == 200) {
            // status = OK, the remote procedure ended successfully
            var message = req.responseText;
            // find the DOM element that displays the search result
            messageComponent = document.getElementById(elemID);
            setInnerHTML(messageComponent, message);
        }
    }
}
var setInnerHTML = function (el, htmlCode) {
    var el_next = el.nextSibling;
    var el_parent = el.parentNode;
    el_parent.removeChild(el);
    el.innerHTML = htmlCode;
    if (el_next) {
        el_parent.insertBefore(el, el_next)
    } else {
        el_parent.appendChild(el);
    }
}

