﻿/// <reference path="../Javascript/jQueryIntellisense.js"/>
/*
* jQuery facetSearchSummary Plugin
* Caudill Web
* @requires jQuery v.1.4+
*/

(function ($) {


    $.fn.facetSearchSummary = function (options) {

        this.each(function () {

            var defaults = {}; // set defaults in vb
            var config = $.extend(defaults, options);

            // Named elements
            var self = this, $self = $(this);
            var $facetSearch = $self.parents(".FacetSearchContainer");
            var $clearFilterButton = $(".ClearFilterButton", $self);
            var $searchSummaryTarget = $(".SearchSummaryTarget", $self);
            var $searchSummaryTemplate = $(".SearchSummaryTemplate", $self);

            // Wire up events

            $self
                .bind("displayState", displayState)
                .bind("initializeState", displayState)
            $clearFilterButton.bind("click", clearFilterButton_Click);

            // Public functions

            self.getId = function () {
                return config.id;
            }

            // Event handlers

            function displayState(event, state) {
                var searchSummaryItems = [];
                // Collect items from state object and line up with the corresponding DOM elements
                if (state.filters) {
                    $.each(state.filters, function () {
                        var filterState = this;
                        var $filter = $("#" + filterState.clientId);
                        var value = filterState.value;
                        if ($.isArray(value) == true) {
                            // Multiple values e.g. checkboxlist
                            $.each(value, function () {
                                var $checkbox = $filter.find("input:checkbox[value=" + this + "]");
                                searchSummaryItems.push({
                                    title: filterState.title,
                                    id: $checkbox[0].id,
                                    value: $checkbox.attr("title")
                                });
                            });
                        } else if (value.length > 0) {
                            // Single value e.g. textbox
                            var $textbox = $filter.find("input:text");
                            searchSummaryItems.push({
                                title: filterState.title,
                                id: $textbox[0].id,
                                value: value
                            });
                        } else if (filterState.value.lowValue != undefined || filterState.value.highValue != undefined || filterState.value.startDate != undefined || filterState.value.endDate != undefined) {
                            // Range value - only add if not null
                            if (!$filter[0].isNullState()) {
                                searchSummaryItems.push({
                                    title: filterState.title,
                                    id: $filter[0].id,
                                    value: $filter[0].getLabel()
                                });
                            }
                        } else if (filterState.value.x != undefined && filterState.value.y != undefined) {
                            // Location filter
                            if (!$filter[0].isNullState()) {
                                searchSummaryItems.push({
                                    title: filterState.title,
                                    id: $filter[0].id,
                                    value: $filter[0].getLabel()
                                });
                            }
                        }
                    });
                }
                // Show items
                if (searchSummaryItems.length > 0) {
                    $searchSummaryTarget.html(parseTemplate($searchSummaryTemplate.html(), { d: searchSummaryItems }));
                    var $searchSummaryButtons = $searchSummaryTarget.find("a");
                    $searchSummaryButtons.bind("click", searchSummaryButton_Click);
                    $self.enableBehavior();
                    $self.show();
                } else {
                    $self.hide();
                }
                if (event) event.stopPropagation();
            }

            function searchSummaryButton_Click(event) {
                var targetElementId = $(this).attr("_targetelementid");
                var $targetElement = $("#" + targetElementId);
                var typeIdentifier = $targetElement.attr("nodeName") + "_" + $targetElement.attr("type");
                switch (typeIdentifier.toLowerCase()) {
                    case 'p_autocompletextab':
                        // AutocompleteXtab (not implemented)
                        //var $container = $('#' + targetElement.attr("_container"))[0];
                        //var valueToRemove = targetElement.attr("_value");
                        //Relational.AutocompleteXtab.remove($container, valueToRemove);
                        break
                    case 'input_text':
                        // Textbox: clear out
                        $targetElement.val('');
                        break
                    case 'input_checkbox':
                        // Checkbox: uncheck
                        $targetElement[0].checked = false;
                        break
                    case 'div_rangefilter':
                        // Range filter: clear
                        $targetElement.trigger("clear");
                        break
                }
                $(this).fadeOut('normal', function () {
                    triggerSearch();
                });
                if (event) event.preventDefault();
            }

            function clearFilterButton_Click(event) {
                $facetSearch.trigger("clear");
                if (event) event.preventDefault();
            }

            function triggerSearch() {
                // Tell our wrapper to perform search
                var t = setTimeout(function () {
                    $facetSearch.trigger("stateChanged")
                }, 1); // Perform search asynchronously (so that other stuff, like the checkbox getting checked, happens without a delay)
            }


        }); // each

        return this; // don't break the chain

    }; // $.fn.facetFilter

})(jQuery);



