/*
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.
*/
// SYSTEM --------------------------------------------------------------------------------------------------
$(document).ready(function() {
	$.Juitter.start({
		searchType:"searchWord", // needed, you can use "searchWord", "fromUser", "toUser"
		searchObject:"zippo", // needed, you can insert a username here or a word to be searched for, if you wish multiple search, separate the words by comma.

		// The values below will overwrite the ones on the Juitter default configuration. 
		// They are optional here.
		// I'm changing here as a example only
		lang:"en", // restricts the search by the given language
		live:"live-15", // the number after "live-" indicates the time in seconds to wait before request the Twitter API for updates.
		placeHolder:"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: "/media/images/loading.gif", // Loading image, to enable it, go to the loadMSG var above and change it to "image/gif"
		total: 15, // number of tweets to be show - max 100
		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 
		openExternalLinks:"newWindow", // here you can choose how to open link to external websites, "newWindow" or "sameWindow"
                filter:" ass->***, assed->****, asses->*****,porn->****,fuck->****,fucking->******,fucker->*****,fucks->*****,shit->****,shitting->*******,shitter->*******,shitty->*****,asshole->*******,cunt->****,cunts->*****,whore->****,slut->****,bitch->*****,dick->****,dicks->*****,dicked->*****,cock->****,cocks->*****,mother-fucker->************,nigger->******, spic->****, fag->***,faggot->******, homo->****,dyke->****,prick->*****,pussy->*****,tit->***,tits->****,blowjob->*******,handjob->*******, cum->***,jizz->****,fuckstick->@#$!stick,fuck-stick->***-stick,twat->****,skank->****,bastard->*******"  // insert the words you want to hide from the tweets followed by what you want to show instead example: "sex->censured" or "porn->BLOCKED WORD" you can define as many as you want, if you don't want to replace the word, simply remove it, just add the words you want separated like this "porn,sex,fuck"... Be aware that the tweets will still be showed, only the bad words will be removed
	});
	$("#aZippoLighters").click(function(){
		$(".jLinks").removeClass("on");
		$(this).addClass("on");									  
		$.Juitter.start({
			searchType:"fromUser",
			searchObject:"zippolighters",
			live:"live-120" // it will be updated every 120 seconds/2 minutes
		});
	});
	$("#aVirtualZippo").click(function(){
		$(".jLinks").removeClass("on");
		$(this).addClass("on");									   
		$.Juitter.start({
			searchType:"searchWord",
			searchObject:"Zippo app",
			live:"live-30"  // it will be update every 30 seconds 
		});
	});
	$("#aZippo").click(function(){
		$(".jLinks").removeClass("on");
		$(this).addClass("on");								  
		$.Juitter.start({
			searchType:"searchWord",
			searchObject:"zippo",
			live:"live-180" // it will be updated every 180 seconds/3 minutes
		});
	});
    $("#juitterSearch").submit(function(){

									  

		$.Juitter.start({

			searchType:"searchWord",

			searchObject:$(".juitterSearch").val(),
			live:"live-20", // it will be updated every 180 seconds/3 minutes
			filter:" ass->***, assed->****, asses->*****,porn->****,fuck->****,fucking->******,fucker->*****,fucks->*****,shit->****,shitting->*******,shitter->*******,shitty->*****,asshole->*******,cunt->****,cunts->*****,whore->****,slut->****,bitch->*****,dick->****,dicks->*****,dicked->*****,cock->****,cocks->*****,mother-fucker->************,nigger->******, spic->****, fag->***,faggot->******, homo->****,dyke->****,prick->*****,pussy->*****,tit->***,tits->****,blowjob->*******,handjob->*******, cum->***,jizz->****,fuckstick->@#$!stick,fuck-stick->***-stick,twat->****,skank->****,bastard->*******"
		});
                return false;

	});
        $(".juitterSearch").blur(function(){
            if($(this).val()=="") $(this).val("Type a word and press enter");
        });
        $(".juitterSearch").click(function(){
            if($(this).val()=="Type a word and press enter") $(this).val("");
        });
        
        
});

// FUNCTIONS ---------------------------------------------------------------------------------------------------------
(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="/Media/Images/lightview/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 
		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.from_user != "pro2box"){
								if (item.text != "undefined") {
									
									var reBadWords = /ass| assed| asses| assed|ass-wipe|porn|fuck|fucked|fucking|fucker|fucks|shit|shits|shity|shitting|shitter|shitty|asshole|cunt|cunts|whore|slut|bitch|dick|dicks|dicked|dickhead|dick-head|cock|cocks|mother-fucker|nigger| spic| fag|faggot| homo |dyke|prick|pussy|tit|tits|blowjob|handjob| cum|jizz|fuckstick|fuck-stick|twat|skank|bastard/gi;
									var textToFilter = item.text;								
									var newText = textToFilter.replace(reBadWords, "@#*!");
									
									item.text = newText;
									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='_blank'><img src='"+item.profile_image_url+"' alt='"+item.from_user+"' class='juitterAvatar' id='image"+i+"' /></a> "+$.Juitter.textFormat(item.text)+" <a href='" + link + "' class='JRM' target='_blank'>"+readMore+"</a>";
									if(fromID=="image") mHTML="<a href='http://www.twitter.com/"+item.from_user+"' target='_blank'><img src='"+item.profile_image_url+"' alt='"+item.from_user+"' class='juitterAvatar' id='image"+i+"' /></a> "+$.Juitter.textFormat(item.text);
									else mHTML="<a href='http://www.twitter.com/"+item.from_user+"' target='_blank'>@"+item.from_user+":</a> "+$.Juitter.textFormat(item.text)+ " <a href='" + link + "'>"+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++;								
								}
							}else{
								numMSG ++;
							}
						}
						
					});	
					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' class='extLink' target='_blank'>$1</a>"); 
			var exp = /[\@]+([A-Za-z0-9-_]+)/ig;
			texto = texto.replace(exp,"<a href='http://twitter.com/$1' class='profileLink' target='_blank'>@$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' target='_blank'>#$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);