|
|
window.addEventListener('DOMContentLoaded', function () {
|
|
|
|
|
|
var swapimg = document.getElementById('swapimg');
|
|
|
var swaplink = document.getElementById('swaplink');
|
|
|
var iidbimg = document.getElementById('iidbimg');
|
|
|
var iidblink = document.getElementById('iidblink');
|
|
|
var reloadlink = document.getElementById('reloadlink');
|
|
|
var reloadwaitimg = document.getElementById('reloadwaitimg');
|
|
|
|
|
|
iidbimg.setAttribute('title', i18n.title_more);
|
|
|
iidbimg.setAttribute('alt', i18n.title_more);
|
|
|
swapimg.setAttribute('title', i18n.title_srvmy);
|
|
|
swapimg.setAttribute('alt', i18n.title_srvmy);
|
|
|
|
|
|
var storage = widget.preferences;
|
|
|
var msgtype;
|
|
|
var rdns;
|
|
|
var rdnsmy;
|
|
|
var whoislink = document.getElementById('whoislink');
|
|
|
var whoisimg = document.getElementById('whoisimg');
|
|
|
var glink = document.getElementById('glink');
|
|
|
var gimg = document.getElementById('gimg');
|
|
|
var tracertlink = document.getElementById('tracertlink');
|
|
|
var tracertimg = document.getElementById('tracertimg');
|
|
|
var iidblinkSRV, iidblinkMY;
|
|
|
var geotablesrv = document.getElementById('geotablesrv');
|
|
|
var geotablemy = document.getElementById('geotablemy');
|
|
|
var geotablesrv_srv;
|
|
|
var geotablesrv_whois;
|
|
|
var geotablesrv_whoismy;
|
|
|
|
|
|
tracertimg.setAttribute('title', i18n.tracert);
|
|
|
tracertimg.setAttribute('alt', i18n.tracert);
|
|
|
whoisimg.setAttribute('title', i18n.popup_domain);
|
|
|
whoisimg.setAttribute('alt', i18n.popup_domain);
|
|
|
|
|
|
function translit(txt) {
|
|
|
var L = {
|
|
|
'А':'A','а':'a','Б':'B','б':'b','В':'V','в':'v','Г':'G','г':'g',
|
|
|
'Д':'D','д':'d','Е':'E','е':'e','Ё':'Yo','ё':'yo','Ж':'Zh','ж':'zh',
|
|
|
'З':'Z','з':'z','И':'I','и':'i','Й':'Y','й':'y','К':'K','к':'k',
|
|
|
'Л':'L','л':'l','М':'M','м':'m','Н':'N','н':'n','О':'O','о':'o',
|
|
|
'П':'P','п':'p','Р':'R','р':'r','С':'S','с':'s','Т':'T','т':'t',
|
|
|
'У':'U','у':'u','Ф':'F','ф':'f','Х':'Kh','х':'kh','Ц':'Ts','ц':'ts',
|
|
|
'Ч':'Ch','ч':'ch','Ш':'Sh','ш':'sh','Щ':'Sch','щ':'sch','Ъ':'"','ъ':'"',
|
|
|
'Ы':'Y','ы':'y','Ь':"'",'ь':"'",'Э':'E','э':'e','Ю':'Yu','ю':'yu',
|
|
|
'Я':'Ya','я':'ya'
|
|
|
},
|
|
|
r = '', k;
|
|
|
for (k in L) r += k;
|
|
|
r = new RegExp('[' + r + ']', 'g');
|
|
|
k = function(a){
|
|
|
return a in L ? L[a] : '';
|
|
|
};
|
|
|
return txt.replace(r, k);
|
|
|
}
|
|
|
|
|
|
function toTitleCase(str)
|
|
|
{
|
|
|
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
|
|
|
}
|
|
|
|
|
|
function SetField(field, val, isxml, chngCase) {
|
|
|
chngCase = (typeof chngCase == 'undefined') ? false : chngCase;
|
|
|
if (val)
|
|
|
{
|
|
|
if (chngCase) val = toTitleCase(val);
|
|
|
val = DoTranslit(val, isxml);
|
|
|
document.getElementById(field + msgtype).innerHTML = val;
|
|
|
} else document.getElementById(field + msgtype).innerHTML = '-';
|
|
|
}
|
|
|
|
|
|
function DoTranslit(val, isxml) {
|
|
|
isxml = (typeof isxml == 'undefined') ? false : isxml;
|
|
|
|
|
|
if (isxml && (storage.gd4ip_translit == null || storage.gd4ip_translit == '1'))
|
|
|
val = translit(val);
|
|
|
|
|
|
return val;
|
|
|
}
|
|
|
|
|
|
function TruncString(str) {
|
|
|
var checker = document.getElementById('checker');
|
|
|
checker.innerHTML = str;
|
|
|
|
|
|
if (checker.offsetWidth > 255)
|
|
|
{
|
|
|
while (checker.offsetWidth > 255)
|
|
|
checker.innerHTML = checker.innerHTML.substring(0, checker.innerHTML.length - 1);
|
|
|
var out = checker.innerHTML + '...';
|
|
|
return out;
|
|
|
} else return str;
|
|
|
}
|
|
|
|
|
|
function SetRDNS(msgtype) {
|
|
|
var tmp;
|
|
|
if (msgtype == 1)
|
|
|
{
|
|
|
tmp = document.getElementById('geotablesrv').getElementsByTagName('tbody')[0];
|
|
|
if (tmp)
|
|
|
{
|
|
|
tmp.innerHTML = tmp.innerHTML.replace('[RDNStitle1]', rdns);
|
|
|
tmp.innerHTML = tmp.innerHTML.replace('[RDNS1]', TruncString(rdns));
|
|
|
}
|
|
|
}
|
|
|
if (msgtype == 2)
|
|
|
{
|
|
|
tmp = document.getElementById('geotablemy').getElementsByTagName('tbody')[0];
|
|
|
if (tmp)
|
|
|
{
|
|
|
tmp.innerHTML = tmp.innerHTML.replace('[RDNStitle2]', rdnsmy);
|
|
|
tmp.innerHTML = tmp.innerHTML.replace('[RDNS2]', TruncString(rdnsmy));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
opera.extension.onmessage = function(e)
|
|
|
{
|
|
|
if (e.data.popup_whois) {
|
|
|
var whois = e.data.popup_whois;
|
|
|
geotablesrv_whois = ' | \
|
|
|
' + i18n.popup_whois_dc + ' | + whois.d + '">' + TruncString(whois.d) + ' | \
|
|
|
' + i18n.popup_whois_asnum + ' | + whois.a + '">' + whois.a + ' | \
|
|
|
' + i18n.popup_whois_asname + ' | + whois.n + '">' + TruncString(whois.n) + ' | ';
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (e.data.popup_rdns) {
|
|
|
rdns = e.data.popup_rdns;
|
|
|
SetRDNS(1);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (e.data.popup_rdnsmy) {
|
|
|
rdnsmy = e.data.popup_rdnsmy;
|
|
|
SetRDNS(2);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (e.data.popup_whoismy) {
|
|
|
var whoismy = e.data.popup_whoismy;
|
|
|
geotablesrv_whoismy = ' | \
|
|
|
' + i18n.popup_whois_dc + ' | + whoismy.d + '">' + TruncString(whoismy.d) + ' | \
|
|
|
' + i18n.popup_whois_asnum + ' | + whoismy.a + '">' + whoismy.a + ' | \
|
|
|
' + i18n.popup_whois_asname + ' | + whoismy.n + '">' + TruncString(whoismy.n) + ' | ';
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (e.data.popup_srv) {
|
|
|
var srv = e.data.popup_srv;
|
|
|
geotablesrv_srv = ' | ' + i18n.popup_srv + ' | + srv + '">' + TruncString(srv) + ' | ';
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (e.data.popup_fill) {
|
|
|
var geotable = geotablesrv;
|
|
|
geotable.innerHTML = '';
|
|
|
var chost = e.data.popup_fill.chost;
|
|
|
var cdata = e.data.popup_fill.cdata;
|
|
|
msgtype = 1;
|
|
|
} else
|
|
|
if (e.data.popup_fillmy) {
|
|
|
var geotable = geotablemy;
|
|
|
geotable.innerHTML = '';
|
|
|
var cdata = e.data.popup_fillmy;
|
|
|
msgtype = 2;
|
|
|
|
|
|
swapimg.setAttribute('src', 'icons/swapdata.png');
|
|
|
|
|
|
//clear listeners
|
|
|
var oldswaplink = swaplink;
|
|
|
swaplink = oldswaplink.cloneNode(true);
|
|
|
oldswaplink.parentNode.replaceChild(swaplink, oldswaplink);
|
|
|
|
|
|
swaplink.addEventListener('click', function () {
|
|
|
if (geotablesrv.style.display == 'table')
|
|
|
{
|
|
|
geotablesrv.style.display = 'none';
|
|
|
geotablemy.style.display = 'table';
|
|
|
|
|
|
iidblink.setAttribute('href', iidblinkMY);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
geotablemy.style.display = 'none';
|
|
|
geotablesrv.style.display = 'table';
|
|
|
|
|
|
iidblink.setAttribute('href', iidblinkSRV);
|
|
|
}
|
|
|
}, false);
|
|
|
} else return;
|
|
|
|
|
|
if (cdata == null) cdata = '';
|
|
|
|
|
|
if (msgtype == 1)
|
|
|
{
|
|
|
if (storage.gd4ip_whois == 3)
|
|
|
{
|
|
|
whoislink.setAttribute('href', 'http://2ip.ru/whois/?ip=' + chost);
|
|
|
whoisimg.setAttribute('src', 'icons/whois3.png');
|
|
|
}
|
|
|
else if (storage.gd4ip_whois == 2)
|
|
|
{
|
|
|
whoislink.setAttribute('href', 'http://whois.domaintools.com/' + chost);
|
|
|
whoisimg.setAttribute('src', 'icons/whois2.png');
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
whoislink.setAttribute('href', 'http://who.is/whois/' + chost);
|
|
|
whoisimg.setAttribute('src', 'icons/whois1.png');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var xbody = document.createElement("tbody");
|
|
|
geotable.appendChild(xbody);
|
|
|
geotable = xbody;
|
|
|
|
|
|
if (cdata.toString().indexOf(') != -1)
|
|
|
{
|
|
|
geotable.innerHTML = '\
|
|
|
' + i18n.popup_host + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_ip + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_ipnum + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_rdns + ' | + msgtype + '" title="[RDNStitle' + msgtype + ']">[RDNS' + msgtype + '] | \
|
|
|
' + i18n.popup_country + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_region + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_district + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_city + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_lat + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_long + ' | + msgtype + '"> | \
|
|
|
';
|
|
|
|
|
|
var xmldata = (new DOMParser()).parseFromString(cdata, 'text/xml');
|
|
|
var iptag = xmldata.getElementsByTagName('ip')[0];
|
|
|
|
|
|
SetRDNS(msgtype);
|
|
|
if (msgtype == 1)
|
|
|
{
|
|
|
if (geotablesrv_whois) geotable.innerHTML += geotablesrv_whois;
|
|
|
geotable.innerHTML += geotablesrv_srv;
|
|
|
iidblinkSRV = 'http://ipgeobase.ru/?address=' + iptag.getAttribute('value');
|
|
|
iidblink.setAttribute('href', iidblinkSRV);
|
|
|
SetField('host', TruncString(chost), i18n.transliterate);
|
|
|
}
|
|
|
if (msgtype == 2)
|
|
|
{
|
|
|
if (geotablesrv_whoismy) geotable.innerHTML += geotablesrv_whoismy;
|
|
|
geotable.innerHTML += ' | | | ';
|
|
|
iidblinkMY = 'http://ipgeobase.ru/?address=' + iptag.getAttribute('value');
|
|
|
SetField('host', i18n.title_popup, i18n.transliterate);
|
|
|
}
|
|
|
|
|
|
SetField('ipAddress', iptag.getAttribute('value'));
|
|
|
SetField('ipNum', iptag.getElementsByTagName('inetnum')[0].textContent);
|
|
|
var cc = iptag.getElementsByTagName('country')[0].textContent.toLowerCase();
|
|
|
if (cc == 'ru')
|
|
|
{
|
|
|
if (storage.gd4ip_translit == 1) var ccc = 'Russia'; else var ccc = 'Россия';
|
|
|
}
|
|
|
else if (cc == 'ua')
|
|
|
{
|
|
|
if (storage.gd4ip_translit == 1) var ccc = 'Ukraine'; else var ccc = 'Украина';
|
|
|
} else var ccc = cc;
|
|
|
SetField('countryName', ccc, i18n.transliterate, true);
|
|
|
SetField('regionName', iptag.getElementsByTagName('region')[0].textContent, i18n.transliterate, true);
|
|
|
SetField('districtName', iptag.getElementsByTagName('district')[0].textContent, i18n.transliterate, true);
|
|
|
SetField('cityName', iptag.getElementsByTagName('city')[0].textContent, i18n.transliterate, true);
|
|
|
var clat = iptag.getElementsByTagName('lat')[0].textContent;
|
|
|
var clong = iptag.getElementsByTagName('lng')[0].textContent;
|
|
|
SetField('latitude', clat);
|
|
|
SetField('longitude', clong);
|
|
|
|
|
|
if ((clat == '-' || clong == '-' || clat == '' || clong == '' || (clat == '0' && clong == '0')) && msgtype == 1)
|
|
|
{
|
|
|
gimg.setAttribute('src', 'icons/gmapno.png');
|
|
|
glink.setAttribute('target', '_self');
|
|
|
glink.setAttribute('href', '#');
|
|
|
tracertimg.setAttribute('src', 'icons/tracerouteno.png');
|
|
|
tracertlink.setAttribute('target', '_self');
|
|
|
tracertlink.setAttribute('href', '#');
|
|
|
}
|
|
|
else if (gimg.getAttribute('src') != 'icons/gmapno.png')
|
|
|
{
|
|
|
gimg.setAttribute('src', 'icons/gmap.png');
|
|
|
glink.setAttribute('target', '_blank');
|
|
|
tracertimg.setAttribute('src', 'icons/traceroute.png');
|
|
|
tracertlink.setAttribute('target', '_blank');
|
|
|
|
|
|
if (msgtype == 1)
|
|
|
{
|
|
|
glink.setAttribute('href', '/gapi/geocoding.html?' +
|
|
|
'lat1=' + iptag.getElementsByTagName('lat')[0].textContent +
|
|
|
'&long1=' + iptag.getElementsByTagName('lng')[0].textContent +
|
|
|
'&countryName1=' + DoTranslit(ccc, i18n.transliterate) +
|
|
|
'&ipAddress1=' + iptag.getAttribute('value') +
|
|
|
'&table1=' + geotable.innerHTML
|
|
|
);
|
|
|
|
|
|
tracertlink.setAttribute('href', '/gapi/geocoding.html?tracert=1&' +
|
|
|
'lat1=' + iptag.getElementsByTagName('lat')[0].textContent +
|
|
|
'&long1=' + iptag.getElementsByTagName('lng')[0].textContent +
|
|
|
'&countryName1=' + DoTranslit(ccc, i18n.transliterate) +
|
|
|
'&ipAddress1=' + iptag.getAttribute('value') +
|
|
|
'&hostName1=' + chost +
|
|
|
'&table1=' + geotable.innerHTML
|
|
|
);
|
|
|
}
|
|
|
if (msgtype == 2 && glink.getAttribute('href') != '#')
|
|
|
{
|
|
|
glink.setAttribute('href', glink.getAttribute('href') +
|
|
|
'&lat2=' + iptag.getElementsByTagName('lat')[0].textContent +
|
|
|
'&long2=' + iptag.getElementsByTagName('lng')[0].textContent +
|
|
|
'&countryName2=' + DoTranslit(ccc, i18n.transliterate) +
|
|
|
'&ipAddress2=' + iptag.getAttribute('value') +
|
|
|
'&table2=' + geotable.innerHTML
|
|
|
);
|
|
|
}
|
|
|
if (msgtype == 2 && tracertlink.getAttribute('href') != '#')
|
|
|
{
|
|
|
tracertlink.setAttribute('href', tracertlink.getAttribute('href') +
|
|
|
'&lat2=' + iptag.getElementsByTagName('lat')[0].textContent +
|
|
|
'&long2=' + iptag.getElementsByTagName('lng')[0].textContent +
|
|
|
'&countryName2=' + DoTranslit(ccc, i18n.transliterate) +
|
|
|
'&ipAddress2=' + iptag.getAttribute('value') +
|
|
|
'&table2=' + geotable.innerHTML
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
geotable.innerHTML = '\
|
|
|
' + i18n.popup_host + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_ip + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_rdns + ' | + msgtype + '" title="[RDNStitle' + msgtype + ']">[RDNS' + msgtype + '] | \
|
|
|
' + i18n.popup_country + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_region + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_city + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_zip + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_lat + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_long + ' | + msgtype + '"> | \
|
|
|
' + i18n.popup_timezone + ' | + msgtype + '"> | \
|
|
|
';
|
|
|
|
|
|
SetRDNS(msgtype);
|
|
|
if (msgtype == 1)
|
|
|
{
|
|
|
if (geotablesrv_whois) geotable.innerHTML += geotablesrv_whois;
|
|
|
geotable.innerHTML += geotablesrv_srv;
|
|
|
iidblinkSRV = 'http://ipinfodb.com/ip_locator.php?ip=' + cdata.ipAddress;
|
|
|
iidblink.setAttribute('href', iidblinkSRV);
|
|
|
SetField('host', TruncString(chost));
|
|
|
}
|
|
|
if (msgtype == 2)
|
|
|
{
|
|
|
if (geotablesrv_whoismy) geotable.innerHTML += geotablesrv_whoismy;
|
|
|
geotable.innerHTML += ' | | | ';
|
|
|
iidblinkMY = 'http://ipinfodb.com/ip_locator.php?ip=' + cdata.ipAddress;
|
|
|
SetField('host', i18n.title_popup, i18n.transliterate);
|
|
|
}
|
|
|
|
|
|
SetField('ipAddress', cdata.ipAddress);
|
|
|
SetField('countryName', cdata.countryName, false, true);
|
|
|
SetField('regionName', cdata.regionName, false, true);
|
|
|
SetField('cityName', cdata.cityName, false, true);
|
|
|
SetField('zipCode', cdata.zipCode);
|
|
|
SetField('latitude', cdata.latitude);
|
|
|
SetField('longitude', cdata.longitude);
|
|
|
SetField('timeZone', cdata.timeZone);
|
|
|
|
|
|
if ((cdata.latitude == '-' || cdata.longitude == '-' || cdata.latitude == '' || cdata.longitude == '' || (cdata.latitude == '0' && cdata.longitude == '0')) && msgtype == 1)
|
|
|
{
|
|
|
gimg.setAttribute('src', 'icons/gmapno.png');
|
|
|
glink.setAttribute('target', '_self');
|
|
|
glink.setAttribute('href', '#');
|
|
|
tracertimg.setAttribute('src', 'icons/tracerouteno.png');
|
|
|
tracertlink.setAttribute('target', '_self');
|
|
|
tracertlink.setAttribute('href', '#');
|
|
|
}
|
|
|
else if (gimg.getAttribute('src') != 'icons/gmapno.png')
|
|
|
{
|
|
|
gimg.setAttribute('src', 'icons/gmap.png');
|
|
|
glink.setAttribute('target', '_blank');
|
|
|
tracertimg.setAttribute('src', 'icons/traceroute.png');
|
|
|
tracertlink.setAttribute('target', '_blank');
|
|
|
|
|
|
if (msgtype == 1)
|
|
|
{
|
|
|
glink.setAttribute('href', '/gapi/geocoding.html?' +
|
|
|
'lat1=' + cdata.latitude +
|
|
|
'&long1=' + cdata.longitude +
|
|
|
'&countryName1=' + DoTranslit(cdata.countryName) +
|
|
|
'&ipAddress1=' + cdata.ipAddress +
|
|
|
'&table1=' + geotable.innerHTML
|
|
|
);
|
|
|
|
|
|
tracertlink.setAttribute('href', '/gapi/geocoding.html?tracert=1&' +
|
|
|
'lat1=' + cdata.latitude +
|
|
|
'&long1=' + cdata.longitude +
|
|
|
'&countryName1=' + DoTranslit(cdata.countryName) +
|
|
|
'&ipAddress1=' + cdata.ipAddress +
|
|
|
'&hostName1=' + chost +
|
|
|
'&table1=' + geotable.innerHTML
|
|
|
);
|
|
|
}
|
|
|
|
|
|
if (msgtype == 2 && glink.getAttribute('href') != '#')
|
|
|
glink.setAttribute('href', glink.getAttribute('href') +
|
|
|
'&lat2=' + cdata.latitude +
|
|
|
'&long2=' + cdata.longitude +
|
|
|
'&countryName2=' + DoTranslit(cdata.countryName) +
|
|
|
'&ipAddress2=' + cdata.ipAddress +
|
|
|
'&table2=' + geotable.innerHTML
|
|
|
);
|
|
|
if (msgtype == 2 && tracertlink.getAttribute('href') != '#')
|
|
|
tracertlink.setAttribute('href', tracertlink.getAttribute('href') +
|
|
|
'&lat2=' + cdata.latitude +
|
|
|
'&long2=' + cdata.longitude +
|
|
|
'&countryName2=' + DoTranslit(cdata.countryName) +
|
|
|
'&ipAddress2=' + cdata.ipAddress +
|
|
|
'&table2=' + geotable.innerHTML
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
reloadwaitimg.setAttribute('style', 'display: none');
|
|
|
};
|
|
|
|
|
|
opera.extension.postMessage({gd4ip: 'fillpopup'});
|
|
|
reloadlink.addEventListener('click', function () {
|
|
|
reloadwaitimg.setAttribute('style', 'display: inline');
|
|
|
opera.extension.postMessage({gd4ip: 'fillpopup_nocache'});
|
|
|
}, false);
|
|
|
|
|
|
geotablesrv.innerHTML = '' + i18n.popup_recv + ' | ';
|
|
|
geotablemy.innerHTML = '' + i18n.popup_recv + ' | ';
|
|
|
|
|
|
}, false); |