﻿/// <reference path="jquery-1.2.6-vsdoc.js"/>
(function($) {
    $.fn.selectChain = function(options) {
        var defaults = {
            key: "Id",
            value: "Name"
        };

        var settings = $.extend({}, defaults, options);

        if (!(settings.target instanceof $)) settings.target = $(settings.target);

        return this.each(function() {
            var $$ = $(this);

            $$.change(function() {
                var data = null;
                if (typeof settings.data == 'string') {
                    data = settings.data + '&' + this.name + '=' + $$.val();
                } else if (typeof settings.data == 'object') {
                    data = settings.data;
                    data[this.name] = $$.val();
                }

                //Skopowianie jak brzmi text "Wybierz"
                var text = 'Wybierz'//settings.target.get(0).options[0].text;

                //Zablokowanie selecta i włączenie animacji czekania
                var position = {
                    'z-index': '6000',
                    'position': 'absolute',
                    'width': '16px'
                };
                $.extend(position, settings.target.offset());
                position.top = position.top + 3;
                position.left = position.left + 3;
                $("<div class='cascade-loading'>&nbsp;</div>").appendTo("body").css(position);
                settings.target.get(0).options[0].text = '';
                settings.target.attr('disabled', 'disabled');

                $.ajax({
                    url: settings.url,
                    data: data,
                    type: (settings.type || 'get'),
                    dataType: 'json',
                    success: function(j) {

                        settings.target.empty();

                        var options = [], i = 0, o = null;
                        var tidold = $('#' + settings.target.attr('id') + 'h');
                        var tidoldval = tidold.val();

                        //Wstawienei elementu z opisem "wybierz".
                        o = document.createElement("OPTION");
                        o.text = text;
                        o.value = '';
                        settings.target.get(0).options[0] = o;

                        //Wstawienie elementów z requestu.
                        for (i = 0; i < j.length; i++) {
                            // required to get around IE bug (http://support.microsoft.com/?scid=kb%3Ben-us%3B276228)
                            o = document.createElement("OPTION");
                            o.value = typeof j[i] == 'object' ? j[i][settings.key] : j[i];
                            o.text = typeof j[i] == 'object' ? j[i][settings.value] : j[i];
                            settings.target.get(0).options[i + 1] = o;
                            if (tidoldval == o.value) {
                                settings.target.get(0).selectedIndex = i + 1;
                                tidold.val('');
                            }
                        }

                        $(".cascade-loading").remove();
                        if (j.length > 0)
                            settings.target.removeAttr('disabled');
                    },
                    error: function(xhr, desc, er) {
                        // add whatever debug you want here.
                        alert("an error occurred");
                    }
                });
            });
        });
    };
})(jQuery);
 
