<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="YouSearch"
            directory_title="YouSearch"
            description="Search major classified listings such as Ebay, Craigslist and Yahoo all in one little gadget. You can page through the results right inside the gadget without openning a new page."
            author="Luying Pan"
            author_email="lpan.feedback@gmail.com"
            author_affiliation="Girl Geek"
            author_location="Gaithersburg, MD"
            screenshot="http://facebook.zxq.net/yousearch.jpg"
            thumbnail="http://facebook.zxq.net/tn_yousearchthumbsmall.jpg"
            width="300"
            height="200"
            scrolling="false"
            singleton="false">
  <Require feature="setprefs"/>
  <Require feature="tabs"/>
  <Require feature="analytics"/>
  <Require feature="dynamic-height"/>
</ModulePrefs>
<UserPref name="title" display_name="Gadget Title" default_value="YouSearch"/>
<UserPref name="tabFontSize" display_name="Tab Font Size" default_value="0.7em"/>
<UserPref name="showFeedDesc" display_name="Feed Descriptions" datatype="bool" default_value="true"/>
<UserPref name="city" display_name="Major Metropolitan" datatype="enum" default_value="washingtondc">
  <EnumValue value="atlanta" display_value="atlanta"/>
  <EnumValue value="austin" display_value="austin"/>
  <EnumValue value="boston" display_value="boston"/>  
  <EnumValue value="chicago" display_value="chicago"/>  
  <EnumValue value="dallas" display_value="dallas"/>  
  <EnumValue value="denver" display_value="denver"/>        
  <EnumValue value="detroit" display_value="detroit"/>  
  <EnumValue value="honolulu" display_value="honolulu"/>  
  <EnumValue value="houston" display_value="houston"/>  
  <EnumValue value="lasvegas" display_value="las vegas"/>        
  <EnumValue value="losangeles" display_value="los angeles"/>  
  <EnumValue value="miami" display_value="miami"/>  
  <EnumValue value="minneapolis" display_value="minneapolis"/>  
  <EnumValue value="newyork" display_value="new york"/>        
  <EnumValue value="orangecounty" display_value="orange county"/>  
  <EnumValue value="philladelphia" display_value="philadelphia"/>  
  <EnumValue value="phoenix" display_value="phoenix"/>  
  <EnumValue value="portland" display_value="portland"/>        
  <EnumValue value="raleigh" display_value="raleigh"/>  
  <EnumValue value="sacramento" display_value="sacramento"/>  
  <EnumValue value="sandiego" display_value="san diego"/>  
  <EnumValue value="seattle" display_value="seattle"/>        
  <EnumValue value="sfbay" display_value="san francisco bay"/>  
  <EnumValue value="stlouis" display_value="st louis"/>  
  <EnumValue value="washingtondc" display_value="washington dc"/>  
</UserPref>

<UserPref name="feed1"
  display_name="Feed 1: URL"
  datatype="hidden"
  default_value="http://rss.api.ebay.com/ws/rssapi?FeedName=SearchResults&amp;siteId=0&amp;language=en-US&amp;output=RSS20&amp;satitle=cellphones"/>
<UserPref name="feedTitle1" display_name="Feed 1: Title" datatype="hidden" default_value="Ebay"/>


<UserPref name="feed2"
  display_name="Feed 2: URL"
  datatype="hidden"
  default_value="http://washingtondc.craigslistdefault.org/mld/sss/index.rss" />
<UserPref name="feedTitle2" display_name="Feed 2: Title" datatype="hidden" default_value="Craigslist"/>
<UserPref name="entries" display_name="# of Entries" datatype="enum" default_value="3">
  <EnumValue value="3"/>
  <EnumValue value="4"/>
  <EnumValue value="5"/>
  <EnumValue value="6"/>
  <EnumValue value="7"/>
  <EnumValue value="8"/>
  <EnumValue value="9"/>
  <EnumValue value="10"/>
  <EnumValue value="11"/>
  <EnumValue value="12"/>
 </UserPref>

<UserPref name="feed3"
  display_name="Feed 3: URL"
  datatype="hidden"
  default_value="http://atlanta.kijiji.com/f-SearchAdRss?isSearchForm=true&amp;Keyword="/>
<UserPref name="feedTitle3" display_name="Feed 3: Title" datatype="hidden" default_value="Kijiji"/>

<UserPref name="feed4"
  display_name="Feed 4: URL"
  datatype="hidden"
  default_value="http://hotjobs.yahoojobsdefault.com/job-rss-k-.net%20software%20developer"/>
<UserPref name="feedTitle4" display_name="Feed 4: Title" datatype="hidden" default_value="Yahoo Jobs"/>

<UserPref name="feedReal"
  display_name="Feed Real: URL"
  datatype="hidden"
  default_value="http://realsearch.real.com/search?searchtype=RhapKeyword&amp;query=bruni&amp;size=10&amp;availability=Stream"/>
<UserPref name="feedTitleReal" display_name="Feed Real: Title" datatype="hidden" default_value="Music"/>

<UserPref name="pageIndex"
  display_name="page Index"
  datatype="hidden"
  default_value="0" />
<UserPref name="summaries" display_name="Summaries" datatype="enum" default_value="100">
  <EnumValue value="-1" display_value="none"/>
  <EnumValue value="100" display_value="short"/>
  <EnumValue value="200" display_value="medium"/>
  <EnumValue value="300" display_value="long"/>
  <EnumValue value="400" display_value="longer"/>
  <EnumValue value="0" display_value="show all"/>
</UserPref>
<UserPref name="renderHtml" display_name="Render HTML" datatype="bool" default_value="true"/>
<UserPref name="keyWords" display_name="Key Words" datatype="string" default_value="cellphones"/>
<UserPref name="lastCraigsCat" display_name="Craigslist Category" datatype="hidden" default_value="sss"/>
<UserPref name="yahooJobsLocation" display_name="Yahoo Jobs Location" datatype="hidden" default_value="" />
<UserPref name="yahooJobsKeywords" display_name="Yahoo Jobs Keywords" datatype="hidden" default_value="" />
<UserPref name="showTimestamp" display_name="Show Timestamp" datatype="bool" default_value="true"/>
<UserPref name="showDescription" display_name="Show Description" datatype="bool" default_value="false"/>
<UserPref name="maxSearchResults" display_name="Maximum Search Results" datatype="enum" default_value="50">
  <EnumValue value="10"/>
  <EnumValue value="20"/>
  <EnumValue value="50"/>
  <EnumValue value="80"/>
  <EnumValue value="100"/>
  <EnumValue value="150"/>
  <EnumValue value="200"/>
 </UserPref>
<UserPref name="selectedTab" datatype="hidden"/>
<Content type="html"><![CDATA[
  <style type="text/css">
  .tablib_table {
    font-size: __UP_tabFontSize__;
  }
  .tablib_selected, .tablib_unselected {
    width: 23%;
  }

  .statusLabel {
    font-size: 0.75em;
    font-style: italic;
    padding-top: 10px;
    text-align: center;
  }
  .feedHeader {
    padding-top: 5px;
    font-size: 0.7em;
  }
  .feedTitle {
    font-weight: bold;
    font-size: 0.7em;
  }
  .feedHeader .feedAuthor {
    font-weight: normal;
    font-size: 0.8em;
    color: #676767;
  }

  .feedList {
    font-size: 0.7em;
    margin: 0px;
    padding: 0px 0px 5px 0px;
    border-bottom: 1px solid #aaaaaa;
  }
  .feedList li {
    margin-top: 5px;
    padding: 3px 3px 0px 3px;
    border-top: 1px solid #aaaaaa;
  }
  .feedList li div.entryTitle a {
    font-weight: bold;
  }
  .feedList li div.entryTimestamp {
    font-size: 0.95em;
    font-style: italic;
    color: #676767;
  } 
  .tablib_emptyTab__MODULE_ID__ {
    padding:2px 10px;;
  }


  .tablib_content_container__MODULE_ID__ {
    padding: 3px;
    background-color: #fff;
    text-align: left;
  }
  .tablib_main_container__MODULE_ID__ {
    background-color: #9999aa;
    padding: 5px;
  }
  .tablib_selected__MODULE_ID__ table td, .tablib_unselected__MODULE_ID__ table td {
    font-size: 10px;
    text-align: left;
    color: #a40;
  } 
  .tablib_table__MODULE_ID__ { font-size:10px; }    
  </style>
 
  <style type="text/css">

  input.groovybutton
  {
   font-family:Arial,sans-serif;
   background-color:#99CCFF;
   border-style:outset;
  }

  </style>

  <script>
  // Global variables
  var prefs = new _IG_Prefs(__MODULE_ID__);
  var tabs = new _IG_Tabs(__MODULE_ID__);
  var selectedTabName;
  var currentFeed;
  var tabIdx;

  var pageIndex = prefs.getInt("pageIndex");        
  var summaries = prefs.getInt("summaries");    
  /**
   * Initialize tabs when page loads.
   * Create tab for each userpref only if userpref is not empty.
   */
  function init() {
    var f1 = _trim(prefs.getString("feed1"));
    var f2 = _trim(prefs.getString("feed2"));
    var f3 = _trim(prefs.getString("feed3"));
    var f4 = _trim(prefs.getString("feed4"));
    var fReal = _trim(prefs.getString("feedReal"));
    var ft1 = _trim(prefs.getString("feedTitle1"));
    var ft2 = _trim(prefs.getString("feedTitle2"));
    var ft3 = _trim(prefs.getString("feedTitle3"));
    var ft4 = _trim(prefs.getString("feedTitle4"));
    var ftReal = _trim(prefs.getString("feedTitleReal"));

    if (f1 != "") {
      tabs.addDynamicTab(((ft1 == "") ? "Feed 1" : ft1), _IG_Callback(callbackTab, f1));
    }
    if (f2 != "") {
      tabs.addDynamicTab(((ft2 == "") ? "Feed 2" : ft2), _IG_Callback(callbackTab, f2));
    }
    if (f3 != "") {
      tabs.addDynamicTab(((ft3 == "") ? "Feed 3" : ft3), _IG_Callback(callbackTab, f3));
    }
    if (f4 != "") {
      tabs.addDynamicTab(((ft4 == "") ? "Feed 4" : ft4), _IG_Callback(callbackTab, f4));
    }     
    if (fReal != "") {
      tabs.addDynamicTab(((ftReal == "") ? "Feed Real" : ftReal), _IG_Callback(callbackTab, fReal));
    }
  };
    
  /**
   * Fetches an Atom or RSS feed and generates content inside the
   * selected tab's content container.  This function is called whenever
   * a tab is selected.
   */
  function callbackTab(tabId, feedUrl) {
    var container = _gel(tabId);
    var html = new Array();            
    pageIndex=0;    
    selectedTabName = tabId;
    // Display loading message before fetching feed.
    container.innerHTML = '<div class="statusLabel">Loading...</div>';

    if (feedUrl.indexOf('craigslist') != -1)
    {
       if (prefs.getString("lastCraigsCat") == 'sss')
         feedUrl = "http://"+ prefs.getString('city') +".craigslist.org/search/sss?minAsk=min&maxAsk=max&format=rss&query=" + _esc(prefs.getString('keyWords'));       
         
       //feedUrl = "http://"+ prefs.getString("city") + ".craigslist.org/sss/index.rss";
    }
    else if (feedUrl.indexOf('kijiji') != -1)
    {
      feedUrl = "http://"+ prefs.getString("city") + ".kijiji.com/f-SearchAdRss?isSearchForm=true&Keyword="+prefs.getString("keyWords").replace(/ /g, '+');
    }
    else if (feedUrl.indexOf('yahoo') != -1)
    {
      var city = prefs.getString("city");
      if (city == "lasvegas")
        city = "las vegas";
      if (city == "losangeles")
        city = "los angeles";
      if (city == "orangecounty")
        city = "orange county";
      if (city == "stlouis")
        city = "st louis";
      if (city == "newyork")
        city = "new york"
      if (city == "washingtondc")
        city = "washington dc"
      if (city == "sfbay")
        city = "san francisco bay"
      if (city == "sandiego")
        city = "san diego"
      if ((prefs.getString("yahooJobsLocation") == "" || prefs.getString("yahooJobsLocation") == "Location") &&
                (prefs.getString("yahooJobsKeywords") ==""))
      {
        //location: nothing, keywords: nothing
        feedUrl = "http://hotjobs.yahoo.com/job-rss-l-"+ city.replace(/ /g, '%20');
      }
      else if ((prefs.getString("yahooJobsLocation") == "") && (prefs.getString("yahooJobsKeywords") !=""))     
      {
        //location: nothing, keywords: something
        feedUrl = "http://hotjobs.yahoo.com/job-rss-k-"+prefs.getString("yahooJobsKeywords").replace(/ /g, '%20')+"-m-2"; 
      }
      else if ((prefs.getString("yahooJobsLocation") != "") &&(prefs.getString("yahooJobsLocation") != "Location") && (prefs.getString("yahooJobsKeywords") ==""))     
      {
        //location: something, keywords: nothing
        feedUrl = "http://hotjobs.yahoo.com/job-rss-l-"+ city.replace(/ /g, '-')+"-m-2";        
      }
      else if((prefs.getString("yahooJobsLocation") != "") &&(prefs.getString("yahooJobsLocation") != "Location") && (prefs.getString("yahooJobsKeywords") !=""))     
      {
        //location: something, keywords: something
        feedUrl = "http://hotjobs.yahoo.com/job-rss-l-"+ prefs.getString("yahooJobsLocation").replace(/ /g, '-')+"-k-"+prefs.getString("yahooJobsKeywords").replace(/ /g, '%20')+"-m-2";            
      }
      else
      {
        //default location, keywords: something
        feedUrl = "http://hotjobs.yahoo.com/job-rss-l-"+ city.replace(/ /g, '-')+"-k-"+prefs.getString("yahooJobsKeywords").replace(/ /g, '%20')+"-m-2";                  
      }

      prefs.set("yahooJobsLocation", city);
      
    }
    else if (feedUrl.indexOf('ebay') != -1)
    {

feedUrl =
"http://rss.api.ebay.com/ws/rssapi?FeedName=SearchResults&siteId=0&language=en-US&output=RSS20&satitle=" + prefs.getString("keyWords").replace(/ /g, '+');
    }

    if (feedUrl.indexOf("realsearch") != -1)
    {                                           
      html.push('<div class=feedHeader>Looking for ... </div>');
      html.push('<form action="" method=post onSubmit="prefs.set(\'keyWords\',this.searchfield2.value);callbackTab(selectedTabName,\'http://realsearch.real.com/search?searchtype=RhapKeyword&amp;size=10&amp;availability=Stream&amp;query=\'+this.searchfield2.value.replace(/ /g, \'+\'));"><input type="text" name="searchfield2">');
      html.push('<input type="submit" value="search"></form>');  
      container.innerHTML = html.join("");
    
      //Real returns an xml page not in RSS format so need to call FetchXmlContentfunction
      _IG_FetchXmlContent(
        feedUrl, 
        function (response) 
        {
         if (response == null || typeof(response) != "object" || response.firstChild == null) 
         {
           container.innerHTML = "<i>Invalid data.</i>"+feedUrl;
           return;
         }
 
        var tracklist = response.getElementsByTagName("tracks");
        var artistlist = response.getElementsByTagName("artists");
        var albumlist = response.getElementsByTagName ("albums");
        
        display_tracks(tracklist, html);
        display_artists(artistlist, html);
        display_albums(albumlist, html);
             
        container.innerHTML = html.join("");
        _IG_AdjustIFrameHeight();
      });
    }
    else
    {
    // Fetch feed and return it as a JSON object.
    // Callback function is defined within local scope.
    _IG_FetchFeedAsJSON(
      feedUrl,
      function(feed) {
        currentFeed = feed;
        if (typeof feed == "undefined" || typeof feed.Entry == "undefined") {
          html.push('<div class="statusLabel">Your search either timed out of returned empty results. Please try again.');
          display_search_ui(feedUrl, html);
          container.innerHTML = html.join("");
          return;
        } else {
          // Fetch feed successful.  Generate HTML content from returned JSON object.
          // Create feed header containing title and description.

          var title = _hesc(feed.Title);
          html.push('<div class=feedTitle>Looking for ' + feed.Title + '</div>');    
          display_search_ui(feedUrl, html);
          html.push("<div name='feedListDiv' id='feedListDiv'>");       
          //display feed entries
          displayFeedEntries(feed, html, null);
          html.push ("</div>");
          container.innerHTML = html.join("");
        }

        //alert ("setting pageINdex to " + pageIndex);
        // Resize iframe height to fit content.
        _IG_AdjustIFrameHeight();
      },
      prefs.getInt("maxSearchResults"),
      (summaries > -1)
    );    
  }
    }
  
  function display_search_ui(feedUrl, html)
  {
          if (feedUrl.indexOf("craigs") != -1)
          {
            html.push('<form action="" method=get onSubmit="prefs.set(\'keyWords\', this.searchfield1.value);prefs.set(\'lastCraigsCat\', this.category.value);callbackTab(selectedTabName,\'http://\'+ prefs.getString(\'city\') +\'.craigslist.org/search/\' + this.category.value + \'?minAsk=min&amp;maxAsk=max&amp;format=rss&amp;query=\' + _esc(this.searchfield1.value));">');
            html.push('<select name="category">');
            html.push('  <option value=sss>for sale');    
            html.push('  <option value=jjj>jobs');
            html.push('  <option value=hhh>housing');
            html.push('  <option value=ccc>community');
            html.push('  <option value=forums>forums');
            html.push('  <option value=bbb>services');
            html.push('  <option value=ggg>gigs');
            html.push('  <option value=res>resumes</select>');
            html.push('<input type="text" name="searchfield1">');
            html.push('<input type="submit" value="search"></form>');    
          }
          else if (feedUrl.indexOf("kijiji") != -1)
          {
            html.push('<form action="" method=get onSubmit="prefs.set(\'keyWords\', this.searchfield2.value);callbackTab(selectedTabName, \'http://\' + prefs.getString(\'city\') + \'.kijiji.com/f-SearchAdRss?isSearchForm=true&amp;Keyword=\'+ this.searchfield2.value.replace(/ /g, \'+\'));"><input type="text" name="searchfield2">');
            html.push('<input type="submit" value="search"></form>');  
          }
          else if (feedUrl.indexOf("ebay") != -1)
          {
            html.push('<form action="" method=get onSubmit="prefs.set(\'keyWords\', this.searchfield2.value);callbackTab(selectedTabName,\'http://rss.api.ebay.com/ws/rssapi?FeedName=SearchResults&siteId=0&language=en-US&output=RSS20&satitle=\'+_esc(this.searchfield2.value));"><input type="text" name="searchfield2">');
            html.push('<input type="submit" value="search"></form>');    
          }
          else if (feedUrl.indexOf("yahoo") != -1)
          {
            html.push('<form action="" method=get onSubmit="prefs.set(\'yahooJobsKeywords\', this.searchfield2.value);prefs.set(\'yahooJobsLocation\',this.location.value);callbackTab(selectedTabName, \'http://hotjobs.yahoo.com/job-rss-l-\'+this.location.value.replace(/ /g, \'-\')+ \'-k-\'+ this.searchfield2.value.replace(/ /g, \'%20\'));"><input type="text" name=location value="Location" size=10 onClick="this.value=\'\'"><input type="text" name="searchfield2">');
            html.push('<input type="submit" value="search"></form>');    
          } 
          else 
            alert ("unexpected feed");    
          html.push("<div class=feedHeader>Sponsors:<a href=http://www.37mileads.com target=_blank>37mileads.com</a> <a href=http://www.myfashiongadgets.com/ target=_blank>myfashiongadgets.com</a></div>");
  }     
  function displayFeedEntries(feed, html, divNode, backvalue, nextvalue)
  {         
      var showTimestamp = prefs.getBool("showTimestamp");
      var entries = prefs.getInt("entries");
      var showFeedDesc = prefs.getBool("showFeedDesc"); 
      var renderHtml = prefs.getBool("renderHtml");         
      var n;

      if (divNode == null)   
      {
          // Iterate through each feed entry and generate list of content.
          html.push('<ul class="feedList">');

          for (n = pageIndex; n < Math.min(pageIndex + entries, feed.Entry.length); n++) 
          {
            var entry = feed.Entry[n];

            html.push('<li>');
            if (entry.Link != null)
              html.push('<a target="_blank" href="' + entry.Link + '"><b>' + _hesc(entry.Title) + '</b></a>');
            else
              html.push(_hesc(entry.Title));              
    
            if (!isNaN(entry.Date) && showTimestamp) 
              html.push('<div class="entryTimestamp">[' + new Date(entry.Date * 1000).toLocaleString() + ']</div>');
            html.push('</li>');
            if (prefs.getBool("showDescription") == true)
              html.push(entry.Summary);  
          }    
          html.push('</ul>');
       }
       else
       {
         var newpage = new Array();
         // Iterate through each feed entry and generate list of content.
         var entries = prefs.getInt("entries");
         var pageCountInfo = "Results " + pageIndex + " - "+((pageIndex+entries)>feed.Entry.length?feed.Entry.length:(pageIndex+entries))+" out of " + feed.Entry.length;
         newpage.push('<font size = -2 face="san serif">' + pageCountInfo + '</font>');    
         newpage.push('<ul class="feedList">');

         for (n = pageIndex; n < Math.min(pageIndex + entries, feed.Entry.length+1); n++) 
         {
          
           if (feed.Entry[n] == null)
             break;
           else
           {
             var entry = feed.Entry[n];
  
              newpage.push('<li>');
              if (entry.Link != null)
                newpage.push('<a target="_blank" href="' + entry.Link + '"><b>' + _hesc(entry.Title) + '</b></a>');
              else
                newpage.push(_hesc(entry.Title));
              newpage.push('</li>');
              if (!isNaN(entry.Date) && showTimestamp) 
              {
                newpage.push('<div class="entryTimestamp">[' + new Date(entry.Date * 1000).toLocaleString() + ']</div>');
              }
            }
            if (prefs.getBool("showDescription") == true)
              newpage.push(entry.Summary);    
          }
          newpage.push('</ul>');
    
          if (backvalue == true)
            _gel("button_back").disabled = true;
          else
            _gel("button_back").disabled = false;    
          if (nextvalue == true)
            _gel("button_next").disabled = true;
          else
            _gel("button_next").disabled = false;
   
          divNode.innerHTML=newpage.join("");
          _IG_AdjustIFrameHeight();
       } 
  }
    
  function displayNextPage(forward)
  {  
    var entries = prefs.getInt("entries");    
    var tabnodes = _gel(selectedTabName).getElementsByTagName("div");      
    var el;

    var backvalue = true;
    var nextvalue = true;
    
    for (i = 0; i < tabnodes.length; i++)
    {
      if (tabnodes[i].id == "feedListDiv")
        el = tabnodes[i];
    }

    if (forward)
      pageIndex=pageIndex+entries;
    else
    {
      pageIndex = Math.max(0, pageIndex - entries);
    }

    if (pageIndex == 0)
      backvalue = true;
    else
      backvalue = false;

    if(pageIndex + entries < currentFeed.Entry.length)
      nextvalue = false;
    else        
      nextvalue = true;

    var oldEl = el;

    var newEl = oldEl.cloneNode(false);
    newEl.innerHTML = "";
    oldEl.parentNode.replaceChild(newEl, oldEl);

    displayFeedEntries(currentFeed, null, newEl, backvalue, nextvalue)    
  }

  function display_albums(albumlist, html)
  {
    // Loop through all <albumlist> nodes
    for (var i = 0; i < albumlist.length ; i++) 
    {   
      // For each <album> node, get child nodes.
      var nodeList = albumlist.item(i).childNodes;
      for (var j = 0; j < nodeList.length; j++) 
      {
        var node = nodeList.item(j);
            
	if (node.nodeName == "total-results")
          html.push ("<div class=feedHeader>Total Albums: " + node.firstChild.nodeValue + "</div>");
	
        if (node.nodeName == "album")
        {
          //alert(node.firstChild.);
          var thisAlbum = new albumInfo();
          var albumStuff = node.childNodes;
                 
          /* get all track information */
    
          for (var x = 0; x < albumStuff.length; x++)
          {
            var albumnodelist = albumStuff[x];

            var elementName = albumnodelist.nodeName;
            if (elementName == "#text") continue;
          
            if (elementName  == "display-name")
              thisAlbum.display_name = albumnodelist.firstChild.nodeValue;

            if (elementName  == "html-href"){
              thisAlbum.html_href = albumnodelist.firstChild.nodeValue;}
            if (elementName  == "release-date"){
              thisAlbum.release_date = albumnodelist.firstChild.nodeValue;}
            if (elementName  == "ablum-content-id"){
              thisAlbum.album_content_id = albumnodelist.firstChild.nodeValue;}
            if (elementName  == "availability"){
              thisAlbum.availability =albumnodelist.firstChild.nodeValue;}
          }  
          if (thisAlbum.display_name != null) 
          { 
            html.push("<li><font size=-2><a href=" + thisAlbum.html_href + " target=_blank>"+thisAlbum.display_name+"</a>");                                                                 
          }
        }

       } 
    }      
  }
        
  function display_artists(artistlist, html)
  {
    // Loop through all <artistlist> nodes
    for (var i = 0; i < artistlist.length ; i++) 
    {   
      // For each <artist> node, get child nodes.
      var nodeList = artistlist.item(i).childNodes;
      for (var j = 0; j < nodeList.length; j++) 
      {
        var node = nodeList.item(j);
            
	if (node.nodeName == "total-results")
          html.push ("<div class=feedHeader>Total Artist: " + node.firstChild.nodeValue + "</div>");
	
        if (node.nodeName == "artist")
        {
          //alert(node.firstChild.);
          var thisArtist = new artistInfo();
          var artistStuff = node.childNodes;
                 
          /* get all track information */
    
          for (var x = 0; x < artistStuff.length; x++)
          {
            var artistnodelist = artistStuff[x];

            var elementName = artistnodelist.nodeName;
            if (elementName == "#text") continue;
          
            if (elementName  == "display-name")
              thisArtist.display_name = artistnodelist.firstChild.nodeValue;

            if (elementName  == "html-href"){
              thisArtist.html_href = artistnodelist.firstChild.nodeValue;}
            if (elementName  == "primary-gengre"){
              thisArtist.primary_gengre = artistnodelist.firstChild.nodeValue;}
            if (elementName  == "ablum-content-id"){
              thisArtist.album_content_id = artistnodelist.firstChild.nodeValue;}
            if (elementName  == "availability"){
              thisArtist.availability =artistnodelist.firstChild.nodeValue;}
            if (elementName  == "content-id"){
              thisArtist.content_id= artistnodelist.firstChild.nodeValue;}

          }  
          if (thisArtist.display_name != null && this) 
          { 
            html.push("<li><font size=-2><a href=" + thisArtist.html_href + " target=_blank>"+thisArtist.display_name+"</a>");                                                                 
          }
        }

       } 
    }    
  }
  
  function  display_tracks(tracklist, html)
  {
    // Loop through all <tracklist> nodes
    for (var i = 0; i < tracklist.length ; i++) 
    {   
      // For each <track> node, get child nodes.
      var nodeList = tracklist.item(i).childNodes;
      for (var j = 0; j < nodeList.length; j++) 
      {
        var node = nodeList.item(j);
            
	if (node.nodeName == "total-results")
          html.push ("<div class=feedHeader>Total Tracks: " + node.firstChild.nodeValue + "</div>");
	
        if (node.nodeName == "track")
        {
          //alert(node.firstChild.);
          var thisTrack = new trackInfo();
          var trackStuff = node.childNodes;
                 
          /* get all track information */
    
          for (var x = 0; x < trackStuff.length; x++)
          {
            var tracknodelist = trackStuff[x];

            var elementName = tracknodelist.nodeName;
            if (elementName == "#text") continue;
          
            if (elementName  == "display-name")
              thisTrack.display_name = tracknodelist.firstChild.nodeValue;

            if (elementName  == "artist-name"){
              thisTrack.artist_name = tracknodelist.firstChild.nodeValue;}
            if (elementName  == "album-title"){
              thisTrack.album_title = tracknodelist.firstChild.nodeValue;}
            if (elementName  == "ablum-content-id"){
              thisTrack.album_content_id = tracknodelist.firstChild.nodeValue;}
            if (elementName  == "artist-content-id"){
              thisTrack.artist_content_id = tracknodelist.firstChild.nodeValue;}
            if (elementName  == "availability"){
              thisTrack.availability = tracknodelist.firstChild.nodeValue;}
            if (elementName  == "content-id"){
              thisTrack.content_id= tracknodelist.firstChild.nodeValue;}

          }  
          if (thisTrack.display_name != null) 
          { 
            html.push("<li><font size=-2><a href=http://www.rhapsody.com/goto?variant=play&rcid=tra." + thisTrack.content_id + " target=_blank>"+thisTrack.display_name+"</a>");                                                                 
          }
          if (thisTrack.artist_name != null)
            html.push(" by <a href=http://www.rhapsody.com/goto?rcid=art." + thisTrack.artist_content_id + " target=_blank>"+thisTrack.artist_name+"</a>");      
        }
       } 
    }
 }
  function trackInfo()
  {
    this.display_name = null;
    this.artist_name = null;
    this.ablum_name = null;
    this.artist_content_id = null;
    this.album_content_id = null;
    this.content_id = null;
    this.availability = null;
  }
    
  function artistInfo()
  {
    this.html_href = null;
    this.availability = null;
    this.display_name = null;
    this.short_cut = null;
    this.primary_gengre = null;
    this.artist_id = null;
    this.content_id = null;
  } 
  function albumInfo()
  {
    this.html_href = null;
    this.availability = null;
    this.display_name = null;
    this.artist_shortcut = null;
    this.release_date = null;
    this.artist_content_id = null;
    this.album_content_id = null;
    this.artist_name = null;
  }
    
  // Set onload event handler to call init()
  _IG_RegisterOnloadHandler(init);
  _IG_Analytics("UA-1960742-7", "/YouSearch");
  </script>
  <form>
    <input type='button' name='previousfeed' id='button_back' class=groovybutton onClick='displayNextPage(false)' value='Back'>
    <input type='button' name='nextfeed' id='button_next' class=groovybutton onClick='displayNextPage(true)' value='Next'>
  </form>
]]>
</Content>
</Module>







