function doFilterByRegionDisplay() {
    hideLayer('dvFilterCountry');
    showLayer('dvFilterRegion');
    deselectAll(document.getElementById('msFilterRegion'));
}

function doFilterByCountryDisplay() {
    hideLayer('dvFilterRegion');
    showLayer('dvFilterCountry');
    deselectAll(document.getElementById('msFilterCountry'));
}

function regionFilterPrepareAjaxFunction() {
    var ajax_array = new Array();
    ajax_array["command"] = 'getActiveJobsFilterRegion';
    var selectedArray = getMultiple(document.getElementById('msFilterRegion'));
    for (x in selectedArray) {
       ajax_array["selected"+x] = selectedArray[x];
    }
    prepareAjaxFunction('/handlers/GetObjectsXMLHandler.ashx',ajax_array,ajaxListingsInProgress,ajaxListingsCompleted,ajaxSuccessListings);
}

function searchFilterPrepareAjaxFunction() {
    var ajax_array = new Array();
    ajax_array["command"] = 'getActiveJobsFilterCountryPosType';
    var selectedArray = getMultiple(document.getElementById('msFilterCountry'));
    for (x in selectedArray) {
       ajax_array["countryID"+x] = selectedArray[x];
    }
    selectedArray = getMultiple(document.getElementById('msFilterPositionType'));
    for (x in selectedArray) {
       ajax_array["posTypeID"+x] = selectedArray[x];
    }
    prepareAjaxFunction('/handlers/GetObjectsXMLHandler.ashx',ajax_array,ajaxListingsInProgress,ajaxListingsCompleted,ajaxSuccessListings);
}

function ajaxListingsInProgress() {
    disableObject(document.getElementById('msFilterRegion'));
    disableObject(document.getElementById('msFilterCountry'));
    hideLayer('dvJobListings');
    showLayer('ajaxListingsLoadingPanel');
}

function ajaxListingsCompleted() {
    enableObject(document.getElementById('msFilterRegion'));
    enableObject(document.getElementById('msFilterCountry'));
    hideLayer('ajaxListingsLoadingPanel');
    showLayer('dvJobListings');
}

function ajaxDisplayJobInProgress() {
    hideLayer('dvFilterCountry');
    hideLayer('dvFilterRegion');
    hideLayer('dvFilterPositionType');
    hideLayer('dvWelcome');
    hideLayer('dvJobListings');
    showLayer('ajaxListingsLoadingPanel');
}

function ajaxDisplayJobCompleted() {
    hideLayer('ajaxListingsLoadingPanel');
    showLayer('jobDetailsPanel');
}

function ajaxSuccessDisplayJob(xmlDoc) {
    // Populate job details
    doDisplayJobPopulate(xmlDoc);
}

function ajaxFilterCountryInProgress() {
    hideLayer('dvFilterRegion');
    hideLayer('dvFilterCountry');
    showLayer('ajaxSearchFiltersLoadingPanel');
}

function ajaxFilterCountryCompleted() {
    hideLayer('ajaxSearchFiltersLoadingPanel');
    showLayer('dvFilterCountry');
}

function ajaxFilterPosTypesInProgress() {
    hideLayer('dvFilterPositionType');
    showLayer('ajaxSearchFiltersLoadingPanel');
}

function ajaxFilterPosTypesCompleted() {
    hideLayer('ajaxSearchFiltersLoadingPanel');
    showLayer('dvFilterPositionType');
}

function ajaxSuccessListings(xmlDoc) {
    // Populate listings table
    doListingsPopulate(xmlDoc);
}

function ajaxSuccessRegions(xmlDoc) {
    // Populate regions selectbox
    doRegionsPopulate(xmlDoc);
}

function ajaxSuccessCountries(xmlDoc) {
    // Populate countries selectbox
    doCountriesPopulate(xmlDoc);
}

function ajaxSuccessPosTypes(xmlDoc) {
    // Populate position types selectbox
    doPosTypesPopulate(xmlDoc);
}

function doJobDetailsApplyButton() {
    window.location.href = '/ApplyForJob.aspx?job=' + document.getElementById('internalJobID').value;
}

function doJobDetailsBackButton() {
    deselectAll(document.getElementById('msFilterRegion'));
    showLayer('dvFilterCountry');
    showLayer('dvFilterPositionType');
    hideLayer('jobDetailsPanel');
    showLayer('dvWelcome');
    showLayer('dvJobListings');
}

function doPageLoad() {
    var ajax_array = new Array();
    //ajax_array["command"] = 'getAllRegions';
    //prepareAjaxFunction('/handlers/GetObjectsXMLHandler.ashx',ajax_array,ajaxSearchFiltersInProgress,ajaxSearchFiltersCompleted,ajaxSuccessRegions);
    
    ajax_array = new Array();
    ajax_array["command"] = 'getAllCountries';
    prepareAjaxFunction('/handlers/GetObjectsXMLHandler.ashx',ajax_array,ajaxFilterCountryInProgress,ajaxFilterCountryCompleted,ajaxSuccessCountries);
    
    ajax_array = new Array();
    ajax_array["command"] = 'getAllPositionTypes';
    prepareAjaxFunction('/handlers/GetObjectsXMLHandler.ashx',ajax_array,ajaxFilterPosTypesInProgress,ajaxFilterPosTypesCompleted,ajaxSuccessPosTypes);
    
    ajax_array = new Array();
    ajax_array["command"] = 'getAllActiveJobs';
    prepareAjaxFunction('/handlers/GetObjectsXMLHandler.ashx',ajax_array,ajaxListingsInProgress,ajaxListingsCompleted,ajaxSuccessListings);
    
    // Register change listeners on Region and Country and PositionType filters
    // Delay half a second before registering to prevent the initial asmSelect 
    // population from firing them.
    window.setTimeout(pageLoadBindAjaxChangeEvents,500);
    
    
    // Register onclick events for Filter By Region and Filter By Country links
    document.getElementById('filterByCountryLink').onclick = doFilterByCountryDisplay;
    //document.getElementById('filterByRegionLink').onclick = doFilterByRegionDisplay;
    
    // Register onclick events for Apply For Job and Return To Job Listings buttons
    document.getElementById('applyButtonTop').onclick = doJobDetailsApplyButton;
    document.getElementById('applyButtonBottom').onclick = doJobDetailsApplyButton;
    document.getElementById('backButtonTop').onclick = doJobDetailsBackButton;
    document.getElementById('backButtonBottom').onclick = doJobDetailsBackButton;
}

function pageLoadBindAjaxChangeEvents() {
    //document.getElementById('msFilterRegion').onchange = prepDelayOnChangeRegionFilter;
    document.getElementById('msFilterCountry').onchange = searchFilterPrepareAjaxFunction;
    document.getElementById('msFilterPositionType').onchange = searchFilterPrepareAjaxFunction;
}

function doListingsPopulate(xmlDoc) {
    // Destroy old listings if we're repopulating
    var oldTBody = document.getElementById('dynamicTBody');
    if (oldTBody != null) {
        oldTBody.parentNode.removeChild(oldTBody);
    }

    // get the XML root item
    var root = xmlDoc.getElementsByTagName('ArrayOfJobSummary')[0];
    
    if (root == null) {
        return true;
    }
    
    var jobs = root.getElementsByTagName("JobSummary");
    var myElementTBody = document.createElement('tbody');
    myElementTBody.id = 'dynamicTBody';
    
    // If no jobs, tell the users!
    if (jobs.length == 0) {
        var myElementRow = document.createElement('tr');
        var myElement = document.createElement('td');
        myElement.setAttribute('colspan',3);
        myElement.colSpan = "3";
        var celltext = document.createTextNode('There Are Currently No Jobs.');
        myElement.appendChild(celltext);
        myElementRow.appendChild(myElement);
        myElementTBody.appendChild(myElementRow);
    }
    else {
        for (var i = 0 ; i < jobs.length ; i++) {
	        // get one item after another
	        var job = jobs[i];
	        // now we have the job object, time to get the contents
	        // get the internal id of the job
	        var internalId = job.getElementsByTagName("Id")[0].firstChild.nodeValue;
	        // get the posting number of the job
	        var postingId = job.getElementsByTagName("JobNumber")[0].firstChild.nodeValue;
	        // get the title of the job
	        var title = job.getElementsByTagName("JobTitle")[0].firstChild.nodeValue;
	        // get the area of the job
	        var area = job.getElementsByTagName("JobAreaString")[0].firstChild.nodeValue;
	        // get the country of the job
	        var country = job.getElementsByTagName("JobCountryString")[0].firstChild.nodeValue;
	        // get the position type of the job
	        var posType = job.getElementsByTagName("JobPositionTypeString")[0].firstChild.nodeValue;
	        // get the date the job expires
	        var endDate = job.getElementsByTagName("JobEndDateDisplay")[0].firstChild.nodeValue;
    	    
	        var myElementRow;
	        var myElement;
	        var cellText;
    	    
	        // New TR
	        if (i % 2 == 0) {
	            myElementRow = document.createElement('tr');
	        } else {
	            myElementRow = document.createElement('tr');
	            var cssString = 'background-color:#CACED3;';
                myElementRow.style.cssText = cssString;
                myElementRow.setAttribute('style',cssString); 
	        }
    	    
	        // Load posting number
	        myElement = document.createElement('td');
	        var cssString = 'width:15%;';
            myElement.style.cssText = cssString;
            myElement.setAttribute('style',cssString);
	        celltext = document.createTextNode(postingId);
	        myElement.appendChild(celltext);
	        myElementRow.appendChild(myElement);
    	    
	        // Load posting title
	        myElement = document.createElement('td');
	        var cssString = 'width:25%;';
            myElement.style.cssText = cssString;
            myElement.setAttribute('style',cssString);
	        // Posting title link
	        var link = document.createElement('a');
	        link.href=    "javascript:prepareAjaxFunctionSingleParam('/handlers/GetObjectsXMLHandler.ashx','getActiveJobById','"+internalId+"',ajaxDisplayJobInProgress,ajaxDisplayJobCompleted,ajaxSuccessDisplayJob);";
            link.title=   "";
            link.target=  "";
            link.onclick= "";

	        celltext = document.createTextNode(title);
	        link.appendChild(celltext);
	        myElement.appendChild(link);
	        myElementRow.appendChild(myElement);
    	    
	        // Load posting area and country
	        myElement = document.createElement('td');
	        var cssString = 'width:30%;';
            myElement.style.cssText = cssString;
            myElement.setAttribute('style',cssString);
	        celltext = document.createTextNode(area + ', ' + country);
	        myElement.appendChild(celltext);
	        myElementRow.appendChild(myElement);
	        
	        // Load posting position type
	        myElement = document.createElement('td');
	        var cssString = 'width:15%;';
            myElement.style.cssText = cssString;
            myElement.setAttribute('style',cssString);
	        celltext = document.createTextNode(posType);
	        myElement.appendChild(celltext);
	        myElementRow.appendChild(myElement);
	        
	        // Load posting end date
	        myElement = document.createElement('td');
	        var cssString = 'width:15%;';
            myElement.style.cssText = cssString;
            myElement.setAttribute('style',cssString);
	        celltext = document.createTextNode(endDate);
	        myElement.appendChild(celltext);
	        myElementRow.appendChild(myElement);
    	    
	        // End the TR
	        myElementTBody.appendChild(myElementRow);
        }
    }
    // Add the page number footer
    var myElementRow = document.createElement('tr');
    var cssString = 'background-color:#1056A1; color:White; text-align:Center;';
    myElementRow.style.cssText = cssString;
    myElementRow.setAttribute('style',cssString);
    var myElement = document.createElement('td');
    myElement.setAttribute('colspan',5);
    myElement.colSpan = "5";
    var celltext = document.createTextNode('Page 1 of 1');
    myElement.appendChild(celltext);
    myElementRow.appendChild(myElement);
    myElementTBody.appendChild(myElementRow);
    
    document.getElementById('tbJobListings').appendChild(myElementTBody);
}

function doDisplayJobPopulate(xmlDoc) {
    // get the XML root item
    var job = xmlDoc.getElementsByTagName('Job')[0];
    
    if (job == null) {
        window.location.href = "/";
        return true;
    }
   
    // now we have the job object, time to get the contents
    var internalId = job.getElementsByTagName("Id")[0].firstChild.nodeValue;
    var postingId = job.getElementsByTagName("JobNumber")[0].firstChild.nodeValue;
    var title = job.getElementsByTagName("JobTitle")[0].firstChild.nodeValue;
    var area = job.getElementsByTagName("JobAreaString")[0].firstChild.nodeValue;
    var country = job.getElementsByTagName("JobCountryString")[0].firstChild.nodeValue;
    var region = job.getElementsByTagName("JobRegionString")[0].firstChild.nodeValue;
    var description = job.getElementsByTagName("JobDescription")[0].firstChild.nodeValue;
    var pay = job.getElementsByTagName("JobPay")[0].firstChild.nodeValue;
    var division = job.getElementsByTagName("JobDivisionString")[0].firstChild.nodeValue;
    var payType = job.getElementsByTagName("JobPayTypeString")[0].firstChild.nodeValue;
    
    var duties = new Array();
    var dutiesElement = job.getElementsByTagName("JobDuties")[0];
    var dutiesValues = dutiesElement.getElementsByTagName("anyType");
    
    for (var i = 0 ; i < dutiesValues.length ; i++) {
        // get one item after another
        var currentDuty = dutiesValues[i].firstChild.nodeValue;
        duties[i] = currentDuty;
    }   
        
    var skills = new Array();
    var skillsElement = job.getElementsByTagName("JobSkillsQuals")[0];
    var skillsValues = skillsElement.getElementsByTagName("anyType");
    
    for (var i = 0 ; i < skillsValues.length ; i++) {
        // get one item after another
        var currentSkill = skillsValues[i].firstChild.nodeValue;
        skills[i] = currentSkill;
    }   
	
	var positionType = job.getElementsByTagName("JobPositionTypeString")[0].firstChild.nodeValue;
	var positionTerm = job.getElementsByTagName("JobPositionTermString")[0].firstChild.nodeValue;
	var startDate = job.getElementsByTagName("JobStartDateDisplay")[0].firstChild.nodeValue;
	//startDate = startDate.substring(0,10);
	var endDate = job.getElementsByTagName("JobEndDateDisplay")[0].firstChild.nodeValue;
	//endDate = endDate.substring(0,10);
	    
    // Now we put stuff on the job details page
    document.getElementById('internalJobID').value = internalId;
    document.getElementById('spJobNumTitle').innerHTML = postingId + " - " + title;
    document.getElementById('spArea').innerHTML = area + ", " + country;
    document.getElementById('spPay').innerHTML = pay;
    document.getElementById('spPosType').innerHTML = positionType;
    document.getElementById('spPayType').innerHTML = payType;
    document.getElementById('spStartDate').innerHTML = startDate;
    document.getElementById('spPosTerm').innerHTML = positionTerm;
    document.getElementById('spEndDate').innerHTML = endDate;
    document.getElementById('spDesc').innerHTML = description;
    
    // Destroy old duties list if we're repopulating
    var oldDutiesUL = document.getElementById('dutiesUL');
    if (oldDutiesUL != null) {
        oldDutiesUL.parentNode.removeChild(oldDutiesUL);
    }
    
    // Duties entry loop
    var myElementUL = document.createElement('ul');
    myElementUL.id = 'dutiesUL';
    for (x in duties) {
        var myElementLI = document.createElement('li');
        var LItext = document.createTextNode(duties[x]);
        myElementLI.appendChild(LItext);
        myElementUL.appendChild(myElementLI);
    }
    document.getElementById('dvDuties').appendChild(myElementUL);
    
    // Destroy old qualifications list if we're repopulating
    var oldSkillsUL = document.getElementById('skillsUL');
    if (oldSkillsUL != null) {
        oldSkillsUL.parentNode.removeChild(oldSkillsUL);
    }
    
    // Skills entry loop
    myElementUL = document.createElement('ul');
    myElementUL.id = 'skillsUL';
    for (x in skills) {
        var myElementLI = document.createElement('li');
        var LItext = document.createTextNode(skills[x]);
        myElementLI.appendChild(LItext);
        myElementUL.appendChild(myElementLI);
    }
    document.getElementById('dvQualifications').appendChild(myElementUL);
}

function doRegionsPopulate(xmlDoc) {
    // get the XML root item
    var root = xmlDoc.getElementsByTagName('ArrayOfRegion')[0];
    
    if (root == null) {
        return true;
    }
    
    var regions = root.getElementsByTagName("Region");
    for (var i = 0 ; i < regions.length ; i++) {
	    // get one item after another
	    var region = regions[i];
	    // now we have the region object, time to get the contents
	    // get the internal id of the region
	    var internalId = region.getElementsByTagName("Id")[0].firstChild.nodeValue;
	    // get the posting number of the region
	    var name = region.getElementsByTagName("Name")[0].firstChild.nodeValue;
	    
	    // Add to the SelectBox
	    //var selectBox = document.getElementById('msFilterRegion');
	    //addOption('msFilterRegion',internalId,name);
    }
}

function doCountriesPopulate(xmlDoc) {
    // get the XML root item
    var root = xmlDoc.getElementsByTagName('ArrayOfCountry')[0];
    
    if (root == null) {
        return true;
    }
    
    var countries = root.getElementsByTagName("Country");
    for (var i = 0 ; i < countries.length ; i++) {
	    // get one item after another
	    var country = countries[i];
	    // now we have the country object, time to get the contents
	    // get the internal id of the country
	    var internalId = country.getElementsByTagName("Id")[0].firstChild.nodeValue;
	    // get the name of the country
	    var name = country.getElementsByTagName("Name")[0].firstChild.nodeValue;
	    
	    // Add to the SelectBox
	    //var selectBox = document.getElementById('msFilterCountry');
	    addOption('msFilterCountry',internalId,name);
    }
}

function doPosTypesPopulate(xmlDoc) {
    // get the XML root item
    var root = xmlDoc.getElementsByTagName('ArrayOfPositionType')[0];
    
    if (root == null) {
        return true;
    }
    
    var posTypes = root.getElementsByTagName("PositionType");
    for (var i = 0 ; i < posTypes.length ; i++) {
	    // get one item after another
	    var posType = posTypes[i];
	    // now we have the position type object, time to get the contents
	    // get the internal id of the position type
	    var internalId = posType.getElementsByTagName("Id")[0].firstChild.nodeValue;
	    // get the name of the position type
	    var name = posType.getElementsByTagName("Name")[0].firstChild.nodeValue;
	    
	    // Add to the SelectBox
	    //var selectBox = document.getElementById('msFilterCountry');
	    addOption('msFilterPositionType',internalId,name);
    }
}