/**
 * Aufgabenbeschreibung ein/ausblenden
 *
 * @param integer uid UID der Aufgabe
 */
function displayJob(uid)
{
    var elem = $("job_desc"+uid);

    if (elem)
    {
        if (elem.hasClass("hidden")) {
            elem.removeClass("hidden");
        }
        else {
            elem.addClass("hidden");
        }
    }
}

/**
 * Neue Aufgabe
 */
function newJob()
{
    ["job_form", "hide_job_form"].each(function(s){ close_form(s); });

    display_form("job_form");
}
 
/**
 * Aufgabe als naechste Aufgabe markieren
 *
 * @param string action "add" fuer hinzufuegen oder "remove" fuer entfernen
 * @param integer uid UID der Aufgabe
 */
function nextJob(action, uid)
{
    if (http_request_state(1)) {
        return false;
    }
    
    new Request.JSON({
        url: "/callback/"+action+"-nextjob/"+uid,
        onComplete: function(response) {
            window.wait_for_refresh = true;
            
            system_message(response.messages);
        }
    }).get();
}

/**
 * Aufgabe bearbeiten
 *
 * @param integer uid UID der Aufgabe
 */
function editJob(uid)
{
    var form = $("job_form");

    if (!form.hasClass("hidden")) {
        return false;
    }

    close_form("hide_job_form");

    if (http_request_state(1)) {
        return false;
    }

    new Request.JSON({
        url: '/callback/edit-job/'+uid,
        onComplete: function(response) {
            if (response.success)
            {
                for (var index in response.jobdata)
                {
                    var elem = form.getElement("input[name="+index+"]") || form.getElement("textarea[name="+index+"]");

                    if (elem)
                    {
                        if ($type(response.jobdata[index]) == "object")
                        {
                            elem.set("value", response.jobdata[index].d);

                            form.getElement("select[name="+index+"_hour]").set("value", response.jobdata[index].h);
                            form.getElement("select[name="+index+"_minute]").set("value", response.jobdata[index].m);
                        }
                        else
                        {
                            elem.set("value", response.jobdata[index]);
                        }
                    }
                }

                $("job_form_changes").getElement("td").set("text", response.jobdata.changes);
                $("job_form_changes").removeClass("hidden");

                display_form(form);

                window.scrollTo(0,0);
                
                http_request_state(0);
            }
            else
            {
                system_message(response.messages);
            }
        }
    }).get();
}

/**
 * Aufgabe fuer eine bestimmte Zeit ausblenden
 *
 * @param integer uid UID der Aufgabe
 * @param string title Titel der Aufgabe
 */
function hideJob(uid, title)
{
    if ($("hide_job_form").hasClass("hidden"))
    {
        close_form("job_form");

        $("hide_title").set("text", title);
    
        display_form("hide_job_form", {'uid': uid});
    
        window.scrollTo(0,0);
    }
}

/**
 * Aufgabe fuer eine bestimmte Zeit ausblenden
 *
 * @param integer uid UID der Aufgabe
 */
function unhideJob(uid)
{
    if (http_request_state(1)) {
        return false;
    }

    new Request.JSON({
        url: '/callback/unhide-job/'+uid,
        onComplete: function(response) {
            if (response.success)
            {
                window.wait_for_refresh = true;
                system_message(response.messages);
            }
            else
            {
                system_message(response.messages);
            }
        }
    }).get();
}

/**
 * Aufgabe erledigen
 *
 * @param integer uid UID der Aufgabe
 * @param string question Wird gefragt bevor die Aktion durchgefuehrt wird
 */
function closeJob(uid, question)
{
    if (http_request_state(1)) {
        return false;
    }

    system_message(question, {
        'yes':  function(){
            sysmsg_close(false),
            
            new Request.JSON({
                url: "/callback/close-job/"+uid+"/copy",
                onComplete: function(response) {
                    if (response)
                    {
                        window.wait_for_refresh = response.refresh;
                        
                        system_message(response.messages);
                    }
                }
            }).get();
        },
        'no':   function(){
            sysmsg_close(false),
            
            new Request.JSON({
                url: "/callback/close-job/"+uid,
                onComplete: function(response) {
                    if (response)
                    {
                        window.wait_for_refresh = response.refresh;
                        
                        system_message(response.messages);
                    }
                }
            }).get();
        }
    })
}

/**
 * Aufgabe loeschen
 *
 * @param integer uid UID der Aufgabe
 * @param string question Wird gefragt bevor die Aktion durchgefuehrt wird
 */
function removeJob(uid, question)
{
    if (http_request_state(1)) {
        return false;
    }

    system_message(question, {
        'yes':  function(){
            sysmsg_close(false);

            new Request.JSON({
                url: '/callback/remove-job/'+uid,
                onComplete: function(response) {
                    if (response) {
                        window.wait_for_refresh = response.refresh;
                        
                        system_message(response.messages);
                    }
                }
            }).get();
        },
        'no':   sysmsg_close
    });
}

/**
 * Mehrere Aufgaben loeschen
 *
 * @param string question Wird gefragt bevor die Aktion durchgefuehrt wird
 */
function removeJobs(question)
{
    if (http_request_state(1)) {
        return false;
    }

    system_message(question, {
        'yes':  function(){
            sysmsg_close(false);

            if (window.remove_jobs) {
                return false;
            }

            new Request.JSON({
                url: '/callback/remove-jobs/',
                onRequest: function(){
                    window.remove_jobs = true;
                },
                onComplete: function(response) {
                    if (response) {
                        window.wait_for_refresh = response.refresh;
                        
                        system_message(response.messages);
                        
                        window.remove_jobs = false;
                    }
                }
            }).post($("jobdelete"));
        },
        'no':   sysmsg_close
    });
}

/**
 * Aufgabe suchen
 *
 * @param string search Suchbegriff
 */
function searchJob(search)
{
    $("joblist").getElements("div[id^=jobentry]").each(function(e){
        uid = e.id.match(/\d+/)[0];

        title = desc = true;

        if (e.getElement("p[id=job_title"+uid+"]")) {
            title = e.getElement("p[id=job_title"+uid+"]").get("text").test(search.escapeRegExp(), 'i');
        }

        if (e.getElement("p[id=job_desc"+uid+"]")) {
            desc = e.getElement("p[id=job_desc"+uid+"]").get("text").test(search.escapeRegExp(), 'i');
        }
        else {
            desc = false;
        }

        if (!title && !desc) {
            e.addClass("hidden");
        }
        else {
            e.removeClass("hidden");
        }
    });
}
