<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs
      title="Amazing Internet deals!"
      height="300"
      width="300"
      description="Shows hot deals from various deal-a-minute or deal-a-day type sites. Displays top X most recent deals from each site. Currently supports woot.com, wine.woot.com, shirt.woot.com, sellout.woot.com, slickdeals.net, tooliday.com, amazon.com, steepandcheap.com, tramdock.com, chainlove.com and whiskeymilitia.com. The number of deals displayed is configurable as well as the number of deals to fetch from each site."
      author="JJ"
      author_email="jorgenj.feedback+hot.deals@gmail.com"
      thumbnail="http://hosting.gmodules.com/ig/gadgets/file/116085860196335713682/hot-deals.png"
      screenshot="http://hosting.gmodules.com/ig/gadgets/file/116085860196335713682/hot-deals.png">
    <Require feature="setprefs" />
    <Require feature="dynamic-height" />
    <Require feature="settitle"/>
    <Require feature="minimessage" />
    <Require feature="analytics" />
  </ModulePrefs>
  <UserPref name="exclude_these_feeds" datatype="hidden"/>
  <UserPref name="num_deals_per_feed" display_name="# of deals per site" default_value="3"/>
  <UserPref name="num_deals_displayed" display_name="# of displayed" default_value="10"/>
  <UserPref name="random_order" display_name="Random order?" datatype="bool" default_value="true"/>
  <UserPref name="more_info_target" display_name="Show more info in..." datatype="enum" default_value="_blank">
    <EnumValue value="_blank" display_value="a new window"/>
    <EnumValue value="_parent" display_value="the same window"/>
  </UserPref>
  <UserPref name="lastmsg" datatype="hidden" default_value="0"/>

  <Content type="html">

<![CDATA[
<!--
  //TODO FIXME: Add tooliday feed
  //TODO FIXME: sort deals by age, unless random
  //TODO FIXME: sort deals by discount percent?
  //TODO FIXME: explore idea of showing percentage off, if retail price and discount price are available
  //TODO FIXME: spinner doesn't appear to actually be animated :(
  //TODO FIXME: pre-load ICO's so they don't show no-image icon until loaded
  //TODO FIXME: make yugster do scrape instead, the rss feed seems to be in the wrong order :(
  //TODO FIXME: make woot feed smarter about instock/outofstock
  //TODO FIXME: explore idea of hover-over product image or something?
-->

  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
  
  <div style="display: none" id="hidden_resources__MODULE_ID__">
    <img id="loader_gif__MODULE_ID__" src="http://hosting.gmodules.com/ig/gadgets/file/116085860196335713682/loader.gif"/>
    <img id="next_btn_img__MODULE_ID__" src="http://hosting.gmodules.com/ig/gadgets/file/116085860196335713682/deals-next.png"/>
    <img id="back_btn_img__MODULE_ID__" src="http://hosting.gmodules.com/ig/gadgets/file/116085860196335713682/deals-back.png"/>
    <div id="deal__MODULE_ID__">
      <img id="deal_icon__MODULE_ID__" src="#"/><span id="deal_index__MODULE_ID__"></span><a href="#" target="#" id="deal_link__MODULE_ID__"/>
    </div>
  </div>

<style type="text/css">
/** hide border around images **/
img { border-style: none; }

/** hide underlines for links **/
a { text-decoration:none; }

#deal_display__MODULE_ID__ { position: relative; margin-top: 3px; margin-bottom: 2px; padding-right: 2px; padding: 2px; border: solid 1px #666; background: #f5f5f5; text-align: left; font-size: 12px; white-space: nowrap; }
img#deal_icon__MODULE_ID__ { height: 16px; width: 16px; display: inline; position: relative; vertical-align: middle; }
#deal_index__MODULE_ID__ { vertical-align: super; padding-right: 2px; padding-left: 2px; font-size: xx-small; font-weight: bolder; position: relative; }
#deal_info__MODULE_ID__ { display: inline-block; position: relative; margin-right: 2px; margin-left: 2px; overflow: hidden; }
#filter_blocker__MODULE_ID__ { position: absolute; zIndex: 2001; background-color: grey; filter:alpha(opacity=40); opacity:.40; layout: ; left: 0; right: 0; top: 0; bottom: 0; width: 100%; height: 100%; }
#filters__MODULE_ID__ { background-color: #e8e8e8; border: 1px solid black; position: absolute; zIndex: 3001; left: 25px; right: 25px; bottom: 25px; padding: 10px; }
#filter_info__MODULE_ID__ { display: block; font-weight: bold; }
#filter_close__MODULE_ID__ { display: block; }
#left_nav__MODULE_ID__ { float: left; display: inline-block; position: relative; }
#right_nav__MODULE_ID__ { float: right; display: inline-block; position: relative; }
#next_btn__MODULE_ID__ { height: 18px; margin-left: 3px; margin-right: 3px; }
#back_btn__MODULE_ID__ { height: 18px; margin-left: 3px; margin-right: 3px; }

</style>

<div id="main_container__MODULE_ID__">
  <div id="deals__MODULE_ID__">
  </div>
  <div id="nav__MODULE_ID__">
    <div id="left_nav__MODULE_ID__">
      <a href='#' onClick='DealManager.refresh_feeds(); return false'>refresh</a>
      | <a href='#' onClick='FilterManager.show(); return false'>filter</a>
    </div>
    <div id="right_nav__MODULE_ID__">
      <a id="back_btn" href='#'><img src='http://hosting.gmodules.com/ig/gadgets/file/116085860196335713682/deals-back.png' id='back_btn__MODULE_ID__'/></a>
      <a id="next_btn" href='#'><img src='http://hosting.gmodules.com/ig/gadgets/file/116085860196335713682/deals-next.png' id='next_btn__MODULE_ID__'/></a>
    </div>
  </div>
</div>

<script type="text/javascript">
  var mini = new _IG_MiniMessage(__MODULE_ID__);
  var prefs = new _IG_Prefs(__MODULE_ID__);

	// Functions for handling miniMessages
	// -----------------------------------
	var lastmsg__MODULE_ID__ = prefs.getInt("lastmsg");
	function addMsg__MODULE_ID__(dt,text) {
		if (dt>lastmsg__MODULE_ID__) {
			var msg = mini.createDismissibleMessage(text,function(){ prefs.set("lastmsg",dt)});
			msg.style.color="black";
		}
	}
	// User Messages to alert of added features, etc
	// ---------------------------------------------
	addMsg__MODULE_ID__(2008120401,"2008-12-04: Added chainlove.com & tramdock.com deals.");
  addMsg__MODULE_ID__(2008120601,"2008-12-07: Added sellout.woot.com deals.");
  addMsg__MODULE_ID__(2008120901,"2008-12-09: Added tooliday.com deals.");


var spinner_img_url = "http://hosting.gmodules.com/ig/gadgets/file/116085860196335713682/loader.gif";

Array.prototype.shuffle = function (){
  for(var rnd, tmp, i=this.length; i; rnd=parseInt(Math.random()*i), tmp=this[--i], this[i]=this[rnd], this[rnd]=tmp);
};

//This prototype is provided by the Mozilla foundation and
//is distributed under the MIT license.
//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license

if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(elt /*, from*/) {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
    ? Math.ceil(from)
    : Math.floor(from);
    if (from < 0)
    from += len;

    for (; from < len; from++) {
      if (from in this && this[from] === elt)
        return from;
    }
    return -1;
  };
}

Array.prototype.contains = function(item) {
  return ( this.indexOf(item) >= 0 );
}

function DealDisplay() {
  var my_div = null;
};

DealDisplay.prototype.display_deal = function(deal,index) {
  var deal_obj = $('#hidden_resources__MODULE_ID__ #deal__MODULE_ID__').clone()
  deal_obj.children('#deal_icon__MODULE_ID__').attr('src',deal.icon_url);
  deal_obj.children('#deal_index__MODULE_ID__').text(index+1)

  var deal_link = deal_obj.children('#deal_link__MODULE_ID__')
  var deal_title = deal.title 
  if ( deal.price != null ) {
    deal_title = deal.price+" - "+ deal_title
  }

  deal_link.attr('href',deal.url).attr('target',prefs.getString('more_info_target')).html(deal_title)
  this.my_div.empty().append(deal_obj);
};

DealDisplay.prototype.display_message = function(message) {
  this.my_div.empty()
  this.my_div.html( $("<center/>").append(message) );
};

DealDisplay.prototype.add_self_to = function(container) {
  this.my_div = $("<div id='deal_display__MODULE_ID__'/>")
  container.append(this.my_div);

  this.display_message( $('<span/>').text(' Loading ...').prepend($('#loader_gif__MODULE_ID__').clone()) )
};

function log_info(msg) {
  if ( typeof console!="undefined" && typeof console.log=="function" ) {
    console.log(msg);
  }
}
function log_error(msg) {
  if ( typeof console!="undefined" && typeof console.error=="function" ) {
    console.error(msg);
  }
}
function log_warn(msg) {
  if ( typeof console!="undefined" && typeof console.warn=="function" ) {
    console.warn(msg);
  }
}
function log_debug(msg) {
  if ( typeof console!="undefined" && typeof console.debug=="function" ) {
    console.debug(msg);
  }
}

var DealManager = {
  deals: new Array(),
  deal_displays: new Array(),

  num_deals_showing: prefs.getInt("num_deals_displayed"),
  current_deal_showing: 0,

  add_deals: function( deals ) {
    DealManager.deals = DealManager.deals.concat(deals);

    if ( prefs.getBool("random_order") ) {
      DealManager.deals.shuffle();
    }
    DealManager.refresh_display();
    _IG_SetTitle(DealManager.deals.length+" amazing internet deals!");
  },

  init: function() {
    $('#nav__MODULE_ID__ #right_nav__MODULE_ID__ #back_btn').click(function(){ DealManager.prev_deal(); return false; })
    $('#nav__MODULE_ID__ #right_nav__MODULE_ID__ #next_btn').click(function(){ DealManager.next_deal(); return false; })
    $('#nav__MODULE_ID__ #left_nav__MODULE_ID__ #refresh_btn').click(function(){ DealManager.refresh_feeds(); return false; })
    $('#nav__MODULE_ID__ #left_nav__MODULE_ID__ #filter_btn').click(function(){ FilterManager.show(); return false; })

    deals_container = $('#deals__MODULE_ID__');
    for ( var i = 0; i < DealManager.num_deals_showing; i++ ) {
      disp = new DealDisplay();
      disp.add_self_to(deals_container);
      DealManager.deal_displays.push(disp);
    }

    _IG_AdjustIFrameHeight();
    DealManager.refresh_feeds();
  },

  refresh_feeds: function() {
    DealManager.deals = [];
    DealManager.current_deal_showing = 0;

    //kick off 3 feed loader chains, if we have many feeds to load
    if ( ALL_FEEDS.length > 3 ) {
      feeds_copy = [].concat(ALL_FEEDS);
      chains = [[],[],[]];
      var i = 0;
      while ( feeds_copy.length > 0 ) {
        chains[i%3].push(feeds_copy.shift());
        i++;
      }
      DealManager.load_feeds(chains[0]);
      DealManager.load_feeds(chains[1]);
      DealManager.load_feeds(chains[2]);
    } else {
      DealManager.load_feeds(ALL_FEEDS);
    }
  },

  load_feeds: function(feeds_to_load) {
    if ( feeds_to_load.length > 0 ) {
      var feeds_copy = [].concat(feeds_to_load)
      var feed = feeds_copy.shift();

      if ( FilterManager.is_excluded(feed.name) ) {
        log_info("Exclude feed: "+feed.name);
        DealManager.load_feeds(feeds_copy);
      } else {
        log_info("Loading feed: "+feed.name);
        var msg = mini.createStaticMessage("<img src='"+spinner_img_url+"'/> Loading "+feed.name+" ... ");
        if ( feed.parse_xml != null ) {
          var callback = function(response) {
            try {
              deals = feed.parse_xml(response);
              log_info("Found "+deals.length+" deals for "+feed.name)
              DealManager.add_deals(deals);
            } catch (e) { log_error(feed.name+" : "+e); }

            mini.dismissMessage(msg);
            DealManager.load_feeds(feeds_copy);
          }

          _IG_FetchXmlContent(feed.url,callback,{ refreshInterval: 30 });
        } else if ( feed.parse_content != null ) {
          var callback = function(response) {
            try {
              deals = feed.parse_content(response);
              log_info("Found "+deals.length+" deals for "+feed.name)
              DealManager.add_deals(deals);
            } catch (e) { log_error(feed.name+" : "+e); }

            mini.dismissMessage(msg);
            DealManager.load_feeds(feeds_copy);
          }

          _IG_FetchContent(feed.url,callback,{ refreshInterval: 30 });
        } else if ( feed.parse_json != null ) {
          var callback = function(response) {
            try {
              deals = feed.parse_json(response);
              log_info("Found "+deals.length+" deals for "+feed.name)
              DealManager.add_deals(deals);
            } catch (e) { log_error(feed.name+" : "+e); }

            mini.dismissMessage(msg);
            DealManager.load_feeds(feeds_copy);
          }

          _IG_FetchFeedAsJSON(feed.url,callback,prefs.getInt("num_deals_per_feed"),true);
        }
      }
    }
  },

  refresh_display: function() {
    for ( var i = 0; i < DealManager.deal_displays.length; i++ ) {
      deal_disp = DealManager.deal_displays[i];
      index = DealManager.current_deal_showing + i;
      if ( index >= DealManager.deals.length ) {
        //nothing to display
        deal_disp.display_message("No more deals...");
      } else {
        deal_disp.display_deal( DealManager.deals[index], index );
      }
    }
  },

  next_deal: function() {
    var next_offset = DealManager.current_deal_showing + 1;
    if ( next_offset + DealManager.deal_displays.length <= DealManager.deals.length ) {
      DealManager.current_deal_showing = next_offset;
    }
    DealManager.refresh_display();
  },

  prev_deal: function() {
    var prev_offset = DealManager.current_deal_showing - 1;
    if ( prev_offset >= 0 ) {
      DealManager.current_deal_showing = prev_offset;
    } else {
      DealManager.current_deal_showing = 0;
    }
    DealManager.refresh_display();
  }
};

var FilterManager = {
  exclude_filters: prefs.getString('exclude_these_feeds').split(','),

  is_excluded: function(name) {
    return FilterManager.exclude_filters.contains(name);
  },

  cancel: function() {
    var blocker = _gel("filter_blocker__MODULE_ID__");
    var filters = _gel("filters__MODULE_ID__");

    blocker.parentNode.removeChild(blocker);
    filters.parentNode.removeChild(filters);
  },

  hide: function() {
    var blocker = _gel("filter_blocker__MODULE_ID__");
    var filters = _gel("filters__MODULE_ID__");
    var filters_select = _gel("filters_select__MODULE_ID__");

    blocker.parentNode.removeChild(blocker);
    filters.parentNode.removeChild(filters);

    filters = FilterManager.get_filters_from(filters_select);
    FilterManager.exclude_filters = filters;
    DealManager.refresh_feeds();

    var filters_str = filters.join(',');
    log_debug('saving filters: '+filters_str);

    prefs.set('exclude_these_feeds',filters_str);
  },

  show: function() {
    var blocker = document.createElement('div');
    blocker.id = "filter_blocker__MODULE_ID__";
    blocker.onclick = function() {
      FilterManager.cancel();
    }

    var filters_box = document.createElement('div');
    filters_box.id = "filters__MODULE_ID__";
    filters_box.innerHTML = "<span id='filter_info__MODULE_ID__'>Exclude the following...<sup>ctrl+click to unselect</sup></span>";

    var combo = FilterManager.create_filter_select(ALL_FEEDS, FilterManager.exclude_filters);
    filters_box.appendChild(combo);

    var done = document.createElement('span');
    done.innerHTML = "<span id='filter_close__MODULE_ID__'><b><a onClick='FilterManager.hide(); return false' href='#'>save</a></b> or <b><a onClick='FilterManager.cancel(); return false' href='#'>cancel</a></b></span>";
    filters_box.appendChild(done);

    _gel('main_container__MODULE_ID__').appendChild(blocker);
    _gel('main_container__MODULE_ID__').appendChild(filters_box);
  },

  create_filter_select: function(all_feeds,filtered_names) {
    var combo = document.createElement('select');
    combo.id = "filters_select__MODULE_ID__";
    combo.multiple = true;
    combo.size = 4;

    for ( var i = 0; i < all_feeds.length; i++ ) {
      var feed = all_feeds[i];
      var opt = document.createElement('option');
      opt.text = feed.name;
      opt.value = feed.name;

      if ( filtered_names.contains(feed.name) ) {
      opt.selected = true;
      }

      try {
      combo.add(opt,null); // standards compliant; doesn't work in IE
      } catch (e) {
      combo.add(opt); // IE only
      }
    }

    return combo;
  },

  get_filters_from: function(input) {
    var filters = [];
    for ( var i = 0; i < input.options.length; i++ ) {
      if ( input.options[i].selected ) {
        filters.push( input.options[i].value );
      }
    }
    return filters;
  }
};


function htmlEncode(string) {
   encodedHtml = escape(string);
   encodedHtml = encodedHtml.replace(/\//g,"%2F");
   encodedHtml = encodedHtml.replace(/\?/g,"%3F");
   encodedHtml = encodedHtml.replace(/=/g,"%3D");
   encodedHtml = encodedHtml.replace(/&/g,"%26");
   encodedHtml = encodedHtml.replace(/@/g,"%40");
   return encodedHtml
} 



var amzn_deals_feed = {
  url: "http://rssfeeds.s3.amazonaws.com/goldbox",
  name: "Amazon.com",
  parse_json: function(feed) {
    if (feed == null || feed.Entry.length == 0 ) {
      return [];
    }

    deals = new Array();
    for ( var i = 0; i < feed.Entry.length; i++ ) {
      entry = feed.Entry[i];
      clean_link = entry.Link.replace(/tag=[^&'"]*/gi, "tag=amzn-deals-cleansed-20");
      clean_link = clean_link.replace(/ref=[^&'"\/]*/gi, "");

      deal_price = null;
      item_data = document.createElement("div");
      item_data.innerHTML = entry.Summary;
      rows = item_data.getElementsByTagName("tr");
      for ( var j = 0; j < rows.length; j++ ) {
        if ( /Deal Price: /.test(rows[j].innerHTML) ) {
          deal_price = rows[j].getElementsByTagName("b")[0].innerHTML.replace(/Deal Price: /,"");
        }
      }

      title = feed.Entry[i].Title + '<img src="http://www.assoc-amazon.com/e/ir?t=amzndeals-20&amp;l=ur2&amp;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />'

      deal = {
        price: deal_price,
        url: clean_link,
        title: title,
        icon_url: "http://www.amazon.com/favicon.ico"
      };

      deals.push(deal);
    }

    return deals;
  }
}

var slick_deals_feed = {
  url: "http://feeds.feedburner.com/SlickdealsnetFP",
  name: "Slickdeals.net",
  parse_json: basic_feed_reader("http://img.slickdeals.net/favicon.ico")
}

var newegg_daily_deals_feed = {
  url: "http://www.newegg.com/Product/RSS.aspx?Submit=RSSDailyDeals",
  name: "Newegg.com",
  parse_json: basic_feed_reader("http://c1.neweggimages.com/WebResource/Themes/2005/Nest/Newegg.ico")
}

function basic_feed_reader(icon_url) {
  return function(feed) {
    if ( feed == null || feed.Entry.length == 0 ) {
      return [];
    }

    deals = [];
    for ( var i = 0; i < feed.Entry.length; i++ ) {
      deal = {
        title: feed.Entry[i].Title,
        url: feed.Entry[i].Link,
        icon_url: icon_url
      }
      deals.push(deal);
    }

    return deals;
  }
}

function steep_and_cheap_feed_reader(xml_ns,icon_url) {
  return function(response) {
    if (response == null || typeof(response) != "object" || response.firstChild == null) {
      return [];
    }
    var items = response.getElementsByTagName('item');
    if ( items.length == 0 ) {
      return [];
    }

    var deal_xml = items[0];

    return [{
      title: deal_xml.getElementsByTagName("title")[0].firstChild.nodeValue,
      url: deal_xml.getElementsByTagName("link")[0].firstChild.nodeValue,
      price: "$" + deal_xml.getElementsByTagName(xml_ns+":priceCurrent")[0].firstChild.nodeValue,
      icon_url: icon_url
    }];
  }
}

function first_deal_picker(feed_reader_fn) {
  return function(feed) {
    var deals = feed_reader_fn(feed)
    if ( deals == null || deals.length == 0 ) {
      return [];
    } else {
      return deals[0]
    }
  }
}

function woot_scraper(homepage_url,icon_url) {
  return function(response) {
    var asXML = document.createElement("div");
    asXML.innerHTML = response;
    var product_data = $("#productBox",asXML);

    if ( product_data.length <= 0 ) {
      return [];
    }

    return [{
      url: homepage_url,
      icon_url: icon_url,
      title: $('#TitleHeader',product_data).text(),
      price: $('#PriceSpan',product_data).text()
    }];
  }
}

var whiskey_militia_feed = {
  url: "http://feeds.feedburner.com/WhiskeyMilitia?format=xml",
  name: "Whiskey Militia",
  parse_xml: steep_and_cheap_feed_reader("odat","http://images.whiskeymilitia.com/images/icon/wm.ico")
}

var chainlove_feed = {
  url: "http://feeds.feedburner.com/Chainlove?format=xml",
  name: "ChainLove",
  parse_xml: steep_and_cheap_feed_reader("odat","http://images.chainlove.com/images/icon/chainlove.ico")
}

var tramdock_feed = {
  url: "http://feeds.feedburner.com/Tramdock?format=xml",
  name: "TramDock",
  parse_xml: steep_and_cheap_feed_reader("odat","http://images.tramdock.com/images/icon/tramdock.ico")
}

var steep_n_cheap_feed = {
  url: "http://feeds.feedburner.com/SteepandCheap?format=xml",
  name: "Steep & Cheap",
  parse_xml: steep_and_cheap_feed_reader("sac","http://images.steepandcheap.com/images/icon/steepcheap.ico")
}

var woot_feed = {
  url: "http://www.woot.com/",
  name: "Woot",
  parse_content: woot_scraper("http://www.woot.com/","http://www.woot.com/App_Themes/Woot/favicon.ico")
}

var woot_wine_feed = {
  url: "http://wine.woot.com/",
  name: "Woot.Wine",
  parse_content: woot_scraper("http://wine.woot.com/","http://wine.woot.com/App_Themes/WootWine/favicon.ico")
}

var woot_shirt_feed = {
  url: "http://shirt.woot.com/",
  name: "Woot.Shirt",
  parse_content: woot_scraper("http://shirt.woot.com/","http://shirt.woot.com/App_Themes/Shirt/favicon.ico")
}

var woot_sellout_feed = {
  url: "http://shopping.yahoo.com/?name=woot#woot",
  name: "Woot.Sellout",
  parse_content: function(response) {
    var asXML = document.createElement("div");
    asXML.innerHTML = response;
    var product_data = $("#woot.shmod-woot .cont",asXML);

    if ( product_data.length <= 0 ) {
      return [];
    }

    return [{
      url: "http://sellout.woot.com/Default.aspx",
      icon_url: "http://sellout.woot.com/App_Themes/Sellout/favicon.ico",
      title: $('h2 a',product_data).text(),
      price: $('.price strong',product_data).text()
    }];
  }
}

var tooliday_feed = {
  url: "http://www.tooliday.com/",
  name: "Tooliday",
  parse_content: function(response) {
    var title = $('.dod_product_name',response)
    var price = $('.dod_product_sale_price',response)

    if ( title.length <= 0 || price.length <= 0 ) {
      return []
    }

    var deal = {
      url: "http://www.tooliday.com/",
      icon_url: "http://tooliday.com/images/data/53/2008/10/68.gif",
      title: title.text(),
      price: price.text()
    }
    return [deal]
  }
}

var outdoor_daily_feed = {
  url: "http://www.outdoordaily.com/rss.php",
  name: "OutdoorDaily",
  parse_json: basic_feed_reader("http://www.outdoordaily.com/images/ODicon.ico")
}

var thing_fling_feed = {
  url: "http://feed.thingfling.com/ThingflingRssFeed", //"http://www.thingfling.com/rssfeed/onlineproduct.rails",
  name: "Thing Fling",
  parse_json: first_deal_picker(basic_feed_reader("http://www.thingfling.com/favicon.ico"))
}

var yugster_feed = {
  url: "http://feeds.feedburner.com/Yugstercom?format=xml",
  name: "Yugster",
  parse_json: function(feed) {
    if ( feed == null || feed.Entry.length == 0 ) {
      return [];
    }

    deal = {
      title: feed.Entry[0].Title,
      url: "http://www.yugster.com/idevAffiliate/idevaffiliate.php?id=215",
      //url: feed.Entry[0].Link,
      icon_url: "http://www.yugster.com/favicon.ico"
    }

    if ( /Sorry Today's Item Sold-Out/.test(deal.title) ) {
      return [];
    } else {
      return [deal];
    }
  }
}

var ALL_FEEDS = [
  amzn_deals_feed,
  yugster_feed,
  thing_fling_feed,
  outdoor_daily_feed,
  newegg_daily_deals_feed,
  slick_deals_feed,
  steep_n_cheap_feed,
  whiskey_militia_feed,
  tramdock_feed,
  chainlove_feed,
  woot_feed,
  woot_shirt_feed,
  woot_wine_feed,
  woot_sellout_feed,
  tooliday_feed
];

//sort the feeds by name, this affects the order of names when we display filters select box
function compareFeedByName(a, b) {
  if (a.name < b.name) {
    return -1;
  }
  if (a.name > b.name) {
    return 1;
  }
  return 0;
}

ALL_FEEDS.sort(compareFeedByName);

// Call init function to initialize and UI
_IG_RegisterOnloadHandler(DealManager.init);
_IG_Analytics('UA-3528318-1','/amazing-deals-gadget');
</script>
]]></Content>
</Module>


