/*jquery.cascade.ui.ext.js */
/*
 * jQuery UI cascade
 * version: 1.1 (5/20/2008)
 * @requires: jQuery v1.2 or later
 * adapted from Yehuda Katz, Rein Henrichs autocomplete plugin
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *  depends on templating  plugin if using with templateText
 * Copyright 2008 Mike Nichols
 */

; (function($) {
    $.ui = $.ui || {};
    $.ui.cascade = $.ui.cascade || {};
    $.ui.cascade.ext = $.ui.cascade.ext || {};
    $.ui.cascade.event = $.ui.cascade.event || {};

    $.ui.cascade.ext.ajax = function(opt) {
        var ajax = opt.ajax; //ajax options hash...not just the url
        return { getList: function(parent) {
            var _ajax = {};
            var $this = $(this); //child element
            var defaultAjaxOptions = {
                type: "GET",
                dataType: "json",
                success: function(json) { $this.trigger("updateList", [json]); },
                data: $.extend(_ajax.data, ajax.data, { val: opt.getParentValue(parent) })
            };
            //overwrite opt.ajax with required props (json,successcallback,data)		
            //this lets us still pass in handling the other ajax callbacks and options
            $.extend(_ajax, ajax, defaultAjaxOptions);

            $.ajax(_ajax);
        } 
        };
    };

    $.ui.cascade.ext.templateText = function(opt) {
        var template = $.makeTemplate(opt.templateText, "<%", "%>");
        return { template: function(obj) { return template(obj); } };
    };

    /*these events are bound on every instance...so the indicator appears  on each target */
    /* 
    *	CSS: .cascade-loading: { background: transparent url("${staticDir}/Content/images/indicator.gif") no-repeat center; }
    */
    $.ui.cascade.event.loading = function(e, source) {
        $(this).empty();
        var position = {
            'z-index': '6000',
            'position': 'absolute',
            'width': '16px'
        };
        $.extend(position, $(this).offset());
        position.top = position.top + 3;
        position.left = position.left + 3;
        $("<div class='cascade-loading'>&nbsp;</div>").appendTo("body").css(position);
        $(this)[0].disabled = true;
    };
    $.ui.cascade.event.loaded = function(e, source) {
        $(this)[0].disabled = false;
        $(".cascade-loading").remove();
    };

})(jQuery);