// JavaScript Document

//Devuelve la sintaxis a escribir del momento en que fue escrito un estado de Twitter. 
//La sintaxis es en ingles y se toma en cuenta los casos especiales, esta expresado en el formato 
//de los numeros ordinarios
function devolverDia(dia){
	dia = parseInt(dia);	//se pasa el valor caracter a numero
	//se obtiene el numero ordinario a su equivalente en texto
	switch (dia){
		case 1: return dia+'st';
			break;
		case 2: return dia+'nd';
			break;
		case 3: return dia+'rd';
			break;
		case 21: return dia+'st';
			break;
		case 22: return dia+'nd';
			break;
		case 23: return dia+'rd';
			break;
		case 31: return dia+'st';
			break;
		default: return dia+'th';
			break;
	}
}

//Determina toda la cadena que se presentara como la fecha en la que un estado de Twitter fue escrito. 
//Ubica el mes, la hora, los minutos, si es AM o PM, y la fecha en sintaxis de numero ordinario. 
//Se usa cuando el estado es mayor o igual a un dia.
function sintaxisFecha(fechaTwitter){
	//declaracion de un array de abreviaturas de los meses usando la sintaxis de Prototype
	var meses = $w('Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec');
	var horas = fechaTwitter.getHours();
	var minutos = fechaTwitter.getMinutes();
	var mes = fechaTwitter.getMonth();
	var dia = fechaTwitter.getDate();

	var amPm = " AM ";
	if (horas > 11) { 
		amPm = " PM ";
		if (horas > 12) { 
			horas -= 12;      
		}
	}
   	if (horas == 0) { 
		horas = 12;           
	}	
	//previo al calculo de los datos como horas, minutos, mes, dia se retorna una cadena
	//concatenada con todos los valores anteriores
	return horas+':'+minutos+amPm+meses[mes]+' '+devolverDia(dia);
}

/* 	
	Función que gestiona el formato de fecha a ser presentado en un estado de twitter, según 
	el momento en que fue escrito, así, para estados cuya fecha es menor a un día se tiene un formato 
	y caso contrario se presenta otro formato.
	La diferencia de tiempo se la calcula en milisegundos de acuerdo al huso horario del cliente, y su hora 
	local, como referencia también se toma el valor de la fecha devuelta en el archivo .json
*/
function horaActual(createdAt){	//para determinar la fecha en milisegundos se usa el formato UTC
	var actual = new Date();
	var localTime = actual.getTime();	//fecha actual en milisegundos desde el 1 de enero de 1970
	
	//Sun Apr 12 01:50:10 +0000 2009
	var twitter = new Date(createdAt);
	var horaTwitter = twitter.getTime();	//fecha de twitter en milisegundos desde el 1 de enero de 1970
	
	//Se divide para mil pues el tiempo está en milisegundos y se quiere tener en segundos
	var horaAjustada = (localTime-horaTwitter)/1000;
	
	var ponerHora = '';	//para para presentar en el formato menor a un día
	if (horaAjustada>86400){
		//se presentará el formato mayor a un día
		ponerHora = sintaxisFecha(twitter);
	}else{	
		//se presentará el formato menor a un día
		if (horaAjustada<3600){
			if (horaAjustada<60){//cuando el estado ha sido segundos atrás
				if (horaAjustada==1)
					ponerHora = '1 segundo atr\xe1s';
				else
					ponerHora = parseInt(horaAjustada)+' segundos atr\xe1s';
			} else {//cuando el estado ha sido minutos atrás
				if (horaAjustada<120)
					ponerHora = '1 minute ago';
				else
					ponerHora = parseInt(horaAjustada/60)+' minutos atr\xe1s';
			}
		} else {//cuando el estado ha sido horas atrás
			if (horaAjustada < 7200)
				ponerHora = '1 hora atr\xe1s';
			else
				ponerHora = parseInt(horaAjustada/3600)+' horas atr\xe1s';
		}
	}
	return ponerHora;
}

//Se añaden links al texto cuando es un reply o contiene un enlace http
function devolverLinks(str){
			var array = str.split(' ');
			var cadenaCompleta = '';
			for (var i=0; i<array.length; i++){
				if (array[i].substr(0,1) == '@'){
					var nombre = array[i].slice(1);
					cadenaCompleta += '@<a class="linksDevueltos" href="http://twitter.com/'+nombre+'" target="_blank">'+nombre+'</a> ';
				}else{
					if (array[i].substr(0,4) == 'http'){
						cadenaCompleta += '<a class="linksDevueltos" href="'+array[i]+'" target="_blank">'+array[i]+'</a> ';
					}else{
						if (array[i].substr(0,1) == '#'){
							var hashtag = array[i].slice(1);
							cadenaCompleta += '<a class="linksDevueltos" href="http://twitter.com/search?q=%23'+hashtag+'" target="_blank">#'+hashtag+'</a> ';
						}else
							cadenaCompleta += array[i]+' ';
					}
				}
			}
			return cadenaCompleta;
}

//Función que carga la línea de tiempo de amigos del servicio de microblogging Twitter
function cargarLineaTiempoSearch(categoria,estadosTwitter){
	//se quita el gif que indica cargando y se deja el área en blanco para la presentación de estados de Twitter
	$(categoria).update('');
	
	//Se recorre el array de objetos json para presentar cada estado con su respectivo formato html y estilos css
	for (var i = 0; i < 3; i++ ) {
		var status;
		
		//div para contener los demás elementos del formato que se va a aplicar a cada campo usado del archivo json 
		//al momento de dar el formato respectivo
		var div = new Element('div', { 'class': 'status-front' });
		var span = new Element('span', {'class': 'avatar-front'});
		
		var p = new Element('p', {'class': 'description-front'});	//contiene el texto del estado de un usuario de Twitter
		var textoSpanFin = new Element('span', {'class': 'fechaReplySource'});
		var fecha;
		var source;
		//El 50 indica el número de resultados que se fija en el archivo twitter.php
		//Si se cambia dicho valor, hay que actualizar el siguiente valor también
		
		status = estadosTwitter.results[i];	//se captura el estado[i]
		div.writeAttribute('id', status.id);
		span.update(
		  '<img width="22" height="22" src="' + status.profile_image_url + '" title="' + status.from_user + '" />'
		);	//contiene el avatar de un usuario de Twitter
		
		//Se añade un link que indica el id del estado de un usuario de Twitter
		fecha = '<a target="_blank" href="http://twitter.com/'+status.from_user+'/status/'+status.id+'" >';
		//Determina la fecha en la que fue escrito un estado 
		fecha += horaActual(status.created_at) + '</a>';
		//Indica si la fuente de donde salió el estado, es una aplicación en particular o es a través 
		//de la web
		textoSpanFin.insert(fecha);
		p.update(
		  '<strong><a class="userTwitter" target="_blank" href="http://twitter.com/' 
		  + status.from_user + '">' 
		  + status.from_user + '</a></strong> ' + devolverLinks(status.text) + ' '
		);
		p.insert(textoSpanFin);
			
		div.insert(span);
		div.insert(p);
		$(categoria).insert(div);
	}
}

function llamadaTwitterSearch(tipo,categoria) {
	$(categoria).update('');
	
	var urlTwitter = "http://www.b10.com.ec/wp-content/themes/Derekj/includes/twt-news-server.php";
	new Ajax.Request(urlTwitter,
		{ method: 'get',
		  parameters: {
				tipo: tipo
		  },
		  onCreate: function(request){
				//$(categoria).addClassName('gifFlowerCargador-'+categoria);
				$(categoria).update('<span style="color:#FFFFFF;font-family:Tahoma;text-align:center;">Cargando tweets...</span>');
		  },
		  onSuccess: function(request){
			var estadosTwitter = request.responseJSON;
			//$(categoria).removeClassName('gifFlowerCargador-'+categoria);
			$(categoria).update('');
			if (estadosTwitter.error){
				$(categoria).update(estadosTwitter.error);
			}else{
				if (estadosTwitter == null)
					$(categoria).update('Al parecer existen problemas de conectividad');
				else {
					limiteJsonTwitter = estadosTwitter.length;
					cargarLineaTiempoSearch(categoria,estadosTwitter);
					llamadaTwitterSearch.delay(180,7,categoria);
				}
			}
		  },
		  onFailure: function(request){ 
				$(categoria).update('Ha ocurrido un error');
		  }
	});
}

function initFront(){
	llamadaTwitterSearch(7,'estados-mundo-twitter');
}

Event.observe(window, "load", initFront);