// JavaScript Document
$.fn.twitterReader = function(_tags, _form){
	var defaults = {
		sinceId:0,
		query:"qhapaq",
		cfg:{since_id:null, max_id:null, refresh_url:null, results_per_page:null, total:null, next_page:null, page:1}
	};
	
	var baseUrl = "http://search.twitter.com/search.json";
	var tags = $(_tags);
	var form = $(_form);
	var idInterval;
	options = $.extend(defaults, "");
	var mom = $(this);
	var parCurrent = null;
	var idsHttp = {refresh:null,update:null};
	var ini = {refresh:mom.attr("class"),update:null};
	//console.log(ini);
	function render(){
		mom.attr("class",ini.refresh);
		var html = '<div class="loading top">Cargando...</div>';
		html += '<div id="res-update" class="hide"><span id="new-res-count">0</span> <span id="new-res-count-text">nuevos mensajes</span>. <a id="res-update-a" href="/index.htm">Actualizar</a>.</div>';
		html += '<ul id="res-lst"></ul>';
		html += '<div id="paginator" class="hide">';
		html += '	<span class="prev right"> <a href="#">Recientes</a> &raquo;</span>';
		html += '	<div class="page-all">P&aacute;gina <span class="page">1</span></div>';
		html += '	<span class="next left">&laquo; <a href="#">Anteriores</a></span>'; 
		html += '</div>';
		html += '<div class="loading botton hide">Cargando...</div>';
		mom.empty().html(html);
		mom.find("#paginator a").click(function(){
			var t = $(this);
			var filter = "";
			mom.children("div#paginator").addClass("hide");
			mom.children("div.loading:not(.top)").removeClass("hide");
			if (t.parent().hasClass("prev")){
				filter = options.cfg.previous_page;
			}else{
				filter = options.cfg.next_page;
			}
			listar(baseUrl+filter);
			return false;
		});
		mom.find("a#res-update-a").click(function(){
			mom.children("div#paginator").addClass("hide");
			mom.children("div.loading:not(.botton)").removeClass("hide");
			mom.children("div#res-update").addClass("hide");
			listar(baseUrl+"?"+parCurrent);
			return false;
		})
	}
	function upadte(){
		resUpdate = mom.children("div#res-update");
		if (resUpdate.hasClass("loading")) return false; 
		var idHttp = "tmp"+rand();
		resUpdate.addClass("loading "+idHttp);
		//console.log(baseUrl+"?"+parCurrent+"&refresh=true&since_id="+options.cfg.max_id);
		$.ajax({
			url: baseUrl+"?"+parCurrent+"&refresh=true&since_id="+options.cfg.max_id,
			type: 'GET',
			dataType: 'jsonp',
			timeout: 1000,
			error: function (e) {
				this;
			},
			success: function(js){
				//console.log(resUpdate.attr("class")+"  "+idHttp+ "           "+parCurrent);
				if (!resUpdate.hasClass(idHttp)) return false;
				resUpdate.removeClass(idHttp);
				resUpdate.removeClass("loading");
				var total = js.total;
				total = (typeof(js.total)=="undefined") ? 0 : parseInt(total);
				//console.log("traido:"+total+", max_id:"+js.max_id+",since_id"+js.since_id);
				if (total>0){
					count = mom.find("span#new-res-count");
					total = parseInt(count.text())+total;
					mom.find("span#new-res-count-text").text( (total==1?"mensaje nuevo":"mensajes nuevos") );
					count.text( total );
					options.cfg.max_id = js.max_id;
					mom.children("div#res-update").removeClass("hide");
				}
			}
		});	
	}
	
	function listar(url){
		//console.log(url);
		clearInterval(idInterval);
		var idHttp = "tmp"+rand();
		mom.addClass(idHttp);
		$.ajax({
			url: url,
			type: 'GET',
			dataType: 'jsonp',
			timeout: 1000,
			error: function (e) {
				this;
			},
			success: function(js){
				if (!mom.hasClass(idHttp)) return false;
				mom.removeClass(idHttp);
				options.cfg = {previous_page:js.previous_page, next_page:js.next_page, page:js.page, max_id:js.max_id};
				var rsl = "";
				var m = js.results.length;
				for (var i=0;i<m;i++){
					var r = js.results[i];
					
					if (i.text != "undefined") {
						html  = '<li class="result'+(i%2==0?" light":"")+'">';
						html += '	<div class="avatar">';
						html += '		<a href="http://twitter.com/'+r.from_user+'" target="_blank"><img alt="'+r.from_user+'" src="'+r.profile_image_url+'" /></a>';
						html += '	</div>';
						html += '	<div class="msg">';
						html += '		<a href="http://twitter.com/'+r.from_user+'" target="_blank">'+r.from_user+'</a>: '+textFormat(r.text);
						html += '	</div>';
						html += '	<div class="info" style="clear:both"><div class="left">'; 
						html += '		'+relativeTime(r.created_at);
						html += '		<span class="source">desde '+deHTML(r.source)+'</span>';
						html += '		</div><div class="right lista"><ul><li><a href="http://twitter.com/?status=RT @'+r.from_user+': '+r.text.replace("#","%23")+'" target="_blank" class="forward"><span class="sp-forward">Reenviar</span></a></li>';
						html += '		<li><a href="http://twitter.com/?status=@'+r.from_user+'&in_reply_to_status_id='+r.id+'&in_reply_to='+r.from_user+'" class="litnv reply" target="_blank" ><span class="sp-reply">Responder</span></a></li>';
						html += '		<li> <a href="http://twitter.com/'+r.from_user+'/statuses/'+r.id+'" class="lit permalink" target="_blank"><span class="sp-permalink">Enlace permanente</span></a></li></ul></div>';
						html += '	</div>';
						html += '</li>';
						rsl  += html;
					}
				}
				if (typeof(options.cfg.previous_page)=="undefined" || options.cfg.previous_page==""){
					mom.find("div#paginator span.prev").addClass("hide");
				}else{
					mom.find("div#paginator span.prev").removeClass("hide").children("a").attr("href","#P%C3%A1gina "+(parseInt(options.cfg.page)-1));
				}	
				if (typeof(options.cfg.next_page)=="undefined" || options.cfg.next_page==""){
					mom.find("div#paginator span.next").addClass("hide");
				}else{
					mom.find("div#paginator span.next").removeClass("hide").children("a").attr("href","#P%C3%A1gina "+(parseInt(options.cfg.page)+1));
				}
				mom.find("span#new-res-count").text("0");
				mom.children("div#paginator").removeClass("hide");
				mom.children("div.loading").addClass("hide");				
				mom.children("#res-lst").html(rsl);
				mom.find("div#paginator span.page").text( options.cfg.page );
				$('html').animate({scrollTop:0}, 'slow'); 
				idInterval = setInterval(upadte,30000);
			}
		});	
	}
	function textFormat(texto){
		//make links
		var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
		texto = texto.replace(exp,"<a href='$1' class='extLink'>$1</a>"); 
		var exp = /[\@]+([A-Za-z0-9-_]+)/ig;
		texto = texto.replace(exp,"<a href='http://twitter.com/$1' class='profileLink'>@$1</a>"); 
		var exp = /[\#]+([A-Za-z0-9-_]+)/ig;
		texto = texto.replace(exp,"<a href='http://juitter.com/#$1' onclick='$.Juitter.start({searchType:\"searchWord\",searchObject:\"$1\"});return false;' class='hashLink'>#$1</a>"); 
		// make it bold
		/*
		if(mode=="searchWord"){
			tempParam = param.replace(/&ors=/,"");
			arrParam = tempParam.split("+");
			$.each(arrParam,function(i,item){
				regExp=eval('/ '+item+'/ig');
				newString = new String(' <b>'+item+'</b> ');
				texto = texto.replace(regExp, newString);					  
			});				
		}
		*/
		return texto;
	}
	function relativeTime(date_time) {
		var delta = (new Date()).getTime() - (new Date(date_time)).getTime();
		delta = delta/1000;
		if (delta < 60) {
			return 'Menos de un minuto atr&aacute;s';
		} else if(delta < 120) {
			return 'Hace aproximadamente 1 minuto';
		} else if(delta < (60*60)) {
			return "Hace " + (parseInt(delta / 60)).toString() + ' minutos';
		} else if(delta < (120*60)) {
			return 'Hace 1 hora';
		} else if(delta < (24*60*60)) {
			return 'Hace ' + (parseInt(delta / 3600)).toString() + ' horas';
		} else if(delta < (48*60*60)) {
			return 'Hace 1 d&iacute;a';
		} else {
			return "Hace " + (parseInt(delta / 86400)).toString() + ' d&iacute;as';
		}
	}
	form.submit(function() {
		if ($.trim(this.qSearch.value) == "") return false;
		render();
		var url = this.par.value.replace("[qSearch]",this.qSearch.value)
		tags.parent(".activo").removeClass("activo");
		listar(baseUrl+"?"+url);
		return false;
	});
	 
	function deHTML(str) { 
		if(str.search(/&amp;/g) != -1 || str.search(/&lt;/g) != -1 || str.search(/&gt;/g) != -1){
			return str.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"'); 
		}
		return str;
	};
	function cancel(){
		xhrId.onreadystatechange = function () {};
		xhrId.abort();
		clearInterval(twitterReaderInterval);
	}
	function rand(){ return parseInt(Math.random()*10000) };
	
	// init;
	
	render();
	tags.click(function(){
		var t = $(this);
		t.parent().siblings().removeClass("activo").end().addClass("activo");
		parCurrent = t.attr("rel");
		render();
		listar(baseUrl+"?"+parCurrent);
		return false;
	});	
	listar(baseUrl+"?q=%23metallicape");
	listar(baseUrl+"?q=%23metallicalima");
	//tags.parent(".activo").children("a").click();
};

