﻿// filter object, elk array element is een eigen filter
// in de <functie moet nog geschreven worden> functie wordt met een switch het custom filter uitgevoerd met
// de data die hier gespecificeerd is
var jSonFilter = [
            {
                "filtername": "regios",
                "data": []
            },
            {
                "filtername": "urenperweek",
                "data": {
                    "van": 0,
                    "tot": 40
                }
            },
            {
                "filtername": "soortwerk",
                "data": []
            },
            {
                "filtername": "plaatsingsdatum",
                "data": {
                    "minAge": -90,
                    "maxAge": 0
                }
            }
    ];

// lege json vacatures, wordt gebruikt als basis om de gefilterde vacatures in te plaatsen (deze variabel wordt niet aangepast)
var jSonEmptyVacatures = {
    "timestamp": "",
    "vacatures": []
};

/*
Vacature: vacature object (van json) die getest moet worden
curFilter: het filter waar de vacature aan getoetst wordt
*/
function passesFilter(vacature, curFilter) {
    switch (curFilter.filtername) {
        case "regios":
            if (curFilter.data.length > 0)
                return vacatureFilterRegios(vacature, curFilter.data);
            break;
        case "urenperweek":
            return vacatureFilterUren(vacature, curFilter.data);
            break;
        case "soortwerk":
            if (curFilter.data.length > 0)
                return vacatureSoortWerk(vacature, curFilter.data);
            break;
        case "plaatsingsdatum":
            return vacatureFilterPlaatsingsDatum(vacature, curFilter.data);
            break;
    }
    return true;
}

/*
source: jSon met alle vacatures die beschikbaar zijn
filter: json met mogelijke filters

retourneert alleen de vacatures die voldoen aan de verscheidene filters (in identieke formaat als de source)
*/
function applyFilter(source, filter) {
    var dest = jSonEmptyVacatures;
    
    dest.timestamp = source.timestamp;
    dest.vacatures = [];

    for (var i=0; i<source.vacatures.length; i++) {
        var vacature = source.vacatures[i];
        var throughFilter = true;   //

        // loop through all filters check if they pass, if not break and don't add it to the destination
        for (var f=0; f < filter.length; f++) {
            var curFilter = filter[f];
            throughFilter = passesFilter(vacature, curFilter);

            // if vacature failed one filter, unnessecary to continue
            if (throughFilter == false)
                break;
        }

        if (throughFilter == true) {
            dest.vacatures.push(vacature);
        }
    }
    return dest;
}

/*
full: jSon met alle vacatures
filtered: jSon met de vacatures die door de al geslecteerde filters heen gehaald zijn

filtred is nodig om bepaalde filters inactief te kunnen maken. (wanneer andere filters het huidige filter overbodig maken kan
nog wel getoond worden hoeveel vacatures er onder vallen als alle andere filters uit zijn)
Vult de lijst met mogelijke filters (alle provincies waar vacatures voor zijn, 
                                     alle soorten werk waar vacaturesv van zijn,
                                     aantal uren slider)
*/
function fillFilters(full, filtered, containerRegio, containerSoortWerk) {
    flllRegioCheckBoxes(full, filtered, containerRegio);
    flllSoortWerkCheckBoxes(full, filtered, containerSoortWerk);

    // Slider urenperweek
    $('#urenFilter .datacontainer').slider({
        range: true,
        values: [0, 40],
        max: 40,
        min: 0,
        slide: function (event, ui) {
            $("#urenFilter .datainfo").html(ui.values[0] + " uur - " + ui.values[1] + " uur");
        },
        change: function (event, ui) {
            //$("#urenFilter .datainfo").html(ui.values[0] + " uur - " + ui.values[1] + " uur");  // just in case
            buildAndApplyfilter();

        }
    });

    // Slider plaatsingsdatum
    $('#plaatsingsDatumFilter .datacontainer').slider({
        range: true,
        values: [-90, 0],
        max: 0,
        min: -90,
        slide: function (event, ui) {
            var dateSliderHtml = "";
            var now_epoch = new Date().getTime();
            var minDate = new Date(now_epoch - (ui.values[0] * -86400000));
            var maxDate = new Date(now_epoch - (ui.values[1] * -86400000));


            // als de voorwaarde op 90 dagen staat interpreteren we dit als geen voorwaarde (dus toon alle oudere vacatures ook)
            if (ui.values[0] <= -90)
                dateSliderHtml += "Alle vacatures tot " + maxDate.getDate() + "-" + (maxDate.getMonth() + 1) + "-" + maxDate.getFullYear();
            else
                dateSliderHtml += "Van " + minDate.getDate() + "-" + (minDate.getMonth() + 1) + "-" + minDate.getFullYear() + " tot " + maxDate.getDate() + "-" + (maxDate.getMonth() + 1) + "-" + maxDate.getFullYear();

            $("#plaatsingsDatumFilter .datainfo").html(dateSliderHtml);
        },
        change: function (event, ui) {
            //$("#urenFilter .datainfo").html(ui.values[0] + " uur - " + ui.values[1] + " uur");  // just in case
            buildAndApplyfilter();

        }
    });

}


// bouw met de jquery template de vacature details in het hoofdscherm
function fillVacatureOverview() {
    $("#divVacatureSearchResults").html("");
    visibleVavatures = filteredVacatureJson.vacatures.slice(pagerInfo.currentPage * pagerInfo.itemsPerPage, (pagerInfo.currentPage + 1) * pagerInfo.itemsPerPage);
    $("#vacatureItemTemplate").tmpl(visibleVavatures).appendTo("#divVacatureSearchResults");
}

function buildAndApplyfilter() {
    buildFilter();
    filteredVacatureJson = applyFilter(jSonFullVacatures, jSonFilter);
    fillVacatureOverview();
    flllSoortWerksetDisabled(filteredVacatureJson);
    hideVacatureDetail();
    buildPager();
}

/*
Bouw het filter jSon object op dat gebruikt wordt om de resultaten te filteren

Deze wordt aangeroepen door onchange (en mogelijk andere) events van de filter knoppen
*/
function buildFilter() {
    // regiofilter
    jSonFilter[0].data = getSelectedRegioCheckBoxes();

    // uurfilter
    var selectedWorkHours = getSelectedworkHours();
    jSonFilter[1].data.van = selectedWorkHours.from;
    jSonFilter[1].data.tot = selectedWorkHours.to;

    // soortwerkfilter
    jSonFilter[2].data = getSelectedSoortWerkCheckBoxes();

    // plaatsingsdatumfilter
    var selectedPlaatsingsData = getSelectedPlaatsingsData();
    jSonFilter[3].data.minAge = selectedPlaatsingsData.minAge;
    jSonFilter[3].data.maxAge = selectedPlaatsingsData.maxAge;
}


/*
bepaal welke regios geselecteerd zijn zodat deze door een bovenliggende functie in het jSonfilter  gestopt kunnen worden
*/
function getSelectedRegioCheckBoxes() {
    // haal alle checkboxes op die geselecteerd zijn en pak de value om terug te sturen voor het filter
    var selectedRegios = [];
    $("#regioFilter .datacontainer input:checked").each(function (index, domEle) {
        selectedRegios.push(domEle.value);
    });

    return selectedRegios;
}
/*
bepaal welke soortenwerk geselecteerd zijn zodat deze door een bovenliggende functie in het jSonfilter  gestopt kunnen worden
*/
function getSelectedSoortWerkCheckBoxes() {
    // haal alle checkboxes op die geselecteerd zijn en pak de value om terug te sturen voor het filter
    var selectedSoortWerk = [];
    $("#soortWerkFilter .datacontainer input:checked").each(function (index, domEle) {
        selectedSoortWerk.push(domEle.value);
    });

    return selectedSoortWerk;
}


/*
bepaal haal de geselcteerde min en max aantal dagen op en stop deze in het filter
*/
function getSelectedPlaatsingsData() {
    var plaatsingsData = {};

    plaatsingsData.minAge = $("#plaatsingsDatumFilter .datacontainer").slider('values', 0);
    plaatsingsData.maxAge = $("#plaatsingsDatumFilter .datacontainer").slider('values', 1);

    return plaatsingsData;
}

/*
bepaal haal de geselcteerde uren op en stop deze in het filter
*/
function getSelectedworkHours() {
    // haal alle checkboxes op die geselecteerd zijn en pak de value om terug te sturen voor het filter
    var selectedWorkHours = {};

    selectedWorkHours.from = $("#urenFilter .datacontainer").slider('values', 0);
    selectedWorkHours.to = $("#urenFilter .datacontainer").slider('values', 1);

    return selectedWorkHours;
}


/*
Toon de details van de specifieke vacature
 jSonVacatureIndex = de index waar de te tonen vacature in de json array te vinden is
*/
function showVacature(vacatureVacID) {
    var detailVacaturejSon = null;

    // zoek de juiste vacature op dmv de ID
    // zwaarder, maar maakt het makkelijker om straks directe links te maken en de informatie direct te tonen
    for (var i=0; i<filteredVacatureJson.vacatures.length; i++){
        if (filteredVacatureJson.vacatures[i].id == vacatureVacID){
            detailVacaturejSon = jQuery.extend({}, filteredVacatureJson.vacatures[i]);  //spice:copy object

            //detailVacaturejSon aanpassen
           // detailVacaturejSon.soortwerk = detailVacaturejSon.soortwerk.join('/');

            
            // controlleren of we ook daadwerkelijk de gevraagde vacature gevonden hebben, anders niets doen
            if (detailVacaturejSon != null) {
                $("#divFullVacature").html("");
                $("#vacatureDetailTemplate").tmpl(detailVacaturejSon).appendTo("#divFullVacature");


                $("#divVacatureSearchResults").hide();  // zoekresultaten onzichtbaar
                $("#divFullVacature").show();       // net gevulde detail zichtbaar
            }

            //$('a[href$="#reageren"]').fancybox({
                //content: $("#vacatureContactTemplate").tmpl(detailVacaturejSon)
            //});
            $('a[href$="#reageren"]').live('click',function () {
                $("a#edit-audit-fancybox").fancybox({
                    //'frameHeight': 800,
                    'height': 400,
                    'width': 400,
                    'onComplete': function () {
                        $("#fancybox-frame").load(function () {
                            $(this).contents().find("h1:first").text("reageren op: " + detailVacaturejSon.titel);
                            $(this).contents().find(".vacNummer").text("Vacaturenummer: " + detailVacaturejSon.id);
                            $(this).contents().find("#tbVacature").val(detailVacaturejSon.id + " - " + detailVacaturejSon.titel);
                        });
                    }
                });
                $("a#edit-audit-fancybox").click();
                return false;
            });
            break;
        }
    }
    $("#divVacaturePager").hide();
    
}

/*
Verberg het detial scherm en toon de zoelresultaten weer
*/
function hideVacatureDetail() {
    $("#divVacatureSearchResults").show();  // zoekresultaten zichtbaar
    $("#divFullVacature").hide();       // detail onzichtbaar
    $("#divVacaturePager").show();
}

function setupVacatureContactForm() {
    $(document).ready(function () {
        $("#vacatureContactForm").validate();    // setup jquery validate
        $('#vcVoornaam').watermark('Voornaam');
        $('#vcAchternaam').watermark('Achternaam');
        $('#vcEmail').watermark('E-mail');
        $('#vcPhone').watermark('Telefoonnummer');
        $('#vcQuestion').watermark('Vraag/opmerking');

        setupFormValidation("lnkButtonSendQuestion", "divIHaveAQuestionForm");

        $('#lnkButtonSendQuestion').click(function () {
            if ($("#vacatureContactForm").valid()) {
                $.ajax({
                    type: "POST",
                    dataType: "json",
                    url: 'Pages/VacatureContact.ashx',
                    data: ({
                        voornaam: $('#vcVoornaam').val(),
                        achternaam: $('#vcAchternaam').val(),
                        email: $('#vcEmail').val(),
                        telefoon: $('#vcPhone').val(),
                        opmerking: $('#vcOpmerking').val(),
                        vacature: $('#vcVacature').val()
                    }),
                    success: function (data) {
                        $("#divIHaveAQuestionForm").hide();
                        $(".divsend").hide();
                        $(".diverror").hide();
                        if (data.success == true) {
                            $(".divsend").show();
                        }
                        else {
                            $(".diverror").show();
                        }
                    },
                    error: function () {
                        $("#divIHaveAQuestionForm").hide();
                        $(".divsend").hide();
                        $(".diverror").show();
                    }

                });
            }
        });
    });
}
var currentHash = ""//IE
function vacatureHashchange() {
    if (currentHash == window.location.hash) return;
    currentHash = window.location.hash;
    var id = window.location.hash.replace('#', '');
    if (!isNaN(parseInt(id))) {
        showVacature(id);
        $.fancybox.close() 
    }
    else if (id == "reageren") {
        $("a#edit-audit-fancybox").click();
    }
    else {
       var pageNum = window.location.hash.split("_");
        if (pageNum.length == 2) {
            if (pageNum[1] - 1 != pagerInfo.currentPage)
                gotoPage(pageNum[1] - 1);
        }
        else {
            if (pagerInfo.currentPage != 0)
                gotoPage(0);
        }
        hideVacatureDetail();
        $.fancybox.close();
    }
}
function buildPager() {
    $('#divVacaturePager').empty();
    $('<div/>', {
        text: '« vorige',
        'class': 'item' + (pagerInfo.currentPage == 0 ? ' itemDisabled' : '')
    }).click(function () {
        if(pagerInfo.currentPage != 0)
            gotoPage(pagerInfo.currentPage - 1);
    }).appendTo('#divVacaturePager');

    pageAmount = Math.ceil(filteredVacatureJson.vacatures.length / pagerInfo.itemsPerPage);
    for (var i = 0; i < pageAmount; i++) {
        $('<div/>', {
            text: i+1,
            'class': 'item' + (pagerInfo.currentPage == i ? ' itemEnabled' : '')
        }).click(function () {
            gotoPage($(this).text()-1);
        }).appendTo('#divVacaturePager');
    }

    
    $('<div/>', {
        text: 'volgende »',
        'class': 'item' + ($('#divVacaturePager div:last').hasClass("itemEnabled") ? ' itemDisabled' : '')
    }).click(function () {
        if (!$(this).prev().hasClass("itemEnabled"))
            gotoPage(pagerInfo.currentPage + 1);
    }).appendTo('#divVacaturePager');
}
function gotoPage(page) {
    pagerInfo.currentPage = page;
    fillVacatureOverview();
    location.href = location.href.split('#')[0] + '#overview_' + (page+1);
    buildPager();

}

