var $ = glow.dom.get;

Object.prototype.toString = function()
{
  return JSON.stringify(this, null, 2);
}

function dump(object)
{
  //alert(object.toString());
  alert(JSON.stringify(object, null, 2));
}

if (!String.prototype.trim)
{
  String.prototype.trim = function() {
    return this.replace(/^\s*/, '').replace(/\s*$/, '');
  };
}

String.prototype.escapeHTML = function() {
  return glow.data.escapeHTML(this);
}

glow.ready(function() {
  insertRSS();
});

function insertRSS()
{
  var divs = $('.rss');
  var rssTemplate = glow.net.get('templates/rss.html', {
    async : false,
    useCache : true
  });
  if (rssTemplate.wasSuccessful)
    rssTemplate = rssTemplate.text();
  else alert("Can't get rssTemplate");
  divs.each(function(i) {
    var div = $(this);
    var a = div.get('a');
    var feed = a.attr('href');
    if (a.attr('rel').match('^http:\/\/'))
      feed = a.attr('rel');
    else feed = feed.replace(/\/?$/, '/' + a.attr('rel'));
    var url = "http://may.be/cgi-bin/rss2json.pl?url=";
    url += feed + "&callback={callback}";
    glow.net.loadScript(url, {
      useCache : true,
      timeout : 60,
      onLoad: function(data) {
	switch(div.prop('id'))
	{
	case 'soup':
	  presentSoup(data);
	  break;
	case 'fotonomy':
	  presentPhotos(data, '#fotonomy div');
	  break;
	case 'flickr':
	  presentPhotos(data, '#flickr div');
	  break;
	default:
	  var params = {
	    link  : data.link,
	    title : data.title.replace(/^.*»\s*/, ''),
	    description : data.description
	  };
	  var max = Math.min(data.entries.length, 5);
	  for (var i = 0; i < max; i++)
	  {
	    var entry = data.entries[i];
	    var date = new Date(entry.issued);
	    params['date' + i] = date.toLocaleDateString();
	    params['title' + i] = entry.title;
	    params['link' + i] = entry.link;
	  }
	  var newdiv = template(rssTemplate, params);
	  div.replaceWith(newdiv);
	  break;
	}
      },
      onError : function(response) {
	return;
	var status = 0;
	try {
	  status = response.status;
	  alert(response.status + " " + response.statusText());
	}
	catch (e) {
	  alert('Unknown Error: ' + status + " " + url);
	}
      }
    });
  });
}

function presentSoup(data)
{
  var rssTemplate = glow.net.get('templates/soup.html', {
    async : false,
    useCache : true
  });
  if (rssTemplate.wasSuccessful)
    rssTemplate = rssTemplate.text();
  else alert("Can't get rssTemplate");
  var lines = rssTemplate.trim().split('\n');
  var outer = glow.dom.create(lines.shift() + lines.pop());
  var entries = new glow.dom.NodeList();
  for (var i = 0; i < lines.length; i++)
    lines[i] = lines[i].trim();
  lines = lines.join('');
  var max = Math.min(data.entries.length, 8);
  for (var i = 0; i < max; i++)
  {
    var content = data.entries[i].content;
    var item;
    switch (data.entries[i].category)
    {
    case "image":
      content = glow.dom.create(content);
      var img = content.get('img')
      // var obj = content.get('object');
      var src = img.attr('src');
      var width = img.attr('width');
      var height = img.attr('height');
      var params = {
	souplink : data.entries[i].link.escapeHTML(),
	src      : src.escapeHTML(),
	title    : data.entries[i].title.escapeHTML()
      };
      item = glow.dom.create(template(lines, params));
      img = item.get('img');
      img.width(240);
      img.height(Math.floor(height * 240 / width));
      break;
    case "video":
      content = glow.dom.create('<div class="content">' + content + '</div>');
      var obj = content.get('object')
      var embed = content.get('embed');
      var width = embed.attr('width');
      var height = Math.floor(embed.attr('height') * 240 / width);
      if (obj.length)
      {
	obj.attr('width', 240);
	obj.attr('height', height);
      }
      embed.attr('width', 240);
      embed.attr('height', height);
      var params = {
	souplink : data.entries[i].link.escapeHTML(),
	src      : 'images/blank.gif',
	title    : data.entries[i].title.escapeHTML()
      };
      item = glow.dom.create(template(lines, params));
      var img = item.get('img').remove();
      if (obj.length)
	item.append(obj);
      else item.append(embed);
      break;
    case "quote":
      content = content.replace(
	/^<p>"<div>(.*?)<\/div>"<\/p>/, "<p><q>$1</q></p>"
      ).replace(/\&ndash;<a/, '<a');
      item = glow.dom.create('<div class="content">' + content + '</div>');
      item.get('a').attr('target', 'soup');
      break;
    default:
      continue;
    }
    entries.push(item);
    if (typeof content !== 'string')
      content.destroy();
  }
  outer.append(entries);
  $('#soup').replaceWith(outer);
}

function presentPhotos(data, div)
{
  var div = $(div);
  for (var i = 0; i < data.entries.length; i++)
  {
    var content;
    try {
      content = glow.dom.create(data.entries[i].content);
    }
    catch (err) {
      continue;
    }
    var img = content.get('img');
    if (!img)
      continue;
    var width = img.attr('width');
    var height = img.attr('height');
    a = glow.dom.create('<a></a>')
    a.attr('href', data.entries[i].link);
    a.attr('alt', data.entries[i].title);
    a.attr('title', data.entries[i].title);
    a.attr('target', 'photos');
    a.append(img.remove());
    div.append(a);
    img.height(90);
    // img.width(Math.floor(width * 90 / height));
    img.width(135);
  }
  var carousel = new glow.widgets.Carousel(div, {
    size : 5,
    vertical : true,
    scrollOnHold : false
  });
}

