(function($){
 /*
  Load ajax content for a link.
  */
  $.fn.ajaxContent = function (config) {
    config = $.extend({
      replaceThis : null,
      replacement : null,
      postback : null,
      append: false,
      onClick: false,
      args: null,
      callback: null
    }, config || {});
    
    var links = $(this);
    
    if (links.size() > 1) {
      links.each(function() {
        $(this).ajaxContent(config);
      });
    }
    else if (links.size() == 1) {
      var link = $(this);
      
      var executeMe = function(config) {
        config.replaceThis = config.replaceThis == null ? link : $.isFunction(config.replaceThis) ? config.replaceThis() : $(config.replaceThis);
        config.replacement = config.replacement == null  ? $("<div></div>") : $.isFunction(config.replacement) ? config.replacement() : $(config.replacement);
        
        if (link.attr("href") != null) {
          var url = link.attr("href") ;
          url += (url.contains("?") ? "&" : "?") + "ajax=true" + (config.args ? "&" + config.args : "");
          if (link.attr("content_loaded")) {
            url += link.attr("content_loaded");
          } 
          if (url.contains('/get.aspx')) {
            url = url.replace('/get.aspx', '/read.aspx');
          }
          
          var replacement = config.replacement;

          $.get(url, "", function(data, status, xmlHttpRequest) {
            if ((xmlHttpRequest == null && status == "success") || (xmlHttpRequest != null && xmlHttpRequest.status == 200)) {
              if (!data.contains('dontprocess')) {
                if (!config.append) {
                  config.replaceThis.replaceWith(replacement);
                }
                else {
                  config.replaceThis.append(replacement);
                }
                
                replacement.append(data);
          
                if (config.postback != null && replacement.find("input[name=dontchangepostback]").attr("value") != 'true') {
                  // Set postback value
                  replacement.find("input[name=postback]").attr("value", config.postback);
                }
                
                link.attr("content_loaded", "&content_loaded=true");
                
                if (config.callback != null && $.isFunction(config.callback)) {
                  config.callback.apply(replacement);
                }
              }
            }
          });
        }
      };
      
      if (config.onClick) {
        link.click(function() {
          executeMe(config);
          return false;
        });
      }
      else {
        executeMe(config);
      }
    }
  };
})(jQuery); 
