/*
JUITTER 0.9.4 - 02/03/2009 - http://juitter.com
BY RODRIGO FANTE - http://rodrigofante.com

** jQuery 1.2.* or higher required

Juitter is distributed under the MIT License
Read more about the MIT License --> http://www.opensource.org/licenses/mit-license.php

This script is just a beta test version, download and use it at your own risk.
The Juitter developer shall have no responsability for data loss or damage of any kind by using this script.
*/
(function($) {
    var conf = {},
	// JUITTER DEFAULT CONFIGURATION ========================
	// YOU CAN CHANGE THE DYNAMIC VARS ON CALLING THE start method, see the system.js for more information about it.

	numMSG = 20; // set the number of messages to be show
	containerDiv="juitterContainer", // //Set a place holder DIV which will receive the list of tweets example <div id="juitterContainer"></div>
	    loadMSG="Loading messages...", // Loading message, if you want to show an image, fill it with "image/gif" and go to the next variable to set which image you want to use on 
	    imgName="loader.gif", // Loading image, to enable it, go to the loadMSG var above and change it to "image/gif"
	    readMore="View Tweet", // read more message to be show after the tweet content
	    nameUser="image" // insert "image" to show avatar of "text" to show the name of the user that sent the tweet 
	    live:"live-20", //optional, disabled by default, the number after "live-" indicates the time in seconds to wait before request the Twitter API for updates, I do not recommend to use less than 60 seconds.
	    // end of configuration
	    
	    // some global vars
	    aURL="";msgNb=1;
	var mode,param,time,lang,contDiv,loadMSG,gifName,numMSG,readMore,fromID,ultID;
	var running=false;
	// Twitter API Urls
	apifMultipleUSER = "http://search.twitter.com/search.json?from%3A";
	apifUSER = "http://search.twitter.com/search.json?q=from%3A";
	apitMultipleUSER = "http://search.twitter.com/search.json?to%3A";
	apitUSER = "http://search.twitter.com/search.json?q=to%3A";
	apiSEARCH = "http://search.twitter.com/search.json?q=";
	$.Juitter = {
	    registerVar: function(opt){
		mode=opt.searchType;
		param=opt.searchObject;
		timer=opt.live;
		lang=opt.lang?opt.lang:"";
		contDiv=opt.placeHolder?opt.placeHolder:containerDiv;
		loadMSG=opt.loadMSG?opt.loadMSG:loadMSG;
		gifName=opt.imgName?opt.imgName:imgName;
		numMSG=opt.total?opt.total:numMSG;
		readMore=opt.readMore?opt.readMore:readMore;
		fromID=opt.nameUser?nameUser:nameUser;
	    },
	    start: function(opt) {
		ultID=0;
		if($("#"+contDiv)){
		    this.registerVar(opt);
		    // show the load message
		    this.loading();
		    // create the URL  to be request at the Twitter API
		    aURL = this.createURL();
		    // query the twitter API and create the tweets list
		    this.conectaTwitter(1);
		    // if live mode is enabled, schedule the next twitter API query
		    if(timer!=undefined&&!running) this.temporizador();
		}   
	    },
	    update: function(){
		this.conectaTwitter(2);
		if(timer!=undefined) this.temporizador();
	    },
	    loading: function(){
		if(loadMSG=="image/gif"){
		    $("<img></img>")
		    .attr('src', gifName)
		    .appendTo("#"+contDiv); 
		} else $("#"+contDiv).html(loadMSG);
	    },
	    createURL: function(){
		var url = "";
		jlg=lang.length>0?"&lang="+lang:jlg=""; 
		var seachMult = param.search(/,/);
		if(seachMult>0) param = "&ors="+param.replace(/,/g,"+");
		if(mode=="fromUser" && seachMult<=0) url=apifUSER+param;
		else if(mode=="fromUser" && seachMult>=0) url=apifMultipleUSER+param;
		else if(mode=="toUser" && seachMult<=0) url=apitUSER+param;
		else if(mode=="toUser" && seachMult>=0) url=apitMultipleUSER+param;
		else if(mode=="searchWord") url=apiSEARCH+param+jlg;
		url += "&rpp="+numMSG;
		return url;
	    },
	    delRegister: function(){
		// remove the oldest entry on the tweets list
		if(msgNb>=numMSG){
		    $(".twittLI").each(
				       function(o,elemLI){
					   if(o>=numMSG) $(this).hide("slow");  
				       }
				       );
		}
	    },
	    conectaTwitter: function(e){
		// query the twitter api and create the tweets list
		$.ajax({
			url: aURL,
			type: 'GET',
			dataType: 'jsonp',
			timeout: 1000,
			error: function(){ $("#"+contDiv).html("fail#"); },
			success: function(json){
			    if(e==1) $("#"+contDiv).html("");
			    $.each(json.results,function(i,item) {
				    if(e==1 || (i<numMSG && item.id>ultID)){
					if(i==0){
					    tultID = item.id;
					    $("<ul></ul>")
						.attr('id', 'twittList'+ultID)
						.attr('class','twittList')
						.prependTo("#"+contDiv);  
					}
					if (item.text != "undefined") {
					    var link =  "http://twitter.com/"+item.from_user+"/status/"+item.id;  
					    
					    if(fromID=="image") mHTML="<a href='http://www.twitter.com/"+item.from_user+"'  target=\"_top\"><img src='"+item.profile_image_url+"' alt='"+item.from_user+"' class='juitterAvatar' /></a> "+$.Juitter.textFormat(item.text)+" <a href='" + link + "' target=\"_top\" class='JRM'>"+readMore+"</a>";
					    else mHTML="<a href='http://www.twitter.com/"+item.from_user+"' target=\"_top\">@"+item.from_user+":</a> "+$.Juitter.textFormat(item.text)+ " <a href='" + link + "' target=\"_top\">"+readMore+"</a>";
					    
					    $("<li></li>") 
						.html(mHTML)  
						.attr('id', 'twittLI'+msgNb)
						.attr('class', 'twittLI')
						.appendTo("#twittList"+ultID);

					    $('#twittLI'+msgNb).hide();
					    $('#twittLI'+msgNb).show("slow");
					    
					    // remove old entries
					    $.Juitter.delRegister();
					    msgNb++;
					}
				    }
				});
			    ultID=tultID;
			}
		    });
	    },
	    textFormat: function(texto){
		//make links
		var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
		texto = texto.replace(exp,"<a href='$1' target=\"_top\" class='extLink'>$1</a>"); 
		var exp = /[\@]+([A-Za-z0-9-_]+)/ig;
		texto = texto.replace(exp,"<a href='http://twitter.com/$1' target=\"_top\" class='profileLink'>@$1</a>"); 
		var exp = /[\#]+([A-Za-z0-9-_]+)/ig;
		texto = texto.replace(exp,"<a href='http://juitter.com/#$1' target=\"_top\" 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;
	    },
	    temporizador: function(){
		// live mode timer
		running=true;
		aTim = timer.split("-");
		if(aTim[0]=="live" && aTim[1].length>0){
		    tempo = aTim[1]*1000;
		    setTimeout("$.Juitter.update()",tempo);
		}
	    }
	};
})(jQuery);