
function wavelet_parse(obj){
  return {
    wave: obj[1],
    wavelet: obj[2],
    last_modified: parse_time(obj[8]), 
    created: parse_time(obj[4]),
    root_blip: obj[6],
    content: obj[16],
    participants: obj[5],
    raw: obj
  }
}
      
function render_wavelet(wavelets, name){
  var container = $(document.createElement("div"))
  container.addClass("container")
  container.appendTo("#wave");
  
  var wavelet = wavelets[name];
  //console.log(wavelet, wavelets, name)
  var bliplist = wavelet.blips
  var wavelet_meta = wavelet.meta
  
  
  container.attr("id", name)
  
  //alert(data[1][0][1][2])
  //var bliplist = wavelet[1][2]
  //var wavelet_meta = wavelet_parse(wavelet[1][1]);
  //var blips = {}
  
  //window.blips = {}
  var blips = {};
  
  
  //node.append("<b>Creator:</b> "+wavelet_meta.creator+"<br>")
  var node = jQuery(document.createElement("div"))
  node.addClass("wavelet")
  node.append("<div style='float: right'>"+wavelet_meta.last_modified.toString().split("GMT")[0]+"</div>")
  //node.append("<b>Creation Date:</b> "+wavelet_meta.created+"<br>")
  
  node.append("<b>Wavelet</b> "+wavelet_meta.wavelet+" <b>By</b> ")
  node.append(user_list(wavelet_meta.participants))
  if(opt['waveletdev']){
    node.append($("<pre></pre>").html(JSON.stringify(wavelet_meta, null ,"  ")))
    //node.append($("<pre></pre>").html(JSON.stringify(blip, null ,"  ")))
    
  }
  node.append("<br>")
  if(!opt['nometa'])container.append(node);
  
  //var last=(new Date)-0;function lt(a){console.log((new Date)-last,a);last=(new Date)-0}
  
  
  $.each(bliplist, function(index, item){
    var blip = blip_parse(item)
    blips[blip.id] = blip;
  });
  
  //lt("parsed blips initially")
  if(!opt['lazy']){
    $.each(blips, function(id, blip){
      try{
        if(blip.id.indexOf("attach+") == 0){
        
        if(!document.getElementById(blip.id)){
          var node = attach_parse(blip)
          blips[blip.id].node = node;
          $("#orphans").append(node)
        }
        
      }else if(blip.id.indexOf("b+") == 0){
          var node = render_blip(blip, blips)
          if(!opt['hideorphans']){
            $("#orphans").append(node);
          }
          blips[blip.id].node = node;
      }else if(blip.id == "conversation"){ //this is the magic
        //window.conversation = blip;
        
      }else if(blip.id.indexOf("spell+") == 0){
        //ignore spelly
      }else if(blip.id == "tags"){
        //tags parsed later
      }else{
        console.warn("Unforeseen:", blip)
      }
      //*
      }catch(err){
        console.error(err);
      }
      //*/
    })
  }
  //lt("end preparse")
  function magic(conversation){
    return jQuery.map(conversation.content[2],parse_data)
  }
  //*
  
  if(blips.conversation && !opt['anarchy']){ //anarchy = no order
    //single blip waves do not have a conversation object
    var conv = magic(blips.conversation);
    
    parse_conversation(wavelets, container, conv, blips, container)
  }else{
    console.warn("no conversation object")
  }
 

  //lt("done arraginge")
  if(blips.tags){
    var inf = jQuery(document.createElement("div"))
    inf.addClass("tags")
    
    inf.append("<b>Tags</b> ")
    inf.append("<div style='float: right'>"+blips.tags.last_modified.toString().split("GMT")[0]+"</div>")
    
    inf.append("<b>By </b> ")
    inf.append(user_list(blips.tags.contributors))
    
    var taglist = []
    $.each($.map(blips.tags.content[2], function(v){
      return (v[2])||"";
    }),function(i,v){
      if(v){
        taglist.push(v)
      }
    })
    inf.append("<br>")
    inf.append(taglist.join(", "))
    
    
    if(!opt['notags']) container.append(inf);
  }
  
  //if(opt['square'

 
  
  return container
}
