function body(post) 
{
      var body = $.map(['message','caption','description','name'],function(prop) {return post[prop] || '';}).join(' ');
      if (body.length > options.maxlen) 
        body = body.slice(0,options.maxlen-3) + '...';
      body = encode(body);
      return highlight( options.q, body );
}

function encode(text) 
{ 
		return text.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); 
}

function highlight(q,text) 
{
      q = q.replace(/^\s+|\s+$/g,'')                    
      .replace(/\"/g,'')                             
      .replace(/[\/\.\*\+\?\|\(\)\[\]\{\}\\]/g,'\$&') 
      .replace(/\s+/gi,'|');                         
      var re = new RegExp('\\b('+ q + ')\\b', 'gi');
      return text.replace(re,'<b>$&</b>');
}

function gender2class(gender)
{ 
   return 'gender-'+(gender || 'any'); 
}

function gender_img(gender)
{
	if (!gender) 
		return;
	return '<img class="gender" src="images/'+gender+'.png" />';
}

function update_gender(gender) 
{
	$('#results').attr('class','only-'+gender2class(gender));
}

 function shuffle(arr) 
    {
      for (var i = 1; i < arr.length; i++) 
      {
        var target = Math.round((Math.random() * i));
        var tmp = arr[target];
        arr[target] = arr[i];
        arr[i] = tmp;
      }
      return arr;
 }

window.get_relative_timestamp = function(timestamp) 
{
      var c = new Date();
      var t = window.iso2date(timestamp);

      var d = c.getTime() - t.getTime();
      var dY = Math.floor(d / (365 * 30 * 24 * 60 * 60 * 1000));
      var dM = Math.floor(d / (30 * 24 * 60 * 60 * 1000));
      var dD = Math.floor(d / (24 * 60 * 60 * 1000));
      var dH = Math.floor(d / (60 * 60 * 1000));
      var dN = Math.floor(d / (60 * 1000));

      if (dY > 0)   { return dY === 1? "One year ago"   : dY + " years ago"; }
      if (dM > 0)   { return dM === 1? "One month ago"  : dM + " months ago"; }
      if (dD > 0)   { return dD === 1? "One day ago"    : dD + " days ago"; }
      if (dH > 0)   { return dH === 1? "One hour ago"   : dH + " hours ago"; }
      if (dN > 0)   { return dN === 1? "One minute ago" : dN + " minutes ago"; }
      return "less than a minute ago";
 };
 
 window.iso2date = function(string) 
 {
      var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
      "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
      "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
      var d = string.match(new RegExp(regexp));

      var offset = 0;
      var date = new Date(d[1], 0, 1);

      if (d[3]) { date.setMonth(d[3] - 1); }
      if (d[5]) { date.setDate(d[5]); }
      if (d[7]) { date.setHours(d[7]); }
      if (d[8]) { date.setMinutes(d[8]); }
      if (d[10]) { date.setSeconds(d[10]); }
      if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
      if (d[14]) {
        offset = (Number(d[16]) * 60) + Number(d[17]);
        offset *= ((d[15] == '-') ? 1 : -1);
      }

      offset -= date.getTimezoneOffset();
      var time = (Number(date) + (offset * 60 * 1000));
      var result = new Date();
      result.setTime(Number(time));
      return result;
    };
