﻿(function() {
    var Leetchi = {};
    if (window.Leetchi != null)
        Leetchi = window.Leetchi;
    else
        window.Leetchi = Leetchi;

    Leetchi.Selector = function(item, title, queryURL, selectedCallback) {
        if (!Leetchi.Selector.Dialog) {
            var divElement = document.createElement("DIV");
            Leetchi.Selector.Dialog = $(divElement);
            var selector = Leetchi.Selector.Dialog;
            selector.css("text-align", "left");
            selector.html("<strong>Recherche:</strong><br />" +
                "<input id=\"txtLeetchiSelectorSearch\" type=\"text\"></input>" +
                "<input id=\"btnLeetchiSelectorSearch\" type=\"button\" value=\"Filtrer\"></input>" +
                "<strong>Résultats:</strong><br />" +
                "<div id=\"divLeetchiSelectorResults\"></div><br />" +
                "<a id=\"lnkLeetchiSelectorResultsPrev\" href=\"#\">Précédents</a> " +
                "<a id=\"lnkLeetchiSelectorResultsNext\" href=\"#\">Suivants</a> "
                );
            document.body.appendChild(divElement);
            selector.txtSearch = $("#txtLeetchiSelectorSearch");
            selector.btnSearch = $("#btnLeetchiSelectorSearch");
            selector.divResults = $("#divLeetchiSelectorResults");
            selector.btnPrev = $("#lnkLeetchiSelectorResultsPrev");
            selector.btnNext = $("#lnkLeetchiSelectorResultsNext");
            function clearResults() {
                selector.divResults.empty();
                selector.btnPrev.hide();
                selector.btnNext.hide();
            };
            function selectItem(item) {
                selector.dialog("close");
                Leetchi.Selector.Dialog.activeSearch.callBack(item);
            };
            function selectItemCallback(item) {
                return function() { selectItem(item); };
            };
            function populateResults(query) {
                return function(results) {
                    selector.activeSearch.lastResult = {
                        query: query,
                        pageNumber: results.pageNumber
                    };
                    if (results.pageNumber > 1)
                        selector.btnPrev.show();
                    if (results.pageNumber < results.totalPages)
                        selector.btnNext.show();
                    results = results.items;
                    for (var i = 0; i < results.length; i++) {
                        var resultLink = $(document.createElement("A"));
                        var result = results[i];
                        resultLink.attr("href", "#");
                        resultLink.text(results[i].text);
                        resultLink.click(selectItemCallback(result));
                        resultLink.appendTo(selector.divResults);
                        selector.divResults.append(document.createElement("BR"));
                    };
                };
            };
            function startSearch() {
                clearResults();
                var query = selector.txtSearch.val();
                selector.activeSearch.query(query, 1, populateResults(query));
            };
            selector.btnPrev.click(function() {
                selector.activeSearch.query(query,
                    selector.activeSearch.lastResult.query,
                    selector.activeSearch.lastResult.pageNumber - 1,
                    populateResults(selector.activeSearch.lastResult.query));
            });
            selector.btnNext.click(function() {
                selector.activeSearch.query(query,
                    selector.activeSearch.lastResult.query,
                    selector.activeSearch.lastResult.pageNumber + 1,
                    populateResults(selector.activeSearch.lastResult.query));
            });
            selector.btnSearch.click(startSearch);
            selector.txtSearch.bind('keypress', function(e) {
            if ((e.keyCode ? e.keyCode : e.which) == 13)
                    startSearch();
            });
            selector.dialog({
                bgiframe: true,
                autoOpen: false,
                height: 420,
                width: 400,
                modal: true,
                buttons: {
                    Aucun: function() {
                        selectItem();
                    },
                    Annuler: function() {
                        $(this).dialog('close');
                    }
                },
                close: function() {
                    clearResults();
                }
            });
            clearResults();
        };

        var selectorDefinition = {
            query: function(text, page, cb) {
                $.post(queryURL + "?pageNumber=" + page, { query: text }, function(text) {
                    cb(text);
                }, "json");
            },
            callBack: selectedCallback
        };
        $(item).click(function() {
            Leetchi.Selector.Dialog.activeSearch = selectorDefinition;
            Leetchi.Selector.Dialog.dialog("option", "title", title);
            Leetchi.Selector.Dialog.dialog("open");
        });
    };
})();
