if(typeof(GM_getValue("Gowalla API key")) == 'undefined') {
var GW_API_key = prompt('Your Gowalla API key','');
GM_setValue('Gowalla API key', GW_API_key);
} else {
GM_log('Gowalla API key is ' + GM_getValue("Gowalla API key"));
}
Array.min = function( array ){
return Math.min.apply( Math, array );
};
String.prototype.reverse=function(){return this.split("").reverse().join("");}
function getCommonCharacters( string1, string2, allowedDistance ){
var i,j;
str1_len = string1.length;
str2_len = string2.length;
temp_string2 = string2;
commonCharacters='';
for( i=0; i < str1_len; i++){
noMatch = true;
for( j= Math.max( 0, i-allowedDistance ); noMatch && j < Math.min( i + allowedDistance + 1, str2_len ); j++){
if( temp_string2[j] == string1[i] ){
noMatch = false;
commonCharacters += string1[i];
temp_string2[j] = '';
}
}
}
return commonCharacters;
}
function Jaro( string1, string2 ){
var i;
str1_len = string1.length;
str2_len = string2.length;
distance = Math.floor(Math.min( str1_len, str2_len ) / 2.0);
commons1 = getCommonCharacters( string1, string2, distance );
commons2 = getCommonCharacters( string2, string1, distance );
if( (commons1_len = commons1.length) == 0) return 0;
if( (commons2_len = commons2.length) == 0) return 0;
transpositions = 0;
upperBound = Math.min( commons1_len, commons2_len );
for( i = 0; i < upperBound; i++){
if( commons1[i] != commons2[i] ) transpositions++;
}
transpositions /= 2.0;
return (commons1_len/(str1_len) + commons2_len/(str2_len) + (commons1_len - transpositions)/(commons1_len)) / 3.0;
}
function getPrefixLength( string1, string2, MINPREFIXLENGTH){
var i;
MINPREFIXLENGTH = typeof(MINPREFIXLENGTH) != 'undefined' ? MINPREFIXLENGTH : 4;
n = Array.min( [MINPREFIXLENGTH, string1.length, string2.length]);
for(i = 0; i < n; i++){
if( string1[i] != string2[i] ){
return i;
}
}
return n;
}
function JaroWinkler(string1, string2, PREFIXSCALE){
PREFIXSCALE = typeof(PREFIXSCALE) != 'undefined' ? PREFIXSCALE : 0.1;
JaroDistance = Jaro( string1, string2 );
prefixLength = getPrefixLength( string1, string2 );
return JaroDistance + prefixLength * PREFIXSCALE * (1.0 - JaroDistance);
}
var scriptPart = document.evaluate( '//script[contains(.,"vCLat")]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
if(scriptPart != null) {
var scriptPartString = scriptPart.textContent;
var lat = scriptPartString.substring(scriptPartString.indexOf("var vCLat ")+13,scriptPartString.indexOf("';",scriptPartString.indexOf("var vCLat ")));
var lon = scriptPartString.substring(scriptPartString.indexOf("var vCLon ")+13,scriptPartString.indexOf("';",scriptPartString.indexOf("var vCLon ")));
var name = scriptPartString.substring(scriptPartString.indexOf("var vCName ")+13,scriptPartString.indexOf("';",scriptPartString.indexOf("var vCName ")));
if(lat.length > 0 && lon.length > 0) {gowalla(lat, lon); foursquare(lat,lon);}
var elmFoo = document.getElementById('companyPictures');
var statusBox = document.createElement('div');
statusBox.innerHTML = '<div id="gowallaStatusBox" class="dataBoxNew"><div class="header"><div class="leftTopCorner"></div><div class="rightTopCorner"></div><h2>Närliggande inloggningar</h2></div><div class="content clearfix"><div class="load"></div><div id="gowallaInfo"></div><div id="foursquareInfo"></div></div><div class="footer"><div class="leftCorner"></div><div class="rightCorner"></div></div></div>';
elmFoo.parentNode.insertBefore(statusBox, elmFoo);
var elmGow = document.getElementById('gowallaInfo');
elmGow.innerHTML = 'Kontaktar Gowalla...';
var elmFsq = document.getElementById('foursquareInfo');
elmFsq.innerHTML = 'Kontaktar Foursquare...';
}
function foursquare(lat, lon) {
GM_xmlhttpRequest ({
method: "GET",
url: "http://api.foursquare.com/v1/venues.json?geolat="+lat+"&geolong="+lon,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'Greasemonkey script Hello Reco',
},
onload: function(responseDetails) {
var result = eval('('+responseDetails.responseText+')');
var list = '';
var maxe = [];
for(i=0;i<result["groups"][0]["venues"].length;i++) {
var test = result.groups[0].venues[i].name+"";
var sim = JaroWinkler(test, name);
var bsim = JaroWinkler(test.reverse(), name.reverse());
maxe[i] = sim + .8*bsim;
}
var sortedMaxe = maxe.slice(0);
sortedMaxe.sort().reverse();
threshold = sortedMaxe[5];
for ( var i = 0; i<result.groups[0].venues.length; ++i ) {
if(maxe[i]>threshold) {
var category;
if(result["groups"][0]["venues"][i]["primarycategory"]) {category = result["groups"][0]["venues"][i]["primarycategory"]["nodename"];} else {category = ''}
list += '<a href="http://foursquare.com/venue/'+result["groups"][0]["venues"][i]["id"]+'" title="'+result["groups"][0]["venues"][i]["address"]+', '+category+'">'+result["groups"][0]["venues"][i]["name"]+' [4]</a>';
}
}
elmFsq.innerHTML = list;
},
onreadystatechange: function(responseDetails) {
},
onerror: function(responseDetails) {
console.debug(responseDetails);
alert('Error');
}
});
}
function gowalla(lat, lon) {
GM_log("http://api.gowalla.com/spots?lat="+lat+"&lng="+lon+"&radius=50");
GM_xmlhttpRequest ({
method: "GET",
url: "http://api.gowalla.com/spots?lat="+lat+"&lng="+lon+"&radius=50",
headers: {
'X-Gowalla-API-Key': GM_getValue('Gowalla API key'),
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'Greasemonkey script Hello Reco',
},
onload: function(responseDetails) {
var result = eval('('+responseDetails.responseText+')');
var list = '';
var maxe = [];
for(i=0;i<result["spots"].length;i++) {
var test = result.spots[i].name+"";
var sim = JaroWinkler(test, name);
var bsim = JaroWinkler(test.reverse(), name.reverse());
maxe[i] = sim + .8*bsim;
}
var sortedMaxe = maxe.slice(0);
sortedMaxe.sort().reverse();
threshold = sortedMaxe[5];
for ( var i = 0; i<result.spots.length; ++i ) {
if(maxe[i]>threshold) {
var category;
if(result["spots"][i]["spot_categories"][0]) {category = result["spots"][i]["spot_categories"][0]["name"];} else {category = ''}
list += '<a href="http://gowalla.com'+result["spots"][i]["url"]+'" title="'+category+'">'+result["spots"][i]["name"]+' [G]</a>';
}
}
elmGow.innerHTML = list;
},
onreadystatechange: function(responseDetails) {
},
onerror: function(responseDetails) {
console.debug(responseDetails);
alert('Error');
}
});
}