function LoadFacebookResults()
{
		var query = options.q;		
		if (!query)
			 return;
		var exclusion_matcher = /( |^)\-(\"(.*?)\"|(.*?)( |$))/;
		var match;
		while( (match = query.match(exclusion_matcher)) )
		 {
		  var reg = new RegExp(match[3] || match[4], 'i');
		  exclusions.push(reg);
		  query = query.replace(exclusion_matcher, ' ');
		}
		$(".waittoload").show();
		GetJSON( 'http://graph.facebook.com/search?callback=?', {'q':query, 'type':'post'}, ParseResults);
}
   
 function GetJSON(url,args,callback,neverCancel) 
 {
		GetJSON.count++;
		if (!neverCancel && GetJSON.count>MAX_REQUESTS) 
		{ 
		   callback(null); return; 
		}
	
		var timeout,handler;
		timeout = setTimeout( function() { if (!neverCancel) { timeout=null; } }, REQUEST_TIMEOUT);
		handler = function() 
		{
	  		if (timeout) 
	  		{
	    		clearTimeout(timeout);
	    		callback.apply(this,arguments);
	  		} 
	  		else 
	  		{
	    		callback(null);
	  		}
		};
		$.getJSON(url,args,handler);
 }    
GetJSON.count = 0;

function ParseResults(response, textStatus) 
{
      if (response && response.paging && response.paging.next) 
        nextPage = response.paging.next;
		 else 
		 {
	        $(".waittoload").hide();
	        $('#finished').show();
      }
      if (!response) 
        return; 
      var posts = $.grep(response.data,function(post) {
        if (post.from && post.from.category)      { return false; }     
        var msg = body(post);
        return true;
      });
      
      if (!posts.length) 
      	return;
      var userids = $.map(posts,function(post){ return post.from.id; });
      var url = 'http://graph.facebook.com/?ids='+userids.join(',') + '&callback=?';
      GetJSON(url, {}, function(users)
      {
        $.each(posts,function(_,post) {
          DisplayResult(post,users[post.from.id]);
        });
     });
}

function DisplayResult(post,user)
{
      if (!user) 
         return; 
      var smallMode=true;
      smallMode=false;
         
      var ROW_HTML=['',
    '<div class="update ~ROWCLASS~">',
    '  <div class="person">',
    '    <a href="http://www.facebook.com/profile.php?id=~ID~&v=wall" target="_blank"><img src="http://graph.facebook.com/~ID~/picture?type=~SIZE~"/></a>',
    '  </div>',
    '<div class="msg">',
    '  <p>~SEX~ <b><a href="http://www.facebook.com/profile.php?id=~ID~&v=wall" target="_blank">~NAME~</a></b>',
    '  ~MSG~ </p>',
    ' <span class="msg-metadata">~ICON~',
    '<a target="_blank" href="http://www.facebook.com/profile.php?id=~ID~&v=wall#!/profile.php?id=~ID~&v=wall&story_fbid=~POSTID~">',
    '~TIME~</a> ~ATTRIB~ <b>~FROM~</b></span>',
    '</div>',
    '</div>'].join('\n');   
         	
      var msg = body(post);
      var html = ROW_HTML
      .replace(/~ROWCLASS~/g, gender2class(user.gender))
      .replace(/~SIZE~/g,     smallMode ? 'normal' : 'large')
      .replace(/~ID~/g,       post.from.id)
      .replace(/~POSTID~/g,   post.id.match(/\d+_(\d+)/)[1])
      .replace(/~NAME~/g,     post.from.name)
      .replace(/~SEX~/g,      gender_img(user.gender))
      .replace(/~ICON~/g,     post.icon ? "<img src='" + post.icon + "'>" : '')
      .replace(/~ATTRIB~/g,   post.attribution ? "via " + post.attribution : '')
      .replace(/~TIME~/g,     window.get_relative_timestamp(post.created_time))
      .replace(/~FROM~/g,     (user.location && user.location.name) || '')
      .replace(/~MSG~/g,      msg);  // MUST BE LAST

      $(html).appendTo($('#results'));
}

 var nextPage = false;
 function LoadNextResults() 
{
      if (nextPage) {
        $(".waitloading").show();
        GetJSON(nextPage + "&callback=?", null, ParseResults);
        nextPage = false;
      }
 }

 function LoadMoreResults() 
 {
	   var page_remaining = $(document).height() - ($(window).height() + $(window).scrollTop());
	   if  (page_remaining < 1000)
	     LoadNextResults();
 }

