(function() { var locked = false, input = document.getElementById('lookup-input'), submit = document.getElementById('lookup-submit'), result = document.getElementById('lookup-result'); var lock = function() { if(locked) return false; document.body.classList.add('whois-locked'); input.disabled = true; locked = true; return true; } var unlock = function() { if(!locked) return false; document.body.classList.remove('whois-locked'); input.disabled = false; locked = false; return true; } var lookup = function(target) { if(!lock()) return; var xhr = new XMLHttpRequest; xhr.addEventListener('load', function() { var resp = JSON.parse(xhr.responseText); if(resp.error) { alert(resp.text); } else { var lastWhois = resp.result.responses[resp.result.responses.length - 1], isIpAddr = false; for(var i = 0; i < lastWhois.lines.length; ++i) { var line = lastWhois.lines[i]; if(line.substring(0, 4) === 'inet') { isIpAddr = true; break; } } var text = ''; if(isIpAddr) { text += 'RESULTS FOUND: ' + resp.result.responses.length.toString() + "\r\n"; for(var i = 0; i < resp.result.responses.length; ++i) { var response = resp.result.responses[i]; text += "\r\n-------------\r\n"; text += 'Lookup results for ' + resp.result.target + ' from ' + response.server + ":\r\n\r\n"; text += response.lines.join("\r\n").trim() + "\r\n"; } } else { for(var i = 0; i < resp.result.responses.length; ++i) { var response = resp.result.responses[i]; text += resp.result.target + ' domain lookup result from ' + response.server + "\r\n\r\n"; text += response.lines.join("\r\n").trim() + "\r\n\r\n"; } } result.textContent = text; } unlock(); }); xhr.open('GET', '/whois/lookup?target=' + encodeURIComponent(target)); xhr.send(); } var readHash = function() { if(location.hash.length < 2) { result.textContent = 'Enter a domain or IP address!'; return; } var target = decodeURIComponent(location.hash.substring(1)); if(input.value !== target) input.value = target; lookup(target); }; window.addEventListener('hashchange', function(ev) { readHash(); }, false); submit.addEventListener('click', function(ev) { ev.preventDefault(); location.hash = encodeURIComponent(input.value); }); readHash(); })();