// (c)2003-2008 activeweave, inc. - http://www.activeweave.com
// author: Jean Sini - mailto:jean@activeweave.com

Activeweave = window.Activeweave || {};

/* Temporary Redefinition in order to function both  in Rover and Stickis */
Activeweave.Utils                 = Activeweave.Utils                 || {};
Activeweave.Utils.log             = Activeweave.Utils.log             || Activeweave.log;
Activeweave.Utils.addParameter    = Activeweave.Utils.addParameter    || Activeweave.addParameter;
Activeweave.Utils.USER            = Activeweave.Utils.USER            || Activeweave.USER;
Activeweave.Utils.EVENT           = Activeweave.Utils.EVENT           || Activeweave.EVENT;
Activeweave.Utils.EVT_PASSWORD    = Activeweave.Utils.EVT_PASSWORD    || Activeweave.EVT_PASSWORD;
Activeweave.Utils.EVT_REGISTER    = Activeweave.Utils.EVT_REGISTER    || Activeweave.EVT_REGISTER;
Activeweave.Utils.PASSWORD        = Activeweave.Utils.PASSWORD        || Activeweave.PASSWORD;
Activeweave.Utils.CONFIRM         = Activeweave.Utils.CONFIRM         || Activeweave.CONFIRM;
Activeweave.Utils.CURRENT         = Activeweave.Utils.CURRENT         || Activeweave.CURRENT;
Activeweave.Utils.TERMS           = Activeweave.Utils.TERMS           || Activeweave.TERMS;
Activeweave.Utils.INTRO           = Activeweave.Utils.INTRO           || Activeweave.INTRO;
Activeweave.Utils.BODY            = Activeweave.Utils.BODY            || Activeweave.BODY;
Activeweave.Utils.INHERIT         = Activeweave.Utils.INHERIT         || Activeweave.INHERIT;
Activeweave.Utils.BLOG            = Activeweave.Utils.BLOG            || Activeweave.BLOG;
Activeweave.Utils.REG_ERROR       = Activeweave.Utils.REG_ERROR       || Activeweave.REG_ERROR;
Activeweave.Utils.PROMPT_DNLD     = Activeweave.Utils.PROMPT_DNLD     || Activeweave.PROMPT_DNLD;
Activeweave.Utils.SHOW            = Activeweave.Utils.SHOW            || Activeweave.SHOW;
Activeweave.Utils.BUNDLES         = Activeweave.Utils.BUNDLES         || Activeweave.BUNDLES;
Activeweave.Utils.PROMPT_VISITED  = Activeweave.Utils.PROMPT_VISITED  || Activeweave.PROMPT_VISITED;

Activeweave.validEmailRegExp      = /^[^@]+@((?:\w+\.)*\w[\w-]{0,128})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
//Activeweave.validEmailRegExp    = /^[^@]+@[^@^.]+.[a-z]{2,}$/i;

Activeweave.defaultRenewPasswordMessage = null;
Activeweave.ASYNC_UPLOAD_MSG            = "No need to wait around: we&#x2019;ll process your file even if you leave.";
Activeweave.onOpmlComplete              = null;
Activeweave.DOWNLOADED_COOKIE           = "activeweave.download";
Activeweave.POST_REGISTER_DELAY         = 2000;

Activeweave.setOpmlCompleted = function(callback)
  {
  Activeweave.onOpmlComplete = callback;
  }

Activeweave.feedbackPopupReceived = function(request)
  {
  try
    {
    Activeweave.popupReceived(request);
    var userInput = $(Activeweave.Utils.USER);
    if(userInput) userInput.focus();
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.Button.init()",ex);
    }
  }

Activeweave.registerPopupReceived = Activeweave.feedbackPopupReceived;

Activeweave.isValidInput = function(param,min,max,msg,email)
  {
  if(!param||param.trim().length<min||(email&&param.search(Activeweave.validEmailRegExp)<0))
    {
    return msg+(email?" is invalid.":" is too short.");
    }
  if(param.trim().length>max)
    {
    return msg+" is too long.";
    }
  return "";
  }

Activeweave.validateUser = function(form,user)
  {
  try
    {
    var userError     = $('userError');

    var error = false;
    var userErrorMsg    = Activeweave.isValidInput(user,4,form.user.maxLength,"The address you entered ",true);
    userError.innerHTML  = userErrorMsg;
    error = userErrorMsg.length>0;

    if(error) return false;

    userError.innerHTML     = "";

    return true;
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.validateUser()",ex);
    return false;
    }
  }

Activeweave.validateTerms = function(terms)
  {
  try
    {
    var termsError     = $('termsError');

    var error = !terms;

    if(error)
      {
      termsError.innerHTML = "Please agree to our terms of use.";
      return false;
      }
    termsError.innerHTML     = "";
    return true;
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.validateUser()",ex);
    return false;
    }
  }

Activeweave.validatePassword = function(form,pass,confirm,current)
  {
  try
    {
    var currentError  = $('currentError');
    var passError     = $('passError');
    var confirmError  = $('confirmError');
    var generalError  = $('settingsError');

    var error = false;
    var currentErrorMsg = current!=null?Activeweave.isValidInput(current,0,form.current.maxLength,"The current password you entered "):"";
    var passErrorMsg    = Activeweave.isValidInput(pass,   4,form.pass.maxLength,current!=null?"The new password you chose ":"The password you chose ");
    var confirmErrorMsg = Activeweave.isValidInput(confirm,4,form.confirm.maxLength,"The password you entered ");

    if(current!=null) currentError.innerHTML  = currentErrorMsg;
    passError.innerHTML     = passErrorMsg;
    confirmError.innerHTML  = confirmErrorMsg;

    error = currentErrorMsg||passErrorMsg||confirmErrorMsg;
    if(!error&&pass!=confirm)
      {
      error = true;
      generalError.innerHTML = "The passwords you entered do not match."
      }
    if(!error&&pass==current)
      {
      error = true;
      generalError.innerHTML = "Your new password must be different from your old one."
      }
    if(error)
      {
      return false;
      }
    generalError.innerHTML  = ""
    if(current!=null) currentError.innerHTML  = "";
    passError.innerHTML     = "";
    confirmError.innerHTML  = "";

    return true;
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.validatePassword()",ex);
    return false;
    }
  }

Activeweave.validateFeedback = function(form,user,intro,body)
  {
  try
    {
    var generalError  = $('settingsError');

    var error   = false;

    if(body.length<=0)
      {
      error = true;
      generalError.innerHTML = "Please make sure to enter a message.";
      }
    else
      {
      generalError.innerHTML = "";
      }
    return !error;
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.validateFeedback()",ex);
    return false;
    }
  }

Activeweave.passwordPopupReceived = function(request)
  {
  try
    {
    Activeweave.popupReceived(request);
    var current = $('current');
    if(current)
      {
      current.focus();
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.passwordPopupReceived()",ex);
    }
  }

Activeweave.nicknamePopupReceived = function(request)
  {
  try
    {
    Activeweave.popupReceived(request);
    var name = $(Activeweave.Utils.NAME);
    if(name)
      {
      name.focus();
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.nicknamePopupReceived()",ex);
    }
  }

Activeweave.changePassword = function(form)
  {
  try
    {
    var current   = form[Activeweave.Utils.CURRENT].value.trim();
    var pass      = form[Activeweave.Utils.PASSWORD].value.trim();
    var confirm   = form[Activeweave.Utils.CONFIRM].value.trim();

    if(Activeweave.validatePassword(form,pass,confirm,current))
      {
      var params    = Activeweave.Utils.addParameter(Activeweave.Utils.CURRENT,   current,  true);
      params       += Activeweave.Utils.addParameter(Activeweave.Utils.PASSWORD,  pass,     false);
      params       += Activeweave.Utils.addParameter(Activeweave.Utils.CONFIRM,   confirm,  false);
      params       += Activeweave.Utils.addParameter(Activeweave.Utils.EVENT,     Activeweave.Utils.EVT_PASSWORD ,  false);

      new Ajax.Request( "/settings/password/json.jsp",
                      { asynchronous: true,
                        method:       'post',
                        parameters:   params,
                        onComplete:   Activeweave.passwordChanged});
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.changePassword()",ex);
    }
  }

Activeweave.changeName = function(form)
  {
  try
    {
    var generalError  = $('settingsError');
    if(generalError) generalError.innerHTML = "";
    var nameError       = $('nameError');
    var name            = form[Activeweave.Utils.NAME].value.trim();
    var nameErrorMsg    = Activeweave.isValidInput(name,4,form.name.maxLength,"The name you entered ");
    if(nameErrorMsg)
      {
      nameError.innerHTML = nameErrorMsg;
      return false;
      }
    else
      {
      nameError.innerHTML  = "";
      var params    = Activeweave.Utils.addParameter(Activeweave.Utils.NAME,   name,  true);
      params       += Activeweave.Utils.addParameter(Activeweave.Utils.EVENT,     Activeweave.Utils.EVT_NAME ,  false);

      new Ajax.Request( "/settings/password/nickname.json.jsp",
                      { asynchronous: true,
                        method:       'post',
                        parameters:   params,
                        onComplete:   Activeweave.nameChanged});
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.changeName()",ex);
    }
  }

Activeweave.passwordChanged = function(request)
  {
  try
    {
    var raw = request.responseText;

    if(raw)
      {
      var response = eval("("+raw.trim()+")");
      if(response)
        {
        if(response.changed)
          {
          var success = $('settingsSuccess');
          if(success)
            {
            success.innerHTML = response.changed;
            }
          var f = $('passwordForm');
          var e = $('export');
          if(f) f.style.display = "none";
          if(e) e.style.display = "none";
          window.setTimeout(Activeweave.closePopup,2000);
          }
        else
          {
          if(response.error)
            {
            var eMsg = "";
            for(var e in response.error)
              {
              eMsg += response.error[e]+" ";
              }
            if(eMsg.trim().length>0)
              {
              var generalError  = $('settingsError');
              if(generalError)
                {
                generalError.innerHTML = eMsg;
                }
              }
            }
          }
        }
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.passwordChanged()",ex);
    }
  }

Activeweave.nameChanged = function(request)
  {
  try
    {
    var raw = request.responseText;

    if(raw)
      {
      var response = eval("("+raw.trim()+")");
      if(response)
        {
        if(response.changed)
          {
          var success = $('settingsSuccess');
          if(success)
            {
            success.innerHTML = response.changed;
            }
          var f = $('nicknameForm');
          if(f) f.style.display = "none";
          Activeweave.Blogs.requestSharedStatusToggle();
          window.setTimeout(Activeweave.closePopup,2000);
          }
        else
          {
          if(response.error)
            {
            var eMsg = "";
            for(var e in response.error)
              {
              eMsg += response.error[e]+" ";
              }
            if(eMsg.trim().length>0)
              {
              var generalError  = $('settingsError');
              if(generalError)
                {
                generalError.innerHTML = eMsg;
                }
              }
            }
          }
        }
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.nameChanged()",ex);
    }
  }

Activeweave.sendFeedback = function(form)
  {
  try
    {
    var user   = form[Activeweave.Utils.USER].value.trim();
    var intro  = form[Activeweave.Utils.INTRO].value.trim();
    var body   = form[Activeweave.Utils.BODY].value.trim();

    if(Activeweave.validateFeedback(form,user,intro,body))
      {
      var params    = Activeweave.Utils.addParameter(Activeweave.Utils.USER,      user,  true);
      params       += Activeweave.Utils.addParameter(Activeweave.Utils.INTRO,     intro, false);
      params       += Activeweave.Utils.addParameter(Activeweave.Utils.BODY,      body,  false);

      new Ajax.Request( "/feedback/json.jsp",
                      { asynchronous: true,
                        method:       'post',
                        parameters:   params,
                        onComplete:   Activeweave.feedbackSent});
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.sendFeedback()",ex);
    }
  }

Activeweave.feedbackSent = function(request)
  {
  try
    {
    var raw = request.responseText;

    if(raw)
      {
      var response = eval("("+raw.trim()+")");
      if(response)
        {
        if(response.sent)
          {
          var success = $('settingsSuccess');
          if(success)
            {
            success.innerHTML = response.sent;
            }
          var f = $('feedbackForm');
          if(f) f.style.display = "none";
          window.setTimeout(Activeweave.closePopup,3000);
          }
        else
          {
          if(response.error)
            {
            var eMsg = "";
            for(var e in response.error)
              {
              eMsg += response.error[e]+" ";
              }
            if(eMsg.trim().length>0)
              {
              var generalError  = $('settingsError');
              if(generalError)
                {
                generalError.innerHTML = eMsg;
                }
              }
            }
          }
        }
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.feedbackSent()",ex);
    }
  }

Activeweave.registerToInherit   = function(id)
  {
  try
    {
    Activeweave.Status = Activeweave.Status || {};
    Activeweave.Status.inherit = id;
    Activeweave.requestPopup('register',Activeweave.registerPopupReceived,400);
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.registerToInherit()",ex);
    }
  }

Activeweave.switchFromRegister = function()
  {
  Activeweave.closePopup();
  Activeweave.Splash.showPopup(400);
  }

Activeweave.register  = function(form,service)
  {
  try
    {
    var user      = form[Activeweave.Utils.USER].value.trim();
    var pass      = form[Activeweave.Utils.PASSWORD].value.trim();
    var confirm   = form[Activeweave.Utils.CONFIRM].value.trim();
    var terms     = form[Activeweave.Utils.TERMS].checked;

    service = service || "";

    var validPass   = Activeweave.validatePassword(form,pass,confirm);
    var validUser   = Activeweave.validateUser(form,user);
    var validTerms  = Activeweave.validateTerms(terms);

    if(validPass&&validUser&&validTerms)
      {
      var params    = Activeweave.Utils.addParameter(Activeweave.Utils.USER,      user,     true);
      params       += Activeweave.Utils.addParameter(Activeweave.Utils.PASSWORD,  pass,     false);
      params       += Activeweave.Utils.addParameter(Activeweave.Utils.CONFIRM,   confirm,  false);
      params       += Activeweave.Utils.addParameter(Activeweave.Utils.SERVICE,   service,  false);
      params       += Activeweave.Utils.addParameter(Activeweave.Utils.TERMS,     terms,    false);
      params       += Activeweave.Utils.addParameter(Activeweave.Utils.EVENT,     Activeweave.Utils.EVT_REGISTER ,  false);
      if(Activeweave.Status&&Activeweave.Status.blog)
        {
        params      += Activeweave.Utils.addParameter(Activeweave.Utils.BLOG,      Activeweave.Status.blog,false);
        }
      if(Activeweave.Status&&Activeweave.Status.inherit)
        {
        params      += Activeweave.Utils.addParameter(Activeweave.Utils.INHERIT,  Activeweave.Status.inherit,false);        
        }
      new Ajax.Request( "/register/json.jsp",
                      { asynchronous: true,
                        method:       'post',
                        parameters:   params,
                        onComplete:   Activeweave.registered});
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.register()",ex);
    }
  }

Activeweave.registered = function(request)
  {
  try
    {
    var raw = request.responseText;

    if(raw)
      {
      var response = eval("("+raw.trim()+")");
      if(response)
        {
        if(response.account&&response.message)
          {
          var success = $('settingsSuccess');
          if(success)
            {
            success.innerHTML = response.message;
            }
          var f = $('registerForm');
          if(f) f.style.display = "none";
          var c = $('popupClose');
          var timeout = window.setTimeout(Activeweave.postRegister,Activeweave.POST_REGISTER_DELAY);
          if(c) c.onclick = function() { window.clearTimeout(timeout);Activeweave.postRegister();};            
          }
        else
          {
          if(response.error)
            {
            var eMsg = "";
            for(var e in response.error)
              {
              if(e==Activeweave.Utils.USER||e==Activeweave.Utils.PASSWORD||e==Activeweave.Utils.CONFIRM||e==Activeweave.Utils.TERMS)
                {
                var el = $(e+"Error");
                if(el) el.innerHTML = response.error[e];
                }
              else if(e==Activeweave.Utils.REG_ERROR)
                {
                eMsg += response.error[e]+" ";
                }
              }
            if(eMsg.trim().length>0)
              {
              var generalError  = $('settingsError');
              if(generalError)
                {
                generalError.innerHTML = eMsg;
                }
              }
            }
          }
        if(response.locked)
          {
          var f = $('registerForm');
          if(f) f.style.display = "none";
          var c = $('popupClose');
          var timeout = window.setTimeout(Activeweave.closePopup,4000);
          if(c) c.onclick = function() { window.clearTimeout(timeout);Activeweave.closePopup();};               
          }
        }
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.registered()",ex);
    }
  }

Activeweave.postRegister = function()
  {
  var params      = Activeweave.Utils.addParameter(Activeweave.Utils.SHOW,Activeweave.Utils.BUNDLES,true);
  var downloaded  = null;
  if(Activeweave.Utils&&Activeweave.Utils.getCookie)
    {
    downloaded = Activeweave.Utils.getCookie(Activeweave.DOWNLOADED_COOKIE);
    }
  if(!downloaded)
    {
    params       += Activeweave.Utils.addParameter(Activeweave.Utils.PROMPT_DNLD,true,false);
    }
  else
    {
    params      += Activeweave.Utils.addParameter(Activeweave.Utils.PROMPT_VISITED,true,false);
    }
  window.location.href = "/?"+params;
  }

Activeweave.renewPassword = function(url)
  {
  try
    {
    var statusElt = $('authRenew');
    if(statusElt&&(!Activeweave.defaultRenewPasswordMessage))
      {
      Activeweave.defaultRenewPasswordMessage = statusElt.innerHTML;
      }
    var user      = $(Activeweave.Utils.USER).value;
    var params    = Activeweave.Utils.addParameter(Activeweave.Utils.USER,  user, true);
    new Ajax.Request( url,
                    { asynchronous: true,
                      method:       'post',
                      parameters:   params,
                      onComplete:   Activeweave.passwordRenewed});
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.renewPassword()",ex);
    }
  }

Activeweave.passwordRenewed = function(request)
  {
  try
    {
    var status = request.responseText;
    var statusElt = $('authRenew');
    if(statusElt)
      {
      statusElt.innerHTML = status;
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.passwordRenewed()",ex);
    }
  }

Activeweave.requestOpmlProgress = function()
  {
  var url = "/ajax/opml.progress.json.jsp";
  try
    {
    new Ajax.Request( url,
                    { asynchronous: true,
                      method:       'post',
                      parameters:   '',
                      onComplete:   Activeweave.opmlProgressReceived});
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.requestOpmlProgress()",ex);
    }
  }

Activeweave.opmlProgressReceived = function(request)
  {
  try
    {
    if(request)
      {
      var raw           = request.responseText;
      if(raw)
        {
        var response    = eval("("+raw+")");
        if(response)
          {
          var st        = response.status;
          if(st&&st=='on')
            {
            var importing = response.importing;
            if(importing)
              {
              var status        = importing.status;
              var message       = importing.message;
              var processed     = importing.processed;
              var size          = importing.size;
              var current       = importing.current;
              var opmlProgress  = $('opmlProgress');
              var progressBar   = $('opmlProgressBar');
              var progressMeter = $('opmlProgressMeter');
              var meterStyle    = progressBar!=null;
              var html          = message;
              if(status==1)
                {
                if(meterStyle&&size>0)
                  {
                  var w = Math.ceil(205*(1.0*processed)/(1.0*size));
                  progressBar.style.visibility = 'visible';
                  progressMeter.style.width = w+"px";
                  html = "<i>"+Activeweave.ASYNC_UPLOAD_MSG+"</i><br/>"+html+" "+processed+"/"+size+", now reading <b>&#x201c;"+current+"&#x201d;</b>.";
                  }
                else
                 {
                  html+= " "+processed+"/"+size+"<br/>("+current+").";
                 }
                }
              if(opmlProgress)
                {
                if(Activeweave.onOpmlComplete==null)
                  {
                  html = "<div class='authMessage' style='margin-top: 5px;font-weight: bold;'>"+html+"</div>";
                  }
                opmlProgress.innerHTML = html;
                }
              if(status!=2)
                {
                window.setTimeout(Activeweave.requestOpmlProgress,1000);
                }
              else
                {
                if(meterStyle)
                  {
                  progressBar.style.visibility = 'visible';
                  progressMeter.style.width = "205px";
                  }
                if(Activeweave.onOpmlComplete!=null)
                  {
                  Activeweave.onOpmlComplete.call();
                  }
                else
                  {
                  window.location.href = "/subscriptions/";
                  }
                }
              }
            }
          }
        }
      }
    }
  catch(ex)
    {
    Activeweave.Utils.log("Activeweave.opmlProgressRenewed()",ex);
    }
  }