function follow(userId) {
  $('follow-form-' + userId).hide();
  $('follow-wait-' + userId).show();
  new Ajax.Request('/friends/new/' + userId, {
    asynchronous: true, 
    evalScripts: true,
    method: 'get',
    onComplete: function(status) {
    if (status.responseText.match(/ok/)) { 
        $('follow-wait-' + userId).hide();
        $('follow-status-' + userId).show();
        updateFollowers(userId);
    } else { 
      handle_error();
    }
  }
  });
  return;
}

function stopFollow(userId) {
  $('follow-status-' + userId).hide();
  $('follow-wait-' + userId).show();
  new Ajax.Request('/friends/stop/' + userId, {
    asynchronous: true, 
    evalScripts: true,
    method: 'get',
    onComplete: function(status) {
    if (status.responseText.match(/ok/)) { 
        $('follow-wait-' + userId).hide();
        $('follow-form-' + userId).show();
        updateFollowers(userId);
    } else if(status.responseText.match(/private/)) {
        $('follow-wait-' + userId).hide();
        $('follow-form-' + userId).hide();
        updateFollowers(userId);
    } else { 
      handle_error();
    }
  }
  });
  return;
}

function friendAdd(userId) {
  $('friend-form-' + userId).hide();
  $('friend-wait-' + userId).show();
  new Ajax.Request('/friends/add/' + userId, {
    asynchronous: true, 
    evalScripts: true,
    method: 'get',
    onComplete: function(status) {
    if (status.responseText.match(/ok/)) { 
        $('friend-wait-' + userId).hide();
        $('friend-status-' + userId).show();
    } else { 
      handle_error();
    }
  }
  });
  return;
}

function friendRemove(userId) {
  $('friend-status-' + userId).hide();
  $('friend-wait-' + userId).show();
  new Ajax.Request('/friends/remove/' + userId, {
    asynchronous: true, 
    evalScripts: true,
    method: 'get',
    onComplete: function(status) {
    if (status.responseText.match(/ok/)) { 
        $('friend-wait-' + userId).hide();
        $('friend-form-' + userId).show();
    } else if(status.responseText.match(/private/)) {
        $('friend-wait-' + userId).hide();
        $('friend-form-' + userId).hide();
    } else { 
      handle_error();
    }
  }
  });
  return;
}


function unblockFollower(userId) {
  $('block-form-' + userId).hide();
  $('block-wait-' + userId).show();
  new Ajax.Request('/friends/unblock/' + userId, {
    asynchronous: true, 
    evalScripts: true,
    method: 'get',
    onComplete: function(status) {
    if (status.responseText.match(/ok/)) { 
        $('block-wait-' + userId).hide();
        $('block-status-' + userId).show();
        updateFollowers(userId);
    } else { 
      handle_error();
    }
  }
  });
  return;
}


function blockFollower(userId) {
  $('block-status-' + userId).hide();
  $('block-wait-' + userId).show();
  new Ajax.Request('/friends/block/' + userId, {
    asynchronous: true, 
    evalScripts: true,
    method: 'get',
    onComplete: function(status) {
    if (status.responseText.match(/ok/)) { 
        $('block-wait-' + userId).hide();
        $('block-form-' + userId).show();
        updateFollowers(userId);
    } else { 
      handle_error();
    }
  }
  });
  return;
}


function updateFollowers(userId) {
  new Ajax.Updater({success: 'followers'}, '/posts/followers/' + userId, { method: 'get' });
  new Ajax.Updater({success: 'followercount'}, '/posts/followercount/' + userId, { method: 'get' });
}

function updateCommentTitle(postId) {
  new Ajax.Updater({success: 'cmttitle' + postId}, '/posts/cmttitle/' + postId, { method: 'get' });
}

function updatePostCommentCount(postId) {
  new Ajax.Updater({success: 'pcmntcount'}, '/posts/pcmntcount/' + postId, { method: 'get' });
}

function updatePostTagCount(postId) {
  new Ajax.Updater({success: 'ptagcount'}, '/posts/ptagcount/' + postId, { method: 'get' });
}

function handle_error() {
  alert('Something went wrong!  Please refresh the page and try again.');
}

function editPermissions(postId) {
  clearPostForm(postId);
  postWait('frm' + postId);
  new Ajax.Updater({success: 'frm' + postId}, '/permissions/edit/' + postId, { method: 'get' });
  showPostForm(postId);
  return false;
}

function updatePermissions(postId) {
  new Ajax.Updater({success: 'perm' + postId}, '/permissions/update/' + postId, { method: 'get', parameters: $('form' + postId).serialize(true) });
  cancelPostForm(postId);
  return false;
}

function editPost(postId, viewPost) {
  clearPostForm(postId);
  postWait('frm' + postId);
  new Ajax.Updater({success: 'frm' + postId}, '/posts/edit/' + postId + '?v=' + viewPost, { method: 'get' });
  showPostForm(postId);
  return false;
}

function updatePost(postId) {
  new Ajax.Updater({success: 'pinfo' + postId}, '/posts/update/' + postId, { method: 'get', parameters: $('form' + postId).serialize(true) });
  cancelPostForm(postId);
  return false;
}

function rotateForm(postId, view) {
  clearPostForm(postId);
  postWait('frm' + postId);
  new Ajax.Updater({success: 'frm' + postId}, '/posts/rform/' + postId + '?v=' + view, { method: 'get' });
  showPostForm(postId);
  return false;
}

function rotatePost(postId) {
  postWait('pimg' + postId);
  new Ajax.Updater({success: 'pimg' + postId}, '/posts/rotate/' + postId, { method: 'get', parameters: $('form' + postId).serialize(true) });
  cancelPostForm(postId);
  return false;
}

function deleteForm(postId, view) {
  clearPostForm(postId);
  postWait('frm' + postId);
  new Ajax.Updater({success: 'frm' + postId}, '/posts/dform/' + postId + '?v=' + view, { method: 'get' });
  showPostForm(postId);
  return false;
}

function deletePost(postId, view) {
  if(view == 0) { $('post' + postId).hide(); }
  new Ajax.Request('/posts/deletepost/' + postId, {
    asynchronous: true, 
    evalScripts: true,
    method: 'get',
    parameters: $('form' + postId).serialize(true),
    onComplete: function(response) {
      updateMemberTagCount(postId);
      if(view == 1) { window.location = 'http://moborazzi.com/' + response.responseText; }
      cancelPostForm(postId);
    }
  });
}

function addTag(postId) {
  tag = $('addtagbox' + postId).value;
  if(tag.blank()) { return false; }
  if($('pubtags').innerHTML == '') {
    new Ajax.Request('/posts/addfirsttag/' + postId, {
      asynchronous: true, 
      evalScripts: true,
      method: 'get',
      parameters: $('addtagform' + postId).serialize(true),
      onComplete: function(response) {
        if(response.responseText.match(/Error:/)) {
            $('tagerror' + postId).innerHTML = response.responseText;
        }
        else {
            $('tagerror' + postId).innerHTML = '';
            $('pubtags').innerHTML = response.responseText;
            clearAddTagForm(postId);
            updatePrivateTags(postId);
            updatePostTagCount(postId);
            updateMemberTagCount(postId);
            if(response.responseText != '') {
                updateEditTags(postId);
            }
        }
      }
    });
  }
  else {
    oldTags = $('tags').innerHTML;
    postWait('tags');
    new Ajax.Request('/posts/addtag/' + postId, {
      asynchronous: true, 
      evalScripts: true,
      method: 'get',
      parameters: $('addtagform' + postId).serialize(true),
      onComplete: function(response) {
        if(response.responseText.match(/Error:/)) {
            $('tagerror' + postId).innerHTML = response.responseText;
            $('tags').innerHTML = oldTags;
        }
        else {
            $('tagerror' + postId).innerHTML = '';
            $('tags').innerHTML = response.responseText;
            clearAddTagForm(postId);
            updatePrivateTags(postId);
            updatePostTagCount(postId);
            updateMemberTagCount(postId);
            updateEditTags(postId);
        }
      }
    });
  }
  return false;
}

function editTags(postId) {
    oldTags = $('tags').innerHTML;
    postWait('tags');
    new Ajax.Request('/posts/edittags/' + postId, {
      asynchronous: true, 
      evalScripts: true,
      method: 'get',
      parameters: $('edittagform' + postId).serialize(true),
      onComplete: function(response) {
        if(response.responseText.match(/Error:/)) {
            $('tagerror' + postId).innerHTML = response.responseText;
            $('tags').innerHTML = oldTags;
        }
        else {
            $('tagerror' + postId).innerHTML = '';
            if(response.responseText.blank()) {
                $('pubtags').innerHTML = '';
            }
            else {
                $('tags').innerHTML = response.responseText;
            }
            clearAddTagForm(postId);
            updatePrivateTags(postId);
            updatePostTagCount(postId);
            updateMemberTagCount(postId);
            displayTagForm(postId, 0);
            updateEditTags(postId);
        }
      }
    });
    return false;
}

function updateEditTags(postId) {
    new Ajax.Request('/posts/getposttags/' + postId, {
      asynchronous: true, 
      evalScripts: true,
      method: 'get',
      onComplete: function(response) {
        $('edittagbox' + postId).value = response.responseText;
        if(response.responseText.blank()) {
            $('edittagtab' + postId).hide();
        }
        else {
            $('edittagtab' + postId).show();
        }
      }
    });
}

function updatePrivateTags(postId){
  if($('privtags').innerHTML == '') {
    new Ajax.Request('/posts/getfirstptag/' + postId, {
      asynchronous: true, 
      evalScripts: true,
      method: 'get',
      onComplete: function(response) {
        $('privtags').innerHTML = response.responseText;
        updatePublicSideTagCloud();
      }
    });
  }
  else {
    postWait('ptags');
    new Ajax.Request('/posts/getptags/' + postId, {
      asynchronous: true, 
      evalScripts: true,
      method: 'get',
      onComplete: function(response) {
        if(response.responseText.blank()) {
            $('privtags').innerHTML = '';
        }
        else {
            $('ptags').innerHTML = response.responseText;
        }
        updatePublicSideTagCloud();
      }
    });
  }
}

function addComment(postId) {
  $('cmtsubmit').disabled=true;
  new Ajax.Request('/posts/addcomment/' + postId, {
    asynchronous: true, 
    evalScripts: true,
    method: 'get',
    parameters: $('cmtform' + postId).serialize(true),
    onComplete: function(response) {
      if(($('cmt' + postId).innerHTML == '') && (response.responseText != '')) {
        updateCommentTitle(postId);
      }
      $('cmt' + postId).innerHTML += response.responseText;
      clearCommentForm(postId);
      updatePostCommentCount(postId);
      updateMemberCommentCount(postId);
    }
  });
  $('cmtsubmit').disabled=false;
  return false;
}

function clearCommentForm(postId) {
  Form.reset('cmtform' + postId);
}

function clearAddTagForm(postId) {
  Form.reset('addtagform' + postId);
}

function updateMemberTagCount(postId) {
  new Ajax.Updater({success: 'tagcount'}, '/posts/tagcount/' + postId, { method: 'get' });
}

function updateMemberCommentCount(postId) {
  new Ajax.Updater({success: 'commentcount'}, '/posts/commentcount/' + postId, { method: 'get' });
}

function updatePublicSideTagCloud() {
  postWait('psidetagcloud');
  new Ajax.Updater({success: 'psidetagcloud'}, '/posts/psidetagcloud/1', { method: 'get' });
}

function cancelPostForm(postId) {
  $('frm' + postId).hide();
}

function showPostForm(postId) {
  $('frm' + postId).show();
}

function clearPostForm(postId) {
  $('frm' + postId).innerHTML = '';
}

function postWait(element) {
  $(element).innerHTML = '<div style="text-align:center"><img class="fwait" src="/graphics/wait20gray.gif?4" /></div>';
}

function stripSpaces(words) {
  var spaces = words.length;
  for(var x = 0; x<spaces; ++x) words=words.replace(" ", ""); 
  return words;
}

function displayTagForm(postId, type) {
  if(type == 1) {
    $('addtagform' + postId).hide();
    $('edittagform' + postId).show();
    $('addtagtab' + postId).removeClassName('on');
    $('edittagtab' + postId).addClassName('on');
    $('edittagbox' + postId).focus();
  }
  else {
    $('edittagform' + postId).hide();
    $('addtagform' + postId).show();
    $('edittagtab' + postId).removeClassName('on');
    $('addtagtab' + postId).addClassName('on');
    $('addtagbox' + postId).focus();
  }
  return false;
}

function displayCommentForm(postId, type) {
    $('addcommentbox' + postId).focus();
    return false;
}

function clearToolbarForm(postId) {
  clearToolbarTabs(postId);
  $('tb' + postId).innerHTML = '';
}

function showToolbarForm(postId) {
  $('tb' + postId).show();
}

function clearToolbarTabs(postId) {
  $('tbsave' + postId).removeClassName('on');
  $('tbemail' + postId).removeClassName('on');
  $('tbembed' + postId).removeClassName('on');
  $('tbmobile' + postId).removeClassName('on');
  $('tbavatar' + postId).removeClassName('on');
  $('tbreport' + postId).removeClassName('on');
}

function printPost(postId) {
  clearToolbarForm(postId);
  return false;
}

function savePost(postId) {
  clearToolbarForm(postId);
  return true;
}

function sendPostViaEmail(postId) {
  clearToolbarForm(postId);
  postWait('tb' + postId);
  new Ajax.Updater({success: 'tb' + postId}, '/toolbar/email/' + postId, { method: 'get' });
  $('tbemail' + postId).addClassName('on');
  showToolbarForm(postId);
  return false;
}

function sendToEmail(postId) {
  $('tbsubmit').disabled=true;
  new Ajax.Updater({success: 'tb' + postId}, '/toolbar/sendToEmail/' + postId, { method: 'get', parameters: $('tbform' + postId).serialize(true) });
  return false;
}

function embedPost(postId, isLandscape) {
  clearToolbarForm(postId);
  postWait('tb' + postId);
  new Ajax.Updater({success: 'tb' + postId}, '/toolbar/embed/' + postId + '?l=' + isLandscape, { method: 'get' });
  $('tbembed' + postId).addClassName('on');
  showToolbarForm(postId);
  return false;
}

function sendPostToMobile(postId) {
  clearToolbarForm(postId);
  postWait('tb' + postId);
  new Ajax.Updater({success: 'tb' + postId}, '/toolbar/mobile/' + postId, { method: 'get' });
  $('tbmobile' + postId).addClassName('on');
  showToolbarForm(postId);
  return false;
}

function sendToMobile(postId) {
  $('tbsubmit').disabled=true;
  new Ajax.Updater({success: 'tb' + postId}, '/toolbar/sendToMobile/' + postId, { method: 'get', parameters: $('tbform' + postId).serialize(true) });
  return false;
}

function setPostAsAvatar(postId) {
  clearToolbarForm(postId);
  postWait('tb' + postId);
  new Ajax.Updater({success: 'tb' + postId}, '/toolbar/avatar/' + postId, { method: 'get' });
  $('tbavatar' + postId).addClassName('on');
  showToolbarForm(postId);
  return false;
}

function reportPost(postId) {
  clearToolbarForm(postId);
  postWait('tb' + postId);
  new Ajax.Updater({success: 'tb' + postId}, '/toolbar/report/' + postId, { method: 'get' });
  $('tbreport' + postId).addClassName('on');
  showToolbarForm(postId);
  return false;
}

function postReport(postId) {
  $('tbsubmit').disabled=true;
  new Ajax.Updater({success: 'tb' + postId}, '/toolbar/postReport/' + postId, { method: 'get', parameters: $('tbform' + postId).serialize(true) });
  return false;
}

function makeAvatar(postId) {
  $('tbsubmit').disabled=true;
  new Ajax.Updater({success: 'tb' + postId}, '/toolbar/makeAvatar/' + postId, { method: 'get', parameters: $('tbform' + postId).serialize(true) });
  return false;
}

function cancelToolbarForm(postId) {
  $('tb' + postId).hide();
  clearToolbarForm(postId);
}

function createCookie(name,value,days) {
  if (days) {
  	var date = new Date();
  	date.setTime(date.getTime()+(days*24*60*60*1000));
  	var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
  	var c = ca[i];
  	while (c.charAt(0)==' ') c = c.substring(1,c.length);
  	if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

function eraseCookie(name) {
  createCookie(name,"",-1);
}

function openHelpWindow(where) {
  helpWindow = window.open(where);
  helpWindow.focus();
}

function updateTwitterInfo() {
  new Ajax.Updater({success: 'twstatus'}, '/twitter/update/', { method: 'get', parameters: $('twform').serialize(true) });
  return false;
}


