// State variables.
var node_element = null;

//----------------------------------------------------------------------------
// GENERAL LOADING
//----------------------------------------------------------------------------
function searchRegionListLoad () {
    $.ajax({
        url: jarvis_base + 'region_list', dataType: 'json', type: 'GET', error: getError,
        success: function (result){
            $('#wf_region').children( 'option:not(:first)' ).remove();
            $.each (result.data, function (i, item) {
                $('#wf_region').append('<option value="' + item.RegionID + '">' + item.RegionDesc + '</option>');
            });
            $('#wf_region').removeAttr('disabled');
        }
    });
}

function searchGroupListLoad (region_id) {
    $.ajax({
        url: jarvis_base + 'group_list?region_id=' + region_id, dataType: 'json', type: 'GET', error: getError,        
        success: function (result){
            $('#wf_group').children( 'option:not(:first)' ).remove();
            $.each (result.data, function (i, item) {
                var group_name = item.GroupDesc;
                $('#wf_group').append('<option value="' + item.GroupID + '">' + group_name + '</option>');
            });             
            $('#wf_group').removeAttr('disabled');
        }
    });
}

function searchSuburbListLoad (group_id) {
    $.ajax({
        url: jarvis_base + 'suburb_list?group_id=' + group_id, dataType: 'json', type: 'GET', error: getError,        
        success: function (result){
            $('#wf_suburb').children( 'option:not(:first)' ).remove();
            $.each (result.data, function (i, item) {
                var suburb_name = item.SuburbDesc;
                $('#wf_suburb').append('<option value="' + item.SuburbID + '">' + suburb_name + '</option>');
            });             
            $('#wf_suburb').removeAttr('disabled');
        }
    });
}

function createResultsTable () {
    if (! $('#wf_results_table').exists()) {
        $(node_element).parent().append ('<div id="wf_results_div"><table id="wf_results_table"></table></div>');
    }
}
function showResultsTable () {
    $(node_element).hide();
    $('#wf_results_table').show();
}
function hideResultsTable () {
    $('#wf_results_table').hide();
    $(node_element).show();
}

function placementsLoad () {
    var role = $('#wf_role').val();     
    var type = $('#wf_type').val();     
    var region_id = $('#wf_region').val();     
    var group_id = $('#wf_group').val();     
    var suburb_ids = $('#wf_suburb').val();
    var args = 'role=' + (role || '') + 
        '&type=' + (type || '') + 
        '&region_id=' + (region_id || '') + 
        '&group_id=' + (group_id || '') + 
        '&suburb_ids=' + (suburb_ids ? suburb_ids.join(',') : '') +
        '&dc=' + (new Date()).getTime();

    createResultsTable ();
    showResultsTable ();        
        
    $('#wf_results_table').empty ();
    if (role == 'W') {
        $('#wf_results_table').append ('<tr><th colspan="2"><div style="float: left">Work Available (' + ((type == 'N') ? 'Nannies' : 'Home Educators') + ')</div>' + 
            '<div style="float: right"><a href="#" id="wf_results_close" onclick="{hideResultsTable(); return false}">Close<img align="top" src="/porse-public/images/btn-close.png"></a></div></th></tr>');

    } else {
        $('#wf_results_table').append ('<tr><th colspan="2"><div style="float: left">Childcare Available (' + ((type == 'N') ? 'Nannies' : 'Home Educators') + ')</div>' + 
            '<div style="float: right"><a href="#" id="wf_results_close" onclick="{hideResultsTable(); return false}">Close<img align="top" src="/porse-public/images/btn-close.png"></a></div></th></tr>');
        
        $('#wf_results_table').append ('<tr><td colspan="2" class="star"><img src="/porse-public/images/cert_new.png">&nbsp;Newly Registered Educators&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + 
            '<img src="/porse-public/images/cert_1_star.png">&nbsp;PORSE Approved Educators<br>' + 
            '<img src="/porse-public/images/cert_2_star.png">&nbsp;PORSE Certified Educators&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + 
            '<img src="/porse-public/images/cert_3_star.png">&nbsp;PORSE Professional Educators</td></tr>');
    }
    $('#wf_results_table').append ('<tr><td colspan="2"><span id="wf_results_status">Searching.  Please wait...</span></td></tr>');    

    $.ajax({
        url: jarvis_base + 'PlacementSearch?' + args, dataType: 'json', type: 'GET', error: getError,        
        success: function (result){
            if (! result.listed) {
                alert (result.reason || 'Could not generate placements list.');
                
            } else {           
                $('#wf_results_status').html ('Found ' + result.data.length + ' matching entries.');
                var last_region_desc = '';
                var last_home_suburb_desc = '';
                var rownum = 0;
                
                var group_list = ',' + result.group_list + ',';
                var link_boris = group_list.match(/,NSO Creative,/) || group_list.match(/,Graphics Team,/) || group_list.match(/,WebAdmin,/);

                $.each (result.data, function (i, item) {
                    rownum++;
                    var suburb_name = item.SuburbDesc;
                    var region_desc = item.RegionDesc;
                    var home_suburb_desc = (item.HomeSuburbDesc || '');
                    var contact_id = (item.EducatorID || item.FamilyID);
                    
                    item.AdvertisingBlurb = item.AdvertisingBlurb.replace (/\s*\r?\n\s*\r?\n\s*/g, '<p>');
                    
                    if (region_desc != last_region_desc) {
                        $('#wf_results_table').append('<tr><td colspan="2" class="region">' + region_desc + '</td></tr>');
                        last_region_desc = region_desc;
                    }
                    if (home_suburb_desc != last_home_suburb_desc) {
                        $('#wf_results_table').append('<tr><td colspan="2" class="home_suburb">' + home_suburb_desc + '</td></tr>');
                        last_home_suburb_desc = home_suburb_desc;
                    }
                     
                    // Group the times by day.
                    var show_places = ((role == 'C') && (type == 'H'));
                    var day_names = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
                    var times_table = '<table class="times"><tr><th class="days">Day</th><th class="hours">Hours</th>' + ((show_places) ? '<th class="places">Places</th>' : '') + '</tr>';
                    
                    var times_list = (item.AvailableTimes || '').split (',');
                    
                    for (var day=0; day<7; day++) {
                        var day_bits = 0;
                        var day_rows = "";
                        
                        for (var i=0; i<times_list.length; i++) {
                            if (times_list[i].length == 0) {
                                continue;
                            }
                            var parts = times_list[i].split ('|');
                            var day_time = parts[0].split('@');
                            var this_day = day_time[0] - 1;
                            if (this_day != day) {
                                continue;
                            }
                            
                            // First row for this day?
                            day_rows += '<tr>';
                            day_bits++;
                            if (day_bits == 1) {
                                day_rows += '    <td rowspan="DAY_BITS">' + day_names[day] + '</td>\n';
                            }
                            
                            day_rows += '    <td><span class="time">' + day_time[1] + '</span></td>\n';
                            if (show_places) {
                                if (parts.length > 1) {
                                    day_rows += '    <td>\n';
                                    day_rows += '<span class="nr">' + parts[1] + '</span><span class="txt"> ' + (parts[1] > 1 ? 'places' : 'place') + '</span>';
                                    if (parts.length > 2) {
                                        day_rows += ', <span class="nr">' + parts[2] + '</span><span class="tinytxt"> under two</span>';
                                    }
                                    day_rows += '    </td>\n';                            
                                } else {
                                    day_rows += '<td>&nbsp;</td>';
                                }
                            }
                            day_rows += '  </tr>\n';
                        }
                        
                        if (day_bits > 0) {
                            times_table += day_rows.replace (/DAY_BITS/, day_bits); 
                        }
                    }
                    times_table += '</table>\n';
                    
                    // for nannies: hours left for new contracts
                    var work_hours = item.FreeHours ? ('<div class="hours_available"><p>Hours Available: ' + item.FreeHours + '</p></div>') : "";

                    // "Looking for Work" - List Families!
                    // f.PorseID, f.AdvertisingHeadline, f.AdvertisingBlurb
                    if (role == 'W') {
                        // Family looking for Home Ed work.  Show suburbs prepared to consider.
                        var details = '';
                        if (type == 'H') {
                            var suburb_list = item.SuburbList || 'Not Specified';
                            details += '<div class="suburb_list"><p><b>Suburbs: </b>' + suburb_list + '.</p></div>';
                        }
                        details += times_table;
                        
                        // Body of listing.
                        var detail_label = (type == 'H') ? 'Locations &amp; Times' : 'Times';
                        var listing = '<tr><td><span class="ref">REF #' + item.PorseID  + '</span>&nbsp;&nbsp;' + 
                            '<a href="#" class="details" onClick="{detailsShow(\'family_' + rownum + '\'); return false;}">' + detail_label + '</a></td>' +
                            '<td class="right"><a class="contact" href="#" onClick="{openMail({family:' + contact_id + '}); return false}">contact us</a>' + '</td></tr>';
                            
                        if ((item.AdvertisingHeadline || '').length > 0) {
                            listing += '<tr><td colspan="2" class="headline">' + item.AdvertisingHeadline + '</td></tr>';
                        }
                        listing += '<tr><td colspan="2" class="blurb">' + item.AdvertisingBlurb + '<div id="family_' + rownum + '" class="details" style="display: none">' + details + '</div></td></tr>';

                        if (link_boris)
                            listing += '<tr><td colspan="2"><a href="https://boris2.porse.co.nz/boris/prod/#families/' + item.PorseID + '/advertising" target="_blank">edit advertisement</a></td></tr>';                        

                        $('#wf_results_table').append('<tr><td colspan="2" class="listing"><table class="listing">' + listing + '</table></td></tr>');

                    // "Looking for Care" - List Educators!
                    // e.FirstName, e.AdvertisingHeadline, e.AdvertisingBlurb, e.CertificateLevel3_NZQA, e.CertLevel
                    } else {
                        var rating = '<img src="/porse-public/images/' + (((item.CertLevel >= 1) && (item.CertLevel <= 3)) ? ("cert_" + item.CertLevel + "_star") : "cert_new") + '.png">';
                        if (item.CertificateLevel3_NZQA) {
                            rating = rating + '<br><br>NZQA<br>Level 3';
                        }
                        
                        // Educator looking for Nanny work.  Show suburbs prepared to work in.
                        var details = '';
                        if (type == 'N') {
                            var suburb_list = item.SuburbList || 'Not Specified';
                            details += '<div class="suburb_list"><p><b>Suburbs: </b>' + suburb_list + '.</p></div>';
                        }
                        details += times_table + work_hours;
                        
                        // Body of listing.
                        var detail_label = (type == 'N') ? 'Locations &amp; Times' : 'Times';
                        var listing = '<tr><td class="left"><span class="name">' + item.FirstName  + '</span>&nbsp;&nbsp;' + 
                            '<a href="#" class="details" onClick="{detailsShow(\'educator_' + rownum + '\'); return false;}">' + detail_label + '</a></td>' +
                            '<td class="right"><a class="contact" href="#" onClick="{openMail({educator:' + contact_id + '}); return false}">contact us</a>' + '</td></tr>';
                            
                        if ((item.AdvertisingHeadline || '').length > 0) {
                            listing += '<tr><td colspan="2" class="headline">' + item.AdvertisingHeadline + '</td></tr>';
                        }
                        listing += '<tr><td colspan="2" class="blurb">' + item.AdvertisingBlurb + '<div id="educator_' + rownum + '" class="details" style="display: none">' + details + '</div></td></tr>';

                        if (link_boris)
                            listing += '<tr><td colspan="2"><a href="https://boris2.porse.co.nz/boris/prod/#educators/' + item.PorseID + '/advertising" target="_blank">edit advertisement</a></td></tr>';

                        $('#wf_results_table').append('<tr><td class="rating">' + rating + '</td><td class="listing"><table class="listing">' + listing + '</table></td></tr>');
                    }
                }); 
                
                if (rownum == 0) {
                    var listing;
                    if ($('#wf_type').val() == 'N') { 
                        listing = '<p class="sorry">Sorry we are unable to find any Nanny placements matching your criteria.</p>' +
                            '<p class="sorry">Please <a href="#" onClick="{ doSearchType(\'H\'); return false; }">Click Here</a> to search for Home Educator placements instead.</p>';
                            
                    } else {
                        listing = '<p class="sorry">Sorry we are unable to find any Home Educator placements matching your criteria.</p>' +
                            '<p class="sorry">Please <a href="#" onClick="{ doSearchType(\'N\'); return false; }">Click Here</a> to search for Nanny placements instead.</p>';
                    }
                    $('#wf_results_table').append('<tr><td colspan="2" class="listing">' + listing + '</td></tr>');
                }
            }
        }
    });
}

//----------------------------------------------------------------------------
// INTERACTION
//----------------------------------------------------------------------------
function roleSelected () {
    var role = $('#wf_role').val();  
    if (role == 'W') {
        $('#wf_type').val('N');  
        
    } else if (role == 'C') {
        $('#wf_type').val('H');  
    }
}

function regionSelected () {
    var region_id = $('#wf_region').val();
    //$('#wf_group').children( 'option:not(:first)' ).remove();
    $('#wf_group').attr('disabled', 'disabled');    
    $('#wf_group').val (0);
    $('#wf_group').children( 'option:not(:first)' ).remove();
    
    $('#wf_suburb').children( 'option:not(:first)' ).remove();
    $('#wf_suburb_tr').hide ();
    
    if (region_id > 0) {
        searchGroupListLoad (region_id);
    } 
}

function groupSelected () {
    var group_id = $('#wf_group').val();     
    //$('#wf_suburb').children( 'option:not(:first)' ).remove();
    $('#wf_suburb').attr('disabled', 'disabled');    
    $('#wf_suburb').val (0);
    $('#wf_suburb').children( 'option:not(:first)' ).remove();
    if (group_id > 0) {
        $('#wf_suburb_tr').show ();
        searchSuburbListLoad (group_id);
    } else {
        $('#wf_suburb_tr').hide ();
    }
}

function doSearch () {
    if ($('#wf_region').val() == 0) {
        alert ("Please select a region before searching.");
        return false;
    }
    placementsLoad ();
    return false;
}

function detailsShow (id) {
    if ($('#' + id).css('display') == 'none') {
        $('#' + id).slideDown('fast');        
    } else {
        $('#' + id).slideUp('fast');
    }
    return false;
}

function doSearchType (new_type) {
    $('#wf_type').val (new_type);  
    doSearch ();
}

//----------------------------------------------------------------------------
// PAGE INITIALISATION PROCESS
//----------------------------------------------------------------------------
$(document).ready(function() {
    
    // Find where the main node content is.
    var node_elements = $('div.PostContent');
    if (node_elements.length > 0) {
        node_element = node_elements[0];
    }
    
    // Load 'em.
    searchRegionListLoad ();
});

