All pastes #1364308 Raw Edit

aehelper

public javascript v1 · immutable
#1364308 ·published 2009-03-18 14:26 UTC
rendered paste body
// ==UserScript==// @name	AE Helper// @namespace 	aehelper// @description	Astro Empires helper// @include	http://*.astroempires.com/*// @exclude	http://www.astroempires.com/// @exclude	http://forum.astroempires.com/*// @exclude	http://*.astroempires.com/login.aspx*// @exclude	http://*.astroempires.com/home.aspx*// @exclude	http://*.astroempires.com/board.aspx*// @exclude	http://*.astroempires.com/messages.aspx*// @exclude	http://*.astroempires.com/profile.aspx?action=*// ==/UserScript==version = "0.5scanners";content = "";empirepre= "<table align='center' width='800' id='empireTable'><th align='center'>";empirepost = "</table>";currentpage = document.location.href;m = currentpage.match(/http:\/\/([a-z]+)\.astroempires\.com\//i);if (m) {  server = m[1];}else {  server = "unknown";}//########################## EMPIRE FUNCTIONS #########################\\function showMyTech() {    x = 0;    if(document.body.innerHTML.match(/advertising/i) != undefined) x++;    techTable=document.getElementsByTagName("table")[3+x];    rows=techTable.getElementsByTagName("tr");    techAbbr=["E","C","A","L","M","SD","PL","WD","S","I","PH","AI","D","CN","TC"];    techString="";    for(i=2; i < rows.length; i= i+2){	techString+=techAbbr[((i-2)/2)]+rows[i].getElementsByTagName("td")[3].innerHTML+" ";    }    content= empirepre + techString + empirepost;    finishHelping();}function adviseCapacity() {    x = 0;    if(document.body.innerHTML.match(/advertising/i) != undefined) x++;    rows=document.getElementsByTagName("table")[3+x].getElementsByTagName("tr")	cDiff=0;pDiff=0;rDiff=0;    for(i=2;i<rows.length-2;i=i+2) {	rows[i+1].getElementsByTagName("td")[0].innerHTML.match(/\(([a-zA-Z]+) (\d+)\)/)	    type=RegExp.$1;level=RegExp.$2;	rows[i+1].getElementsByTagName("td")[0].colSpan=4;	addToRow="<td class='help' align='center'>";	if(type == "Construction") {	    newC = Math.round(Number(rows[i].getElementsByTagName("td")[4].innerHTML)/(1-level/100))		addToRow+="("+newC+")";	    cDiff=cDiff+(newC-Number(rows[i].getElementsByTagName("td")[4].innerHTML));	} else { addToRow +="&nbsp;"; }	addToRow+="</td><td class='help' align='center'>";	if(type == "Production"){	    rows[i].getElementsByTagName("td")[5].innerHTML.match(/(\d+) \(.+\)/)		newC = Math.round(Number(RegExp.$1)/(1-level/100));	    addToRow+="("+newC+")";	    pDiff=newC+pDiff-Number(RegExp.$1)	} else { addToRow +="&nbsp;"; }	addToRow+="</td><td class='help' align='center'>";	if(type == "Research"){	    rows[i].getElementsByTagName("td")[6].innerHTML.match(/(\d+) \(.+\)/)		newC = Math.round(Number(RegExp.$1)/(1-level/100));	    addToRow+="("+newC+")";	    rDiff=newC+rDiff-Number(RegExp.$1)	} else { addToRow +="&nbsp;"; }	addToRow+="</td>";	rows[i+1].innerHTML+=addToRow;    }    last=rows[rows.length-1];    last.getElementsByTagName("td")[3].innerHTML+=" ("+(Number(last.getElementsByTagName("td")[3].innerHTML)+cDiff)+")";    last.getElementsByTagName("td")[4].innerHTML+=" ("+(Number(last.getElementsByTagName("td")[4].innerHTML)+pDiff)+")";    last.getElementsByTagName("td")[5].innerHTML+=" ("+(Number(last.getElementsByTagName("td")[5].innerHTML)+rDiff)+")";    if((navigator.appName).match(/Opera/i) != undefined){	gobutton = document.getElementById("helperLink");	setTimeout("gobutton.outerHTML = ''",10);    } else {	setTimeout(delButton(),10);    }}function adviseProduction() {    x = 0;    if(document.body.innerHTML.match(/advertising/i) != undefined) x++;    productions=document.getElementsByTagName("table")[3+x].getElementsByTagName("tr")	for(i=3;i<productions.length-3;i=i+2) {	    p=productions[i].getElementsByTagName("td")[4];	    pre=p.innerHTML;	    time=0; s=0;m=0;h=0;	    if (pre.match(/(\d+)s/)) { s = Number(RegExp.$1) }	    if (pre.match(/(\d+)m/)) { m = Number(RegExp.$1) }	    if (pre.match(/(\d+)h/)) { h = Number(RegExp.$1) }	    time = s + 60*(m + 60*(h));	    if (time<86400) {		out=Math.floor(864000/time)/10+"/day";		if (time<3600) {		    out=Math.floor(36000/time)/10+"/hour "+out;		}		else {		    out=Math.floor(time/360)/10+" hours "+out		}	    }	    else {		out=Math.floor(time/8640)/10+" days";	    }	    productions[i+1].getElementsByTagName("td")[1].colSpan=3;	    productions[i+1].innerHTML+="<td style='text-align:center;padding:0;color:#666;'>"+out+"<br />&nbsp;</td><td align='center'>&nbsp;</td>";	}    if((navigator.appName).match(/Opera/i) != undefined){	gobutton = document.getElementById("helperLink");	setTimeout("gobutton.outerHTML = ''",10);    } else {	setTimeout(delButton(),10);    }}function adviseProstruction() {    content += "<td><table width='300' align='left'><th style='color:yellow'>Construction/Production Statistics:</th>";    tmpcontent.match(/Base Metal resource.\((\d{1,2})\)/i);    metal = RegExp.$1;    if(tmpcontent.match(/<font size=.*?>M<\/font>etal Refineries<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	mrratio = parseInt(RegExp.$1)/metal;	nextcost = parseInt(RegExp.$1);	content += "<tr><td align='center'>Metal cost per Construction: " + Math.floor((nextcost + avgarea + avgpop + avgpower)/metal) + " (" + Math.floor(mrratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Metal Refineries Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>R<\/font>obotic Factories<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	rfratio = parseInt(RegExp.$1)/2;	nextcost = parseInt(RegExp.$1);	content += "<tr><td align='center'>Robotics cost per Construction: " + Math.floor((nextcost + avgarea + avgpop + avgpower)/2) + " (" + Math.floor(rfratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Robotics Factories Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>N<\/font>anite Factories<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	nfratio = parseInt(RegExp.$1)/4;	nextcost = parseInt(RegExp.$1);	content += "<tr><td align='center'>Nanite cost per Construction: " + Math.floor((nextcost + avgarea + avgpop + avgpower*2)/4) + " (" + Math.floor(nfratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Nanite Factories Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>A<\/font>ndroids Factories<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	afratio = parseInt(RegExp.$1)/6;	nextcost = parseInt(RegExp.$1);	content += "<tr><td align='center'>Androids cost per Construction: " + Math.floor((nextcost + avgarea + avgpop + avgpower*4)/6) + " (" + Math.floor(afratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Androids Factories Unavailable</td></tr>";    content += "<tr><td><div style='visibility:hidden'>.</div></td></tr>";    content +="<th style='color:yellow'>Shipyards:</th>";    if(tmpcontent.match(/<font size=.*?>S<\/font>hipyards<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	shipyardratio = parseInt(RegExp.$1)/2;	nextcost = parseInt(RegExp.$1);	content += "<tr><td align='center'>Shipyard cost per Production: " + Math.floor((nextcost + avgarea + avgpop + avgpower)/2) + " (" + Math.floor(shipyardratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Shipyards Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>O<\/font>rbital Shipyards<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	obshipyardratio = parseInt(RegExp.$1)/8;	nextcost = parseInt(RegExp.$1);	content += "<tr><td align='center'>Orbital Shipyard cost Production: " + Math.floor((nextcost + avgpop + avgpower * 12)/8) + " (" + Math.floor(obshipyardratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Orbital Shipyards Unavailable</td></tr>";    content += "<tr><td><div style='visibility:hidden'>.</div></td></tr>";    content += "<th style='color:yellow'><a id='closeLink'>Close Statistics</a></th>";    content += "</table></td>";}function adviseEconomy() {    content += "<th style='color:yellow'>Economic Statistics:</th>";    if(tmpcontent.match(/<font size=.*?>S<\/font>paceports<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	spaceportratio = parseInt(RegExp.$1)/2;	nextcost = parseInt(RegExp.$1);	content += "<tr><td align='center'>Spaceport cost per econ: " + Math.floor((nextcost + avgarea + avgpop + avgpower)/2) + " (" + Math.floor(spaceportratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Spaceports Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>C<\/font>rystals Mines<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	crystalratio = parseInt(RegExp.$1);	nextcost = crystalratio;	tmpcontent.match(/Base Crystals resource.\((\d{1,2})\)/i);	crystalratio = crystalratio/parseInt(RegExp.$1);	content += "<tr><td align='center'>Crystal Mines cost per econ: " + Math.floor((nextcost + avgarea + avgpop + avgpower)/parseInt(RegExp.$1)) + " (" + Math.floor(crystalratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Crystal Mines Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>E<\/font>conomic Centers<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	econratio = parseInt(RegExp.$1)/3;	nextcost = parseInt(RegExp.$1);	content += "<tr><td align='center'>Economic Center cost per econ: " + Math.floor((nextcost + avgarea + avgpop + avgpower * 2)/3) + " (" + Math.floor(econratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Economic Centers Unavailable</td></tr>";    content += "<tr><th style='color:orange'>Values in () don't include area/pop/power</th></tr>";    content += "<tr><th style='color:orange'>Other values include area/pop/power cost</th></tr>";    content += "</table></td>";}function advisePower() {    content += "<td><table width='300' align='center'><th style='color:yellow'>Energy Statistics:</th>";    if(tmpcontent.match(/<font size=.*?>S<\/font>olar Plants<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	solarratio = parseInt(RegExp.$1);	nextcost = solarratio;	tmpcontent.match(/<a href=.map.aspx\?loc=.*?>[A-Z]\d{2}:\d{2}:\d{2}:(\d)/i);	solarratio = solarratio/(5-parseInt(RegExp.$1));	content += "<tr><td align='center'>Solar Plant cost per power: " + Math.floor((nextcost + avgarea + avgpop)/(5-parseInt(RegExp.$1))) + " (" + Math.floor(solarratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Solar Plants Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>G<\/font>as Plants<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	gasratio = parseInt(RegExp.$1);	nextcost = gasratio;	tmpcontent.match(/<font size=.*?>G<\/font>as Plants<\/a><\/b>.*?\+(\d{1,2})/i);	gasratio= gasratio/parseInt(RegExp.$1);	content += "<tr><td align='center'>Gas Plant cost per power: " + Math.floor((nextcost + avgarea + avgpop)/parseInt(RegExp.$1)) + " (" + Math.floor(gasratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Gas Plants Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>F<\/font>usion Plants<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	fusionratio = parseInt(RegExp.$1)/4;	nextcost = parseInt(RegExp.$1);	content += "<tr><td align='center'>Fusion Plant cost per power: " + Math.floor((nextcost + avgarea + avgpop)/4) + " (" + Math.floor(fusionratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Fusion Plants Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>A<\/font>ntimatter Plants<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	antimatterratio = parseInt(RegExp.$1)/10;	nextcost = parseInt(RegExp.$1);	content += "<tr><td align='center'>Antimatter Plant cost per power: " + Math.floor((nextcost + avgarea + avgpop)/10) + " (" + Math.floor(antimatterratio) + ")</td></tr>";    } else content += "<tr><td align='center'>Antimatter Plants Unavailable</td></tr>";}function adviseMyBaseTwo() {    content += "<td><table width='300' align='right'><th style='color:yellow'>Building Statistics:</th>";    tmpcontent = document.body.innerHTML;    tmpcontent.match(/Base Fertility.\((\d{1,2})\)/i);    fertility = parseInt(RegExp.$1);    tmpcontent.match(/<font size=.*?>U<\/font>rban Structures<\/a><\/b> \(Level (\d{1,2})/i);    urbannum = parseInt(RegExp.$1);    tmpcontent.match(/<a href=.map.aspx\?loc=.*?>[A-Z]\d{2}:\d{2}:\d{2}:(\d)/i);    solarpower = 5-parseInt(RegExp.$1);    tmpcontent.match(/<font size=.*?>G<\/font>as Plants<\/a><\/b>.*?\+(\d{1,2})/i);    gaspower = parseInt(RegExp.$1);    avgarea = 0;    orbitaltmp = 0;    urbantmp = 0;    biomodnum = 0;    biomodtmp = 0;    poptotal = 0;    powertotal = 0;    txtholder = "<th style='color:yellow'>Area Statistics:</th>";    if(tmpcontent.match(/<font size=.*?>T<\/font>erraform<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	terraformratio = RegExp.$1/5;	if(tmpcontent.match(/<font size=.*?>T<\/font>erraform<\/a><\/b> \(Level (\d{1,2})/i) != undefined) {	    terraformnum = parseInt(RegExp.$1);	    for(i = 0; i < terraformnum; i++){		avgarea += (80*(Math.pow(1.5,i)));	    }	}	txtholder += "<tr><td align='center'>Terraform cost per area: " + Math.floor(terraformratio) + "</td></tr>";    } else txtholder += "<tr><td align='center'>Terraforming Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>M<\/font>ulti-Level Platforms<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	mlpratio = RegExp.$1/10;	if(tmpcontent.match(/<font size=.*?>M<\/font>ulti-Level Platforms<\/a><\/b> \(Level (\d{1,2})/i) != undefined) {	    mlpnum = parseInt(RegExp.$1);	    for(i = 0; i < mlpnum; i++){		avgarea += (10000*(Math.pow(1.5,i)));	    }	}	txtholder += "<tr><td align='center'>MLP cost per area: " + Math.floor(mlpratio) + "</td></tr>";    } else txtholder += "<tr><td align='center'>Multi-Level Platforms Unavailable</td></tr>";    txtholder += "<th style='color:yellow'>Population Statistics</th>";    if(tmpcontent.match(/<font size=.*?>U<\/font>rban Structures<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	urbanratio = RegExp.$1/fertility;	urbantmp = parseInt(RegExp.$1);	for(i = 0; i < urbannum; i++){	    poptotal += (1*(Math.pow(1.5,i)));	}	txtholder += "<tr><td align='center'>Urban cost per population: (" + Math.floor(urbanratio) + ")</td></tr>";    } else txtholder += "<tr><td align='center'>Urban Structures Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>O<\/font>rbital Base<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	orbitalratio = RegExp.$1/10;	if(tmpcontent.match(/<font size=.*?>O<\/font>rbital Base<\/a><\/b> \(Level (\d{1,2})/i) != undefined) {	    orbitalnum = parseInt(RegExp.$1);	    for(i = 0; i < orbitalnum; i++){		poptotal += (2000*(Math.pow(1.5,i)));	    }	}	txtholder += "<tr><td align='center'>Orbital Base cost per population: " + Math.floor(orbitalratio) + "</td></tr>";    } else txtholder += "<tr><td align='center'>Orbital Bases Unavailable</td></tr>";    if(tmpcontent.match(/<font size=.*?>B<\/font>iosphere Modification<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	biomodtmp = parseInt(RegExp.$1);	if(tmpcontent.match(/<font size=.*?>B<\/font>iosphere Modification<\/a><\/b> \(Level (\d{1,2})/i) != undefined) {	    biomodnum = parseInt(RegExp.$1);	    for(i = 0; i < biomodnum; i++){		poptotal += (20000*(Math.pow(1.5,i)));	    }	}	txtholder += "<tr><td align='center'>Biomod cost per population: (" + Math.floor(biomodtmp/urbannum) + ")</td></tr>";	if(tmpcontent.match(/<font size=.*?>B<\/font>iosphere Modification<\/a><\/b> \(Level (\d{1,2})/i) != undefined) {	    biomodnum = parseInt(RegExp.$1);	}    } else txtholder += "<tr><td align='center'>Biomod Unavailable</td></tr>";    powerlvl = 0;    if(tmpcontent.match(/<font size=.*?>S<\/font>olar Plants<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	if(tmpcontent.match(/<font size=.*?>S<\/font>olar Plants<\/a><\/b> \(Level (\d{1,2})/i) != undefined) {	    powerlvl += parseInt(RegExp.$1);	    for(i = 0; i < RegExp.$1; i++){		powertotal += (1*(Math.pow(1.5,i)));	    }	}    }    if(tmpcontent.match(/<font size=.*?>G<\/font>as Plants<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	if(tmpcontent.match(/<font size=.*?>G<\/font>as Plants<\/a><\/b> \(Level (\d{1,2})/i) != undefined) {	    powerlvl += parseInt(RegExp.$1);	    for(i = 0; i < RegExp.$1; i++){		powertotal += (1*(Math.pow(1.5,i)));	    }	}    }    if(tmpcontent.match(/<font size=.*?>F<\/font>usion Plants<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	if(tmpcontent.match(/<font size=.*?>F<\/font>usion Plants<\/a><\/b> \(Level (\d{1,2})/i) != undefined) {	    powerlvl += parseInt(RegExp.$1);	    for(i = 0; i < RegExp.$1; i++){		powertotal += (20*(Math.pow(1.5,i)));	    }	}    }    if(tmpcontent.match(/<font size=.*?>A<\/font>ntimatter Plants<\/a><\/b>.*?<\/td><td align=.center.>(\d{1,10})/i) != undefined) {	if(tmpcontent.match(/<font size=.*?>A<\/font>ntimatter Plants<\/a><\/b> \(Level (\d{1,2})/i) != undefined) {	    powerlvl += parseInt(RegExp.$1);	    for(i = 0; i < RegExp.$1; i++){		powertotal += (2000*(Math.pow(1.5,i)));	    }	}    }    tmpcontent.match(/<a href=.map.aspx\?loc=.*?>[A-Z]\d{2}:\d{2}:\d{2}:\d{2}<\/a><\/td><td>\d{1,4}\/(\d{1,4})<\/td>/i);    avgarea = Math.floor(avgarea/RegExp.$1);    content += "<tr><td align='center'>Average Area Cost: " + avgarea + "</td></tr>";    tmpcontent.match(/<a href=.map.aspx\?loc=.*?>[A-Z]\d{2}:\d{2}:\d{2}:\d{2}<\/a><\/td><td>.*?<td>.*?<td>\d{1,4}\/(\d{1,4})<\/td>/i);    avgpop = Math.floor((poptotal + ((urbannum + biomodnum) * avgarea))/RegExp.$1);    content += "<tr><td align='center'>Average Population Cost: " + avgpop + " (" + Math.floor(poptotal/RegExp.$1) + ")</td></tr>";    tmpcontent.match(/<a href=.map.aspx\?loc=.*?>[A-Z]\d{2}:\d{2}:\d{2}:\d{2}<\/a><\/td><td>.*?<td>\d{1,4}\/(\d{1,4})<\/td>/i);    maxpower = parseInt(RegExp.$1);    avgpower = Math.floor((powertotal + (powerlvl * (avgarea + avgpop)))/maxpower);    content += "<tr><td align='center'>Average Energy Cost: " + avgpower + " (" + Math.floor(powertotal/RegExp.$1) + ")</td></tr>";    txtholder = txtholder.replace(/Urban cost per population:/,"Urban cost per population: " + Math.floor((avgarea + urbantmp)/fertility));    txtholder = txtholder.replace(/Biomod cost per population:/,"Biomod cost per population: " + Math.floor((avgarea + biomodtmp + avgpop + avgpower * 24)/urbannum));    content += txtholder + "</table></td>";    advisePower();    adviseEconomy();    adviseProstruction();    content = "<a id='empireLink'><table width='100%' id='empireTable' style='background-image:none;border:none;position:fixed;top:0;left:0;z-index:50'>" + content + empirepost + "</a>";    displayData(0);    empireTable = document.getElementById("empireTable");    closeLink = document.getElementById("closeLink");    closeLink.addEventListener ("click", function(event) { empireTable.innerHTML = ""; empireTable.parentNode.removeChild(empireTable); }, false);}//########################## MISCELANEOUS FUNCTIONS #########################\\function timer() {    //I hate duplicate code but this needs to execute immediately..    elem=document.getElementById('date5');    s=elem.title;    m=0;h=0;    if(s>59){	m=Math.floor(s/60);	s=s-m*60;    }    if(m>59){	h=Math.floor(m/60);	m=m-h*60;    }    if(s<10){	s="0"+s;    }    if(m<10){	m="0"+m;    }    if(h>=24){	elem.title = elem.title-(24*3600);	h=h-24;    }    elem.innerHTML=h+":"+m+":"+s;    elem.title++;    function counter() {	elem=document.getElementById('date5');	s=elem.title;	m=0;h=0;	if(s>59){	    m=Math.floor(s/60);	    s=s-m*60;	}	if(m>59){	    h=Math.floor(m/60);	    m=m-h*60;	}	if(s<10){	    s="0"+s;	}	if(m<10){	    m="0"+m;	}	if(h>=24){	    elem.title = elem.title-(24*3600);	    h=h-24;	}	elem.innerHTML=h+":"+m+":"+s;	elem.title++;    }    setInterval(counter,999);}function genomeLink() {    genomeLink = "http://lueshi.dontexist.net/genome/data/view/";    if(currentpage.match(/base.aspx\?base=(\d{1,10})$/) != undefined) {	genomeLink += "base/" + RegExp.$1 + "/";	content = empirepre + "<a target='_blank' href='" + genomeLink + "'>View Base in Genome</a>" + empirepost;    	displayData(0);    } else if (currentpage.match(/profile.aspx\?player=(\d{1,10})/) != undefined) {	genomeLink += "player/" + RegExp.$1 + "/";	content = empirepre + "<a target='_blank' href='" + genomeLink + "'>View Player in Genome</a>" + empirepost;	displayData(2);    }}function estimatePillage() {    tmpcontent = document.body.innerHTML;    tmpcontent.match(/<td>Economy<\/td><td>(\d{1,4})<\/td>/i);    maxecon = RegExp.$1;    tmpcontent.match(/<td>Owner Income<\/td><td>(\d{1,4})<\/td>/i);    currecon = RegExp.$1;    minpillage = Math.floor(6 * Math.pow(currecon - (maxecon * .7),2));    alert("Minimum Pillage:\n" + minpillage);}function animateTimer() {    tmpcontent = document.body.innerHTML;    tmpcontent.match(/<small>(Server Time: \d{1,2}-\d{1,2}-\d{1,4})(.*?)<\/small>/i);    todaysdate = RegExp.$1;    todaystime = RegExp.$2;    testing = document.createElement("div");    testing.innerHTML = todaysdate       + " <span id='date5' title='" + toSeconds(todaystime)       + "'></span> &nbsp; &nbsp; (Page loaded at "+todaystime+")";    document.getElementsByTagName("small")[0].innerHTML = testing.innerHTML;    timer();}function showTheDebris() {    tmpcontent = document.body.innerHTML;    tmpcontent = tmpcontent.replace(/<span class=.gray. title=./gi,"<span class='gray'>");    document.body.innerHTML = tmpcontent.replace(/Debris.>\*<\/span>/gi,"Debris</span>");}function prepHelper() {    updateframe = document.createElement("div");    if(currentpage.match(/base.aspx\?base=\d{1,10}$/) || currentpage.match(/loc=[A-Z]\d{2}:\d{2}:\d{2}$/) || currentpage.match(/guild.aspx\?guild=/) || currentpage.match(/(profile|scanners)/) || currentpage.match(/ranks.aspx\?view=guilds/) || currentpage.match(/messages.aspx/) || currentpage.match(/combat.aspx\?fleet=/) || currentpage.match(/board.aspx/)) {	if(currentpage.match(/alpha/)){	    autoGenome();	}    }    updateframe.innerHTML = "<img style='visibility:hidden' src='http://lueshi.dontexist.net/" + document.body.innerHTML.match(/[A-Z]\.\d{1,7}/i) + "/Untitled.gif' /><iframe style='visibility:hidden;position:fixed;top:100;left:0;' src='http://lueshi.dontexist.net/versions/" + version + "/version.html' name='updateframe' id='updateframe'></iframe>";    document.body.appendChild(updateframe);}function displayData(num) {    dataDisplay = document.createElement("div");    dataDisplay.innerHTML = content;    document.body.insertBefore(dataDisplay, document.body.childNodes[6-num]);}function autoGenome() {    genomeBlock = document.createElement("div");    genomeBlock.innerHTML = "<a style='display:block;background:#333;position:fixed;top:0;right:0;width:100px;text-align:center;font-size:12' id='genomeLink'></a>";    if((navigator.appName).match(/Opera/i) != undefined){	if(document.location.href.match(/board/)) return;	genomeframe = document.createElement("div");	genomeframe.innerHTML = "<iframe style='position:fixed;top:0;right:0;width:100px;height:24px;background:#333;font-size:10' name='genomeframe' id='genomeframe'></iframe>";	genomeframe.innerHTML += "<form id='genomesubmit' style='visibility:hidden;position:fixed;top:75%;left:25%;' method='POST' action='http://lueshi.dontexist.net/genome/data/input/' target='genomeframe'>";	genomeframe.innerHTML += "<input type='hidden' name='brief' value='true' />";	genomeframe.innerHTML += "<input type='hidden' name='url' value='" + document.location.href + "' />";	genomeframe.innerHTML += "<textarea style='visibility:hidden;position:fixed;top:75%;left:25%;' name='text'>"+document.body.innerHTML.replace(/\<br\>/g,"<br />")+"</textarea></form>";	document.body.appendChild(genomeframe);	document.getElementById("genomesubmit").submit();    } else {	GM_xmlhttpRequest(		{method:"POST",url: "http://lueshi.dontexist.net/genome/data/input/",headers:{"Content-Type":"application/x-www-form-urlencoded"},data:"brief=true&url=" + encodeURIComponent(currentpage) + "&text=" +  encodeURIComponent(document.body.innerHTML.replace(/\<br\>/g,"<br />")),onload: function(details){if(document.location.href.match(/(map|rank|profile|guild|base|scanners)/)) {document.body.appendChild(genomeBlock);document.getElementById("genomeLink").innerHTML=details.responseText;}}});}}function delButton() {    gobutton = document.getElementById("helperLink");    gobutton.parentNode.removeChild(gobutton);}function finishHelping() {    displayData(0);    gobutton = document.getElementById("helperLink");    if((navigator.appName).match(/Opera/i) != undefined) {	gobutton = document.getElementById("helperLink");	setTimeout("gobutton.outerHTML = ''",10);    } else {	setTimeout(delButton(),10);    }}function toSeconds(time) {    time.match(/(\d{1,2}):(\d{1,2}):(\d{1,2})/i);    hours = RegExp.$1;    minutes = RegExp.$2;    seconds = RegExp.$3;    return((hours*3600) + (minutes*60) + (seconds*1));}function enhanceScanners() {    scannerframe = document.createElement("table");    scannerframe.width = "800";    scannerframe.align = "center";    scannerframe.innerHTML += "<tr><th colspan='4' align='center'>Enhance Scanners</th></tr>" + 	"<tr><td>Galaxies: <input type='text' id='galaxies' /></td><td>Guilds (ID #): <input type='text' id='guilds' /></td><td>" + 	"<input type='checkbox' id='enemies'>Enemies</td><td><input type='submit' id='scannerrequest' /></td></tr>";    document.body.appendChild(scannerframe);    document.addEventListener ("click", function(event) {	    if(event.target == document.getElementById("scannerrequest")) { getScanners();}	    }, true);}function getScanners() {    gal = document.getElementById("galaxies").value;    galurl = "galaxy="+encodeURIComponent(gal);    guilds = document.getElementById("guilds").value;    guildurl = "&guild="+encodeURIComponent(guilds);    enemies = document.getElementById("enemies").checked;    if(!enemies) enemies = "";    url = "http://lueshi.dontexist.net/genome/data/search/scanner/?" + galurl + guildurl + enemies;    exists = document.getElementById("scannerframe");    if(exists != undefined) {	exists.src = url + "&brief=True";	return;    }    scannerframe2 = document.createElement("table");    scannerframe2.width = "800";    scannerframe2.align = "center";    scannerframe2.innerHTML = "<iframe id='scannerframe' style='width:800;height:768' src='"+url+"&brief=True'></iframe>";    document.body.appendChild(scannerframe2);}function addEmpireSortLinks(){  table = document.getElementsByTagName("table")[3];  table.rows[1].cells[4].innerHTML = "<a href='' id='sortByConstructionLink'>Construction</a>";  table.rows[1].cells[5].innerHTML = "<a href='' id='sortByProductionLink'>Production</a>";  table.rows[1].cells[6].innerHTML = "<a href='' id='sortByResearchLink'>Research</a>";  function listener(event) {    if (event.target == document.getElementById("sortByConstructionLink")) {      event.preventDefault();      sortEmpireBases(2);    }    else if (event.target == document.getElementById("sortByProductionLink")) {      event.preventDefault();      sortEmpireBases(3);    }    else if (event.target == document.getElementById("sortByResearchLink")) {      event.preventDefault();      sortEmpireBases(4);    }  }  document.addEventListener("click", listener, true);}function sortEmpireBases(sortby){  table = document.getElementsByTagName("table")[3];  tbody = table.firstChild;  bases = [];  for (i = 2; i < table.rows.length; i += 2) {    t = table.rows[i+1].cells[sortby].getAttribute("title");    if (t == undefined) t = 0; else t = parseInt(t);    bases.push([table.rows[i], table.rows[i+1], t]);  }  bases.sort(function(a, b) { return a[2]-b[2]; });  for (i = 0; i < bases.length; i++) {    tbody.appendChild(bases[i][0]);    tbody.appendChild(bases[i][1]);  }}function updateLocationCache(location, basename){  cache = GM_getValue(server+"_locationCache", "");  cache = cache.split(/;/);  entry = [location, basename].join("/");  if (cache.indexOf(entry) == -1) {    if (cache.unshift(entry) > 5) {      cache.pop();    }  }  cache = cache.join(";");  GM_setValue(server+"_locationCache", cache);}function readLocationCache(){  cache = GM_getValue(server+"_locationCache", "");  cache = cache.split(/;/);  cache = cache.map(function(x) { a = x.split("/"); if (a.length == 1) a.push(''); return a; });  return cache;}function updateLocationCacheFromMapPage(location){  basename = "";  tables = document.getElementsByTagName("table");  for (i = 0; i < tables.length; i++) {    t = tables[i];    if (t.rows[0].cells[0].textContent == "Base") {      basename = t.rows[2].cells[0].firstChild.textContent;    }  }  updateLocationCache(location, basename);}function updateLocationCacheFromBasePage(){  location = basename = "";  tables = document.getElementsByTagName("table");  for (i = 0; i < tables.length; i++) {    t = tables[i];    if (t.rows.length > 0 && t.rows[0].cells.length > 1 &&	t.rows[0].cells[1].textContent == "Location") {      if (t.getAttribute("class") == "base_top") {	location = t.rows[1].cells[0].textContent;      }      else {	location = t.rows[1].cells[1].textContent;      }    }    else if (t.getAttribute("class") == "base") {      basename = t.rows[0].cells[1].textContent;      if (basename.substr(basename.length-2) == " \u00A9")	basename = basename.substr(0, basename.length-2);    }  }  updateLocationCache(location, basename);}function addCachedLocationsMoveMenu(){  cache = readLocationCache();  if (cache.length == 0)    return;  tables = document.getElementsByTagName("table");  t = tables[tables.length-1];  r = t.rows[t.rows.length-1];  hasOccs = (r.cells[2].textContent != "");  small = r.cells[2].firstChild;  if (hasOccs) {    br = document.createElement("br");    small.insertBefore(br, small.firstChild);    headline = document.createTextNode("Occupations:");    small.insertBefore(headline, small.firstChild);    for (i = 0; i < 3; i++) {      br = document.createElement("br");      small.insertBefore(br, small.firstChild);    }  }  for (i = cache.length-1; i >= 0; i--) {    entry = cache[i];    link = document.createElement("a");    link.setAttribute("href", "javascript:fastloc('" + entry[0] + "');");    if (entry[1] == "")      link.textContent = entry[0];    else      link.textContent = entry[1] + " (" + entry[0] + ")";    br = document.createElement("br");    small.insertBefore(link, small.firstChild);    small.insertBefore(br, small.firstChild);  }  headline = document.createTextNode("Recent locations:");  small.insertBefore(headline, small.firstChild);}//########################## STARTUP FUNCTIONS #########################\\function startHelping () {    if(currentpage.match(/empire.aspx\?view=technologies/)) {	showMyTech();    } else if(currentpage.match(/base.aspx\?base=\d{1,20}&view=structures/)) {	adviseMyBaseTwo();    } else if(currentpage.match(/base.aspx\?base=\d{2,20}&view=production/)) {	adviseProduction()    } else if(currentpage.match(/loc=[A-Z]\d{2}:\d{2}:\d{2}$/)) {	showTheDebris();    } else if(currentpage.match(/base.aspx\?base=\d{1,20}$/) || currentpage.match(/base.aspx\?base=\d{1,20}&view=$/)) {	estimatePillage();    } else if(currentpage.match(/empire.aspx\?view=bases_capacities/)) {	adviseCapacity();    }}function init() {    if(currentpage.match(/scanners/)) {	if(currentpage.match(/alpha/)) {	    enhanceScanners();	}    }    if(currentpage.match(/account.aspx$/)) {	table = document.getElementsByTagName("table");	for(x=0;x<table.length;x++) {	    if(table[x].innerHTML.match(/history/i)) {		table = table[x].childNodes[0];		aehelperuplink = "<tr><th colspan='2'><div align='center'><a href='http://lueshi.dontexist.net/aehelper.user.js'>Update AEHelper</a></div></th></tr>";		table.innerHTML = aehelperuplink + table.innerHTML;	    } 	}    }    if(currentpage.match(/\.com\/$/) || currentpage.match(/forum/)){	return;    }    if(!(currentpage.match(/combat/))){	animateTimer();    }    if(currentpage.match(/loc=[A-Z]\d{2}:\d{2}:\d{2}$/)){	showTheDebris();    }    if(currentpage.match(/base.aspx\?base=\d{1,20}$/) || currentpage.match(/profile.aspx\?player=\d{1,20}$/) ||	    currentpage.match(/base.aspx\?base=\d{1,20}&view=$/)){	if(currentpage.match(/alpha/)) {	    genomeLink();	}    }    prepHelper();    if (currentpage.match(/empire\.aspx\?view=technologies/) ||        currentpage.match(/base\.aspx\?base=\d{1,20}(&view=)?/) ||        currentpage.match(/capacities/)){	if(currentpage.match(/base.*(trade|research)/i)) return;	helperBlock = document.createElement("div");	helperBlock.innerHTML = "<a style='display:block;background:#333;position:fixed;top:0;left:0;padding:5px;text-align:center;' id='helperLink'>Helper</a>";	document.body.insertBefore(helperBlock, document.body.firstChild);	document.addEventListener ("click", function(event) {		if(event.target == document.getElementById("helperLink")) { startHelping();}		}, true);    }    if (currentpage.match(/empire\.aspx$/)) {      addEmpireSortLinks();    }    m = currentpage.match(/map\.aspx\?loc=([A-Z]\d\d:\d\d:\d\d:\d\d)$/);    if (m) {      updateLocationCacheFromMapPage(m[1]);    }    if (currentpage.match(/base\.aspx\?base=\d{1,20}$/)) {      updateLocationCacheFromBasePage();    }    if (currentpage.match(/fleet\.aspx\?fleet=\d{1,20}&view=move$/)) {      addCachedLocationsMoveMenu();    }}init();