function startLoading() {
    $('loading_box').show();
}

function stopLoading() {
    $('loading_box').hide();
}

Ajax.Responders.register({
    onCreate : startLoading,
    onComplete : stopLoading
});

function timeDifference(dateStr) {
  var time = ('' + dateStr).replace(/-/g,"/").replace(/[TZ]/g," ");
  var seconds = (new Date - new Date(time)) / 1000;
  var i = 0, format;
  while (format = timeDifference.formats[i++]) if (seconds < format[0])
    return format[2] ? Math.floor(seconds / format[2]) + ' ' + format[1] + ' ago' : format[1];
  return time;
};

timeDifference.formats = [
  [60, 'seconds', 1],
  [120, '1 minute ago'],
  [3600, 'minutes', 60],
  [7200, '1 hour ago'],
  [86400, 'hours', 3600],
  [172800, 'Yesterday'],
  [604800, 'days', 86400],
  [1209600, '1 week ago'],
  [2678400, 'weeks', 604800]
];

function twitterUpdate()
{
    new Ajax.Request('ajax.php', {
        method: 'post',
        requestHeaders: {Accept: 'text/x-json'},
        parameters: {action: 'twitterUpdate'},
        onSuccess: function(transport, json) {
            if(json.text != "" && json.created_at != "")
            {
            	$('twitterText').update(json.text);
            	$('twitterDate').update(timeDifference(json.created_at) + " from " + json.source);
            	new Effect.Pulsate('twitterText', {pulses: 3});
            	return false;
        	}
        }
    });
}

google.setOnLoadCallback(function() {
	
	twitterUpdate();

	$$('.divided li[title]').each(function(item, index) { 
		
		item.tip = new Tip(item, $(item.title).cloneNode(true), {
			stem: 'leftMiddle',
			hook: { target: 'rightMiddle', tip: 'leftMiddle' },
			offset: { x: 0, y: 0 }, 
			hideOn: false,
			hideAfter: 3.0
		});
		
	 	item.observe('prototip:shown', function(event) {
			var element = this.tip.wrapper;

			element.style.opacity = '0';
			new Effect.Move(element, { x: 0, y: 20, duration: 0.0, mode: 'relative' });

			new Effect.Parallel([ 
				new Effect.Appear(element, { sync: true, duration: 1.0 }), 
				new Effect.Move(element, { sync: true, x: 0, y: -20, mode: 'relative' }), ], 
				{ duration: 0.8, delay: 0.0 });

				new Effect.Parallel([ 
					new Effect.Fade(element, { sync: true, duration: 1.0 }), 
					new Effect.Move(element, { sync: true, x: 0, y: -20, mode: 'relative' }), ], 
					{ duration: 0.8, delay: 3.0 });

	 	});
	
	});
	/*
	document.observe('prototip:hidden', function(event) {
	  var element = event.target.tip;
	  new Effect.Parallel([
	      new Effect.Fade(element, { sync: true, duration: 1.0 }),
	      new Effect.Move(element, { sync: true, x: 0, y: -20, mode: 'relative' }),
	    ], {
	      duration: 0.8,
	      delay: 3.0
	    });
	});
	*/
});

new PeriodicalExecuter(twitterUpdate, 60);