jQuery.fn.ajax_toggle = function(url){
  var $this = jQuery(this);
  var $container = $this.prev('div.ajax_toggle_container');
  if ($container.size()<1) {
    $this.before('<div class="ajax_toggle_container"><img style="display:block; margin:0 auto;" class="loader48" src="/images/blank.gif"/></div>');
    $container = $this.prev('div.ajax_toggle_container');
    $container.load(url,null,function(){
      $container.find('a.cancel').click(function(){
        $container.hide();
        $this.show();
      });
    });
  }
  $this.hide();
  $container.show();
  return $this;
}

jQuery.fn.rest = function(method,data,options) {
  var ajax_args = {dataType: 'script'}
  if (!options) options = {};
  if (options.url) ajax_args.url = options.url
  else if (this.is('a')) ajax_args.url = '/'+this[0].href.replace(/http:\/\/.+?\//,'')
  else if (this.is('form')) {
    ajax_args.url = this[0].action;
    data = this.serialize();
		var $submit_container = this.find('div.submit');
		if ($submit_container.size()>0) {
			$submit_container.wrapInner('<div class="ajax_toggle_container" style="display:none"></div>');
			$submit_container.append('<img class="loader24" src="/images/blank.gif"/>');
		}
  }
  if (!data) data = {};
  if (method=='get' || method=='post') ajax_args.type = method;
  else {
    ajax_args.type = 'POST';
    if (typeof( data ) == 'string') data = '_method=' + method + '&' + data;
    else data['_method'] = method;
  }
  ajax_args.data = data;
  jQuery.ajax(ajax_args);
  return this;
}

jQuery.fn.ajax_updating_toggle = function() {
  return this.each(function(){
    var $this = jQuery(this);
    /* initialize containter */
    if (!$this.parent().is('.ajax_updating')) {
      $this.wrap('<div class="ajax_updating"></div>');
    }
    if ($this.parent().find('img.ajax_updating').length<1) {
      $this.after('<img style="display:none" class="ajax_updating" src="/images/ajaxload.gif"/>');
    } 
    /* toggle */
    var $img = $this.parent().find('img.ajax_updating');
    if ($img.is(':visible')) {
      $this.parent().children().show();
      $img.hide();
    } else {
      $this.parent().children().hide();
      $img.show();
    }
  });
}

