﻿
jQuery.attachJSONControlEventHandlers = function (categoryURLs,
                                                  subcategoryURLs,
                                                  selectCategory,
                                                  selectSubcategory,
                                                  selectObjects,
                                                  selectChosenObjects,
                                                  btnChooseAll,
                                                  btnChoose,
                                                  btnRemove,
                                                  btnRemoveAll,
                                                  txtNumbers) {


    $(txtNumbers).keyup(function (event) {
        var url = $(categoryURLs + " option[value=txtNumbers]").text();
        $.post(url, { numbers: $(txtNumbers).val() }, function (data, textStatus) {
            $(selectChosenObjects).find("option").remove();
            $.populateSelect(selectChosenObjects, data);
        }, "json");
    });

    $(selectCategory).click(function () {
        $(selectObjects).find("option").remove();
        $(selectSubcategory).find("option").remove();
        var selectedValue = new String($(this).val());
        if (selectedValue == "all" || selectedValue == "comp" || selectedValue == "open" || selectedValue == "closed") {
            $(selectChosenObjects).find("option").remove();
            $.addSelection(selectChosenObjects, { value: $(selectCategory).val(), text: $(selectCategory + ' :selected').text() });
        }
        else {
            var url = $(categoryURLs + " option[value=" + selectedValue + "]").text();
            var selectList = selectObjects;
            if (selectedValue.indexOf("sub-") > -1) {
                selectList = selectSubcategory;
            }
            $.post(url, {}, function (data, textStatus) {
                $(selectObjects).find("option").remove();
                $(selectSubcategory).find("option").remove();
                $.populateSelect(selectList, data);
            }, "json");
        }
    });

    $(selectSubcategory).click(function () {
        $(selectObjects).find("option").remove();
        if ($(selectSubcategory + ' :selected').text() == "next 100...") {
            var url = $(this).val();
            $(this).find("option").remove();
            $.post(url, {}, function (data, textStatus) {
                $.populateSelect(selectSubcategory, data);
            }, "json");
        }
        else {
            var subCategoryURL = $(subcategoryURLs + " option[value=" + $(selectCategory).val() + "]").text();
            $.post(subCategoryURL, { id: $(this).val(), ajax: 'true' }, function (data, textStatus) {
                $(selectObjects).find("option").remove();
                $.populateSelect(selectObjects, data);
            }, "json");
        }
    });

    $(selectObjects).dblclick(function () {
        $(selectObjects + " :selected").each(function () {
            var selectedValue = new String(this.value);
            if (selectedValue != "null") {
                $(selectChosenObjects + " option[value=" + this.value + "]").remove();
                $.addSelection(selectChosenObjects, { value: this.value, text: this.text });
            }
        });
    });

    $(selectChosenObjects).dblclick(function () {
        $(selectChosenObjects + " :selected").remove();
    });

    $(btnChooseAll).click(function () {
        $(selectObjects).find("option").each(function () {
            $(selectChosenObjects + " option[value=" + this.value + "]").remove();
            $.addSelection(selectChosenObjects, { value: this.value, text: this.text });
        });
    });

    $(btnChoose).click(function () {
        $(selectObjects + " :selected").each(function () {
            var selectedValue = new String(this.value);
            if (selectedValue != "null") {
                $(selectChosenObjects + " option[value=" + this.value + "]").remove();
                $.addSelection(selectChosenObjects, { value: this.value, text: this.text });
            }
        });
    });

    $(btnRemove).click(function () {
        $(selectChosenObjects + " :selected").remove();
    });

    $(btnRemoveAll).click(function () {
        $(selectChosenObjects).find("option").remove()
    });
};

jQuery.populateSelect = function (selectId, data) {
    var dropdownList = $(selectId)[0];
    if ($(data).size() == 0) {
        $.addOption(dropdownList, new Option("none found", "none-found"));
    }
    else {
        $.each(data, function () {
            $.addOption(dropdownList, new Option(this.text, this.value));
        });
    }
    $("select option").each(function (i) {
        this.title = this.text;
    })
    $("select").tooltip({
        left: 25
    });
};

jQuery.addSelection = function (selectId, selection) {
    var dropdownList = $(selectId)[0];
    if (selection.value != "none-found") {
        $.addOption(dropdownList, new Option(selection.text, selection.value));
    }
};

jQuery.addOption = function (dropdownList, optionToAdd) {
    $(optionToAdd).title = $(optionToAdd).text;
    if ($.browser.msie) {
        dropdownList.add(optionToAdd);
    }
    else {
        dropdownList.add(optionToAdd, null);
    }
    
    //$(dropdownList).tooltip();
};

