﻿var JobViewer = new __JobViewer();

function __JobViewer() {}

(function()
{

    var JOB_SORT_BY = 0;
    var JOB_SORT_ORDER = 1;

    __JobViewer.prototype.Sort = function(sortId)
    {
        if(document.getElementById("LoadingPanel")) return;

        var table = document.getElementById("jobTable");
        var thead = table.getElementsByTagName("thead")[0];
        var img = thead.getElementsByTagName("img")[0];
        var th = thead.getElementsByTagName("th");
        
        JOB_SORT_BY = sortId;
        JOB_SORT_ORDER = (JOB_SORT_ORDER == "0" ? "1" : "0");

        img.src = img.src.replace((JOB_SORT_ORDER == "0" ? "Desc" : "Asc"), (JOB_SORT_ORDER == "0" ? "Asc" : "Desc"));

        th[sortId].appendChild(img.parentNode.removeChild(img));

        this.RefreshList(CURRENT_JOB_PAGE);
    }

    __JobViewer.prototype.RefreshList = function(page)
    {
        if(document.getElementById("LoadingPanel")) return;

        // Make HTTP request
        var request = Daedalus.Ajax.GetRequestObject();
        if(request != null)
        {
            request.onreadystatechange = function()
            {
                if(request.readyState == 4)  // COMPLETED
                {
                    if(request.status == 200)  // HTTP Status Code - 200 OK
                    {
                        var xmlDoc = request.responseXML;

                        CURRENT_JOB_PAGE = parseInt(xmlDoc.documentElement.attributes[0].nodeValue);
                        var pagination = xmlDoc.documentElement.firstChild.nodeValue;
                        var holder = document.getElementById("jobPaginationPanel");

                        holder.innerHTML = pagination;

                        Daedalus.Ajax.ReleaseRequestObject(request);
                        
                        // Load job list
                        GetJobList(page);
                    }
                }
            }

            Daedalus.Ajax.ShowLoadingPanel();
            request.open("GET", "Ajax/GetJobPagination.aspx?id=" + companyId + "&p=" + page + "&surl=" + GetStaticUrl(), true);
            request.send("");
        }
    }
    
    function GetStaticUrl()
    {
        var staticUrl = window.location.href;
        
        if(staticUrl.indexOf("jp=") > 0)
        {
            staticUrl = staticUrl.replace(new RegExp("jp=[^&]*", "ig"), "jp={0}");
        }
        else
        {
            staticUrl = (staticUrl.indexOf('?') > 0 ? staticUrl + "&jp={0}" : staticUrl + "?jp={0}");
        }
        
        return Daedalus.Utility.UrlEncode(staticUrl);
    }

    function GetJobList(pageNumber)
    {
        var jobTable = document.getElementById("jobTable");
        var tbody = jobTable.getElementsByTagName("tbody")[0];
        var sortBy = parseInt(JOB_SORT_BY);
        var sortOrder = JOB_SORT_ORDER;

        // Make HTTP request
        var request = Daedalus.Ajax.GetRequestObject();
        if(request != null)
        {
            request.onreadystatechange = function()
            {
                if(request.readyState == 4)  // COMPLETED
                {
                    if(request.status == 200)  // HTTP Status Code - 200 OK
                    {
                        var xmlDoc = request.responseXML;
                        var index = (xmlDoc.evaluate ? 1 : 0);

                        var childLen = tbody.childNodes.length;
                        for(var i=0; i<childLen; i++)
                        {
                            tbody.removeChild(tbody.childNodes[0]);
                        }
                        
                        for(var i=0; i<xmlDoc.documentElement.childNodes.length; i++)
                        {
                            if(xmlDoc.documentElement.childNodes[i].nodeName == "job")
                            {
                                var panelRow = document.createElement("tr");
                                
                                for(var j=0; j<5; j++)
                                {
                                    var cell = panelRow.appendChild(document.createElement("td"));
                                    if(j == 1) cell.style.whiteSpace = "normal";
                                }
                                
                                var jobId = Daedalus.Ajax.SelectSingleNode(xmlDoc, "//data/job[" + index + "]/jobId").firstChild.nodeValue;
                                var branchId = Daedalus.Ajax.SelectSingleNode(xmlDoc, "//data/job[" + index + "]/branchId").firstChild.nodeValue;
                                var postDate = Daedalus.Ajax.SelectSingleNode(xmlDoc, "//data/job[" + index + "]/postDate").firstChild.nodeValue;
                                var title = Daedalus.Ajax.SelectSingleNode(xmlDoc, "//data/job[" + index + "]/title").firstChild.nodeValue;
                                var branchName = Daedalus.Ajax.SelectSingleNode(xmlDoc, "//data/job[" + index + "]/branchName").firstChild.nodeValue;
                                var jobType = Daedalus.Ajax.SelectSingleNode(xmlDoc, "//data/job[" + index + "]/jobType").firstChild.nodeValue;
                                var department = Daedalus.Ajax.SelectSingleNode(xmlDoc, "//data/job[" + index + "]/department").firstChild.nodeValue;

                                panelRow.childNodes[0].innerHTML = postDate;

                                panelRow.childNodes[1].innerHTML = "<a href=\"../Jobs/" + title.replace(new RegExp("[\\W_1234567890]+", "ig"), "_") + "_" + branchId + "_" + jobId + ".aspx\">" + title + "</a>";
                                panelRow.childNodes[1].style.fontWeight = "bold";
                                
                                panelRow.childNodes[2].innerHTML = branchName;
                                panelRow.childNodes[3].innerHTML = department;
                                panelRow.childNodes[4].innerHTML = jobTypes[parseInt(jobType)-1];
                                
                                panelRow.childNodes[sortBy].className = "SortedColumn";

                                tbody.appendChild(panelRow);
                                index++;
                            }
                        }

                        Daedalus.Ajax.HideLoadingPanel();
                        Daedalus.Ajax.ReleaseRequestObject(request);
                    }
                }
            }

            request.open("GET", "Ajax/GetJobList.aspx?id=" + companyId + "&p=" + pageNumber + "&sb=" + sortBy + "&so=" + sortOrder, true);
            request.send("");
        }
    }

})();