(function($){
	
    $.tweets = function(el, options){
        var base = this;
        
        base.$el = $(el);
        base.el = el; 
        
        base.$el.data("tweets", base);
        
        base.init = function(){
            
            base.options = $.extend({},$.tweets.defaultOptions, options);
            base.months = $.extend({},$.tweets.months);
			
            $.getJSON(
		    	'http://search.twitter.com/search.json?callback=?&rpp='+base.options.tweetCount+'&q=' + base.options.query,
        		function(data) {
            		$.each(data, function(i, tweets){
                		if (tweets.length != undefined){                   			
                   			if (tweets[0] != undefined){
                   				if (tweets[0].created_at != undefined){
                  	 				
									var $tweetContainer = $(document.createElement("ul"))
														.attr("id","tweet-cont")
									    				.addClass("tweet-cont");
									base.$el.append($tweetContainer);
									
									for(var i = 0; i < tweets.length; i++){                       					
									    var tweetClass = "odd";
									    if(i%2 == 0){
									    	tweetClass = "even";
									    }
									    				
									    var $tweet = $(document.createElement("li"))
									    			.attr("id","tweet_"+tweets[i].id)
									    			.addClass(tweetClass)
									    			.addClass("tweet");
									    $tweetContainer.append($tweet);
									    
									   
									    var $tweetDesc = "<strong>"+tweets[i].from_user+"</strong>: " + base.replaceURLs(tweets[i].text);
									    $tweet.append($tweetDesc);
									    
									    var tweetDate = new Date(tweets[i].created_at);
									    var today = new Date();
									    
									    var timeDiff;
									    var minDiff = Math.ceil((today.getTime()-tweetDate.getTime())/(60*1000));
									    var hourDiff = Math.ceil((today.getTime()-tweetDate.getTime())/(60*60*1000));
									    var dayDiff = Math.ceil((today.getTime()-tweetDate.getTime())/(24*60*60*1000));
									                           					
									    if(minDiff < 59){
									    	timeDiff = " about "+minDiff+" minutes ago from "+base.fixEncHTML(tweets[i].source);
									    }else if(hourDiff < 24){
									    	timeDiff = " about "+hourDiff+" hours ago from "+base.fixEncHTML(tweets[i].source)+"";
									    }else if(dayDiff < 5){
									    	timeDiff = " "+dayDiff+" days ago from "+base.fixEncHTML(tweets[i].source)+"";
									    }else{
									    	var AMPM = "PM";
									    	var myHours;
									    	if(tweetDate.getHours() < 12){
									    		AMPM = "AM";
									    		if(tweetDate.getHours() == 0){
									    			myHours = "12";
									    		}else{
									    			myHours = tweetDate.getHours();
									    		}
									    	}else{
									    		myHours = tweetDate.getHours()-12;
									    	}
									    	
									    	var myDate = tweetDate.getDate() +"th";
									    	if(tweetDate.getDate() == 1 || tweetDate.getDate() == 21 || tweetDate.getDate() == 31){
									    		myDate = tweetDate.getDate() +"st";
									    	}else if(tweetDate.getDate() == 2 || tweetDate.getDate() == 22){
									    		myDate = tweetDate.getDate() +"nd";
									    	}else if(tweetDate.getDate() == 3 || tweetDate.getDate() == 23){
									    		myDate = tweetDate.getDate() +"rd";
									    	}
									    	timeDiff = "("+myHours+":"+tweetDate.getMinutes()+" "+AMPM+" "+base.months[tweetDate.getMonth()]+" "+myDate+")";
									    }
									    
									    $tweet.append(timeDiff);
									}
									if(base.options.query == 'from:idkreatif'){
										$tweetContainer.after('<div class="followme"><a target="_blank" href="http://twitter.com/idkreatif"><img alt="Follow Us on Twitter" src="http://www.tradexpoindonesia.com/tei/wp-content/themes/tei-beta/img/twitfollowme.gif" /></a></div');
									}else{ 
										$tweetContainer.after('<div class="moretwitter"><a target="_blank" href="http://search.twitter.com/search?q=tei2010"><img alt="twitter more" src="http://www.tradexpoindonesia.com/tei/wp-content/themes/tei-beta/img/twitmore.gif" /></a></div>');
									} 
                  	 			}
                   			}
						}
						
                	});
                	
					
					 
					
                	if(jQuery.isFunction(base.options.callback)){
            			base.options.callback();
            		}

        		}
				
            );
        }
        
        base.isEncHTML = function(str){
			if(str.search(/&amp;/g) != -1 || str.search(/&lt;/g) != -1 || str.search(/&gt;/g) != -1 || str.search(/&quot;/g) != -1) 
		    	return true; 
		  	else 
		    	return false;
        }
        
        base.fixEncHTML = function(str){
        	if(base.isEncHTML(str)) 
		      return str.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g,"'"); 
		    return str; 
        }
        
        base.replaceURLs = function(text){
			text = text.replace(base.options.aTagRegexp,"<a href='$1' target='_blank'>$1</a>");
			text = text.replace(base.options.userRegexp,"$1<a class='user' href='http://www.twitter.com/$2' target='_blank'>@$2</a>");
			text = text.replace(base.options.hashtagRegexp,"$1<a class='hashtag' href='http://search.twitter.com/search?q=%23$2' target='_blank'>#$2</a>");
			return text;
        }
        
        base.init();
    }
	
	$.tweets.months = new Array(
		"January",
		"February",
		"March",
		"April",
		"May",
		"June",
		"July",
		"August",
		"September",
		"October",
		"November",
		"December"
	);
	
    $.tweets.defaultOptions = {
        query:"twitter",
		tweetCount:150,
		callback:null,
		aTagRegexp:/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,
		hashtagRegexp:/(^|\s)#(\w+)/g,
		userRegexp:/(^|\s)@(\w+)/g,
		abrMonths:false,
		showAvatar:false
    }
	

    $.fn.tweets = function(options){
        return this.each(function(){
            (new $.tweets(this, options));
        });
    }

	
})(jQuery);
