(function($) {
	var conf = {},
		numMSG = 18;
		containerDiv="juitterContainer",
		loadMSG="image/gif", 
		imgName="img/loader.gif",
		readMore="Read it on Twitter",
		nameUser="image" 
		live:"live-10",
	
		aURL="";msgNb=1;
		var mode,param,time,lang,contDiv,loadMSG,gifName,numMSG,readMore,fromID,ultID,filterWords;
		var running=false;

		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?opt.nameUser:nameUser;
			filterWords=opt.filter;
			openLink=opt.openExternalLinks?"target='_blank'":"";
		},
		start: function(opt) {		
			ultID=0;
			if($("#"+contDiv)){	
				this.registerVar(opt);
				this.loading();
				aURL = this.createURL();
				this.conectaTwitter(1);		
				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(){
			if(msgNb>=numMSG){
				$(".twittLI").each(
					function(o,elemLI){
						if(o>=numMSG) $(this).slideUp("slow");													  
					}
				);
			}	
		},
		conectaTwitter: function(e){
			$.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;  
								
								var tweet = $.Juitter.filter(item.text);
								
								var now = new Date();
								var creationDate = new Date();
								
								var creation = item.created_at.split(" ");
								var time = creation[4].split(":");
								
								switch(creation[2]) {
									case 'Jan': creationDate.setMonth(1); break;
									case 'Feb': creationDate.setMonth(2); break;
									case 'Mar': creationDate.setMonth(3); break;
									case 'Apr': creationDate.setMonth(4); break;
									case 'May': creationDate.setMonth(5); break;
									case 'Jun': creationDate.setMonth(6); break;
									case 'Jul': creationDate.setMonth(7); break;
									case 'Aug': creationDate.setMonth(8); break;
									case 'Sep': creationDate.setMonth(9); break;
									case 'Okt': creationDate.setMonth(10); break;
									case 'Nov': creationDate.setMonth(11); break;
									case 'Dec': creationDate.setMonth(12); break;
								}
								creationDate.setDate(creation[1]);
								creationDate.setYear(creation[3]);
								creationDate.setHours(time[0]);
								creationDate.setMinutes(time[1]);
								creationDate.setSeconds(time[2]);
								creationDate.setMilliseconds(creation[5]);
								
								var one_minute=1000*60;

								var minutes = Math.ceil((now.getTime()-creationDate.getTime())/(one_minute));
								
								minutes = 24050;
								
								if(minutes > 59) {
									if(minutes < (24*60)) {
										var timeAgo = Math.ceil((minutes/60)) + " uur geleden";
									} else {
										var timeAgo = creationDate.getDate()+"-"+creationDate.getMonth()+"-"+creationDate.getFullYear();
									}
								} else {
									var timeAgo = minutes + " minuten geleden";
								}
								timeAgo = '';
								
								if(fromID=="image") mHTML='<div class="isTweetHeader"><div class="isTweetImage"><a href="http://www.twitter.com/'+item.from_user+'" title="'+item.from_user+'" target="_blank"><img src="'+item.profile_image_url+'" alt="'+item.from_user+'" width="48" height="48" /></a></div><div class="isTweetTitle"><div><a href="http://www.twitter.com/'+item.from_user+'" title="'+item.from_user+'" target="_blank">'+item.from_user+'</a></div><div class="isTweetTime">'+timeAgo+'</div></div></div><div class="isTweetContent">'+$.Juitter.textFormat(tweet)+'</div>';
								else mHTML='<div class="isTweetHeader"><div class="isTweetImage"></div><div class="isTweetTitle"><div><a href="http://www.twitter.com/'+item.from_user+'" title="'+item.from_user+'" target="_blank">'+item.from_user+'</a></div><div class="isTweetTime">'+timeAgo+'</div></div></div><div class="isTweetContent">'+$.Juitter.textFormat(tweet)+'</div>';
								
								$("<li></li>") 
									.html(mHTML)  
									.attr('id', 'twittLI'+msgNb)
									.attr('class', 'twittLI')
									.appendTo("#twittList"+ultID);

								$('#twittLI'+msgNb).hide();
								if(e==2)
									$('#twittLI'+msgNb).slideDown("slow");
								else
									$('#twittLI'+msgNb).show();
								
								$.Juitter.delRegister();
								msgNb++;								
							}
						}
					});	
					ultID=tultID;
				}
			});
		},	
		filter: function(s){
			if(filterWords){
				searchWords = filterWords.split(",");				
				if(searchWords.length>0){
					cleanHTML=s;
					$.each(searchWords,function(i,item){	
						sW = item.split("->").length>0 ? item.split("->")[0] : item;
						rW = item.split("->").length>0 ? item.split("->")[1] : "";					
						regExp=eval('/'+sW+'/gi');					
						cleanHTML = cleanHTML.replace(regExp, rW);							
					});
				} else cleanHTML = s;			
				return cleanHTML;
			} else return s;
		},
		textFormat: function(texto){
			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://twitter.com/search?q=%23$1' class='hashLink' target='_blank'>#$1</a>"); 
			if(mode=="searchWord"){
				tempParam = param.replace(/&ors=/,"");
				arrParam = tempParam.split("+");
				$.each(arrParam,function(i,item){					
					regExp=eval('/'+item+'/gi');
					newString = new String(' <b>'+item+'</b> ');
					texto = texto.replace(regExp, newString);					  
				});				
			}
			return texto;
		},
		temporizador: function(){
			running=true;
			aTim = timer.split("-");
			if(aTim[0]=="live" && aTim[1].length>0){
				tempo = aTim[1]*1000;
				setTimeout("$.Juitter.update()",tempo);
			}
		}
	};	
})(jQuery);
