// (c)2003-2008 activeweave, inc. - http://www.activeweave.com
// author: Jean Sini - mailto:jean@activeweave.com

var Activeweave = window.Activeweave || {
resizedX:         0,
resizedY:         0,
resizeSche:       null,
mainPanel:        null,
mainBlog:         null,
sideNav:          null,
onSuffix:         ".b.gif",
offSuffix:        ".g.gif",
colSuffix:        ".c.gif",
gifSuffix:        ".gif",
userAgent:        navigator.appName,
msieUA:           "Microsoft Internet Explorer",
MSIE:             "MSIE",
auth:             null,
authName:         null,
authPass:         null,
authWidth:        0,
authHeight:       100,
dialogWidth:      500,
dialogHeight:     200,
missingImg:       "/skin/img/missing",
missingImgCount:  5,
USER:             "user",
ACCOUNT:          "a.id",
INTRO:            "intro",
BODY:             "body",
PASSWORD:         "pass",
CURRENT:          "current",
CONFIRM:          "confirm",
EVENT:            "evt",
BLOG:             "b",
POST:             "p",
INHERIT:          "i",
SERVICE:          "service",
TERMS:            "terms",
TAG:              "tags",
TAG_NAME:         "tagname",
SUB:              "e.sub",
UNSUB:            "e.unsub",
EVT_INVITE:       "e.invite",
EVT_PASSWORD:     "e.password",
EVT_REGISTER:     "e.register",
URL:              "url",
SHOW:             "show",
PROMPT_DNLD:      "dnld",
PROMPT_VISITED:   "visit",
BUNDLES:          "bundles",
DISAMBIGUATE:     "disambiguate",  
OVERVIEW:         "overviewComponent",
OVERVIEW_MARKUP:  "componentMarkup",
TRIGGER:          "overviewTrigger",
REG_ERROR:        "signup.error.generic",
EMAIL_QUERY:      "email.query",
subs:             null,
thumbUrls:        new Object(),
subsStart:        null,
imgs:             null,
isDebug:          false,

isIE : function()
  {
  return Activeweave.userAgent == Activeweave.msieUA;
  },
  
isIE6 : function()
  {
  var is = false
  var ua = navigator.userAgent;
  if(ua&&ua.indexOf(Activeweave.MSIE)>=0)
    {
    var index = ua.indexOf(Activeweave.MSIE);
		if (index>=0)
      {
      var v = parseFloat(ua.substring(index+Activeweave.MSIE.length+1));
      if(v<7) is = true;
      }
    }
  return is;
  },

isMacFF: function()
  {
  var userAgent = navigator.userAgent.toLowerCase();
  if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1)
    {
    return true;
    }
  },
  
log: function(message, exception)
  {
  if(Activeweave.isDebug)
    {
    var m = message?message:"";
    if(exception)
      {
      m += (message.length>0?" - ":"")+"Exception ["+exception.message+"].";
      }
    alert(m);
    }
  },

hideShowList: function(show, img)
  {
  var imgSrc = $(img).src;
	if($(show).style.display == "none")
    {
		$(show).style.display = "block";
    imgSrc = imgSrc.substring(0,imgSrc.indexOf("/expand"))+"/contract_icon.png";
    $(img).src = imgSrc;
	  }
  else
    {
		$(show).style.display = "none";
    imgSrc = imgSrc.substring(0,imgSrc.indexOf("/contract"))+"/expand_icon.png";
		$(img).src = imgSrc;
	  }
  },

setPosition: function(element,x,y)
  {
  try
    {
    element.style.left = x+"px";
    element.style.top  = y+"px";
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.setPosition()",ex);
    }
  },

tokenize:function(tokenStr,separator)
  {
  var separatorInd    = 0;
  var index           = 0;
  var tokens          = new Array();
  separatorInd = tokenStr.indexOf(separator);
  while(separatorInd>0)
    {
    tokens[index] = new String(tokenStr.substring(0,separatorInd));
    index++;
    tokenStr = new String(tokenStr.substr(separatorInd+1));
    separatorInd = tokenStr.indexOf(separator);
    }
  tokens[index] = new String(tokenStr);
  return tokens;
  },

inherit: function(url,aid,channelType)
  {
  try
    {
    if(!aid||aid==undefined||aid<=0) return;
    var params    = Activeweave.addParameter(Activeweave.USER,aid, true);
    params       += Activeweave.addParameter(Activeweave.TYPE,channelType,false);
    var toggler   = $('subscribeToggler_'+bid);
    var subscribe = event==Activeweave.SUB;
    var title     = subscribe?"Unsubscribe from these notes":"Subscribe to these notes";
    if(toggler)
      {
      toggler.onclick = function() { return false };
      toggler.title   = title;
      }
    var toggler2  = $('subscriberToggler_'+bid);
    if(toggler2)
      {
      toggler2.onclick = function() { return false };
      toggler2.title   = title;
      }
    var label     = $('subscribeTogglerLabel_'+bid);
    if(label)
      {
      label.innerHTML = event==Activeweave.SUB?"Unsubscribe":"Subscribe";
      }
    var img     = $('subscribeTogglerImg_'+bid);
    if(img)
      {
      if (img.className == "subs_icon")
        {
        var src = img.src;
        var type = (src.indexOf("/channel-")>=0)?"channel":"user";
        img.src = Activeweave.imgs+"/"+type+"-"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"-icon.png";
        }
      else if (img.className == "subs_btn")
        {
        var src = img.src;
        var type = (src.indexOf("_btn_user")>=0)?"_user":"";
        img.src = Activeweave.imgs+"/"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"_btn"+type+".png";
        }
       else
        {
        var src = img.src;
        var type = (src.indexOf("_btn_user")>=0)?"_user":"";
        img.src = Activeweave.imgs+"/"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"_btn"+type+"_notes.gif";
        }
      img.alt = title;
      }
    var img2     = $('subscriberTogglerImg_'+bid);
    if(img2)
      {
      if (img2.className == "subs_icon")
        {
        var src = img2.src;
        var type = (src.indexOf("/channel-")>=0)?"channel":"user";
        img2.src = Activeweave.imgs+"/"+type+"-"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"-icon.png";
        }
      else if (img2.className == "subs_btn")
        {
        var src = img2.src;
        var type = (src.indexOf("_btn_user")>=0)?"_user":"";
        img2.src = Activeweave.imgs+"/"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"_btn"+type+".png";
        }
       else
        {
        var src = img2.src;
        var type = (src.indexOf("_btn_user")>=0)?"_user":"";
        img2.src = Activeweave.imgs+"/"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"_btn"+type+"_notes.gif";
        }
      img2.alt = title;
      }
    new Ajax.Request( '/ajax/inherit.subscriptions.json.jsp',
                    { asynchronous: true,
                      method:       'post',
                      parameters:   params,
                      onComplete:   Activeweave.inherited});
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.inherit()",ex);
    }
  return false;
  },

inherited: function(request)
  {
  try
    {
    if(!request) return;
    var raw           = request.responseText;
    if(raw)
      {
      var response;
      try
        {
        response      = eval("("+raw+")");
        }
      catch(ex)
        {
        response = null;
        }
      if(response)
        {
        var status        = response.status;
        var success       = response.success;
        var subscribed    = response.subscribed;
        var unsubscribed  = response.unsubscribed;
        var event         = (subscribed&&subscribed!=undefined&&subscribed>0)?Activeweave.UNSUB:Activeweave.SUB;
        var bid           = (subscribed&&subscribed!=undefined&&subscribed>0)?subscribed:unsubscribed;
        if(success)
          {
          var toggler = $('subscribeToggler_'+bid);
          if(toggler)
            {
            toggler.onclick = function() {return Activeweave.subscribe('/ajax/subscribe.json.jsp',bid,event)};
            }
          toggler = $('subscriberToggler_'+bid);
          if(toggler)
            {
            toggler.onclick = function() {return Activeweave.subscribe('/ajax/subscribe.json.jsp',bid,event)};
            }
          }
        }
      }
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.subscribed()",ex);
    }
  },

subscribe: function(url,bid,event)
  {
  try
    {
    if(!bid||bid==undefined||bid<=0) return;
    var params    = Activeweave.addParameter(Activeweave.BLOG,bid, true);
    params       += Activeweave.addParameter(event,true,false);
    var toggler   = $('subscribeToggler_'+bid);
    var subscribe = event==Activeweave.SUB;
    var title     = subscribe?"Unsubscribe from these notes":"Subscribe to these notes";
    if(toggler)
      {
      toggler.onclick = function() { return false };
      toggler.title   = title;
      }
    var toggler2  = $('subscriberToggler_'+bid);
    if(toggler2)
      {
      toggler2.onclick = function() { return false };
      toggler2.title   = title;
      }
    var label     = $('subscribeTogglerLabel_'+bid);
    if(label)
      {
      label.innerHTML = event==Activeweave.SUB?"Unsubscribe":"Subscribe";
      }
    var img     = $('subscribeTogglerImg_'+bid);
    if(img)
      {
      if (img.className == "subs_icon")
        {
        var src = img.src;
        var type = (src.indexOf("/channel-")>=0)?"channel":"user";
        img.src = Activeweave.imgs+"/"+type+"-"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"-icon.png";
        }
      else if (img.className == "subs_btn")
        {
        var src = img.src;
        var type = (src.indexOf("_btn_user")>=0)?"_user":"";
        img.src = Activeweave.imgs+"/"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"_btn"+type+".png";
        }
       else
        {
        var src = img.src;
        var type = (src.indexOf("_btn_user")>=0)?"_user":"";
        img.src = Activeweave.imgs+"/"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"_btn"+type+"_notes.gif";
        }
      img.alt = title;
      }
    var img2     = $('subscriberTogglerImg_'+bid);
    if(img2)
      {
      if (img2.className == "subs_icon")
        {
        var src = img2.src;
        var type = (src.indexOf("/channel-")>=0)?"channel":"user";
        img2.src = Activeweave.imgs+"/"+type+"-"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"-icon.png";
        }
      else if (img2.className == "subs_btn")
        {
        var src = img2.src;
        var type = (src.indexOf("_btn_user")>=0)?"_user":"";
        img2.src = Activeweave.imgs+"/"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"_btn"+type+".png";
        }
       else
        {
        var src = img2.src;
        var type = (src.indexOf("_btn_user")>=0)?"_user":"";
        img2.src = Activeweave.imgs+"/"+(event==Activeweave.SUB?"unsubscribe":"subscribe")+"_btn"+type+"_notes.gif";
        }
      img2.alt = title;
      }
    new Ajax.Request( url,
                    { asynchronous: true,
                      method:       'post',
                      parameters:   params,
                      onComplete:   Activeweave.subscribed});
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.subscribe()",ex);
    }
  return false;
  },

subscribed: function(request)
  {
  try
    {
    if(!request) return;
    var raw           = request.responseText;
    if(raw)
      {
      var response;
      try
        {
        response      = eval("("+raw+")");
        }
      catch(ex)
        {
        response = null;
        }
      if(response)
        {
        var status        = response.status;
        var success       = response.success;
        var subscribed    = response.subscribed;
        var unsubscribed  = response.unsubscribed;
        var event         = (subscribed&&subscribed!=undefined&&subscribed>0)?Activeweave.UNSUB:Activeweave.SUB;
        var bid           = (subscribed&&subscribed!=undefined&&subscribed>0)?subscribed:unsubscribed;
        if(success)
          {
          var toggler = $('subscribeToggler_'+bid);
          if(toggler)
            {
            toggler.onclick = function() {return Activeweave.subscribe('/ajax/subscribe.json.jsp',bid,event)};
            }
          toggler = $('subscriberToggler_'+bid);
          if(toggler)
            {
            toggler.onclick = function() {return Activeweave.subscribe('/ajax/subscribe.json.jsp',bid,event)};
            }
          }
        }
      }
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.subscribed()",ex);
    }
  },

  toggleSubscribedWatchlist: function()
    {
    var url = "/ajax/toggle.subscribed.watchlist.jsp";
    try
      {
      new Ajax.Request( url,
                      { asynchronous: true,
                        method:       'post',
                        onComplete:   Activeweave.toggledSubscribedWatchlist});
      }
    catch(ex)
      {
      Activeweave.log("Activeweave.toggleSubscribedWatchlist()",ex);
      }
    return false;
    },

  toggledSubscribedWatchlist: function(request)
    {
    try
      {
      if(!request) return;
      var raw           = request.responseText;
      if(raw)
        {
        var response;
        try
          {
          response      = eval("("+raw+")");
          }
        catch(ex)
          {
          response = null;
          }
        if(response)
          {
          var status      = response.status;
          var subscribed  = response.subscribedWatchlist;
          if(status&&status=='on')
            {
            var subscribedElt   = $('isSubscribedWatchList');
            var unsubscribedElt = $('isUnsubscribedWatchList');

            if(subscribedElt)
              {
              subscribedElt.style.display = subscribed?"inline":"none";
              }
            if(unsubscribedElt)
              {
              unsubscribedElt.style.display = subscribed?"none":"inline";
              }
            }
          }
        }
      }
    catch(ex)
      {
      Activeweave.log("Activeweave.toggledSubscribedWatchlist()",ex);
      }
    },

toggleSubscriptions: function(bid,typeOn,typeOff)
  {
  var subsOnElem      = $(typeOn);
  var subsOffElem     = $(typeOff);
  var subsOnToggler   = $(typeOn+"Toggler");
  var subsOffToggler  = $(typeOff+"Toggler");
  var subsTogglerP    = $('subsTogglerP');

  if(subsOnElem)
    {
    if(subsOnElem.style.display!='none') return;
    try
      {
      subsOnElem.style.display = 'block';
      var html = subsOnElem.innerHTML;
      if(html==null||html.length<=0)
        {
        Activeweave.requestSubscriptions("/ajax/channel."+typeOn+".json.jsp",bid);
        }
      else
        {
        subsOffElem.style.display = 'none';
        }
      if(subsOnToggler)   subsOnToggler.className = 'subsTogglerActive';
      if(subsOffToggler)  subsOffToggler.className  = 'subsTogglerInactive';
      if(subsTogglerP)
        {
        subsTogglerP.style.backgroundImage = (typeOn=='subscriptions')?'url(/skin/img/subs.toggler.png)':'url(/skin/img/subs.toggler.rev.png)';
        }
      }
    catch(ex)
      {
      Activeweave.log("Activeweave.showSubscriptions()",ex);
      }
    }
  },

requestSubscriptions: function(url,bid)
  {
  try
    {
    Activeweave.subsStart = new Date();
    if(!bid||bid==undefined||bid<=0) return;
    var params    = Activeweave.addParameter(Activeweave.BLOG,bid, true);
    Activeweave.log("Activeweave.requestSubscriptions() - Requesting.");
    new Ajax.Request( url,
                    { asynchronous: true,
                      method:       'post',
                      parameters:   params,
                      onComplete:   Activeweave.receivedSubscriptions});
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.requestSubscriptions()",ex);
    }
  return false;
  },

receivedSubscriptions: function(request)
  {
  try
    {
    Activeweave.log("Activeweave.receivedSubscriptions() - Starting.");
    if(!request) return;
    var raw           = request.responseText;
    var subsStart;
    var subsEnd       = new Date();
    var processing    = subsEnd.getTime()-Activeweave.subsStart.getTime();
    if(raw)
      {
      var response;
      try
        {
        response      = eval("("+raw+")");
        }
      catch(ex)
        {
        response = null;
        }
      if(response)
        {
        subsStart         = new Date();
        var status        = response.status;
        var authenticated = status=='on';
        Activeweave.subs  = response.subs;
        var subsElem      = $(response.type);
        var subsType      = response.type=='subscriptions'?true:false;
        var offType       = subsType?'subscribers':'subscriptions';
        var subsOff       = $(offType);
        if(subsElem&&Activeweave.subs)
          {
          var length = Activeweave.subs.length;
          var html = "";
          var firstType = true;
          for(var i=0;i<length;i++)
            {
            var sub         = Activeweave.subs[i];
            if(sub.type!=null)
              {
              var style   = (!firstType)?" style='margin-top: 30px;' ":"";
              var type    = (sub.count>1)?"all "+sub.count+" "+sub.type:" this "+(sub.type.substr(0,(sub.type.length-1)));
              var inherit = "<span class='subsTypeAll'>Add "+type.toLowerCase()+"</span>"; 
              html +="<li><div class='croppedItem subsTypeHeader' "+style+"><span class='subsTypeLabel'>"+sub.type+"</span></div></li>";
              firstType = false;
              }
            else
              {
              var b           = sub.b;
              var blink       = sub.blink;
              var btitle      = subsType?sub.btitle:sub.ttip;
              var btype       = sub.ttip&&sub.ttip.trim().length>0?"user":"channel";
              var bicon       = sub.bicon;
              var subscribed  = sub.subscribed;
              var ttip        = '';
              if(subsType)
                {
                ttip = sub.ttip==''?('Blog: '+btitle):('By: '+sub.ttip);
                }
              else
                {
                ttip = 'View '+sub.btitle;
                }
              html += "<li title='"+ttip+"' id='blog-"+(subsType?'':'subs-')+b+"'>";
              html += "<a class='subs' href='"+blink+"'>";
              html += "<div class='croppedItem'>";
              html += "<img src='"+bicon+"' class='channelIcon' alt=''/>";
              html += btitle;
              html += "</div>";
              html += "</a>";
              if(authenticated)
                {
                var title   = subscribed?"Unsubscribe from these notes":"Subscribe to these notes";
                var action  = subscribed?Activeweave.UNSUB:Activeweave.SUB;
                var icon    = subscribed?"unsubscribe":"subscribe";
                html += "<a class='subsToggler' id = '"+(subsType?'subscribe':'subscriber')+"Toggler_"+b+"' href = '' ";
                html += " onclick = 'Activeweave.subscribe(\"/ajax/subscribe.json.jsp\","+b+",\""+action+"\");return false;' ";
                html += " title = '"+title+"'>";
                html += "<img id='"+(subsType?'subscribe':'subscriber')+"TogglerImg_"+b+"' class='subs_icon' src='"+Activeweave.imgs+"/"+btype+"-"+icon+"-icon.png' alt='"+title+"'/>";
                html += "</a>";
                }
              html +="</li>\n";
              }
            }
          subsEnd     = new Date();
          processing  = subsEnd.getTime()-subsStart.getTime();
          subsStart   = new Date();
          subsElem.innerHTML = html;
          subsEnd     = new Date();
          processing  = subsEnd.getTime()-subsStart.getTime();
          }
        if(subsOff)
          {
          subsOff.style.display = 'none';
          }
        }
      }
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.receivedSubscriptions()",ex);
    }
  },

invite: function(user,intro)
  {
  try
    {
    var userElt   = $(user);
    var introElt  = $(intro);
    var buttonsElt = $('authButtons');
    if(buttonsElt)
      {
      buttonsElt.style.display = 'none';
      }
    var invite = $('inviteIntro');
    if(invite)
      {
      invite.style.display = 'none';
      }
    var statusElt = $('lookupHits');
    if(statusElt)
      {
      statusElt.style.display = 'none';
      }
    if(userElt&&introElt)
      {
      var url       = "/ajax/invite.user.jsp";
      var params    = Activeweave.addParameter(Activeweave.USER, userElt.value, true);
      params       += Activeweave.addParameter(Activeweave.INTRO,introElt.value,false);
      params       += Activeweave.addParameter(Activeweave.EVENT,Activeweave.EVT_INVITE,false);
      userElt.value = "";
      new Ajax.Request( url,
                    { asynchronous: true,
                      method:       'post',
                      parameters:   params,
                      onComplete:   Activeweave.invited});
      }
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.invite()",ex);
    }
  },

lookup: function(user)
  {
  try
    {
    var userElt   = $(user);
    if(userElt&&userElt.value.trim().length>0)
      {
      var url       = "/ajax/lookup.user.jsp";
      var params    = Activeweave.addParameter(Activeweave.USER, userElt.value, true);
      new Ajax.Request( url,
                    { asynchronous: true,
                      method:       'post',
                      parameters:   params,
                      onComplete:   Activeweave.lookedup});
      }
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.lookup()",ex);
    }
  },

connect: function(account,intro,email)
  {
  try
    {
    var accountValue = account.value;
    if(!account.value||account.value=='undefined')
      {
      for(var i=0;i<account.length;i++)
        {
        if(account[i].checked)
          {
          accountValue = account[i].value;
          break;
          }
        }
      }
    var introElt    = $(intro);
    var emailElt    = $(email);
    var userElt     = $('search_txt');
    var buttonsElt  = $('authButtons');
    var emailQuery  = 0;
    if(emailElt && emailElt.value && emailElt.value == 'true')
      {
      emailQuery = 1;
      }
    if(buttonsElt)
      {
      buttonsElt.style.display = 'none';
      }
    var connect = $('connectIntro');
    if(connect)
      {
      connect.style.display = 'none';
      }
    var statusElt = $('lookupHits');
    if(statusElt)
      {
      statusElt.style.display = 'none';
      }
    if(accountValue&&introElt)
      {
      var url       = "/ajax/invite.user.jsp";
      var params    = Activeweave.addParameter(Activeweave.ACCOUNT, accountValue, true);
      params       += Activeweave.addParameter(Activeweave.INTRO,introElt.value,false);
      params       += Activeweave.addParameter(Activeweave.EVENT,Activeweave.EVT_INVITE,false);
      params       += Activeweave.addParameter(Activeweave.EMAIL_QUERY,emailQuery,false);
      if(userElt)
        {
        userElt.value = "";
        }
      new Ajax.Request( url,
                    { asynchronous: true,
                      method:       'post',
                      parameters:   params,
                      onComplete:   Activeweave.connected});
      }
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.connect()",ex);
    }
  },

invited: function(request)
  {
  try
    {
    if(!request) return;
    var raw           = request.responseText;
    var status        = request.status;
    var message       = "We were unable to process your invitation request. Please try again in a few moments.";
    var error         = false;
    if(raw&&status==200)
      {
      message = raw.trim();
      }
    else
      {
      error = true;
      }
    var statusElt = $('authInvalid');
    if(statusElt)
      {
      statusElt.innerHTML = message;
      statusElt.style.display = 'block';
      statusElt.style.color = error?"#aa0000":"#79be41";
      }
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.invited()",ex);
    }
  },

lookedup: function(request)
  {
  try
    {
    if(!request) return;
    var raw           = request.responseText;
    var status        = request.status;
    var message       = "We were unable to process your search request. Please try again in a few moments.";
    var error         = false;
    if(raw&&status==200)
      {
      message = raw.trim();
      }
    else
      {
      error = true;
      }
    var statusElt = $('lookupHits');
    if(statusElt)
      {
      statusElt.innerHTML = message;
      statusElt.style.display = 'block';
      }
    var matches = $('matches');
    var email   = $('nomatchemail');
    var connect = $('connectUser');
    var buttonsElt = $('authButtons');
    if(buttonsElt)
      {
      buttonsElt.style.display = 'block';
      }
    var infoElt = $('authInvalid');
    if(infoElt)
      {
      infoElt.style.display = 'none';
      }
    if(matches||email)
      {
      if(connect)
        {
        if(email)
          {
          $('authSubmit').style.display = 'none';
          $('authInviteSubmit').style.display = 'inline';
          $('connectIntro').style.display = 'none';
          $('inviteIntro').style.display = "block";
          }
        else
          {
          $('authInviteSubmit').style.display = 'none';
          $('authSubmit').style.display = 'inline';
          $('inviteIntro').style.display = 'none';
          $('connectIntro').style.display = "block";
          }
        connect.style.display = 'block';
        }
      }
    else
      {
      if(connect)
        {
        connect.style.display = 'none';
        }
      }
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.invited()",ex);
    }
  },

connected: function(request)
  {
  try
    {
    if(!request) return;
    var raw           = request.responseText;
    var status        = request.status;
    var message       = "We were unable to process your invitation request. Please try again in a few moments.";
    var error         = false;
    var inheritUser   = 0;
    if(raw&&status==200)
      {
      message = raw.trim();
      }
    else
      {
      error = true;
      }
    var statusElt = $('authInvalid');
    if(statusElt)
      {
      statusElt.innerHTML = message;
      statusElt.style.display = 'block';
      statusElt.style.color = error?"#aa0000":"#79be41";
      var userElt = $('inheritUser');
      if(userElt)
        {
        inheritUser = userElt.value;
        }
      }
    if(inheritUser>0)
      {
      window.setTimeout(function() { Activeweave.offerInherit(inheritUser);},1500);
      }
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.connected()",ex);
    }
  },

offerInherit: function(inheritUser)
  {
  try
    {
    var popup = $('popup');
    if(popup)
      {
      popup.innerHTML         = "";
      popup.style.display     = "none";
      popup.style.visibility  = "hidden";
      Activeweave.requestConnectPopup('inherit',inheritUser,950);
      }
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.offerInherit()",ex);
    }
  },

inheritAll: function(account)
  {
  try
    {
    var buttons = $('authButtons');
    if(buttons)
      {
      buttons.style.display = 'none';
      }
    var url       = "/ajax/inherit.sources.jsp";
    var params    = Activeweave.addParameter(Activeweave.ACCOUNT,account, true);
    new Ajax.Request( url,
                    { asynchronous: true,
                      method:       'post',
                      parameters:   params,
                      onComplete:   Activeweave.inheritedAll});
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.inherit()",ex);
    }
  },

inheritedAll: function(request)
  {
  try
    {
    if(!request) return;
    var raw           = request.responseText;
    var status        = request.status;
    var message       = "We were unable to process your request. Please try again in a few moments.";
    var error         = false;
    var inheritUser   = 0;
    if(raw&&status==200)
      {
      message = raw.trim();
      }
    else
      {
      error = true;
      }
    var sources = $('inheritSources');
    var statusElt = $('inheritStatus');
    if(statusElt)
      {
      statusElt.innerHTML = message;
      statusElt.style.color = error?"#aa0000":"#79be41";
      }
    if(sources)
      {
      sources.style.display = 'none';
      }
    window.setTimeout(Activeweave.closePopup,2000);
    }
  catch(ex)
    {
    Activeweave.log("Activeweave.inheritedAll()",ex);
    }
  },

showHide: function(id)
  {
  var elt = document.getElementById(id);
  if(elt==null) return false;

  if(elt.style.visibility=="visible"||elt.className=="postHideShow")
    {
    elt.style.visibility = "hidden";
    elt.style.display    = "none";
    elt.className        = "postShowHide";
    }
  else
    {
    elt.style.visibility = "visible";
    elt.style.display    = "inline";
    elt.className        = "postHideShow";
    }
  return false;
  },
 // like showHide but returns null if el not found, otherwise whether the el is now visible
 // and can be set to open or close rather than toggle.
  visToggle: function(id, open_close)
    {
      var elt = document.getElementById(id);
      if (elt == null) return null;
      if ( open_close == null /* toggle */
           || (open_close == 1 && (elt.style.display == '' ||elt.style.display == 'none'))
           || (open_close == 0 && elt.style.display != 'none'))
                Activeweave.showHide(id);
      if (elt.style.display == "none") return false;
      return true;
    },

init: function(imgs,hasOpml,subsForBlog)
  {
  Activeweave.log("Activeweave.init() - Starting.");
  Activeweave.imgs = imgs;
  if(Activeweave.fitTags)
    {
    Activeweave.fitTags();
    }
  Activeweave.initFileUploads();
  Activeweave.initThumbnails();
  if(hasOpml)
    {
    window.setTimeout(Activeweave.requestOpmlProgress,1000);
    }
  if(subsForBlog&&subsForBlog>0)
    {
    Activeweave.requestSubscriptions('/ajax/channel.subscriptions.json.jsp',subsForBlog);
    }
  },

initTagSuggestSource: function(tagSuggestUrl, tagSuggestConfig)
  {
  var schema  = ["suggest.t","n"];
  Object.extend(this._tagSuggestSource = new YAHOO.widget.DS_XHR(tagSuggestUrl, schema), Object.extend(
    {
    maxCacheEntries  : 60,
    queryMatchCase   : false,
    queryMatchSubset : false,
    responseType     : YAHOO.widget.DS_XHR.prototype.TYPE_JSON,
    scriptQueryParam : "query"
    }, tagSuggestConfig || {}));
  },

initChannelSuggestSource: function(suggestUrl, suggestConfig)
  {
  var schema  = ["suggest.c","n"];
  Object.extend(this._channelSuggestSource = new YAHOO.widget.DS_XHR(suggestUrl, schema), Object.extend(
    {
    maxCacheEntries  : 60,
    queryMatchCase   : false,
    queryMatchSubset : false,
    responseType     : YAHOO.widget.DS_XHR.prototype.TYPE_JSON,
    scriptQueryParam : "query"
    }, suggestConfig || {}));
  },

setTagSuggest: function(inputEl, containerEl,singleSuggestion)
  {
  Object.extend(new YAHOO.widget.AutoComplete(inputEl, containerEl, this._tagSuggestSource),
    {
    delimChar            : singleSuggestion?"":",",
    maxResultsDisplayed  : 40,
    minQueryLength       : 2,
    queryDelay           : 0.25,
    highlightClassName   : 'high'
    });
  },

setChannelSuggest: function(inputEl, containerEl)
  {
  Object.extend(new YAHOO.widget.AutoComplete(inputEl, containerEl, this._channelSuggestSource),
    {
    delimChar            : "",
    maxResultsDisplayed  : 40,
    minQueryLength       : 2,
    queryDelay           : 0.25,
    highlightClassName   : 'high'
    });
  },

initFileUploads: function()
  {
  var W3CDOM = (document.createElement && document.getElementsByTagName);
  if(!W3CDOM) return;
  var fakeFileUpload = document.createElement('div');
	fakeFileUpload.className = 'fakefile';
	fakeFileUpload.appendChild(document.createElement('input'));
	var image = document.createElement('img');
	image.src=Activeweave.imgs+'/browse_sq_btn.png';
	fakeFileUpload.appendChild(image);
  var shortFakeFileUpload = document.createElement('div');
	shortFakeFileUpload.className = 'fakefileshort';
	shortFakeFileUpload.appendChild(document.createElement('input'));
	var shortImage = document.createElement('img');
	shortImage.src=Activeweave.imgs+'/browse_sq_btn.png';
	shortFakeFileUpload.appendChild(shortImage);
  var x = document.getElementsByTagName('input');
	for (var i=0;i<x.length;i++)
	  {
		if (x[i].type != 'file') continue;
		if (x[i].parentNode.className == 'fileinput')
      {
      x[i].className = 'file hidden';
      var clone = fakeFileUpload.cloneNode(true);
      x[i].parentNode.appendChild(clone);
      x[i].relatedElement = clone.getElementsByTagName('input')[0];
      x[i].onchange = x[i].onmouseout = function ()
        {
        this.relatedElement.value = this.value;
        }
      }
    else if(x[i].parentNode.className == 'fileinputshort')
      {
      x[i].className = 'fileshort hidden';
      var clone = shortFakeFileUpload.cloneNode(true);
      x[i].parentNode.appendChild(clone);
      x[i].relatedElement = clone.getElementsByTagName('input')[0];
      x[i].onchange = x[i].onmouseout = function ()
        {
        this.relatedElement.value = this.value;
        }
      }
    }
  },

/** It seems that wrapped some block elements inside an anchor, then
 *  use a css selector <i>a:hover innerSelector</i> does not work, so we
 *  listen on mouse event on thumbnail object to implements HOVER behaviour.
 */
initThumbnails : function()
  {
  $A(document.body.getElementsByTagName('*')).each(function (element)
    {
    if (element.className.indexOf("thumb") != -1 || element.className.indexOf("picture") != -1 )
      {
      element.onmouseover = Element.addClassName.bind(Element, element, "thumb_hover");
      element.onmouseout  = Element.removeClassName.bind(Element, element, "thumb_hover");
      }
    })
  },

checkMissingImg: function(img,format)
  {
  // protect IE, IE returns width==0 if an image is not displayed, encounters infinte loops
  /*
  if (img&&img.width > 0 && img.width < 30)
    {
    var imgId = 1+Math.floor((Activeweave.missingImgCount)*Math.random());
    img.src = Activeweave.missingImg+format+"."+imgId+".png";
    }
  */
  },

hitch: function(obj, methodName)
  {
  return function() { obj[methodName].apply(obj, arguments); }
  },

/* returns a string representing the specified name and url-encoded value. */
/* accepts a boolean argument indicating whether this request parameter    */
/* is the first specified in the request. If not, a '&' will be prepended. */
addParameter: function(name,value,isFirst)
  {
  var param = name+'='+encodeURIComponent(value);
  if(isFirst==true)
    {
    return param;
    }
  else
    {
    return '&'+param;
    }
  },

swap: function(id, src)
  {
	$(id).src = src;
  }
};

Ajax.Responders.register(
  {
  // register a common exception handler for ajax request in prototype.js
  onException : function (request, exception)
    {
    if(Activeweave.isDebug)
      {
      var s = "An error occurred while requesting ["+request.url+"]";
      try
        {
        if (request.transport.status > 0)
          {
          s += "\nHTTP " + request.transport.status
              + " " + request.transport.statusText;
          }
        }
      catch(ex) {/* ignore exceptions */}
      try
        {
        if (typeof exception == "string")
          {
          s += "\n\nError message: " + exception;
          }
        else
          {
          s += "\n\nError message: " + exception.message;
          }
        if (exception.stack) // stack trace information is available in FF
          {
          s += "\n" + exception.stack;
          }
        }
      catch(ex) {/* ignore exceptions */}
      Activeweave.log(s);
      }
    },
  // register a common request failed handler for ajax request in prototype.js
  onComplete : function (request, transport, object)
    {
    if (request.responseIsSuccess() || request.options.onFailed)
      {
      return; // only use if no failed handler for the request
      }
    if(Activeweave.isDebug)
      {
      var s = "An exception occurred while requesting [" + request.url+"]";
      try
        {
        if (transport.status > 0)
          {
          s += "\nHTTP " + transport.status
              + " " + transport.statusText;
          }
        }
      catch(ex) {/* ignore exceptions */}
      Activeweave.log(s);
      }
    }
  });

// add history support
Activeweave.HistorySupport = {
  register : function (callback) // callback argument: (fragment object)
    {
    if (Activeweave.isIE())
      { // support IE with a helper iframe
      setTimeout(function ()
        {
        var ifr = document.createElement("iframe");
        ifr.width = ifr.height = 0; ifr.frameBorder = 0;
        ifr.style.display = "none";
        ifr.src = "/skin/js/history.html?hash=" + encodeURIComponent(location.hash);
        document.body.appendChild(ifr);
        Activeweave.HistorySupport.navigateToHash = function (hash)
          {
          ifr.src = "/skin/js/history.html?hash=" + encodeURIComponent(hash);
          }
        }, 100)
      }
    var lastHash = "";
    window.setInterval(function ()
      {
      if (window.location.hash == lastHash)
        {
        return; // hash is not changed
        }
      lastHash = window.location.hash;
      var fragment = Activeweave.FragmentFormat.parse(location.hash);
      (callback || Object.emptyFunction) (fragment);
      }, 200)
    },

  navigateToHash : function (hash)
    {
    window.location.hash = "#" + (hash || "");
    },

  navigateToOffset : function (offsetKey, offset)
    {
    var fragment = Activeweave.FragmentFormat.parse(location.hash);
    fragment[offsetKey] = (offset || "0").toString();
    if (fragment[offsetKey] == "0")
      {  // strip offset value == 0
      delete fragment[offsetKey];
      }
    this.navigateToHash(Activeweave.FragmentFormat.format(fragment));
    },

  navigateFromFrame : function(win)
    {
    var s = win.location.search;
    if (s && s.substring(0, 6) == "?hash=")
      {
      var hash = decodeURIComponent(s.substring(6));
      win.document.title = document.title + " - #" + hash;
      window.location.hash = hash;
      }
    }
}

// using this hash fragment format : (k1=v1)(k2=v2)
Activeweave.FragmentFormat = {
  parse : function (s) {
    var hash = {};
    if (!s) return hash;
    (s.match(/\((.+?)\)/g) || []).each(function (parenthesis)
      {
      var a = parenthesis.substring(1, parenthesis.length - 1).split("=", 2);
      if (a.length == 2)
        {
        hash[decodeURIComponent(a[0])] = decodeURIComponent(a[1]);
        }
      else if (a.length == 1)
        {
        hash[decodeURIComponent(a[0])] = "";
        }
      });
    return hash;
    },
  format : function (hash) {
    return $H(hash).map(function(pair) {
      return '(' + pair.map(encodeURIComponent).join('=') + ')';
      }).join('');
    }
};

String.prototype.trim = function ()
  {
  return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
  }
