function Buddy(name)
{
    return "index.php?buddy="+ name;
}

function Sporecast(guid)
{
     return "index.php?theme="+ guid;
}

function AddBuddy(name)
{
   var name_id = "id" + name;
   if (document.getElementById(name_id) == null)
   {
     document.getElementById('buddies').innerHTML =
          document.getElementById('buddies').innerHTML  +
            " <a id='" + name_id + "' + href='javascript:importXML(Buddy(" + name + "))'>" + name + "</a>"
          ;
   }
}

function AddTheme(name,code)
{
   var name_id = "id" + code;
   if (document.getElementById(name_id) == null)
   {
     document.getElementById('themes').innerHTML =
          document.getElementById('themes').innerHTML  +
            " <a id='" + name_id + "' + href='javascript:importXML(Sporecast(" + code + "));'>" + name + "</a>"
          ;
   }
}

function importXML(url)
{
   try
   {
      document.getElementById('writeroot').innerHTML = url;
   	  if ((typeof document.implementation != 'undefined') 
          && (typeof document.implementation.createDocument != 'undefined'))
	  {
        var xmlhttp = new window.XMLHttpRequest();
        xmlhttp.open("GET",url,false);
        xmlhttp.send(null);
        xmlDoc = xmlhttp.responseXML;          
		createTable();
	  }
 	  else if (window.ActiveXObject)
	  {
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.onreadystatechange = function () 
	    {
		   if (xmlDoc.readyState == 4) createTable();
		};
		xmlDoc.load(url);
	  }
	  else
	  {
		alert('Your browser can\'t handle this script');
		return;
	  }
   }
   catch (e)
   {
      alert(e);
   }
}

function TextOf(element)
{
   var text;
   if(element.text)
   {
     //alert(element.nodeName + ".text=" + element.text);
     text = element.text;

   }
   else if(element.innerText)
   {
     //alert(element.nodeName + ".innerText=" + element.innerText);
     text = element.innerText;
   } 
   else if(element.textContent)
   {
     //alert(element.nodeName + ".textContent=" + element.textContent);
     text = element.textContent;
   }
   else return "";
   return SafeText(text);
}

function SafeText(text)
{
   try
   {
   if (typeof text == 'string' || (typeof text == 'object' && text.replace))
   {
      return text.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/,'&quot;').replace(/\'/,'&apos;');
   }
   else
   {
      //alert((typeof text) + ' = ' + text);
      return text;
   }
   } catch (e) {alert(e); }
}

function createTable()
{
try
{
    document.getElementById('writeroot').innerHTML = "Loading Feed...";

    var innerhtml = "";
    var titlehtml = "";
    var titletext = "";
    var feed = xmlDoc.documentElement;
    var feedtype = "";
    var feedlink = "";
    var idtext = "";
    var idcode = "";
    for (var i = 0; i< feed.childNodes.length; i++)
    {
      if (feed.childNodes[i].nodeType != 1) continue;
      //alert(feed.childNodes[i].nodeName);
      switch (feed.childNodes[i].nodeName)
      {
      case "id":
         idtext = TextOf(feed.childNodes[i]);         
         if (idtext.indexOf("user") >= 0)
         {
            feedtype = "userassets";
            feedlink = "http://www.spore.com/view/profile/";
         }
         else
         {
            feedtype = "themelist";
            idcode = idtext.slice(-12);
            feedlink = "http://www.spore.com/sporepedia#qry=ssc-" + idcode;
         }
         titlehtml += "<span class='idtext'>" + idtext + "</span>";
         break;

      case "title":
         titletext = TextOf(feed.childNodes[i]);
         if (feedtype == "userassets")
         {
            titlehtml += "<h1 class='title'>" + titletext
                      + "<a href=\"" + feedlink + TextOf(feed.childNodes[i]) + "\"><img class='sporelink' src='Spore.jpg'/></a></h1>"
                      + "<h3 class='desc'>Latest 20 creations from " + titletext  +"</h3>";
            AddBuddy(titletext);
         }
         else
         {
            titlehtml += "<h1 class='title'>" + titletext + "<a href=\"" + feedlink + "\"><img  class='sporelink' src='Spore.jpg'/></a></h1>";
            AddTheme(titletext,idcode);
         }
         break;

      case "subtitle":
         titlehtml += "<h3 class='desc'>" + TextOf(feed.childNodes[i]) + "</h3>";
         break;

      case "updated":
         titlehtml += "<span class='updated'> Updated: " + TextOf(feed.childNodes[i]) + "</span>";
         break;

      case "author":
         var name = feed.childNodes[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
         if (feedtype != "userassets")
         {
             titlehtml += "<h2 class='author'> By: <a href=\"javascript:importXML(Buddy('" + name + "'))\">"
                       + name + "</a> <a href=\"http://www.spore.com/view/profile/" 
                       + name + "\"><img  class='sporelink' src='Spore.jpg'/></a></h2>";
         } 
         break;

      case "link":
         break;

      case "subcount":
         titlehtml += "<span class='subs'>Subscribers: " + TextOf(feed.childNodes[i]) + "</span>";
         break;

      case "entry":
            var entryhtml = "";
            var title     = "Unnamed";
            var author    = "";
            var imgsrc    = " ";
            var summary   = "No Description";
            var entry = feed.childNodes[i];
            var cardclass = " unknown";

	    for	(var ii=0; ii < entry.childNodes.length; ii++)
            {
                if (entry.childNodes[ii].nodeType != 1) continue;
                var section = entry.childNodes[ii];
                //alert(section.nodeName);
                if (section.nodeName == "title")
                {
                   var text = SafeText(section.firstChild.nodeValue);
                   if (text.length > 30) font = " tiny"; 
                   if (text.length > 20) font = " small";
                   else font = "";
                   title = "<span class='title" + font + "'>" + text  + "</span>";
                }
                else if (section.nodeName == "author")
                {
                   if (feedtype != 'userassets')
                   {
                      creator = SafeText(section.getElementsByTagName("name")[0].childNodes[0].nodeValue);
                      author = "<a class='author' HREF=\"javascript:importXML(Buddy('" + creator + "'))\">" + creator + "</a>"+ "</span>";
                   }
                }
                else if (section.nodeName == "summary")
                {
                     //alert ( "text = " + section.text +
                     //    "\r\ninnerText = " + section.innerText +
                     //    "\r\ntextContent = " + section.textContent);
                     summary =  TextOf(section);
                }
                else if (section.nodeName == "content")
                {
 	           for (var iii=0; iii < section.childNodes.length; iii++)
                   {
                     if (section.childNodes[iii].nodeType != 1) continue;
                     var part = section.childNodes[iii];
                     if (part.nodeName == "img")
                     {
                        imgsrc = part.getAttribute('src');
	   	     }
	           }
		}
                else if (section.nodeName == "link")
                {
                   var linktype = section.getAttribute('type');
                      if (linktype == "application/x-vehicle+xml")
                      {
                         cardclass = " vehicle";
                      }
                      else if (linktype == "application/x-ufo+xml")
                      {
                         cardclass = " ufo";
                      }
                      else if (linktype == "application/x-building+xml")
                      {
                         cardclass = " building";
                      }
                      else if (linktype == "application/x-creature+xml")
                      {
                         cardclass = " creature";
                      }
                }
	    }

            innerhtml += "<div class='sporecard" + cardclass +"'>" + title  
                      +  "<img src='" + imgsrc + "' class='sporecard' alt='" + summary + "' />"
                      +   author + "</div>";
            //alert(innerhtml);

      default:
         break;
      }
    }
    document.getElementById('writeroot').innerHTML = 
         "<div class='listinfo'>" + titlehtml + "</div>" +
         "<div class='cardlist " + feedtype + "'>" + innerhtml + "</div>";
   }
   catch (e)
   {
      alert(e);
   }
}
