/*
JUITTER 1.0.0 - 22/07/2009 - http://juitter.com
BY RODRIGO FANTE - http://rodrigofante.com

** jQuery 1.2.* or higher required

JuitterJK 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 JuitterJK developer shall have no responsability for data loss or damage of any kind by using this script.
*/
(function($) {
	var confJK = {},
		// JUITTER DEFAULT CONFIGURATION ========================
		// YOU CAN CHANGE THE DYNAMIC VARS ON CALLING THE startjk method, see the system.js for more information about it.

		numMSGJK = 20; // set the number of messages to be show
		containerDivJK="twitter_jk", // //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="Read it on Twitter", // 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 
		liveJK:"liveJK-20", //optional, disabled by default, the number after "liveJK-" 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
		aURLJK="";msgNbJK=1;
		var mode,param,time,lang,contDivJK,loadMSG,gifName,numMSGJK,readMore,fromIDJK,ultID,filterWords;
		var runningJK=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=";
	$.JuitterJK = {
		registerVarJK: function(opt){
			mode=opt.searchType;
			param=opt.searchObjectJK;
			timerJK=opt.liveJK;
			lang=opt.lang?opt.lang:"";
			contDivJK=opt.placeHolderJK?opt.placeHolderJK:containerDivJK;
			loadMSG=opt.loadMSG?opt.loadMSG:loadMSG;
			gifName=opt.imgName?opt.imgName:imgName;
			numMSGJK=opt.total?opt.total:numMSGJK;
			readMore=opt.readMore?opt.readMore:readMore;
			fromIDJK=opt.nameUser?opt.nameUser:nameUser;
			filterWords=opt.filter;
			openLink=opt.openExternalLinks?"target='_blank'":"";
		},
		startjk: function(opt) {		
			ultID='JK';
			if($("#"+contDivJK)){	
				this.registerVarJK(opt);
				// show the load message
				this.loadingJK();
				// create the URL  to be request at the Twitter API
				aURLJK = this.createURJK();
				// query the twitter API and create the tweets list
				this.conectaTwitterJK(1);		
				// if liveJK mode is enabled, schedule the next twitter API query
				if(timerJK!=undefined&&!runningJK) this.temporizadorjk();
			}   
		},
		updateJK: function(){
			this.conectaTwitterJK(2);		
			if(timerJK!=undefined) this.temporizadorjk();
		},
		loadingJK: function(){
			if(loadMSG=="image/gif"){
				$("<img></img>")
					.attr('src', gifName)
					.appendTo("#"+contDivJK); 
			} else $("#"+contDivJK).html(loadMSG);
		},
		createURJK: 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="+numMSGJK;		
			return url;
		},
		delRegister: function(){
			// remove the oldest entry on the tweets list
			if(msgNbJK>=numMSGJK){
				$(".twittLIJK").each(
					function(o,elemLI){
						if(o>=numMSGJK) $(this).hide("slow");													  
					}
				);
			}	
		},
		conectaTwitterJK: function(e){
			// query the twitter api and create the tweets list
			$.ajax({
				url: aURLJK,
				type: 'GET',
				dataType: 'jsonp',
				timeout: 1000,
				error: function(){ $("#"+contDivJK).html("fail#"); },
				success: function(json){
					if(e==1) $("#"+contDivJK).html("");				
					$.each(json.results,function(i,itemJK) {
						if(e==1 || (i<numMSGJK && itemJK.id>ultID)){
							if(i==0){
								tultIDJK = itemJK.id;
								$("<ul></ul>")
									.attr('id', 'twittList'+ultID)
									.attr('class','twittList')
									.prependTo("#"+contDivJK);  
							}
							if (itemJK.text != "undefined") {
								var linkJK =  "http://twitter.com/"+itemJK.from_user+"/status/"+itemJK.id;  
								
								var tweet = $.JuitterJK.filter(itemJK.text);
								var current_date = new Date(); 
								var tweet_date = new Date(itemJK.created_at); 
								var months = new Array("Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień");
								var days = new Array("niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota");
								var tweet_day = tweet_date.getDate();
								var tweet_weekday = tweet_date.getDay();
								var tweet_mon = tweet_date.getMonth();
								var tweet_month = months[tweet_mon];
								var tweet_year = tweet_date.getFullYear();
								var tweet_hours = tweet_date.getHours();
								var tweet_minutes = tweet_date.getMinutes();
								if (tweet_hours < 10) { tweet_hours = "0" + tweet_hours; }
								if (tweet_minutes < 10) { tweet_minutes = "0" + tweet_minutes; }

								if(fromIDJK=="image") tmHTML="<a href='http://www.twitter.com/"+itemJK.from_user+"' class='author'><img src='"+itemJK.profile_image_url+"' alt='"+itemJK.from_user+"' class='juitterAvatar' /></a> "+$.JuitterJK.textFormat(tweet)+" <span class='time'>"+(tweet_date)+"</span>";
								else tmHTML=$.JuitterJK.textFormat(tweet)+" <span class='time'>"+days[tweet_weekday]+", "+tweet_day+" "+tweet_month+", "+tweet_year+", "+tweet_hours+":"+tweet_minutes+"</span>";
								
								$("<li></li>") 
									.html(tmHTML)  
									.attr('id', 'twittLIJK'+msgNbJK)	
									.attr('class', 'twittLIJK')
									.appendTo("#twittList"+ultID);

								$('#twittLIJK'+msgNbJK).hide();
								$('#twittLIJK'+msgNbJK).show("slow");
								
								// remove old entries
								$.JuitterJK.delRegister();
								msgNbJK++;								
							}
						}
					});	
					ultID=tultIDJK;
				}
			});
		},	
		filter: function(s){
			if(filterWords){
				searchWords = filterWords.split(",");				
				if(searchWords.length>0){
					cleanHTML=s;
					$.each(searchWords,function(i,itemJK){	
						sW = itemJK.split("->").length>0 ? itemJK.split("->")[0] : itemJK;
						rW = itemJK.split("->").length>0 ? itemJK.split("->")[1] : "";					
						regExp=eval('/'+sW+'/gi');					
						cleanHTML = cleanHTML.replace(regExp, rW);							
					});
				} else cleanHTML = s;			
				return cleanHTML;
			} else return s;
		},
		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' class='extLink' "+openLink+">$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='$.JuitterJK.startjk({searchType:\"searchWord\",searchObjectJK:\"$1\"});return false;' class='hashLink'>#$1</a>"); 
			// make it bold
			if(mode=="searchWord"){
				tempParam = param.replace(/&ors=/,"");
				arrParam = tempParam.split("+");
				$.each(arrParam,function(i,itemJK){					
					regExp=eval('/'+itemJK+'/gi');
					newString = new String(' <b>'+itemJK+'</b> ');
					texto = texto.replace(regExp, newString);					  
				});				
			}
			return texto;
		},
		temporizadorjk: function(){
			// liveJK mode timerJK
			runningJK=true;
			aTimJK = timerJK.split("-");
			if(aTimJK[0]=="liveJK" && aTimJK[1].length>0){
				tempoJK = aTimJK[1]*1000;
				setTimeout("$.JuitterJK.updateJK()",tempoJK);
			}
		}
	};	
})(jQuery);