Event.observe(window, 'load', init);

function init()
{
	if ($('latestBloomFeed')) {

		feed = new FeedList();
		updateFeedList();
		FeedExecuter = new PeriodicalExecuter(updateFeedList, 3);
    // Start and stop executer on mouseover
    Event.observe($('homeAltBloomFeed'), 'mouseover', function() {
      FeedExecuter.stop();
    });
    Event.observe($('homeAltBloomFeed'), 'mouseout', function() {
      FeedExecuter = new PeriodicalExecuter(updateFeedList, 3);
    });
	}
	addEventHandlers();
  blurLinks();
}

function blurLinks()
{
  var links = document.getElementsByTagName('a');

  for (var i = 0; i < links.length; i++) {
      links[i].onfocus = function() { this.blur(); };
  }

  return true;
}

function updateFeedList()
{
	var item = feed.fetchItem();

	if (false !== item) {
		var insertText = "<a href=\"/profile/" + item['username'] + "\"><img src=\"" + item['avatar'] + "\" /></a><a class=\"theBloom\" href=\"/bloom/view/id/" + item['id'] + "\" title=\"I've " + item['text'] + "\">I've " + item['text'] + "</a><a class=\"peopleTotal\" href=\"/bloom/view/id/" + item['id'] + "\">" + item['similar'] + "</a><span class=\"bloomAdd\"><a onclick=\"new Ajax.Request('/syndication/quickadd/sid/" + item['id'] + "', {asynchronous:true, evalScripts:false, onComplete: function(request, json){postQuick(request, json)}});; return false;\" href=\"/bloom/add/id/" + item['id'] + "\" title=\"Done it!\">Done it</a></span>";

		var insertItem = new Element('li', { 'id': 'bloom_' + item['id'], 'style': 'display: none' }).update(insertText);

		$('homeAltBloomFeed').insertBefore(insertItem, $('homeAltBloomFeed').getElementsByTagName('li')[0]);

		new Effect.Appear($('bloom_' + item['id']), { duration: 2.5});
		new Effect.BlindDown($('bloom_' + item['id']), { duration: 1.5});

		var curItems = $('homeAltBloomFeed').select('li');

    var numToDisplay = 6;
		
	  if (curItems.length > numToDisplay) {
      new Effect.Fade(curItems[curItems.length - 2], { duration: 1.5 });
			$('homeAltBloomFeed').removeChild(curItems[curItems.length - 1]);
		} else if (curItems.length == numToDisplay) {
      new Effect.Fade(curItems[curItems.length - 1], { duration: 1.5 });
    }
	}
}

function addEventHandlers()
{
	if ($('uploadAvatarLink')) {
		Event.observe($('uploadAvatarLink'), 'click', toggleUploadAvatar);
	}
  if ($('toolTipClose')) {
    Event.observe($('toolTipClose'), 'click', function() { $('toolTip').setStyle({display: 'none'}); });
  }
}

function toggleUploadAvatar()
{
	$('uploadAvatarLink').setStyle({display: 'none'});
	$('uploadAvatar').setStyle({display: 'block'});
}

function setBloomCount()
{
	new Ajax.Request('/user/bcount', {
				method: 'get',
				onSuccess: function(transport) {
					var bloomCount = transport.responseText;

          if ($('totalBloomsStretch')) {
            $('totalBloomsStretch').innerHTML = bloomCount;
          }

	        if ($('guestBloomCount')) {
					  $('guestBloomCount').innerHTML = bloomCount;
					  $('guestBloomInfo').innerHTML = 'You have <strong>' + bloomCount + '</strong> blooms. <a href="/user/register" class="guestBloomRegister">Register now</a> to save.';
          }
			}
  });
}

function postQuick(request, json)
{
	setBloomCount();

	// new Method
	var insertBloom = new Element('div', {'class': 'bloomSuccess'}).update('<span class="quickAddSuccess">' + json[2] + '</span>').setStyle({display: 'none'});

  $('bloom_' + json[4]).innerHTML = '';
	$('bloom_' + json[4]).appendChild(insertBloom);

	new Effect.Appear(insertBloom);
}

function postBOTD(request)
{
  $('dotd').removeClassName('doneItLink');
  $('dotd').addClassName('doneItLinkSuccess');
  $('dotd').writeAttribute('href', '#');
  $('dotd').writeAttribute('onclick', '');

  setBloomCount();
}

function userPostQuick(request, json)
{
 	if ($('guestBloomCount')) {
			setBloomCount();
	}

	if ('SUCCESS' == json[0]) {
    $('uBloom_' + json[4]).innerHTML = '<span class="profQuickAdd">' + json[2] + '</span>';
  }
}

function searchPostQuick(request, json)
{
  if ($('guestBloomCount')) {
    setBloomCount();
  }

  if ('SUCCESS' == json[0]) {
    $('sListing_' + json[4]).innerHTML = '<span class="profQuickadd">' + json[2] + '</span>';
  }
}

function executeBloomSuccess(bloomid, username)
{
  $$('#addBloom input').each(function(field) {
			field.clear();
		});

	// Set focus on first element
	$('bloom1').activate();

  $('addBloomResponse').innerHTML = '<span class="bloomSuccess"> <a id="userBloomComment">Tell us about it</a></span>';
  Event.observe($('userBloomComment'), 'click', function() {
      if (username) {
        document.location.href = '/profile/' + username + '/bloom/id/' + bloomid;
      } else {
        document.location.href = '/user/register';
      }
    });

  $('addBloomResponse').show();
}

function executeBloomFailed(err, msg)
{
  // Todo - This has become a message, move all messages to server side.
  switch (err)
  {
    case 0: // Form validation error
      $('bloom3').setStyle({border: '1px solid red'});
      $('addBloomResponse').innerHTML = '<span class="bloomError">Too long. Keep it simple.</span>';
      break;
    case -3333: // Invalid 1
      $('bloom1').setStyle({border: '1px solid red'});
      $('addBloomResponse').innerHTML = '<span class="bloomError">You must choose a word from the list</span> <a href="/info/help" id="moreHelp">More Help</a>';
      break;
    case -4444: // Invalid 2
      $('bloom2').setStyle({border: '1px solid red'});
      $('addBloomResponse').innerHTML = '<span class="bloomError">You must choose a word from the list</span> <a href="/info/help" id="moreHelp">More Help</a>';
      break;
    case -5555: // Dupe
      $('addBloomResponse').innerHTML = '<span class="bloomError">You have already done that!</span>';
      break;
    case -6666: // Invalid input
      if (0 == $('bloom3').getValue().length) {
        $('addBloomResponse').innerHTML = '<span class="bloomError">Invalid Bloom! Give us more info!</span>';
      } else {
        $('addBloomResponse').innerHTML = '<span class="bloomError">Invalid Bloom! No funny characters!</span>';
      }
      $('bloom3').setStyle({border: '1px solid red'});
      break;
  }
}

function postBloomPublic(request, json)
{
  resetErrorReporting();

  if ('SUCCESS' == json[0]) {
    setBloomCount();
    executeBloomSuccess(json[4], json[6]);

    if ($('uBloom_' + json[4])) {
      var doneItSpan = new Element('span', {'class': 'profBloomed'}).update('Done It');
      $$('#uBloom_' + json[4] + ' .bloomAdd').first().replace(doneItSpan);
    }
  }

  if ('FAILED' == json[0]) {
    executeBloomFailed(json[1], json[2]);
  }
}

function postBloom(request, json)
{
  resetErrorReporting();
  
	if ('SUCCESS' == json[0]) {
		setBloomCount();

		if ($('listBloom') && !$('userPublicMain')) {
			// For now until a look is decided.
			new Ajax.Request('/syndication/fetch/id/' + json[5], {
				method: 'post',
				asynchronous: true,
				onComplete:	function(request, json) {
          var json = request.responseText.evalJSON();
					var insertElement = document.createElement('li');
					insertElement.setAttribute('id', 'bloom_' + json['data']['id']);
					insertElement.innerHTML = json['html']					
          $('listBloom').insertBefore(insertElement, $('listBloom').getElementsByTagName('li')[0]);
          initMyBlooms();
				}
			});
		}

	  executeBloomSuccess(json[4], json[6]);
	}

	if ('FAILED' == json[0]) {
    executeBloomFailed(json[1]);
  }
}

function resetErrorReporting()
{
  $('bloom1').setStyle({border: 'none'});
  $('bloom2').setStyle({border: 'none'});
  $('addBloomResponse').empty();
  $('addBloomResponse').show();
}

function editComplete(request, elem)
{
	$('bloom_' + elem).innerHTML = request.responseText;
}

function setActiveSettingsTab(tab)
{
  if (!$('userSettingsTabs')) {
    return false;
  }
  
  var userSettingsTabs = $('userSettingsTabs').childElements();
  
  userSettingsTabs.each(function(elem) {
    if (elem.hasClassName('settingsActive')) {
      elem.removeClassName('settingsActive')
    }
  });

  if (userSettingsTabs[tab]) {
    userSettingsTabs[tab].addClassName('settingsActive');
  }
}

function setUserTabFocus(tab)
{
  if (!$('userToolbar')) {
    return false;
  }

  var userToolbarTabs = $('userToolbar').firstDescendant().childElements();

  userToolbarTabs.each(function(elem) {
    if (elem.firstDescendant().hasClassName('focus')) {
      elem.firstDescendant().removeClassName('focus');
    }
  });

  if (userToolbarTabs[tab]) {
    userToolbarTabs[tab].firstDescendant().addClassName('focus');
  }
}

function editStoryComplete(request)
{
  json = request.responseText.evalJSON();

  // Added from 'My Stories'
  if ($('userComponentContainer') && 'SUCCESS' == json[0]) {
    new Effect.Fade('storyEdit_' + json[1], { duration: 1 });
    if ($('bloomQuickEdit')) {
      new Ajax.Updater('userComponentContainer', '/index.php/user/blooms', {asynchronous:true, evalScripts:false, onComplete:function(request, json){setUserTabFocus(1); initMyBlooms();}, onLoading:function(request, json){setLoading("userComponentContainer")}});

      return false;
    }
  } else {
    window.location.reload();
  }
}

function setLoading(elem)
{
  if ($(elem)) {
    $(elem).innerHTML = '<img src="/images/ajax_loader.gif" id="ajaxLoader" />';
  }
}

function toggleAllEdits(curEdit)
{
  curEdit = curEdit;

  if ($('listBloom')) {
    $('listBloom').select('div').each(function(elem, index) {
      if (('storyEdit_' + curEdit) !== elem.readAttribute('id')) {
        elem.innerHTML = '';
      }
    });
  }
}

function interestsComplete(request, json, tab)
{
  var interestTabs = $('interestsNav').childElements();
  
  interestTabs.each(function(elem) {
    if (elem.hasClassName('active'))
      elem.removeClassName('active');
  });

  if (interestTabs[tab])
    interestTabs[tab].addClassName('active');
}

function interestsBloomComplete(request, json)
{
	var insertBloom = new Element('div', {'class': 'bloomSuccess'}).update('<span class="quickAddSuccess">' + json[2] + '</span>');

  if ($('intBloom_' + json[4])) {
    $('intBloom_' + json[4]).innerHTML = '';
    $('intBloom_' + json[4]).appendChild(insertBloom);
  }
}
