function populate_comment_defaults() {
  var commentcookie=Cookies.get('commentuser');
  if (commentcookie && commentcookie.value) {
    var obj=evalJSON(commentcookie.value);
    var form=$('commentform');
    form.author_name.value=obj.author_name;
    form.author_name.defaultValue=obj.author_name;
    form.author_email.value=obj.author_email;
    form.author_email.defaultValue=obj.author_email;
    form.author_location.value=obj.author_location;
    form.author_location.defaultValue=obj.author_location;
  }
}

function connect_comment_form() {
  populate_comment_defaults();
  connect('commentform', 'onsubmit', add_comment);
  connect('commentform', 'onreset', function(evt) {
    clean_comment_error_fields();
    populate_comment_defaults();
  });
}

function clean_comment_error_fields() {
 $('addcomment_error').innerHTML='';
 $('error_comment_author_name').innerHTML='';
 $('error_comment_author_email').innerHTML='';
 $('error_comment_content').innerHTML='';
}

function add_comment(evt) {
  evt.stop();
  clean_comment_error_fields();
  var formid='commentform';
  var data=formContents(formid);
  var error_div = "addcomment_error";
  var obj=form_to_obj(data);
  obj.url=[document.location.protocol, 
           '//',
           document.location.host,
           document.location.pathname].join('');
  var item_id=obj.item_id;
  if (item_id) {
    var commenturl='/api/comments/item/' + item_id + '/add';
  } else {
    var thread_id=obj.thread_id;
    if (isUndefinedOrNull(thread_id)) {
      logError("we have no item or thread id, bailing");
      $(error_div).innerHTML='Error code A45FF012';
      return;
    }
    var commenturl='/api/comments/thread/' + thread_id + '/add';
  }
  var df=postJSON(commenturl, obj, 'PUT');
  df.addCallback(function(req) {
    $(error_div).innerHTML='Thank you for your comment.  It will appear on the website momentarily. To see it, wait a minute and then <a href="javascript:location.reload(true)">refresh this page</a>.'; 
     $(formid).content.value='';
      if (window.urchinTracker) {
         window.urchinTracker(commenturl);
      } else {
        logDebug("urchin not available");
      }
     var c=Cookies.add('commentuser', 
                       serializeJSON({'author_name' : obj.author_name, 
                                      'author_email' : obj.author_email,
                                      'author_location' : obj.author_location}));
     c.attributes['path']='/';
     c.expiresIn(1000);
     c.set();
  });
  df.addErrback(function(err) {
    var data;
    var head_check = err.req.getResponseHeader("Content-Type");
    if (head_check && head_check.match(/^text\/json(;.*)?$/)) {
        data = evalJSONRequest(err.req);
    } else {
        data={"top" : err.req.responseText};
    }
    switch(err.number) {
    case 400:
    case 403:
    case 412:
       if (data.top && data.top.replace(/^\s*(.*)\s*$/, '$1') == 'duplicate comment') {
          logDebug('duplicate comment, not showing any error');
	  clean_comment_error_fields();
          $(formid).content.value='';          
          return false;
       }
       var message="There was a problem submitting your comment.";
       if (data.top) {
          message+="<br />"+data.top;
       }
       for (var field in data) {
        if (field != 'top') {
          var place=$("error_comment_" + field);
          if (place) {
            var msg=data[field];
        
            if (isArrayLike(msg)) {
              msg=reduce(function(x,y) {return x+"<br /> "+y;}, filter(null, msg));
            }
            place.innerHTML=msg;
          } else {
          logDebug('no error slot called "', place, '".');
          }
         }
       }
       $(error_div).innerHTML=message;
       break;
    default:
      $(error_div).innerHTML="<br /><div class='emailthis_notice'>There was a problem submitting your comment. Please try again.</div>";
     }
    });
  return false;    
}


