<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="Person Finder" title_url="" author="Bas Hennekam." author_email="bashennekam@gmail.com"
             author_location="Utrecht, the Netherlands" category="tools" height="20" width="300"
             description="Find a person by searching the Social Networks: Facebook, Flickr, Google, Hyves, LinkedIn, Myspace, Partyflock and more coming soon..."
             screenshot="http://gadgets.bashennekam.nl/personfinder/google_gadget_persons_screen.png" 
             thumbnail="http://gadgets.bashennekam.nl/personfinder/google_gadget_persons_thumb.png">
<Require feature="dynamic-height" /> 
<Require feature="setprefs" />
<Require feature="analytics" />
</ModulePrefs>

<UserPref name="UPFacebookShow" display_name="Facebook" datatype="bool" default_value="true" />
<UserPref name="UPFacebookResults" datatype="hidden" default_value="false" />
<UserPref name="UPFlickrShow" display_name="Flickr" datatype="bool" default_value="true" />
<UserPref name="UPFlickrResults" datatype="hidden" default_value="false" />
<UserPref name="UPGoogleShow" display_name="Google" datatype="bool" default_value="true" />
<UserPref name="UPGoogleResults" datatype="hidden" default_value="false" />
<UserPref name="UPHyvesShow" display_name="Hyves" datatype="bool" default_value="true" />
<UserPref name="UPHyvesResults" datatype="hidden" default_value="false" />
<UserPref name="UPPartyflockShow" display_name="Partyflock" datatype="bool" default_value="true" />
<UserPref name="UPPartyflockResults" datatype="hidden" default_value="false" />
<UserPref name="UPLinkedInShow" display_name="LinkedIn" datatype="bool" default_value="true" />
<UserPref name="UPLinkedInResults" datatype="hidden" default_value="false" />
<UserPref name="UPMySpaceShow" display_name="MySpace" datatype="bool" default_value="true" />
<UserPref name="UPMySpaceResults" datatype="hidden" default_value="false" />

<UserPref name="UPMaxResults" display_name="Max. results: " datatype="enum" default_value="5">
  <EnumValue value="1" display_value="1"/>
  <EnumValue value="2" display_value="2"/>
  <EnumValue value="3" display_value="3"/>
  <EnumValue value="4" display_value="4"/>
  <EnumValue value="5" display_value="5"/>
  <EnumValue value="6" display_value="6"/>
  <EnumValue value="7" display_value="7"/>
</UserPref>

<UserPref name="UPShowPictures" display_name="Show Pictures: " datatype="bool" default_value="true" />
<UserPref name="UPShowDescription" display_name="Show Descriptions: " datatype="bool" default_value="true" />

<UserPref name="UPSearchTerm" datatype="hidden" />

<Content type="html">
<![CDATA[
<!-- ALm6fM17BiMnaXcUFP5fsom1wbop3icxFwHf3TY_ccb0mcUS_PR1qdTv3idJqS5v0zZ6XQSj3cYhwMjqNI-nqALdFdK-Fb2KSfeWxOwxbD912Zmj7R3WKaOOv5rfcOZ2ts7gWu0x_jPu4GVJxfTlaC5n0rxZp4L4XjrqM9L8e8QPqn6VTryY2P6CgOivdyxfylI92yuc17uM -->

<script src="http://www.google.com/jsapi?key=ABQIAAAAwDBWwDciu-E9BpojrziQZRTgaGJPWuGS0gb9q6PEt9qk4ocrQRT3c1FI06mIppMZhCz8pB7pDIEvbA" type="text/javascript">ogle.load("search", "1");</script>
<script language="Javascript" type="text/javascript">google.load("search", "1");</script>

<script language="Javascript" type="text/javascript">
_IG_Analytics("UA-3622119-2", "/GadgetPersonFinder/load");

var sites = new Array('Facebook','Flickr','Google','Hyves','LinkedIn','MySpace','Partyflock');
  
var UPPrefs = new _IG_Prefs(__MODULE_ID__);
var UPMaxResults = UPPrefs.getString('UPMaxResults');
var UPShowPictures = UPPrefs.getBool('UPShowPictures');
var UPShowDescription = UPPrefs.getBool('UPShowDescription');
var txtNoResults = 'No results found.';

function Search() {
  _IG_Analytics("UA-3622119-2", "/GadgetPersonFinder/search");
  UPPrefs.set('UPSearchTerm', _gel('inputSearch').value);
  Load();
}
  
function Load() {  
  var search = UPPrefs.getString('UPSearchTerm');
  _gel('inputSearch').value = search;
  
  var html = '';
  for(var i=0;i<sites.length;i++) {
    var site = sites[i];
    var show = UPPrefs.getBool('UP' + site + 'Show');
    var results = UPPrefs.getBool('UP' + site + 'Results');
    var display = (results) ? '' : 'none';
  
    if(show) {
      html += '<div class="divSite">';      
      if(search.length > 0) {
        setTimeout('Load' + site + '(\'' + search + '\')', 100);
        html += '<div class="divSiteHeading" id="' + site + 'Heading" onclick="ShowHide(\'' + site + '\')">';
        html += '<span class="spanCount"><img src="http://gadgets.bashennekam.nl/personfinder/google_gadget_persons_loading.gif" /></span>' + site + '</div>';
        html += '<div class="divSiteResults" id="' + site + 'Results" style="display:' + display + '">';
        html += '<i>Loading...</i>';
      } else {
        html += '<div class="divSiteHeading" id="' + site + 'Heading" onclick="ShowHide(\'' + site + '\')"><span class="spanCount">-</span>' + site + '</div>';
        html += '<div class="divSiteResults" id="' + site + 'Results" style="display:' + display + '">';
        html += '<i>No search term found.</i>';
      }
      html += '<span id="' + site + 'Temp" style="display:none">&nbsp;</span>';
      html += '</div>';      
      html += '</div>';      
    }    
  }
  _gel('divResults').innerHTML = html;  
  _IG_AdjustIFrameHeight();
}
  
function ShowHide(site) {
  var style = _gel(site + 'Results').style.display;
  
  if(style == 'none') {
    _gel(site + 'Results').style.display = '';
    UPPrefs.set('UP' + site + 'Results', true);
  } else {
    _gel(site + 'Results').style.display = 'none';
    UPPrefs.set('UP' + site + 'Results', false);
  }
  
  _IG_AdjustIFrameHeight();
}
  
function ShowResults(site,persons,resultscount,more,error) {
  var html = '';
  if(!error) error = '';
  if(error.length == 0) {  
	  if(resultscount == null || resultscount == 0) {
		resultscount = '-';
		html = '<i>' + txtNoResults + '</i>';
	  } else {
		for (var i=0;i<persons.length && i < UPMaxResults;i++) {
			 html += '<div class="divResult">';
			if(persons[i].picture != null && UPShowPictures) {
			  html += '<span class="spanResultPicture">';
			  html += '<a href="' + persons[i].url + '" target="_blank"><img src="' + persons[i].picture + '" /></a></span>';
			}
			html += '<span class="spanResultName">';
			html += '<a href="' + persons[i].url + '" target="_blank">' + persons[i].name + '</a></span>';      
			if(persons[i].descr != null && UPShowDescription) {
			  html += '<span class="spanResultDescr"> - ' + persons[i].descr + '</span>';
			}      
			html += '</div>';
		}
		if(resultscount > persons.length || resultscount > UPMaxResults) {
		  html += '<div class="divMore"><a target="_blank" href="' + more + '">more&#187;</a></div>';
		}
	  }
  } else {
	html = 'Error: ' + error;
	resultscount = 0;
  }  
  _gel(site+'Results').innerHTML = html;
  _gel(site+'Heading').innerHTML = '<span class="spanCount">' + resultscount + '</span>' + site;
  _IG_AdjustIFrameHeight();
}
  
function getElementsByClassName(className, tag, elm) {
  var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
  var tag = tag || "*";
  var elm = elm || document;
  var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
  var returnElements = [];
  var current;
  var length = elements.length;
  for(var i=0; i<length; i++){
    current = elements[i];
    if(testClass.test(current.className)){
      returnElements.push(current);
    }
  }
  return returnElements;
}
</script>

<script language="Javascript" type="text/javascript"> 
/*//// Facebook ////*/      
function LoadFacebook(search) {
  search = search.replace(/ /gi, '+');
  var url = 'http://www.facebook.com/srch.php?nm=' + search;
  _IG_FetchContent(url, function (response) {
      var resultscount, more, error;
      var persons = new Array();
      
      _gel('FacebookTemp').innerHTML = response;   
      
      if(getElementsByClassName('summary', 'div', _gel('FacebookTemp')).length > 0)
      {
        var temp = _gel('search_results');
        var results = getElementsByClassName('info', 'div', temp);
        var images = getElementsByClassName('image', 'div', temp);
  
        for (var i=0;i<results.length;i++) {
          var personname = results[i].getElementsByTagName('a')[0].innerHTML;
          var personurl = url;
          var personpic = images[i].getElementsByTagName('img')[0].src
          var persondescr = null;
          persons[i] = { "name": personname, "url": personurl, "picture": personpic, "descr": persondescr };
        }
        
        var count = getElementsByClassName('summary', 'div', _gel('FacebookTemp'))[0].getElementsByTagName('strong')[0].innerHTML.split(' ');
        switch(count.length)
        {
        case 11:
          resultscount = count[6];
          break;
        case 10:
          resultscount = count[5];
          break;
        default:
          resultscount = results.length;
        }        
      } else {
        resultscount = 0;
      }
  
      _gel('FacebookTemp').innerHTML = '';
      ShowResults('Facebook',persons,resultscount,url,error);
    });
}
</script>

<script language="Javascript" type="text/javascript"> 
/*//// Flickr ////*/
function LoadFlickr(search) {
  search = search.replace(/ /gi, '+');
  var url = 'http://www.flickr.com/search/people/?m=names&q=' + search;
  _IG_FetchContent(url, function (response) {
      var resultscount, more, error;
      var persons = new Array();
      
      _gel('FlickrTemp').innerHTML = response;   
      
      var results = getElementsByClassName('PeopleResults', 'table', _gel('FlickrTemp'));
      if(results.length != 0) {
        var people = getElementsByClassName('Who', 'td', results[0]);
        var icons = getElementsByClassName('Icon', 'td', results[0]);        
        
        for (var i=0;i<people.length;i++) {
          var personname = people[i].getElementsByTagName('h2')[0].innerHTML;
          var urls = people[i].getElementsByTagName('a');
          var personurl = null;
          for (var j=0;j<urls.length;j++) {
            if(urls[j].innerHTML.toLowerCase() == 'profile') {
              personurl = 'http://www.flickr.com' + urls[j].href.replace(/http(:)\/\/.*?\//gi,'\/');
            }
          }
          var personpic = icons[i].getElementsByTagName('img')[0].src;
          var persondescr = (people[i].getElementsByTagName('p').length > 1) ? people[i].getElementsByTagName('p')[0].innerHTML : null;
          persons[i] = { "name": personname, "url": personurl, "picture": personpic, "descr": persondescr };
        }                
        resultscount = getElementsByClassName('Found', 'div', _gel('FlickrTemp'))[0].innerHTML.split(' ')[2].replace('one','1');
      }
      
      _gel('FlickrTemp').innerHTML = '';
      ShowResults('Flickr',persons,resultscount,url,error);
    });
}
</script>

<script language="Javascript" type="text/javascript"> 
/*//// Google ////*/ 
/* Google AJAX Search API: http://code.google.com/apis/ajaxsearch/documentation/reference.html */
function LoadGoogle(search) {
  search = escape(search.replace(/ /gi, '.'));
  var resultscount, more, error;
  var googlesearch = new GwebSearch();
  
  googlesearch.setSearchCompleteCallback(this, function() {      	
      var results = googlesearch.results; 
      var persons = new Array();
          
      if(results.length > 0) {        
        for (var i=0;i<results.length;i++) {
          persons[i] = { "name": results[i].titleNoFormatting, "url": results[i].url, "picture": null, "descr": results[i].content };
        }        
        resultscount = googlesearch.cursor.estimatedResultCount;        
        more = 'http://www.google.com/search?&q=' + search;
      }                  
      ShowResults('Google',persons,resultscount,more,error);
    });  
  googlesearch.setResultSetSize(GSearch.LARGE_RESULTSET);
  googlesearch.setNoHtmlGeneration();
  googlesearch.clearResults();  
  googlesearch.execute(search);
}
</script>

<script language="Javascript" type="text/javascript"> 
/*//// Hyves ////*/      
function LoadHyves(search) {
  search = search.replace(/ /gi, '%20');
  var url = 'http://www.hyves.nl/search/hyver?fullpageAjax=1&searchterms=' + search;
  _IG_FetchContent(url, function (response) {
      var resultscount, more, error;
      var persons = new Array();
      
	  if(response.length > 0 && response != null) {
		  _gel('HyvesTemp').innerHTML = response;
		  var results = _gel('HyvesTemp').getElementsByTagName('table');
		  if(results.length > 1)
		  {
			results = results[1].getElementsByTagName('tr');
			if(results.length != 0) {        
			  for (var i=0;i<results.length;i++) {
				var personname = results[i].getElementsByTagName('a')[3].innerHTML;
				var personurl = results[i].getElementsByTagName('a')[3].href;
				var personpic = results[i].getElementsByTagName('img')[0].src;
				var persondescr = null;
				persons[i] = { "name": personname, "url": personurl, "picture": personpic, "descr": persondescr };
			  }                
			  resultscount = getElementsByClassName('singlecontent_block', 'div', _gel('HyvesTemp'))[2].innerHTML.split(' ')[1];
			}
		  } else {
			resultscount = 0;
		  }
		  more = 'http://www.hyves.nl/search/hyver?fullpageAjax=0&searchterms=' + search;
	  } else {
		error = 'Unable to connect to www.hyves.nl';
	  }
  
      _gel('HyvesTemp').innerHTML = '';
      ShowResults('Hyves',persons,resultscount,more,error);
    });
}
</script>

<script language="Javascript" type="text/javascript"> 
/*//// LinkedIn ////*/  
function LoadLinkedIn(search) {
  search = search.replace(/ /gi, '/');
  var url = 'http://www.linkedin.com/pub/dir/' + search;
  _IG_FetchContent(url, function (response) {
      var resultscount, more, error;
      var persons = new Array();
      
      _gel('LinkedInTemp').innerHTML = response;   
      
      if(_gel('contain-ad'))
      {
        var results = _gel('contain-ad').getElementsByTagName('tr');
        resultscount = results.length - 1;        

        for (var i=1;i<results.length;i++) {
          var personname = results[i].getElementsByTagName('a')[0].innerHTML;
          var personurl = 'http://www.linkedin.com' + results[i].getElementsByTagName('a')[0].href.replace(/http(:)\/\/.*?\//gi,'\/');
          var personpic = null;
          var persondescr = results[i].getElementsByTagName('h3')[0].innerHTML;
          persons[i-1] = { "name": personname, "url": personurl, "picture": personpic, "descr": persondescr };
        }        
      } else {
        resultscount = 0;
      }
  
      _gel('LinkedInTemp').innerHTML = '';
      ShowResults('LinkedIn',persons,resultscount,url,error);
    });
}
</script>

<script language="Javascript" type="text/javascript"> 
/*//// MySpace ////*/      
function LoadMySpace(search) {  
	search = search.replace(/ /gi, '%20');
	var url = 'http://searchservice.myspace.com/index.cfm?fuseaction=sitesearch.results&qry=' + search + '&type=People';
	_IG_FetchContent(url, function (response) {		      
		_gel('MySpaceTemp').innerHTML = response;   
		var results = getElementsByClassName('searchResults', 'div', _gel('MySpaceTemp'));
        
        var persons = new Array();
        for (var i=0;i<results.length;i++) {
			var personname = results[i].getElementsByTagName('a')[0].title;			
			var realname = getElementsByClassName('pilRealName', 'span', results[i]);
			if(realname.length > 0) personname += ' (' + realname[0].innerHTML + ')';			
			
			var personurl = results[i].getElementsByTagName('a')[0].href;
			var personpic = results[i].getElementsByTagName('img')[0].src;
						
			var descr = getElementsByClassName('userInfo', 'span', results[i])[0].innerHTML.split('<br>');
			var persondescr = descr[1] + ' - ' + descr[2];
			
			persons[i] = { "name": personname, "url": personurl, "picture": personpic, "descr": persondescr };
        }
		
		var resultscount = (_gel('displaySummary')) ? _gel('displaySummary').innerHTML.split(' ')[12] : 0;
  
		_gel('MySpaceTemp').innerHTML = '';
		ShowResults('MySpace',persons,resultscount,url,'');
    });
}
</script>

<script language="Javascript" type="text/javascript"> 
/*//// Partyflock ////*/      
function LoadPartyflock(search) {
	search = search.replace(/ /gi, '+').toLowerCase();
	var url = 'http://www.partyflock.nl/user/searchresult.html?STATUS=active&NAME=' + search + '&SUBMIT=zoeken';
	_IG_FetchContent(url, function (response) {		
		 
		_gel('PartyflockTemp').innerHTML = response;			  
		var results = getElementsByClassName('split', 'table', _gel('PartyflockTemp'));
		
		var persons = new Array();
		for(var i=0;i<results.length;i++) {
			var personname = results[i].getElementsByTagName('a')[0].innerHTML;
			var personurl = 'http://www.partyflock.nl' + results[i].getElementsByTagName('a')[0].href.replace(/http(:)\/\/.*?\//gi,'\/');
			var personpic = 'http://partyflock.nl/images/user/' + personurl.replace(/.*\//,'').replace(/:(.*)/,'') + '_small.jpg';
			var persondescr = null;
			persons[i] = { "name": personname, "url": personurl, "picture": personpic, "descr": persondescr };
		}                
		var resultscount = results.length;		
		
		_gel('PartyflockTemp').innerHTML = '';
		ShowResults('Partyflock',persons,resultscount,url,'');
	});
}
</script>
  
<style type="text/css">
body, div, span, form, td, th, table, input {
  font-family: Arial;
  font-size: 9pt;
}
  
form {
  margin: 0px;
  padding: 0px;
}
 
input {
  font-size: 8pt;
  color: #666666;
}
   
.divSiteHeading {
  font-weight: bold;
  color: #FFFFFF;
  width: 100%;
  background-color: #3366CC;
  padding: 1px 10px 1px 10px;
  margin: 0px 0px 1px 0px;
  cursor: pointer;
}
 
.spanCount {
  font-size: 7pt;
  float: right;
  margin: 2px 15px 0px 0px;
}
   
.divSiteResults {
  padding: 2px 10px 2px 10px;
  color: #666666;
}

.divSiteResults a:visited, a:link, a:active {
  color: #666666;
  text-decoration: none;
}
 
.divSiteResults a:hover {
  color: #666666;
  text-decoration: underline;
}

.divMore {
  width: 100%;
  text-align: right;
}
   
.divSearch {
  padding: 0px 0px 5px 0px;
}

.divSearch img {
  cursor: pointer;
  vertical-align: middle;  
}
 
.divResult {
  width: 100%;
  overflow: hidden;
  border-left: solid 10px #DDDDDD;
  margin: 0px 0px 2px 0px;
  white-space: nowrap;
}
  
.spanResultPicture img {
  width: 25px;
  height: 25px;
  margin: 0px 0px 0px 5px;
  border: solid 1px #999999;
}

.spanResultName {
  margin: 0px 0px 0px 5px;
  vertical-align: super;
}
  
.spanResultDescr {  
  vertical-align: super;
  font-style: italic;
  font-weight: none; 
  color: #AAAAAA;
}
  
.inputSearch {
  width: 200px;
}
</style>

<div class="divSearch">
  <form onsubmit="Search();return false">
	<input type="text" id="inputSearch" class="inputSearch" />
	<img src="http://gadgets.bashennekam.nl/personfinder/google_gadget_persons_logo.gif" title="Search" onclick="Search()" />
  </form>
</div>
  
<div id="divResults">Loading...</div>

<script language="Javascript" type="text/javascript">Load();</script>
]]>
</Content>
</Module>





































