var http_request = new Array();var handled = new Array();var scanqueue = new Array();var i=1, maxedout=0, sq=-1, nextscan=-1;
var inprogress=0;
var uniquelinks = new Array;
var totlinksfound = 0, uniquelinksfound = 0, questlinksfound = 0;
var pagesscanned = 0;
function applyEvent(theObj, theEvent, theFunction){
if(window.addEventListener){ // Mozilla, Netscape, Firefox
theObj.addEventListener(theEvent, theFunction, false);
}else{ // IE
theObj.attachEvent('on' + theEvent, theFunction);
};
};
function showHelp(e){
var thisele;
if(!(typeof event == "undefined")){ // Internet Explorer
thisele = event.srcElement;
}else if(this){ // Netscape and Firefox
thisele = this;
};
var thismenu = document.getElementById(thisele.getAttribute('menu'));
var xcoord=0;
var ycoord=0;
if(typeof event == "undefined"){
xcoord+=e.pageX -300;
ycoord+=e.pageY - 165;
}else if(typeof window.event !="undefined"){
xcoord+=thisele.scrollLeft+event.clientX -300;
ycoord+=thisele.scrollTop+document.getElementsByTagName('body')[0].scrollTop+event.clientY - 165;
};
thismenu.style.left=xcoord+"px";
thismenu.style.top=ycoord+"px";
};
function clearHelp(e){
var thisele;
if(!(typeof event == "undefined")){ // Internet Explorer
thisele = event.srcElement;
}else if(this){ // Netscape and Firefox
thisele = this;
};
thismenu = document.getElementById(thisele.getAttribute('menu'));
thismenu.style.left = -500+"px";
};
function spacify(strIn){
var newstr = "";
while(strIn.length>60){
newstr = newstr + strIn.substring(0,60) + " ";
strIn = strIn.substring(60);
};
return newstr + strIn;
};
function makeRequest(url, i) {
if (window.XMLHttpRequest) { // Mozilla, Safari, etc.
http_request[i] = new XMLHttpRequest();
if (http_request[i].overrideMimeType) {
http_request[i].overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
http_request[i] = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request[i] = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
}
}
}
if (!http_request[i]) {
return false;
}
http_request[i].onreadystatechange = function(){handleResponse(i)};
http_request[i].open('GET', url, true);
http_request[i].send(null);
return true;
}
function handleResponse(i){
var tmplink, tmpanchor;
if(http_request[i].readyState == 4){
var xmldoc = http_request[i].responseXML;
var ret = xmldoc.getElementsByTagName('scanresult').item(0);
var ret_err = ret.getElementsByTagName('err').item(0).firstChild.data;
var ret_notvaliddata = ret.getElementsByTagName('notvaliddata').item(0).firstChild.data;
if(ret_err!=0){
alert(ret_err + "\n" + ret_notvaliddata);
}else{
pagesscanned++;
var resultsdiv = document.getElementById('resultsdiv');
resultsdiv.style.display = "block";
var reqid = ret.getElementsByTagName('reqid').item(0).firstChild.data;
var requrl = ret.getElementsByTagName('requrl').item(0).firstChild.data;
var responsecode = ret.getElementsByTagName('responsecode').item(0).firstChild.data;
var numlinks = Math.round(ret.getElementsByTagName('numlinks').item(0).firstChild.data);
var numquestlinks = Math.round(ret.getElementsByTagName('numquestionable').item(0).firstChild.data);
var blogpercent = Math.max(ret.getElementsByTagName('blogpercent').item(0).firstChild.data,-1000);
var linksfound = ret.getElementsByTagName('linksfound').item(0);
var thelinks = linksfound.getElementsByTagName('linkurl');
var theanchors = linksfound.getElementsByTagName('linkanchor');
var theaflags = linksfound.getElementsByTagName('linkquestionable');
var thelinkdomains = linksfound.getElementsByTagName('linkdomain');
var thefoundondomains = linksfound.getElementsByTagName('foundondomain');
var newdivs = new Array;
var isunique;
var oldqlength = scanqueue.length;
for(j=0;j\n";
thedisplay += "URL: " + tmplink + "
" + "Anchor text: " + tmpanchor;
newdivs[j].innerHTML = thedisplay;
resultsdiv.appendChild(newdivs[j]);
};
var addthis = true, numthisdoms=0;
if(scanqueue.length<40){
for(r=0;r2){
addthis = false;
};
}else{
addthis = false;
};
if(addthis){
sq++;
scanqueue[sq] = new Array;
scanqueue[sq][0] = tmplink;
scanqueue[sq][1] = tmplnkdom;
scanqueue[sq][2] = tmpfoundon;
};
uniquelinks[uniquelinks.length] = tmplink;
uniquelinksfound++;
};
}
totlinksfound = totlinksfound + numlinks;
questlinksfound = questlinksfound + numquestlinks;
document.getElementById('linksfound').innerHTML = totlinksfound;
document.getElementById('uniquelinksfound').innerHTML = uniquelinksfound;
document.getElementById('questlinksfound').innerHTML = questlinksfound;
document.getElementById('pagesscanned').innerHTML = pagesscanned;
//update the queue item
var uthis;
var l = reqid;
uthis = document.getElementById("qspan" + l);
uthis.innerHTML = uthis.innerHTML + "
Scanned: ";
uthis.innerHTML = uthis.innerHTML + numlinks + " links found, ";
uthis.innerHTML = uthis.innerHTML + numquestlinks + " questionable links found, ";
uthis.innerHTML = uthis.innerHTML + " header returned: " + responsecode;
var imgdiv = document.getElementById("qdivr" + l);
if(responsecode==403){
var denyimg = document.createElement('img');
denyimg.setAttribute('src', '/images/403.gif');
denyimg.setAttribute('alt', '403 Forbidden');
denyimg.setAttribute('title', '403 Forbidden');
denyimg.setAttribute('menu', 'forbidhelp');
imgdiv.innerHTML = "";
imgdiv.appendChild(denyimg);
applyEvent(denyimg, 'mousemove', showHelp);
applyEvent(denyimg, 'mouseout', clearHelp);
}else{
if(responsecode==301 || responsecode==302){
var redirtype="";
if(responsecode==301){
redirtype = "301 Redirect";
}else{
redirtype = "302 Redirect";
};
var redirimg = document.createElement('img');
redirimg.setAttribute('src', '/images/redir.gif');
redirimg.setAttribute('alt', redirtype);
redirimg.setAttribute('title', redirtype);
redirimg.setAttribute('menu', 'redirhelp');
imgdiv.innerHTML = "";
imgdiv.appendChild(redirimg);
applyEvent(redirimg, 'mousemove', showHelp);
applyEvent(redirimg, 'mouseout', clearHelp);
}else{
if(responsecode==404){
var redximg = document.createElement('img');
redximg.setAttribute('src', '/images/redx.gif');
redximg.setAttribute('alt', '404 Not Found');
redximg.setAttribute('title', '404 Not Found');
redximg.setAttribute('menu', 'missinghelp');
imgdiv.innerHTML = "";
imgdiv.appendChild(redximg);
applyEvent(redximg, 'mousemove', showHelp);
applyEvent(redximg, 'mouseout', clearHelp);
}else{
if(numquestlinks==0){
var gcheckimg = document.createElement('img');
gcheckimg.setAttribute('src', '/images/gcheck.gif');
gcheckimg.setAttribute('alt', 'Page Checks Clean');
gcheckimg.setAttribute('title', 'Page Checks Clean');
gcheckimg.setAttribute('menu', 'cleanhelp');
imgdiv.innerHTML = "";
imgdiv.appendChild(gcheckimg);
applyEvent(gcheckimg, 'mousemove', showHelp);
applyEvent(gcheckimg, 'mouseout', clearHelp);
}else{
var warnimg = document.createElement('img');
warnimg.setAttribute('src', '/images/ywarning.gif');
warnimg.setAttribute('alt', 'Potential Bad Neighborhood');
warnimg.setAttribute('title', 'Potential Bad Neighborhood');
warnimg.setAttribute('menu', 'warninghelp');
imgdiv.innerHTML = "";
imgdiv.appendChild(warnimg);
applyEvent(warnimg, 'mousemove', showHelp);
applyEvent(warnimg, 'mouseout', clearHelp);
};
};
};
};
var imgdivb = document.getElementById("qdivrb" + l);
var bar;
if(numlinks<=40){
bar = 1;
}else if(numlinks>40 && numlinks<=80){
bar = 2;
}else if(numlinks>80 && numlinks<=100){
bar = 3;
}else if(numlinks>100 && numlinks<=120){
bar = 4;
}else if(numlinks>120 && numlinks<=140){
bar = 5;
}else if(numlinks>140 && numlinks<=300){
bar = 6;
}else if(numlinks>300){
bar = 7;
};
var barimg = document.createElement('img');
barimg.setAttribute('src', '/images/bars' + bar + '.gif');
barimg.setAttribute('alt', 'Link Density Gauge');
barimg.setAttribute('title', 'Link Density Gauge');
barimg.setAttribute('menu', 'linkdensityhelp');
imgdivb.appendChild(barimg);
applyEvent(barimg, 'mousemove', showHelp);
applyEvent(barimg, 'mouseout', clearHelp);
var imgdivc = document.getElementById("qdivrc" + l);
if(blogpercent<=40){
imgdivc.innerHTML = "
";
}else{
var bspamimg = document.createElement('img');
bspamimg.setAttribute('src', '/images/blogspam.gif');
bspamimg.setAttribute('alt', 'Possible Blogspam Detected (' + blogpercent + '%)');
bspamimg.setAttribute('title', 'Possible Blogspam Detected (' + blogpercent + '%)');
bspamimg.setAttribute('menu', 'blogspamhelp');
imgdivc.appendChild(bspamimg);
applyEvent(bspamimg, 'mousemove', showHelp);
applyEvent(bspamimg, 'mouseout', clearHelp);
};
document.getElementById("qdiv" + l).style.backgroundColor = "#FFF5F6";
//quick display for queue
var newqlength = scanqueue.length;
var newqdivs = new Array;
var newqspans = new Array;
var newqdivresults = new Array;
var newqdivresultsb = new Array;
var newqdivresultsc = new Array;
var pform = document.getElementById('progressform');
for(x=oldqlength;xFound on: " + scanqueue[x][2] +"\n";
newqdivresults[x] = document.createElement('div');
newqdivresults[x].setAttribute("className", "qdivresult");
newqdivresults[x].setAttribute("class", "qdivresult");
newqdivresults[x].setAttribute("id", "qdivr" + x);
newqdivresultsb[x] = document.createElement('div');
newqdivresultsb[x].setAttribute("className", "qdivresult");
newqdivresultsb[x].setAttribute("class", "qdivresult");
newqdivresultsb[x].setAttribute("id", "qdivrb" + x);
newqdivresultsc[x] = document.createElement('div');
newqdivresultsc[x].setAttribute("className", "qdivresult");
newqdivresultsc[x].setAttribute("class", "qdivresult");
newqdivresultsc[x].setAttribute("id", "qdivrc" + x);
newqdivs[x].appendChild(newqdivresults[x]);
newqdivs[x].appendChild(newqdivresultsb[x]);
newqdivs[x].appendChild(newqdivresultsc[x]);
newqdivs[x].appendChild(newqspans[x]);
pform.appendChild(newqdivs[x]);
};
};
// move to the next one
if(nextscan+1";
scan(scanqueue[nextscan][0], nextscan);
};
}else{
//alert('There was a problem with the request. ReadyState:' + http_request[i].readyState);
};
}
function startScan(){
if(inprogress!=0){
return false;
}else{
inprogress=1;
}
var initurl = document.getElementById('urlstart').value;
var errbox = document.getElementById("errbox");
var toolform = document.getElementById("toolform");
var startingpoint = document.getElementById("startingpoint");
var progress = document.getElementById("progress");
if(initurl==""){
errbox.innerHTML = "You must enter in a URL.";
inprogress=0;
}else{
errbox.innerHTML = "";
var thereset = document.getElementById("reset-switch");
thereset.style.display = "inline";
var thereset = document.getElementById("fieldsetqueue");
thereset.style.display = "block";
startScanB();
}
}
function startScanB(){
var initurl = document.getElementById('urlstart').value;
var errbox = document.getElementById("errbox");
var toolform = document.getElementById("toolform");
var startingpoint = document.getElementById("startingpoint");
var progress = document.getElementById("progress");
errbox.innerHTML = "";
toolform.style.display = "none";
startingpoint.innerHTML = spacify(initurl);
startingpoint.style.display = "inline";
progress.style.display = "block";
if(initurl.substring(0,7)!="http://" && initurl.substring(0,8)!="https://"){
initurl = "http://" + initurl;
};
var newqdiv, newqdivresult, newqdivresultb, newqdivresultc, newqspan;
var pform = document.getElementById('progressform');
newqdiv = document.createElement('div');
newqdiv.setAttribute("className", "qdiv");
newqdiv.setAttribute("class", "qdiv");
newqdiv.setAttribute("id", "qdiv0");
newqspan = document.createElement('span');
newqspan.setAttribute("id", "qspan0");
newqspan.innerHTML = "1) " + initurl + "\n";
newqdivresult = document.createElement('div');
newqdivresult.setAttribute("className", "qdivresult");
newqdivresult.setAttribute("class", "qdivresult");
newqdivresult.setAttribute("id", "qdivr0");
newqdivresultb = document.createElement('div');
newqdivresultb.setAttribute("className", "qdivresult");
newqdivresultb.setAttribute("class", "qdivresult");
newqdivresultb.setAttribute("id", "qdivrb0");
newqdivresultc = document.createElement('div');
newqdivresultc.setAttribute("className", "qdivresult");
newqdivresultc.setAttribute("class", "qdivresult");
newqdivresultc.setAttribute("id", "qdivrc0");
newqdiv.appendChild(newqdivresult);
newqdiv.appendChild(newqdivresultb);
newqdiv.appendChild(newqdivresultc);
newqdiv.appendChild(newqspan);
pform.appendChild(newqdiv);
sq++;
scanqueue[sq] = new Array;
scanqueue[sq][0] = initurl;
scanqueue[sq][1] = "";
scanqueue[sq][2] = "";
nextscan++;
document.getElementById("qdivr0").innerHTML = "
";
scan(initurl, 0);
}
function encodeQuery(inqstr){
if(inqstr.indexOf('?')!=-1){
startstr = inqstr.substring(0, inqstr.indexOf('?') +1);
endstr = escape(inqstr.substring(inqstr.indexOf('?') +1));
inqstr = startstr + endstr;
};
return inqstr;
}
function URLencode(sStr) {
return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\&/g, '%26');
}
function stripprot(inUrl){
var outUrl = new Array();
if(inUrl.substring(0,7)=="http://"){
//inUrl = inUrl.substring(7);
outUrl[0] = inUrl.substring(7);
outUrl[1] = 0;
}
if(inUrl.substring(0,8)=="https://"){
inUrl = inUrl.substring(8);
outUrl[0] = inUrl.substring(8);
outUrl[1] = 1;
}
return outUrl;
}
function scan(url, divid){
i++;
var urlbits = new Array();
urlbits = stripprot(url);
//url = stripprot(url);
if(i<=100){
makeRequest('scan.php?u='+URLencode(urlbits[0])+'&prot='+urlbits[1]+'&reqid='+divid, i);
//makeRequest('scan.php?u='+URLencode(url)+'&reqid='+divid, i);
}else{
maxedout = 1;
};
}