	var sermondrop = {
	  build: function(widget_type, container, config){
        var _widget = container;
        jQuery(_widget).hide();
        sermondrop.loadCSS(config["style_url"]);
        jQuery(_widget).append(sermondrop.widget[widget_type].get());

        jQuery.getJSON(config['url'] + '?akey=' + config['api_key'] + '&wkey=' + sermondrop.widget[widget_type].key + '&jsoncallback=?', null, function(widget_data) {
          if ( widget_data.status == "success" )
          {
            var url_data = sermondrop.parseUrl(config['url']);
            var base_url = url_data['protocol'] + "://" + url_data['host'];
            var sermons_url = config['url'].replace(/.json/, '');

            var directives = {
              "a.widget-title[href]": function(data){ return sermons_url},
              "a.rss-icon[href]": function(data){ return sermons_url + ".rss"},
              ".sermon": "s <- sermons",
              ".sermon .title": "#{s.title}", 
              ".sermon .recorded_at": "#{s.recorded_at}",
              ".sermon .description": "#{s.description}",
              ".sermon .speaker": "#{s.speaker}",
              ".sermon .series-title": function(data){ return (data.item.series == null) ? "" : data.item.series.title},
              ".sermon .series-url[href]": function(data){ return (data.item.series == null) ? "" : data.item.series.url},
              ".sermon .reference": "#{s.reference}",
              ".sermon .sermon-url[href]": "#{s.url}",
              ".sermon .widget-player[id]": function(data){ return (data.item.podcast == null) ? "" :  "play-" + data.item.id + "-container"},
              ".sermon .podcast[href]": function(data){ return (data.item.podcast == null) ? "" :  data.item.podcast.url },
              ".sermon .podcast-filename": function(data){ return (data.item.podcast == null) ? "" :  data.item.podcast.filename },
              ".sermon .podcast-download[href]": function(data){ return (data.item.podcast == null) ? "" :  data.item.podcast.url },
              ".sermon .artwork[style]": function(data){ return (data.item.artwork == null) ? "background-image: url(" + widget_data.default_artwork_small + ");" : "background-image: url(" + data.item.artwork.small + ");"},
              ".sermon .artwork-medium[style]": function(data){ return (data.item.artwork == null) ? "background-image: url(" + widget_data.default_artwork_medium + ");" : "background-image: url(" + data.item.artwork.medium + ");"},
              ".sermon .artwork-large[style]": function(data){ return (data.item.artwork == null) ? "background-image: url(" + widget_data.default_artwork_large + ");" : "background-image: url(" + data.item.artwork.large + ");"},
              ".tag": "t <- s.tags",
              ".tag .tag-name": "#{t.name}",
              ".tag .tag-url[href]": "#{t.url}",
              ".resource": "r <- s.resources",
              ".resource .resource-name": "#{r.display_name}",
              ".resource .resource-url[href]": "#{r.url}"
            }


            if (config['title'] != null){
              jQuery(".widget-title", _widget).html(config['title']);
            }


            jQuery(_widget).render(widget_data, directives);
            jQuery("#pureMsg", _widget).html("");

            // Flowplayer 3
            jQuery("#" + _widget.id + " a.widget-player").each(function(i){
              var bg = sermondrop.extractBackgroundImageUrl(jQuery(this).css("background-image").replace(/\?.*/, ')'));
              var p = jQuery(this).flowplayer(base_url + "/swf/flowplayer-3.0.7.swf", 
              {
                plugins: {
                  controls: null,
                  audio: { 
                      url: '/swf/flowplayer.audio-3.0.4.swf' 
                  }
                },
                clip: {
                  autoPlay: true
                },
                playlist: [bg, jQuery(this).attr("href")]
              });
              $f(p[0]).controls(jQuery(this).parent().parent().find(".controls")[0]);
              $f(p[0]).onBegin(function() {
                sermondrop.widget[widget_type].playerOnBegin(this, _widget);
              });
            });


            sermondrop.widget[widget_type].widgetOnLoad(_widget);
          }
          else
          {
            sermondrop.widget[widget_type].widgetOnError(_widget, widget_data.error);
          }
          jQuery("#" + _widget.id).show();
        });
    	},
    	
    	setup: function(){
    	  sermondrop.loadLibs(["pure", "flowplayer-3.0.6.min", "flowplayer.controls-3.0.1.pack"]);
    	  if (jQuery.browser.msie) {
          sermondrop.pause(1000);
        }
    	},


    	loadCSS: function(url){
        // Write the stylesheet into the <head>
        myHead = document.getElementsByTagName("head")[0];
        myCSS = document.createElement("link");
        myCSS.setAttribute("rel","stylesheet");
        myCSS.setAttribute("type","text/css");
        myCSS.setAttribute("href", url);
        jQuery(myHead).prepend(myCSS); // Prepend so host pages can override.
      },


      loadLibs: function(libs, path) {  
        
        if ( path == undefined ){
          // If path not provided,
          // get by looking at our main .js already included in the web-page.
          var myScriptsDefs = document.getElementsByTagName("script");
          for (var i=0; i < myScriptsDefs.length; i++) {
            if (myScriptsDefs[i].src && myScriptsDefs[i].src.match(/sermondrop_widget\.js/)) {
              path = myScriptsDefs[i].src.replace(/sermondrop_widget\.js.*/, '');
            };
          };
        }

      	for (var i=0; i < libs.length; ++i) {
            jQuery.getScript(path + libs[i] + ".js");
      	}
      },


      parseUrl: function(data) {
          var e=/^((http|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+\.[^#?\s]+)(#[\w\-]+)?$/;

          if (data.match(e)) {
              return  {url: RegExp['$&'],
                      protocol: RegExp.$2,
                      host:RegExp.$3,
                      path:RegExp.$4,
                      file:RegExp.$6,
                      hash:RegExp.$7};
          }
          else {
              return  {url:"", protocol:"",host:"",path:"",file:"",hash:""};
          }
      },
      
      extractBackgroundImageUrl: function(aUrl)  
      {  
        var regExp = /^url\("?(.*?)"?\)$/i;  
        var matches = regExp.exec(aUrl);  

        if(matches == null || typeof matches[1] == "undefined")  
        return null;  

        return matches[1];  
      },
      
      pause: function(millis)
      {
      var date = new Date();
      var curDate = null;

      do { curDate = new Date(); }
      while(curDate-date < millis);
      }
	};
	if (sermondrop.widget == undefined){ sermondrop.widget = new Object; }

(function($){
	jQuery.fn.sermondrop = function(options){
	  var widget_config = new Object;
    widget_config['url'] = options.url;
    widget_config['style_url'] = options.style_url;
    widget_config['api_key'] = options.api_key;
    widget_config['title'] = options.title;
	  sermondrop.widget[options.type].build(this[0], widget_config);
	};
})(jQuery);
	
  sermondrop.widget["sidebar"] = {
    "key": "19bd1503d9bad449304cc6b4e977b74bac6cc771",
    
    get: function(){
      var str='';
      str+='<div class="header">';
      str+='	<a href="" class="widget-title">Recent Sermons<\/a>';
      str+='	<a href="" class="rss-icon">rss<\/a>';
      str+='<\/div>';
      str+='<div class="scrollable">';
      str+='<div id="sermons" class="items">';
      str+='	<div class="sermon">';
      str+='	<div class="player-container">';
      str+='			<a href="" class="podcast widget-player artwork">';
      str+='        <span class="play-overlay">Play<\/span>';
      str+='			<\/a>';
      str+='	<\/div>';
      str+='	<div class="sermon-details-container">';
      str+='		<div class="title">[title]<\/div>';
      str+='		<div class="recorded_at">[date]<\/div>';
      str+='		<div class="series-title">[series]<\/div>';
      str+='		<div class="speaker">[speaker]<\/div>';
      str+='	<\/div>';
      str+='	<div style="clear: both;">';
      str+='	<\/div>';
      str+='	<div class="controls">';
      str+='	<\/div>';
      str+='	<\/div>';
      str+='<\/div>';
      str+='<\/div>';
      str+='<span class="logo">Sermondrop</span>';
      str+='<a class="prev disabled"> <\/a>';
      str+='<a class="next disabled"> <\/a>';
      str+='<div id="pureMsg" style="display: none;"> <\/div>';
      return str;
    },
    
    setup: function(){
      // setup base loader and load support libraries
      sermondrop.setup();
      sermondrop.loadLibs(["jquery.scrollable-1.0.1.pack", "jquery.mousewheel.pack"]);
      },
      
    build: function(container, config){
      this.setup();
      jQuery(container).addClass("sermondrop-sidebar-container")
      sermondrop.build("sidebar", container, config);
      },
      
    playerOnBegin: function(player, container){
      jQuery('#' + container.id + ' div.scrollable').css("height", "327px"); 
      jQuery('#' + container.id + ' #sermons .active').removeClass("active");
      jQuery(player.getParent()).parent().parent().addClass("active");
      },
      
    widgetOnLoad: function(container){
      jQuery('#' + container.id + ' .sermon').hover(function(){
        jQuery(".play-overlay", this).fadeTo(10, 1);
        jQuery(this).addClass('hover');
      }, function() {
        jQuery(".play-overlay", this).fadeTo(10, 0.1);
        jQuery(this).removeClass('hover');
      }).find(".play-overlay").css({opacity:0.1});
      
      
      jQuery('#' + container.id + ' .sermon-details-container').click(function() {
        var player = $f(jQuery(this).parent().find("a.widget-player")[0]);
        if (player.isLoaded()){
          player.toggle();
        }
        else
        {
          player.play();
        }
      });
      jQuery('#' + container.id + ' div.scrollable').scrollable({vertical:true, size: 4});
    },
    
    widgetOnError: function(container, error){
      jQuery("#" + container.id + ' div.scrollable').html("<span class='error'>" + error + "</span>");
    }
    };
    
    
    sermondrop.widget["canvas"] = {
      "key": "7aa15835f0fb66193cee09677a16773e39acee87",

      get: function(){
        var str='';
        str+='<div class="header">';
        str+='	<a href="" class="widget-title">Recent Sermons<\/a>';
        str+='	<a href="" class="rss-icon">rss<\/a>';
        str+='<\/div>';
        str+='<ul id="sermons">';
        str+='	<li class="sermon">';
        str+='	<div class="player-container">';
        str+='		<a href="" class="podcast widget-player artwork-medium"><span class="play-overlay">Play<\/span><\/a>';
        str+='	<\/div>';
        str+='	<div class="sermon-details-container">';
        str+='		<div class="title">[title]<\/div>';
        str+='		<div class="recorded_at">[date]<\/div>';
        str+='		<div class="series"><a href="" class="series-url"><span class="series-title">[series]<\/span></a></div>';
        str+='		<div class="reference">[reference]<\/div>';
        str+='		<div class="speaker">[speaker]<\/div>';
        str+='		<ul class="tags"><li class="tag"><a href="" class="tag-url"><span class="tag-name"></span></a>&nbsp;</li><\/ul>';
        str+='		<a class="podcast-download" href=""><span class="podcast-filename"> (download)</span><\/a>';
        str+='		<ul class="resources"><li class="resource"><a href="" class="resource-url"><span class="resource-name"></span></a>&nbsp;</li><\/ul>';
        str+='	<\/div>';
        str+='	<div style="clear: both;">';
        str+='	<\/div>';
        str+='	<div class="controls">';
        str+='	<\/div>';
        str+='	<\/li>';
        str+='<\/ul>';
        str+='<div id="pureMsg" style="display: none;"> <\/div>';
        return str;
      },

      setup: function(){
        // setup base loader and load support libraries
        sermondrop.setup();
        },

      build: function(container, config){
        this.setup();
        jQuery(container).addClass("sermondrop-canvas-container")
        sermondrop.build("canvas", container, config);
        },

      playerOnBegin: function(player, container){
        jQuery('#' + container.id + ' #sermons .active').removeClass("active");
        jQuery(player.getParent()).parent().parent().addClass("active");
        },

      widgetOnLoad: function(container){
        jQuery('#' + container.id + ' .sermon').hover(function(){
          jQuery(".play-overlay", this).fadeTo(10, 1);
          jQuery(this).addClass('hover');
        }, function() {
          jQuery(".play-overlay", this).fadeTo(10, 0.1);
          jQuery(this).removeClass('hover');
        }).find(".play-overlay").css({opacity:0.1});
      },

      widgetOnError: function(container, error){
        jQuery("#" + container.id).html("<span class='error'>" + error + "</span>");
      }
      };    