/*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);