(function ($) {
    $.fn.selectChain = function (options) {
        var defaults = {
            key: "id",
            value: "label"
        };
        
        var settings = $.extend({}, defaults, options);
        
        if (!(settings.target instanceof $)) settings.target = $(settings.target);
        
        return this.each(function () {
            var $$ = $(this);
            
            $$.change(function () {
//                var partners = document.getElementById("partners");
//                var partners_val = partners.options[partners.selectedIndex].value;
//                var partners_text = '';
//                if (partners_val == -1)
//                    partners_text = partners.options[1].text;
//                else
//                    partners_text = partners.options[partners.selectedIndex].text;
//                document.getElementById('partners_value').innerHTML = partners_text;

                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();
                }
                
                settings.target.empty();

                var value = '';
                var text = '';
                var array_text = {0:''};
                var array_value = {0:''};
                var selected_value = '';
                var array_selected_value = '';

                $.ajax({
                    url: settings.url,
                    data: data,
                    type: (settings.type || 'get'),
                    dataType: 'json',
                    success: function (j) {
                        var options = [], i = 0, o = null;
                        selected_value = '';
                        
                        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");
                            value = typeof j[i] == 'object' ? j[i][settings.key] : j[i];
                            text = typeof j[i] == 'object' ? j[i][settings.value] : j[i];

                            if(parseInt(value) == -1) {
                                array_text = text.split(':');
                                document.getElementById('prepaid_value'+array_text[0]).innerHTML = array_text[1];
                            }else if(parseInt(value) == -2) {
                                array_text = text.split(':');
                                document.getElementById('term_value'+array_text[0]).innerHTML = array_text[1];
                            }else if(parseInt(value) == -3) {
                                array_text = text.split(':');
                                document.getElementById('month_value'+array_text[0]).innerHTML = array_text[1]+' tháng';
                            }else {
                                o.value = value;
                                o.text = text;

                                array_value = value.split('|');                                
                                if(parseInt(array_value[1]) == 5 && parseInt(array_value[0]) == 24)
                                    selected_value = value;
                                else if(parseInt(array_value[1]) == 3 && parseInt(array_value[0]) == 12)
                                    selected_value = value;

                                settings.target.get(0).options[i] = o;
                            }
                        }

			// hand control back to browser for a moment
			setTimeout(function () {
                            array_selected_value = selected_value.split('|');
                            if(selected_value != '' && (parseInt(array_selected_value[2]) == 0 || parseInt(array_selected_value[2]) > 999))
                                settings.target
                                    .find("option[value='"+selected_value+"']")
                                    .attr('selected', 'selected')
                                    .parent('select')
                                    .trigger('change');
                            else
                                settings.target
                                    .find("option:first")
                                    .attr('selected', 'selected')
                                    .parent('select')
                                    .trigger('change');
			}, 0);
                    },
                    error: function (xhr, desc, er) {
                        // add whatever debug you want here.
//			alert("an error occurred");
                    }
                });
            });
        });
    };
    $.fn.selectChain_ = function (options) {
        var defaults = {
            key: "id",
            value: "label"
        };

        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() + '&price=' + parseInt($("#price_").val());
                } else if (typeof settings.data == 'object') {
                    data = settings.data;
                    data[this.name] = $$.val();
                    data['price'] = parseInt($("#price_").val());
                }

                settings.target.empty();

                var value = '';
                var text = '';
                var array_value = {0:''};
                var selected_value = '';
                var array_selected_value = '';

                $.ajax({
                    url: settings.url,
                    data: data,
                    type: (settings.type || 'get'),
                    dataType: 'json',
                    success: function (j) {
                        var options = [], i = 0, o = null;
                        selected_value = '';
                        
                        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");
                            value = typeof j[i] == 'object' ? j[i][settings.key] : j[i];
                            text = typeof j[i] == 'object' ? j[i][settings.value] : j[i];
                            if(parseInt(value) == -1) {
                            }else if(parseInt(value) == -2) {
                                document.getElementById('term_value_').innerHTML = text;
                            }else {
                                o.value = value;
                                o.text = text;

                                array_value = value.split('|');
                                if(parseInt(array_value[1]) == 5 && parseInt(array_value[0]) == 24)
                                    selected_value = value;
                                else if(parseInt(array_value[1]) == 3 && parseInt(array_value[0]) == 12)
                                    selected_value = value;

                                settings.target.get(0).options[i] = o;
                            }
                        }

			// hand control back to browser for a moment
			setTimeout(function () {
			    array_selected_value = selected_value.split('|');
                            if(selected_value != '' && (parseInt(array_selected_value[2]) == 0 || parseInt(array_selected_value[2]) > 999))
                                settings.target
                                    .find("option[value='"+selected_value+"']")
                                    .attr('selected', 'selected')
                                    .parent('select')
                                    .trigger('change');
                            else
                                settings.target
                                    .find("option:first")
                                    .attr('selected', 'selected')
                                    .parent('select')
                                    .trigger('change');
			}, 0);
                    },
                    error: function (xhr, desc, er) {
                        // add whatever debug you want here.
//			alert("an error occurred");
                    }
                });
            });
        });
    };
})(jQuery);

