﻿function SpecialOfferFilterPanel(ddlRegion, ddlSleeps, lblOffersFound, jsonAccData, jsonAccDataNoHierarchy, jsonRegions, jsonSleeps) {
    var instance = this;
    this.ddlRegionElement = ddlRegion;
    this.ddlSleepsElement = ddlSleeps;
    this.lblOffersFoundElement = lblOffersFound;

    this.ddlRegionElement.change(function(e) {
        refreshDDLs();
    });
    
    this.ddlSleepsElement.change(function(e) {
        refreshDDLs();
    });
    
    function refreshDDLs() {
        var ddlRegion = instance.ddlRegionElement.get(0);
        var ddlSleeps = instance.ddlSleepsElement.get(0);
        var lblOffersFound = instance.lblOffersFoundElement.get(0);
        
        // Get Region filter
        var regionFilter = 0;
        if (ddlRegion.selectedIndex != 0) regionFilter = ddlRegion.value;
        
        // Get Sleeps Filter
        var sleepsRange = getSleepsRange(ddlSleeps.value);

        // Populate Region DDL.
        var selectedValue = ddlRegion.value;
        ddlRegion.options.length = 0;
        var option = document.createElement('option');
        option.text = "All Regions";
        option.value = "0";
        ddlRegion.options[ddlRegion.options.length] = option;
        for (var k = 0; k < jsonRegions.length; k++) {
            villaCount = getVillaCount(jsonRegions[k].value, sleepsRange.min, sleepsRange.max);
            if (villaCount == 0) continue;
            option = document.createElement('option');
            option.text = jsonRegions[k].text + " (" + villaCount + ")";
            option.value = jsonRegions[k].value;
            if (option.value == selectedValue) option.selected = true;
            ddlRegion.options[ddlRegion.options.length] = option;
        }

        //Populate Sleeps DDL
        var selectedValue = ddlSleeps.value;
        ddlSleeps.options.length = 0;
        var option = document.createElement('option');
        option.text = "All Sleeps";
        option.value = "All";
        ddlSleeps.options[ddlSleeps.options.length] = option;
        for (var k = 0; k < jsonSleeps.length; k++) {
            sleepsRange = getSleepsRange(jsonSleeps[k].value);
            villaCount = getVillaCount(regionFilter, sleepsRange.min, sleepsRange.max);
            if (villaCount == 0) continue;
            option = document.createElement('option');
            option.text = jsonSleeps[k].text + " (" + villaCount + ")";
            option.value = jsonSleeps[k].value;
            if (option.value == selectedValue) option.selected = true;
            ddlSleeps.options[ddlSleeps.options.length] = option;
        }
        sleepsRange = getSleepsRange(ddlSleeps.value); // Reset to sleeps range to selected value.

        var villaCount = getVillaCount(regionFilter, sleepsRange.min, sleepsRange.max);
        if (villaCount > 1) lblOffersFound.innerHTML = villaCount + " Offers Found";
        else if (villaCount == 1) lblOffersFound.innerHTML = villaCount + " Offer Found";
    }

    function getVillaCount(regionFilter, minSleeps, maxSleeps) {
        var villaCount = 0;
        if (regionFilter == 0) {
            for (var k = 0; k < jsonAccDataNoHierarchy.length; k++) {
                if (jsonAccDataNoHierarchy[k].s >= minSleeps && (maxSleeps == 0 || jsonAccDataNoHierarchy[k].s <= maxSleeps)) {
                    villaCount++;
                }
            }
        }
        else {
            for (var k = 0; k < jsonAccData.length; k++) {
                if (regionFilter == 0 || regionFilter == jsonAccData[k].r) { // Region Filter
                    if (jsonAccData[k].s >= minSleeps && (maxSleeps == 0 || jsonAccData[k].s <= maxSleeps)) { // Sleeps Filter
                        villaCount++;
                    }
                }
            }
        }
        return villaCount;
    }
    
    // Returns { min: , max:  } from DDL value e.g. 2to4
    function getSleepsRange(value) {
        var minSleeps = 0;
        var maxSleeps = 0;
        if (value == "2-4") {
            minSleeps = 2;
            maxSleeps = 4;
        } else if (value == "5-7") {
            minSleeps = 5;
            maxSleeps = 7;
        } else if (value == "8-10") {
            minSleeps = 8;
            maxSleeps = 10;
        } else if (value == "11+") {
            minSleeps = 11;
        }
        return { min: minSleeps, max: maxSleeps };
    }
}

function SpecialOfferLink(regionDdlId, sleepsDdlId) {
    var linkElem = document.getElementById("specialOffersFilterLink");
    var regionElem = document.getElementById(regionDdlId);
    var sleepsElem = document.getElementById(sleepsDdlId);

    linkElem.href = "../EUVilla/HomePage.aspx?TID=specialOffers&OFFRCODE=" + regionElem.value + "&SLPRNG=" + sleepsElem.value;
}