NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @license MIT // @name NewStatScript All Unis // @description adds a new menu to the game containing an overview of your space empire. // @version 1.6.0.4x // @include http://*starfleet*.com/* // @include http://*stardrift*.com/* // @run-at document-end // ==/UserScript== //1.4.5.0 -- fix research grab (class="location item" -> class="location tech item (alt)" //1.4.5.1 -- fix research fix :P added ? after (alt) //1.4.5.2 -- fix leadership grab (tr class changed) //1.4.5.3 -- fix effective lab level output (tech level stored too much data) //1.4.5.4 -- attempt at fix disappearing building levels (level div now has amount) //1.4.5.5 -- fix reference to resources on buildings page //1.4.5.6 -- update references to table elements on multiple pages (now divs) //1.4.5.7 -- hopeful fix of disappearing building levels. damn you outdated code! //1.4.6 -- actually fixed disappearing building levels. //1.4.6.1 -- changing version number to force update //1.4.6.2 -- i didnt realize people used that "GO" button on the galaxy page. now you can use that and immediately go to stat page and see your data //1.4.7 -- adapting to add Stardrift Empires //1.4.7.1 -- fixing research for stardrift //1.4.7.2 -- fixing hydro mine for statscript? (now a 'refinery' rather than 'synthesizer') //1.4.7.3 -- added support for new icon_ img alts in shipyard/defense //1.4.7.4 -- debugging shipyard fix in sde //1.4.7.5 -- argh stupid 2am lack of foresight //1.4.7.6 -- adding post method to moving-heph link //1.4.8 -- making html table cell borders thinner //1.4.8.1 -- fixing warehouse capacity area in sde //1.4.8.2 -- fixed "ARC Net" abbreviated name for SDE //1.4.8.3 -- fixed same as 1.4.8.2 but on effective level table //1.4.8.4 -- patched userscript to work with new bfg code //1.4.8.5 -- updated shipyard timer to play nice with genesis sat and shadow probe //1.4.8.6 -- added "needs update" mechanism //1.4.8.7 -- removed "needs update" mechanism due to display weirdness //1.4.8.8 -- updating for new UI screen //1.4.8.9 -- patching for lack of activate_planet on colony coordinate links //1.4.9 -- fixed each ship's build times to always show 3 millisecond digits //1.5 -- updated for nova //1.5.1 -- updated ship building speeds for tourney //1.5.2 -- new interface //1.5.3 -- building page bug fix //1.5.4 -- fixed sub_nav spacing in sde //1.6.0 -- update for conquest //1.6.0.1 -- fixed shipyard timer on moon //1.6.0.2 -- actually fixed shipyard timer on moon //1.6.0.3x -- Triton added and modified for uni3 (by TimeLord) //1.6.0.4x -- Triton added and modified for x4 (IN PROGRESS) (by TimeLord) var vPrefix='statscript'; var vStardrift=/stardriftempires/i.test(document.location.href); if(/\.com\/roaming_planet_move\/moving/.test(document.location.href)) { fFixHephCoordsLink(); } var vCurrentPlanet=fGetCurrentPlanet(); fAddStatsLink(); fUpdatePlanetInfo(); if(/\.com\/buildings\/home/.test(document.location.href)) { fGetBuildingData(); } if(/\.com\/leaderboard/.test(document.location.href)) { fGetLeaderboardData(); } if(/\.com\/buildings\/research/.test(document.location.href)) { fGetResearchData(); } if(/\.com\/buildings\/(shipyard|fortifications)/.test(document.location.href)) { fAddShipyardCompletionTimer(); } if(/\.com\/(\?|$)/.test(document.location.href)) { fGetMaxTemp(); } if(/\.com\/profile\/overview/.test(document.location.href)) { fProcessAllPlanets(); } //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////// Functions ///////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// //buildings functions function fGetBuildingData() { var vMoonCheck=GetClassItem(document.getElementById('user_planets'),'div','moon selected'); if(vMoonCheck==null) { fSaveProduction(); fGetBuildingLevels(); } else { var vMoonID=vMoonCheck.getElementsByTagName('a')[0].getAttribute('href').match(/activate_planet=(\d+)/)[1]; fGetMoonBuildingLevels(vMoonID); } document.getElementById('sticky_notices').innerHTML+=' Production Stored.';} function fSaveProduction() { //get hourly production var vProduction=document.getElementById('resource_production'); var vOreProd=GetClassItem(GetClassItem(vProduction,'div','ore block'),'span','amount right').innerHTML.replace(/,/g,''); var vCryProd=GetClassItem(GetClassItem(vProduction,'div','crystal block'),'span','amount right').innerHTML.replace(/,/g,''); var vHydProd=GetClassItem(GetClassItem(vProduction,'div','hydrogen block'),'span','amount right').innerHTML.replace(/,/g,''); // var vResAmts=GetClassItem(document.getElementById('user_stats'),'div','resources_table'); // var vOreProd=parseFloat(vResAmts.innerHTML.match(/ore_rate = (\d+\.\d+)/mi)[1].replace(/,/g,''))*3600; // var vCryProd=parseFloat(vResAmts.innerHTML.match(/crystal_rate = (\d+\.\d+)/mi)[1].replace(/,/g,''))*3600; // var vHydProd=parseFloat(vResAmts.innerHTML.match(/hydrogen_rate = (\d+\.\d+)/mi)[1].replace(/,/g,''))*3600; localStorage.setItem(vPrefix+'.planet.'+vCurrentPlanet+'.oprod',vOreProd); localStorage.setItem(vPrefix+'.planet.'+vCurrentPlanet+'.cprod',vCryProd); localStorage.setItem(vPrefix+'.planet.'+vCurrentPlanet+'.hprod',vHydProd); //add daily production as hover popup in hourly box var vDaily='Daily Production:'+String.fromCharCode(10); vDaily+='Ore: '+addCommas((parseInt(vOreProd)*24).toString())+String.fromCharCode(10); vDaily+='Crystal: '+addCommas((parseInt(vCryProd)*24).toString())+String.fromCharCode(10); vDaily+='Hydrogen: '+addCommas((parseInt(vHydProd)*24).toString()); vProduction.setAttribute('title',vDaily); } function fGetBuildingLevels() { var vPlanetString=vPrefix+'.planet.'+vCurrentPlanet; //get field counts var vFieldBlock=GetClassItem(document.getElementById('fields'),'div','section_content'); localStorage.setItem(vPlanetString+'.fields',vFieldBlock.getElementsByTagName('span')[1].innerHTML); localStorage.setItem(vPlanetString+'.fieldsused',vFieldBlock.getElementsByTagName('span')[0].innerHTML); //get energy free/needed var vEnergyNet=0; var vEnergyDiv=GetClassItem(document.getElementById('resource_production'),'div','energy_free block'); if(vEnergyDiv==null) { vEnergyDiv=GetClassItem(document.getElementById('resource_production'),'div','energy_needed block'); } if(vEnergyDiv!=null) { var vEnergyText=vEnergyDiv.innerHTML.replace(/^\s+|\s+$|\<[^>]*?\>/g, ""); vEnergyNet=(/Energy Needed/.test(vEnergyText)) ? '-' : ''; vEnergyNet+=vEnergyText.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.energy',vEnergyNet); //get building levels var vTRs=document.getElementById('locations_table').getElementsByTagName('div'); var vLevel, vCapacity, vHoursToFill; var vCurrentToCapacity, vHoursToFillCurrent; var vResAmts=document.getElementById('resources_table'); var vOreAmt=parseFloat(GetClassItem(GetClassItemRX(vResAmts,'div',/^row ore/i),'div','amount').innerHTML.replace(/,/g,'')); var vCryAmt=parseFloat(GetClassItem(GetClassItemRX(vResAmts,'div',/^row crystal/i),'div','amount').innerHTML.replace(/,/g,'')); var vHydAmt=parseFloat(GetClassItem(GetClassItemRX(vResAmts,'div',/^row hydrogen/i),'div','amount').innerHTML.replace(/,/g,'')); for (x=0;x<vTRs.length;x++) { if (/^row location/i.test(vTRs[x].getAttribute('class'))) { vLevel='0'; if (vTRs[x].innerHTML.match(/Ore Mine/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.omine',vLevel); } if (vTRs[x].innerHTML.match(/Crystal Mine/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.cmine',vLevel); } if (vTRs[x].innerHTML.match(/Hydrogen (Synthesizer|Refinery)/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.hmine',vLevel); } if (vTRs[x].innerHTML.match(/Solar Array/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.sa',vLevel); } if (vTRs[x].innerHTML.match(/Nuclear Power Plant/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.npp',vLevel); } if (vTRs[x].innerHTML.match(/Shipyard/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.sy',vLevel); } if (vTRs[x].innerHTML.match(/Capitol/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.cap',vLevel); } if (vTRs[x].innerHTML.match(/Research Lab/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.lab',vLevel); } if (vTRs[x].innerHTML.match(/Missile Silo/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.silo',vLevel); } if (vTRs[x].innerHTML.match(/Factory/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.factory',vLevel); } if (vTRs[x].innerHTML.match(/Ore Warehouse/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } vCapacity=(50000*(Math.ceil(Math.pow(1.6,parseInt(vLevel)))+1)); vHoursToFill=vCapacity/(parseFloat(localStorage.getItem(vPlanetString+'.oprod'))); vHoursToFillCurrent=0; vCurrentToCapacity=vCapacity-vOreAmt; if(vCurrentToCapacity>0) { vHoursToFillCurrent=vCurrentToCapacity/(parseFloat(localStorage.getItem(vPlanetString+'.oprod'))); } GetClassItem(vTRs[x],'div','stats').getElementsByClassName('table')[0].innerHTML+='<br />Empty to full: '+fHoursToTime(vHoursToFill); GetClassItem(vTRs[x],'div','stats').getElementsByClassName('table')[0].innerHTML+='<br />Page load to full: '+fHoursToTime(vHoursToFillCurrent); if(vStardrift){GetClassItem(vTRs[x],'div','row time cost').style.height='32px';} localStorage.setItem(vPlanetString+'.orewh',vLevel); } if (vTRs[x].innerHTML.match(/Crystal Warehouse/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } vCapacity=(50000*(Math.ceil(Math.pow(1.6,parseInt(vLevel)))+1)); vHoursToFill=vCapacity/(parseFloat(localStorage.getItem(vPlanetString+'.cprod'))); vHoursToFillCurrent=0; vCurrentToCapacity=vCapacity-vCryAmt; if(vCurrentToCapacity>0) { vHoursToFillCurrent=vCurrentToCapacity/(parseFloat(localStorage.getItem(vPlanetString+'.cprod'))); } GetClassItem(vTRs[x],'div','stats').getElementsByClassName('table')[0].innerHTML+='<br />Empty to full: '+fHoursToTime(vHoursToFill); GetClassItem(vTRs[x],'div','stats').getElementsByClassName('table')[0].innerHTML+='<br />Page load to full: '+fHoursToTime(vHoursToFillCurrent); if(vStardrift){GetClassItem(vTRs[x],'div','row time cost').style.height='32px';} localStorage.setItem(vPlanetString+'.crywh',vLevel); } if (vTRs[x].innerHTML.match(/Hydrogen Storage/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } vCapacity=(50000*(Math.ceil(Math.pow(1.6,parseInt(vLevel)))+1)); vHoursToFill=vCapacity/(parseFloat(localStorage.getItem(vPlanetString+'.hprod'))); vHoursToFillCurrent=0; vCurrentToCapacity=vCapacity-vHydAmt; if(vCurrentToCapacity>0) { vHoursToFillCurrent=vCurrentToCapacity/(parseFloat(localStorage.getItem(vPlanetString+'.hprod'))); } GetClassItem(vTRs[x],'div','stats').getElementsByClassName('table')[0].innerHTML+='<br />Empty to full: '+fHoursToTime(vHoursToFill); GetClassItem(vTRs[x],'div','stats').getElementsByClassName('table')[0].innerHTML+='<br />Page load to full: '+fHoursToTime(vHoursToFillCurrent); if(vStardrift){GetClassItem(vTRs[x],'div','row time cost').style.height='32px';} localStorage.setItem(vPlanetString+'.hydwh',vLevel); } if (vTRs[x].innerHTML.match(/Foundry/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.foundry',vLevel); } if (vTRs[x].innerHTML.match(/Resource Den/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.rden',vLevel); } } } } function fGetMoonBuildingLevels(vMoonID) { var vPlanetString=vPrefix+'.moon.'+vMoonID; var vFieldBlock=GetClassItem(document.getElementById('fields'),'div','section_content'); localStorage.setItem(vPlanetString+'.fields',vFieldBlock.getElementsByTagName('span')[1].innerHTML); localStorage.setItem(vPlanetString+'.fieldsused',vFieldBlock.getElementsByTagName('span')[0].innerHTML); var vLevel; var vTRs=document.getElementById('locations_table').getElementsByTagName('div'); for (x=0;x<vTRs.length;x++) { if (/^row location/i.test(vTRs[x].getAttribute('class'))) { vLevel='0' if (vTRs[x].innerHTML.match(/Shipyard/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.sy',vLevel); } if (vTRs[x].innerHTML.match(/Capitol/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.cap',vLevel); } if (vTRs[x].innerHTML.match(/Lunar Base/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.lunar',vLevel); } if (vTRs[x].innerHTML.match(/Oracle/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.oracle',vLevel); } if (vTRs[x].innerHTML.match(/Warp Gate/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.warpg',vLevel); } if (vTRs[x].innerHTML.match(/Lunar Dock/im)!=null) { if (GetClassItem(vTRs[x],'span','amount')!=null) { vLevel=GetClassItem(vTRs[x],'span','amount').innerHTML.match(/[\d,]+/m)[0]; } localStorage.setItem(vPlanetString+'.ldock',vLevel); } } } } //stats page functions function fDisplayStatsInfo() { fSelectStatsOption(); var vSpacer=GetClassItem(document,'div','spacer'); if(vSpacer!=null) {vSpacer.parentNode.removeChild(vSpacer); } GetLastClassItem(document,'div','footer').innerHTML+=' | <a href="http://eljercode.com/StatScript.user.js">Update Stat Script</a>'; var vPlanetList=localStorage.getItem(vPrefix+'.planet.list'); var vPlanetArray=(vPlanetList==null)?new Array:vPlanetList.split(','); var vPlayerName=localStorage.getItem(vPrefix+'.player'); var vRank=addCommas(localStorage.getItem(vPrefix+'.rank')); var vPoints=addCommas(localStorage.getItem(vPrefix+'.points')); var vAlliance=localStorage.getItem(vPrefix+'.alliance'); var vOreHour=0; var vCryHour=0; var vHydHour=0; for(i=0;i<vPlanetArray.length;i++) { vOreHour+=parseInt(nullZero(localStorage.getItem(vPrefix+'.planet.'+vPlanetArray[i]+'.oprod'))); vCryHour+=parseInt(nullZero(localStorage.getItem(vPrefix+'.planet.'+vPlanetArray[i]+'.cprod'))); vHydHour+=parseInt(nullZero(localStorage.getItem(vPrefix+'.planet.'+vPlanetArray[i]+'.hprod'))); } var vHourlyOre=addCommas(vOreHour.toString()); var vHourlyCry=addCommas(vCryHour.toString()); var vHourlyHyd=addCommas(vHydHour.toString()); var vDailyOre=addCommas((vOreHour*24).toString()); var vDailyCry=addCommas((vCryHour*24).toString()); var vDailyHyd=addCommas((vHydHour*24).toString()); var vNormalizedTotalValue=vOreHour*24+Math.ceil(vCryHour*24*5/3)+Math.ceil(vHydHour*24*2.5,0); var vNormalizedTotal=addCommas(vNormalizedTotalValue.toString()); var vInnerHTML='<div class="title"><div class="text">Overall stats</div><div class="description">for '+vPlayerName+'.</div><div class="clear"></div></div>'; vInnerHTML+='<div class="profile"><h4>Overview:</h4>'; vInnerHTML+='Alliance: '+nullZero(vAlliance)+'<br />'; vInnerHTML+='Rank: <span id="rankget">'+nullZero(vRank)+'</span><br />'; vInnerHTML+='Points: <span id="pointsget">'+nullZero(vPoints)+'</span><br />'; vInnerHTML+='Hourly Ore: '+nullZero(vHourlyOre)+'<br />'; vInnerHTML+='Hourly Crystal: '+nullZero(vHourlyCry)+'<br />'; vInnerHTML+='Hourly Hydro: '+nullZero(vHourlyHyd)+'<br />'; vInnerHTML+='Daily Ore: '+nullZero(vDailyOre)+'<br />'; vInnerHTML+='Daily Crystal: '+nullZero(vDailyCry)+'<br />'; vInnerHTML+='Daily Hydro: '+nullZero(vDailyHyd)+'<br />'; vInnerHTML+='Daily converted total: '+nullZero(vNormalizedTotal)+'<br /><br />'; vInnerHTML+='<h4>How to use:</h4>'; vInnerHTML+='<ul><li>1. Go to Buildings page.</li>'; vInnerHTML+='<li>2. Click through all your planets and moons, look for "Production Stored." on Buildings header line.</li>'; vInnerHTML+='<li>3. Repeat for the Home page of each planet and moon.</li>'; vInnerHTML+='<li>4. Click leaderboard.</li>'; vInnerHTML+='<li>5. Click Research (on a planet with a lab).</li>'; vInnerHTML+='<li>6. Click stats. All values should now be filled.</li>'; vInnerHTML+='<li>NOTE: If shipyard Build Time Remaining timer is incorrect, please revisit Buildings page for that planet.</li>'; vInnerHTML+='</ul><br /><br />'; vInnerHTML+='<a href="javascript:void(0);" id="vClearData">Clear stored data</a>'; vInnerHTML+='</div><div class="right_column"><div class="overview" id="overview">'; vInnerHTML+='<div align="center" id="playerbbsummary"><h4><u>BBcode Signature</u></h4>'; vInnerHTML+='<textarea rows="5" cols="30" onClick=select() readonly>'; vInnerHTML+='Rank: [b]'+nullZero(vRank)+'[/b]\n'; vInnerHTML+='Points: [b]'+nullZero(vPoints)+'[/b]\n'; vInnerHTML+='Daily Mining Income: [b]'+nullZero(vNormalizedTotal)+'[/b]\n'; vInnerHTML+='Alliance: [b]'+nullZero(vAlliance)+'[/b]\n'; vInnerHTML+='on '+location.host+'</textarea></div><br /><br />'; //show production table vInnerHTML+=fShowProductionTable(vPlanetArray); //toggle extended info vInnerHTML+='<div align="center" id="extendedlink"><a href="#" onClick="if(document.getElementById("ExtendedInfo").style.display==""){document.getElementById("ExtendedInfo").style.display="none";}else{document.getElementById("ExtendedInfo").style.display="";};return false">See Extended Info</a></div></div><div>'; vInnerHTML+='<div id="ExtendedInfo" style="display:none">'; vInnerHTML+='<div id="totaltechdiv" align="center">'; vInnerHTML+='<table width="100%" id="totaltechtable" align="center">'; vInnerHTML+='<caption><br /></caption>'; vInnerHTML+='<tr>'; vInnerHTML+='<td style="border-width:1px;" align="center">'; //show tech table vInnerHTML+=fShowTechTable(); vInnerHTML+='</td><td style="border-width:1px;" align="center">'; //show lab audit vInnerHTML+=fShowLabLevelAuditTable(vPlanetArray); vInnerHTML+='</td>'; vInnerHTML+='</tr>'; vInnerHTML+='</table>'; vInnerHTML+='</div>'; //show building level table vInnerHTML+=fShowBuildingLevelTable(vPlanetArray); //show moon buildings vInnerHTML+=fShowMoonBuildingTable(); //close out extended div, content div, add to page vInnerHTML+='</div></div>'; document.getElementById('content').innerHTML=vInnerHTML; document.getElementById('content').setAttribute('class','profile index'); document.getElementById('vClearData').addEventListener("click",fClearExistingData,true); } function fShowLabLevelAuditTable(vPlanetArray) { var vReturnText, i, vArcNet, vLabArray, vIdx, vPlanetString, vLabCount, vEffectiveLab, vTempArr, vD; vLabCount=0; vArcNet=nullZero(localStorage.getItem(vPrefix+'.research.Advanced Research Communication Network')); if(vArcNet=="0"){ vArcNet=nullZero(localStorage.getItem(vPrefix+'.research.ARC Net')); } vLabCount=parseInt(vArcNet); vLabCount++; vLabArray=new Array(); vReturnText=''; vIdx=0; vD='.|$|.'; for(i=0;i<vPlanetArray.length;i++) { vPlanetString=vPrefix+'.planet.'+vPlanetArray[i]; if(nullZero(localStorage.getItem(vPlanetString+'.lab'))!='0') { vLabArray[vIdx]=Pad2Digits(parseInt(nullZero(localStorage.getItem(vPlanetString+'.lab'))))+vD+nullZero(localStorage.getItem(vPlanetString+'.name'))+vD+nullZero(localStorage.getItem(vPlanetString+'.coords')); vIdx++; } } vEffectiveLab=0; if(vIdx>0) { vLabArray.sort(); vLabArray.reverse(); for(i=0;i<vIdx;i++) { if(i<vLabCount) { vEffectiveLab+=parseInt(vLabArray[i].split(vD)[0].replace(/^0/,'')); } } vReturnText+='<div align="center" id="lableveltable"><table align=center border=1 cellpadding=2 cellspacing=1>'; vReturnText+='<caption><B>Research Labs</B><br />'; vReturnText+='ARCNet Level: '+vArcNet+'<br />'; vReturnText+='Effective Lab Level: '+vEffectiveLab; vReturnText+='</caption>'; vReturnText+='<thead>'; vReturnText+='<tr><th>Planet </th><th>Coords </th><th>Lab </th></tr>'; vReturnText+='</thead><tbody>\n'; for(i=0;i<vIdx;i++) { if(i<vLabCount) { vTempArr=vLabArray[i].split(vD); vReturnText+='<tr>'; vReturnText+='<td style="border-width:1px;">'+vTempArr[1]+'</td>'; vReturnText+='<td style="border-width:1px;">'+vTempArr[2]+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+vTempArr[0]+'</td>'; vReturnText+='</tr>'; } } vReturnText+='</tbody></table></div><br /><br />'; } return(vReturnText); } function fShowProductionTable(vPlanetArray) { var vReturnText, i; vReturnText='<div align="center" id="prodtable"><table align=center border=1 cellpadding=2 cellspacing=1>'; vReturnText+='<caption><B>Production</B></caption>'; vReturnText+='<thead>'; vReturnText+='<tr><th>Planet</th><th>Coords</th><th>Ore Prod</th><th>Crys Prod</th><th>Hydro Prod</th></tr>'; vReturnText+='</thead><tbody>\n'; for(i=0;i<vPlanetArray.length;i++) { vReturnText+='<tr>'; vReturnText+='<td style="border-width:1px;">'+nullZero(localStorage.getItem(vPrefix+'.planet.'+vPlanetArray[i]+'.name'))+'</td>'; vReturnText+='<td style="border-width:1px;">'+nullZero(localStorage.getItem(vPrefix+'.planet.'+vPlanetArray[i]+'.coords'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+addCommas(nullZero(localStorage.getItem(vPrefix+'.planet.'+vPlanetArray[i]+'.oprod')))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+addCommas(nullZero(localStorage.getItem(vPrefix+'.planet.'+vPlanetArray[i]+'.cprod')))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+addCommas(nullZero(localStorage.getItem(vPrefix+'.planet.'+vPlanetArray[i]+'.hprod')))+'</td>'; vReturnText+='</tr>'; } vReturnText+='</tbody></table></div><br /><br /></div></div>'; return(vReturnText); } function fShowTechTable() { var vReturnText, i; var vTechName=''; var vTechLevel=''; vReturnText='<br /><div align="center" id="techtable"><table align=center border=1 cellpadding=2 cellspacing=1>'; vReturnText+='<caption><B>Technology</B></caption>'; vReturnText+='<thead>'; vReturnText+='<tr><th>Tech name </th><th>Tech level</th></tr>'; vReturnText+='</thead><tbody>\n'; var vKeyArray=["Laser Tech","Armor Tech","Weapons Tech","Shield Tech","Particle Tech","Jet Drive","A.I. Tech","Energy Tech","Espionage Tech","Pulse Drive","Plasma Tech","FTL Tech","Expedition Tech","Warp Drive","Advanced Research Communication Network"]; var vTech=''; for (i=0;i<vKeyArray.length;i++) { if(vKeyArray[i]=="Advanced Research Communication Network"){ if(nullZero(localStorage.getItem(vPrefix+'.research.'+vKeyArray[i]))=="0"){ vReturnText+='<tr><td style="border-width:1px;">ARCNet</td><td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPrefix+'.research.ARC Net'))+'</td></tr>'; } else { vReturnText+='<tr><td style="border-width:1px;">ARCNet</td><td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPrefix+'.research.'+vKeyArray[i]))+'</td></tr>'; } } else { vReturnText+='<tr><td style="border-width:1px;">'+vKeyArray[i]+'</td><td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPrefix+'.research.'+vKeyArray[i]))+'</td></tr>'; } } vReturnText+='</tbody></table></div><br /><br />'; return(vReturnText); } function fShowMoonBuildingTable() { var vReturnText, i; vReturnText=''; var vMoonList=localStorage.getItem(vPrefix+'.moon.list'); if(vMoonList!=null) { vReturnText+='<div align="center" id="moontable"><table align=center border=1 cellpadding=2 cellspacing=1>'; vReturnText+='<caption><B>Moon Buildings</B></caption>'; vReturnText+='<thead>'; vReturnText+='<tr><th>Name </th><th>Coords </th><th>Shipyard </th><th>Capitol </th><th>Lunar Base </th><th>Oracle </th><th>Warp Gate </th><th>Dock</th><th>Fields</th></tr>'; vReturnText+='</thead><tbody>\n'; var vMoonString=''; var vMoonArray=vMoonList.split(','); for (i=0;i<vMoonArray.length;i++) { vMoonString=vPrefix+'.moon.'+vMoonArray[i]; vReturnText+='<tr>'; vReturnText+='<td style="border-width:1px;">'+nullZero(localStorage.getItem(vMoonString+'.name')).replace(/ /g,' ')+'</td>'; vReturnText+='<td style="border-width:1px;">'+nullZero(localStorage.getItem(vMoonString+'.coords'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vMoonString+'.sy'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vMoonString+'.cap'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vMoonString+'.lunar'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vMoonString+'.oracle'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vMoonString+'.warpg'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vMoonString+'.ldock'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vMoonString+'.fieldsused'))+' of '+nullZero(localStorage.getItem(vMoonString+'.fields'))+'</td>'; vReturnText+='</tr>'; } vReturnText+='</tbody></table></div><br /><br />'; } return(vReturnText); } function fShowBuildingLevelTable(vPlanetArray) { var vReturnText, i; vReturnText='<div align="center" id="planettable"><table align=center border=1 cellpadding=2 cellspacing=1>'; vReturnText+='<caption><B>Planetary Buildings</B></caption>'; vReturnText+='<thead>'; vReturnText+='<tr><th colspan="2"></th><th colspan="3">Mines</th><th colspan="2">Power</th><th colspan="5"></th><th colspan="3">Warehouses</th><th colspan="2"></th><th colspan="2">Fields</th><th></th><th></th></tr>'; vReturnText+='<tr><th>Planet </th><th>Coords </th><th>Ore </th><th>Crys </th><th>Hydro </th><th>SA </th><th>NPP </th><th>SY </th><th>Cap </th><th>Lab </th><th>Silo </th><th>Fctry </th><th>Ore </th><th>Cry </th><th>Hyd </th><th>Fndry</th><th>Den</th><th>Used</th><th>Left</th><th>Energy</th><th>MaxTemp</th></tr>'; vReturnText+='</thead><tbody>\n'; var vPlanetString=''; for(i=0;i<vPlanetArray.length;i++) { vPlanetString=vPrefix+'.planet.'+vPlanetArray[i]; vReturnText+='<tr>'; vReturnText+='<td style="border-width:1px;">'+nullZero(localStorage.getItem(vPlanetString+'.name')).replace(/ /g,' ')+'</td>'; vReturnText+='<td style="border-width:1px;">'+nullZero(localStorage.getItem(vPlanetString+'.coords'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.omine'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.cmine'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.hmine'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.sa'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.npp'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.sy'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.cap'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.lab'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.silo'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.factory'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.orewh'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.crywh'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.hydwh'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.foundry'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.rden'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.fieldsused'))+' of '+nullZero(localStorage.getItem(vPlanetString+'.fields'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+(parseInt(nullZero(localStorage.getItem(vPlanetString+'.fields')))-parseInt(nullZero(localStorage.getItem(vPlanetString+'.fieldsused'))))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.energy'))+'</td>'; vReturnText+='<td style="border-width:1px;" align="right">'+nullZero(localStorage.getItem(vPlanetString+'.maxtemp'))+'°</td>'; vReturnText+='</tr>'; } vReturnText+='</tbody></table></div><br /><br />'; return(vReturnText);} function fGetUniID() { var vUniLetter=(new RegExp(/extreme\.com/i).test(document.location.href))?'x':'o'; var vUniNumber=document.location.href.replace(new RegExp(/^http\:\/\/|^https\:\/\/|^ftp\:\/\//i),"").replace(new RegExp(/\.?playstarfleet.*/),""); if(vUniNumber=='www'||vUniNumber=='') vUniNumber='uni1'; return(vUniNumber+vUniLetter);} function fClearExistingData() { //general localStorage.removeItem(vPrefix+'.player'); localStorage.removeItem(vPrefix+'.rank'); localStorage.removeItem(vPrefix+'.points'); localStorage.removeItem(vPrefix+'.alliance'); //techs var vTechKeys=["Weapons Tech","Armor Tech","Plasma Tech","Pulse Drive","Espionage Tech","Particle Tech","Advanced Research Communication Network","Laser Tech","Shield Tech","Jet Drive","Warp Drive","A.I. Tech","Energy Tech","Expedition Tech","FTL Tech","ARC Net"]; for(i=0;i<vTechKeys.length;i++){ localStorage.removeItem(vPrefix+'.research.'+vTechKeys[i]); } //moons var vMoonKeys=["name","coords","sy","cap","lunar","oracle","warpg","fields","fieldsused"]; var vMoonList=localStorage.getItem(vPrefix+'.moon.list'); var vItem=''; if(vMoonList!=null) { var vMoonArray=vMoonList.split(','); for(i=0;i<vMoonArray.length;i++) { for(j=0;j<vMoonKeys.length;j++) { vItem=vPrefix+'.moon.'+vMoonArray[i]+'.'+vMoonKeys[j]; localStorage.removeItem(vItem); } } } localStorage.removeItem(vPrefix+'.moon.list'); //planets var vPlanetKeys=["coords","name","oprod","cprod","hprod","omine","cmine","hmine","sa","npp","sy","cap","lab","silo","factory","orewh","crywh","hydwh","foundry","fields","fieldsused","energy","maxtemp"];; var vPlanetList=localStorage.getItem(vPrefix+'.planet.list'); if(vPlanetList!=null) { var vPlanetArray=(vPlanetList==null)?new Array:vPlanetList.split(','); for(i=0;i<vPlanetArray.length;i++) { for (j=0;j<vPlanetKeys.length;j++) { localStorage.removeItem(vPrefix+'.planet.'+vPlanetArray[i]+'.'+vPlanetKeys[j]); } } } localStorage.removeItem(vPrefix+'.planet.list'); if(document.getElementById('vClearData')!=null){ fDisplayStatsInfo(); }} //run from all pages function fGetCurrentPlanet() { var vLegalese=GetClassItem(document,'div','legalese'); if(vLegalese==null) console.log(document.innerHTML); return(vLegalese.innerHTML.match(/current_planet=(\d+)/)[1]); } function fAddStatsLink() { var vPrimaryNav=GetClassItem(document.getElementById('nav_bar'),'div','primary'); //vPrimaryNav.innerHTML=vPrimaryNav.innerHTML.replace(/>Fleets</,'>Fleet<').replace(/>Leaders</,'>Leader<').replace(/>Gifts</,'>Gift<'); var vStatNav=document.createElement('span'); vStatNav.setAttribute('class','nav_item'); var vLink=document.createElement('a'); vLink.setAttribute('id','vStatsLink'); vLink.setAttribute('href','javascript:void(0);'); vLink.innerHTML='Stat'; vStatNav.appendChild(vLink) GetClassItemRX(document,'div',/sub_nav/).insertBefore(vStatNav,GetClassItemRX(document,'div',/filler/)); if(vStardrift){ addNewStyle('#nav_bar .sub_nav .nav_item a {padding: 2px 15px 2px 15px;}'); addNewStyle('#nav_bar .sub_nav {padding-top: 15px;}'); } else { addNewStyle('#header .sub_nav .nav_item {padding: 10px 3px;}'); } // } else { // vPrimaryNav.appendChild(vStatNav); // } document.getElementById('vStatsLink').addEventListener("click",fDisplayStatsInfo,true);} function fSelectStatsOption() { var vNavAs=document.getElementById('nav_bar').parentNode.getElementsByTagName('a'); for(i=0;i<vNavAs.length;i++) { if(vNavAs[i].getAttribute('class')=='selected') { vNavAs[i].removeAttribute('class'); } } document.getElementById('vStatsLink').setAttribute('class','selected'); } function fUpdatePlanetInfo() { var vCurrentPlanets=fGetCurrentPlanets(); var vExistingData=fGetExistingData(); fCompareCurrentWithExisting(vCurrentPlanets,vExistingData); } function fGetCurrentPlanets() { var vUserPlanets=document.getElementById('user_planets'); var vUserPlanetDivs=vUserPlanets.getElementsByTagName('div'); var vPlanet, vPlanetId, vPlanetName, vPlanetCoords, vPlanetArray, vPlanets; var vA; var vMoon; var vMoonList=''; var vMoonId=''; var vMoonRef; vPlanets=new Array(); var vPlanetIdx=0; var vHasMoon=false; for(i=0;i<vUserPlanetDivs.length;i++) { vPlanet=vUserPlanetDivs[i]; if(vPlanet.getAttribute('class')=='planet') { if(vPlanet.getElementsByTagName('img')[0].getAttribute('alt')!='Roaming_planet') { // vA=vPlanet.getElementsByTagName('a'); // for(j=0;j<vA.length;j++){ // if(vA[j].getElementsByTagName('div').length>1){ if(/colonize_tip=true/.test(vPlanet.innerHTML)==false) { if(GetClassItemRX(vPlanet,'div',/^moon/i)!=null) { vMoon=GetClassItemRX(vPlanet,'div',/^moon/i); vPlanetId=vMoon.innerHTML.match(/activate_planet=(\d+)/)[1]; vPlanetName=GetClassItem(vMoon,'div','planet_name').innerHTML; vPlanetCoords=GetClassItem(vMoon,'div','planet_coordinates').innerHTML.match(/\d{1,2}:\d{1,3}:\d{1,2}m?/m)[0]; localStorage.setItem(vPrefix+'.moon.'+vPlanetId+'.name',vPlanetName); localStorage.setItem(vPrefix+'.moon.'+vPlanetId+'.coords',vPlanetCoords); vMoonList=(vMoonList.length==0) ? vPlanetId : vMoonList+','+vPlanetId; vA=vPlanet.cloneNode(true); vA.removeChild(GetClassItemRX(vA,'div',/^moon/i)); vPlanetId=vA.innerHTML.match(/activate_planet=(\d+)/)[1]; vPlanetName=GetClassItem(vA,'div','planet_name').innerHTML; vPlanetCoords=GetClassItem(vA,'div','planet_coordinates').innerHTML.match(/\d{1,2}:\d{1,3}:\d{1,2}m?/m)[0]; } else { vPlanetId=vPlanet.innerHTML.match(/activate_planet=(\d+)/)[1]; vPlanetName=GetClassItem(vPlanet,'div','planet_name').innerHTML; vPlanetCoords=GetClassItem(vPlanet,'div','planet_coordinates').innerHTML.match(/\d{1,2}:\d{1,3}:\d{1,2}m?/m)[0]; } localStorage.setItem(vPrefix+'.planet.'+vPlanetId+'.name',vPlanetName); localStorage.setItem(vPrefix+'.planet.'+vPlanetId+'.coords',vPlanetCoords); vPlanetArray=[vPlanetId,vPlanetName,vPlanetCoords]; vPlanets[vPlanetIdx]=vPlanetArray; vPlanetIdx++; } // } // } } } } localStorage.setItem(vPrefix+'.moon.list',vMoonList); return(vPlanets);} function fGetExistingData() { var vPlanets=null; var vPlanetCount=localStorage.getItem(vPrefix+'.planet.count'); var vPlanetId, vPlanetName, vPlanetCoords, vPlanetArray; if(vPlanetCount!=null) { vPlanets=new Array(); var vPlanetIDs=(localStorage.getItem(vPrefix+'.planet.list')!=null)?localStorage.getItem(vPrefix+'.planet.list').split(','):new Array(); for(i=0;i<vPlanetIDs.length;i++) { vPlanetID=vPlanetIDs[i]; vPlanetName=localStorage.getItem(vPrefix+'.planet.'+vPlanetID+'.name'); vPlanetCoords=localStorage.getItem(vPrefix+'.planet.'+vPlanetID+'.coords'); vPlanetArray=new Array(vPlanetID,vPlanetName,vPlanetCoords); vPlanets[i]=vPlanetArray; } } return(vPlanets);} function fCompareCurrentWithExisting(vCurrentPlanets,vExistingData) { //if no existing data (new install), fill with current if(vExistingData==null) { for(j=0;j<vCurrentPlanets.length;j++) { fAddAPlanet(vCurrentPlanets[j][0],vCurrentPlanets[j][1],vCurrentPlanets[j][2]); } } else { //remove outdated planets var vPlanetExists; for(i=0;i<vExistingData.length;i++) { vPlanetExists=false; for(j=0;j<vCurrentPlanets.length;j++) { if(vExistingData[i][0]==vCurrentPlanets[j][0]) { vPlanetExists=true; if(vExistingData[i][1]!=vCurrentPlanets[j][1]) { vExistingData[i][1]=vCurrentPlanets[j][1]; localStorage.setItem(vPrefix+'.planet.'+vExistingData[i][0]+'.name',vCurrentPlanets[j][1]); } break; } } if(!vPlanetExists) fRemoveAPlanet(vExistingData[i][0]); } //add non-existent planets for(j=0;j<vCurrentPlanets.length;j++) { vPlanetExists=false; for(i=0;i<vExistingData.length;i++) { if(vCurrentPlanets[j][0]==vExistingData[i][0]) { vPlanetExists=true; break; } } if(!vPlanetExists) { fAddAPlanet(vCurrentPlanets[j][0],vCurrentPlanets[j][1],vCurrentPlanets[j][2]); } } } //change .planet.count and .planet.list to current localStorage.setItem(vPrefix+'.planet.count',vCurrentPlanets.length+1); var vPlanetList=new Array(); for(j=0;j<vCurrentPlanets.length;j++) { vPlanetList[j]=vCurrentPlanets[j][0]; } localStorage.setItem(vPrefix+'.planet.list',vPlanetList.join(','));} function fAddAPlanet(vPlanetNum,vPlanetName,vPlanetCoords) { var vPlanetString=vPrefix+'.planet.'+vPlanetNum; localStorage.setItem(vPlanetString+'.name',vPlanetName); localStorage.setItem(vPlanetString+'.coords',vPlanetCoords);} function fRemoveAPlanet(vPlanetID) { var vKeyArray=["coords","name","oprod","cprod","hprod","omine","cmine","hmine","sa","npp","sy","cap","lab","silo","factory","orewh","crywh","hydwh","foundry"]; for (i=0;i<vKeyArray.length;i++) { localStorage.removeItem(vPrefix+'.planet.'+vPlanetID+'.'+vKeyArray[i]); }} //research functions function fGetResearchData() { if(document.getElementById('locations_table')==null) { return; } var vTechRows=document.getElementById('locations_table').getElementsByTagName('div'); for (i=0;i<vTechRows.length;i++) { if(/^row location/i.test(vTechRows[i].getAttribute('class'))){ vDetails=GetClassItem(vTechRows[i],'div','data details'); vTechName=GetClassItem(vDetails,'div','name').innerHTML.replace(/^\s+|\s+$/g,''); if(GetClassItem(vDetails,'span','amount')==null){ vTechLevel=0; } else { vTechLevel=GetClassItem(vDetails,'span','amount').innerHTML.replace(/^\s+|\s+$/g,''); } localStorage.setItem(vPrefix+'.research.'+vTechName,vTechLevel); } } document.getElementById('sticky_notices').innerHTML+=' Research Stored.';} //leaderboard functions function fGetLeaderboardData() { var vSelfRank=GetClassItemRX(document,'tr',/entity current.*/i); localStorage.setItem(vPrefix+'.player',GetClassItem(vSelfRank,'td','name').innerHTML.replace(/^\s+|\s+$/g, "")); var vAlliance=GetClassItem(vSelfRank,'td','tag').getElementsByTagName('a')[0]; var vAllianceName=(vAlliance==null)?'':vAlliance.innerHTML.replace(/^\s+|\s+$/g, ""); localStorage.setItem(vPrefix+'.alliance',vAllianceName); localStorage.setItem(vPrefix+'.rank',GetClassItem(vSelfRank,'td','rank').innerHTML.replace(/^\s+|\s+$|,/g, "")); localStorage.setItem(vPrefix+'.points',GetClassItem(vSelfRank,'td','points').innerHTML.replace(/^\s+|\s+$|,/g, "")); document.getElementById('sticky_notices').innerHTML+=' Leaderboard data stored.';} //shipyard functions function fAddShipyardCompletionTimer() { if(document.getElementById('locations_table')==null) { return; } var vIsMoon=GetClassItem(document.getElementById('user_planets'),'div','moon selected')!=null; var vShipyard=nullZero(localStorage.getItem(vPrefix+'.'+((vIsMoon)?'moon':'planet')+'.'+vCurrentPlanet+'.sy')); var vFoundry=nullZero(localStorage.getItem(vPrefix+'.'+((vIsMoon)?'moon':'planet')+'.'+vCurrentPlanet+'.foundry')); if(GetClassItem(document.getElementById('builders'),'span','highlight percent')==null) { var vSYWorkers=0; } else { var vSYWorkers=GetClassItem(document.getElementById('builders'),'span','highlight percent').innerHTML.replace(/\%/,'').replace(/^\s+|\s+$|,/g, ""); } //temporary var VAR1=document.getElementById('locations_table'); var VAR2=VAR1.getElementsByTagName('div'); for(Q=0;Q<VAR2.length;Q++){ if (/ (ship|defense)_template item/.test(VAR2[Q].getAttribute('class'))) { var VAR3=GetShipIndex(VAR2[Q].getElementsByClassName('image')[0].getElementsByTagName('img')[0].getAttribute('alt'))+1; var VAR4=OreCost(VAR3)+CrysCost(VAR3); var VAR5=((/extreme|x4/i.test(document.location.href))? 2 : 1)*((/nova/i.test(document.location.href))?1.3333333333:1)*((/tournament|conquest|uni3/i.test(document.location.href))?8/3:1); var VAR6=(VAR4/((2500*(1+parseFloat(vShipyard)))*Math.pow(2,parseFloat(vFoundry))))*(1-(parseFloat(vSYWorkers)/100))/VAR5; var VAR7=fHoursToMilliTime(VAR6); var VAR9=VAR2[Q].getElementsByClassName('cost_table')[0]; VAR9.getElementsByTagName('div')[0].innerHTML+='<div class="row time cost"><div class="data amount" colspan=2>'+VAR7+'</div></div>'; } } if(document.getElementById('build_queue').innerHTML.length>0) { if(document.getElementById('pending_items')) { var vPending=document.getElementById('pending_items').getElementsByTagName('div'); var vIdx, vCost, vQty, vCostTotal, vShipAlt; vCostTotal=0; for(i=0;i<vPending.length;i++) { vShipAlt=vPending[i].getElementsByTagName('img')[0].getAttribute('alt'); vIdx=GetShipIndex(vPending[i].getElementsByTagName('img')[0].getAttribute('alt'))+1; vQty=parseInt(vPending[i].innerHTML.replace(/^\s+|\s+$|,|x|\<[^>]*?\>/g, "")); vCost=vQty*(OreCost(vIdx)+CrysCost(vIdx)); vCostTotal+=vCost;} var vUniMultiplier=((/extreme|x4/i.test(document.location.href))? 2 :1 )*((/nova/i.test(document.location.href))?1.3333333333:1)*((/tournament|conquest|uni3/i.test(document.location.href))?8/3:1); var vHoursLeft=(vCostTotal/((2500*(1+parseFloat(vShipyard)))*Math.pow(2,parseFloat(vFoundry))))*(1-(parseFloat(vSYWorkers)/100))/vUniMultiplier; //figure out how long is left on current build var vCountdown, vCurrentBuild, vCurrentLeft; if(GetClassItem(document.getElementById('build_queue'),'div','timer_text').innerHTML.replace(/^\s+|\s+$/g, "")!="updating...") { vCountdown=GetClassItem(document.getElementById('build_queue'),'span','countdown').innerHTML.replace(/^\s+|\s+$|\<[^>]*?\>/g, ""); vCurrentBuild=vCountdown.split(':'); vCurrentLeft=0; if(parseInt(vCurrentBuild[0])<0) { } else { vCurrentLeft=parseFloat(vCurrentBuild[0])+(parseFloat(vCurrentBuild[1])/60)+(parseFloat(vCurrentBuild[2])/3600); } vHoursLeft+=vCurrentLeft;} //convert remaining time to readable number var vTimeLeft=fHoursToTime(vHoursLeft); document.getElementById('sticky_notices').innerHTML+=' <br /><span style="color: rgb(10, 255, 10);" title="If the Build Time Remaining is inaccurate, please visit the Buildings page for this planet to retrieve updated building levels.">Build Time Remaining (at page load): '+vTimeLeft+((vIsMoon==false&&(vFoundry=='0'||vShipyard=='0'))?' PLEASE VISIT BUILDINGS PAGE.':'')+'</span>'; }}} function GetShipIndex(ShipName) { var vNormalShipName=ShipName.toLowerCase().substring(((ShipName.substring(0,5).toLowerCase()=='icon_')?5:0)); switch (vNormalShipName) { case 'hermes_class_probe': return 0; break; case 'hermes_probe': return 0; break; case 'hermes_class': return 0; break; case 'helios_class_solar_satellite': return 1; break; case 'helios_solar_satellite': return 1; break; case 'solar_satellite': return 1; break; case 'artemis_class_fighter': return 2; break; case 'artemis_fighter': return 2; break; case 'artemis_class': return 2; break; case 'atlas_class_cargo': return 3; break; case 'atlas_cargo': return 3; break; case 'atlas_class': return 3; break; case 'apollo_class_fighter': return 4; break; case 'apollo_fighter': return 4; break; case 'apollo_class': return 4; break; case 'charon_class_transport': return 5; break; case 'charon_transport': return 5; break; case 'charon_class': return 5; break; case 'hercules_class_cargo': return 6; break; case 'hercules_cargo': return 6; break; case 'hercules_class': return 6; break; case 'dionysus_class_recycler': return 7; break; case 'dionysus_recycler': return 7; break; case 'dionysus_class': return 7; break; case 'poseidon_class_cruiser': return 8; break; case 'poseidon_cruiser': return 8; break; case 'poseidon_class': return 8; break; case 'gaia_class_colony_ship': return 9; break; case 'gaia_colony_ship': return 9; break; case 'gaia_class': return 9; break; case 'athena_class_battleship': return 10; break; case 'athena_battleship': return 10; break; case 'athena_class': return 10; break; case 'ares_class_bomber': return 11; break; case 'ares_bomber': return 11; break; case 'ares_class': return 11; break; case 'hades_class_battleship': return 12; break; case 'hades_battleship': return 12; break; case 'hades_class': return 12; break; case 'prometheus_class_destroyer': return 13; break; case 'prometheus_destroyer': return 13; break; case 'prometheus_class': return 13; break; case 'zeus_class': return 14; break; case 'zeus': return 14; break; case 'hephaestus_class_attack_platform': return 15; break; case 'titan_attack_platform': return 15; break; case 'roaming_planet': return 15; break; case 'missile_battery': return 16; break; case 'missile_turret': return 16; break; case 'laser_cannon': return 17; break; case 'laser_turret': return 17; break; case 'pulse_cannon': return 18; break; case 'particle_cannon': return 19; break; case 'anti-ballistic_missile': return 20; break; case 'antiballistic_missile': return 20; break; case 'decoy': return 21; break; case 'interplanetary_ballistic_missile': return 22; break; case 'interplanetary_missile': return 22; break; case 'gauss_cannon': return 23; break; case 'large_decoy': return 24; break; case 'plasma_cannon': return 25; break; case 'plasma_turret': return 25; break; case 'zagreus_class_recycler': return 26; break; case 'zagreus_class': return 26; break; case 'empusa_class_fighter': return 27; break; case 'empusa_class': return 27; break; case 'curetes_class_cruiser': return 28; break; case 'curetes_class': return 28; break; case 'carmanor_class_cargo': return 29; break; case 'carmanor_class': return 29; break; case 'pallas_class_bomber': return 30; break; case 'pallas_class': return 30; break; case 'thanatos_class_destroyer': return 31; break; case 'thanatos_class': return 31; break; case 'space_mine': return 32; break; case 'erebus_class': return 33; break; case 'erebus_class_fighter': return 33; break; case 'moros_class': return 34; break; case 'moros_class_battleship': return 34; break; case 'triton_class_recycler': return 35; break; case 'triton_recycler': return 35; break; case 'triton_class': return 35; break; } } function GetShipName(ShipIndex) { switch (ShipIndex) { case 1: return 'Hermes'; break; case 2: return 'Helios'; break; case 3: return 'Artemis'; break; case 4: return 'Atlas'; break; case 5: return 'Apollo'; break; case 6: return 'Charon'; break; case 7: return 'Hercules'; break; case 8: return 'Dionysus'; break; case 9: return 'Poseidon'; break; case 10: return 'Gaia'; break; case 11: return 'Athena'; break; case 12: return 'Ares'; break; case 13: return 'Hades'; break; case 14: return 'Prometheus'; break; case 15: return 'Zeus'; break; case 16: return 'Hephaestus'; break; case 17: return 'Missile'; break; case 18: return 'Laser'; break; case 19: return 'Pulse'; break; case 20: return 'Particle'; break; case 21: return 'ABM'; break; case 22: return 'Decoy'; break; case 23: return 'IPBM'; break; case 24: return 'Gauss'; break; case 25: return 'Large decoy'; break; case 26: return 'Plasma'; break; case 27: return 'Zagreus'; break; case 28: return 'Empusa'; break; case 29: return 'Curetes'; break; case 30: return 'Carmanor'; break; case 31: return 'Pallas'; break; case 32: return 'Thanatos'; break; case 33: return 'Space Mine'; break; case 34: return 'Erebus'; break; case 35: return 'Moros'; break; case 36: return 'triton'; break; } } function OreCost(ShipIndex) { switch (ShipIndex) { case 1: return 0; break; //hermes case 2: return 0; break; //helios case 3: return 3000; break; //arty case 4: return 2000; break; //atlas case 5: return 6000; break; //apollo case 6: return 4000; break; //charon case 7: return 6000; break; //herc case 8: return 10000; break; //dion case 9: return 20000; break; //pos case 10: return 10000; break; //gaia case 11: return 45000; break; //athena case 12: return 50000; break; //ares case 13: return 30000; break; //hades case 14: return 60000; break; //prom case 15: return 5000000; break; //zeus case 16: return 20000000; break; //heph case 17: return 2000; break; //missile batt case 18: return 1500; break; //laser case 19: return 6000; break; //pulse case 20: return 2000; break; //particle case 21: return 8000; break; //ABM case 22: return 10000; break; //decoy case 23: return 12500; break; //IPBM case 24: return 20000; break; //gauss case 25: return 50000; break; //large decoy case 26: return 50000; break; //plasma case 27: return 5000; break; //Zagreus case 28: return 500; break; //Empusa case 29: return 2000; break; //Curetes case 30: return 18000; break; //Carmanor case 31: return 25000; break; //Pallas case 32: return 1750000; break; //Thanatos case 33: return 500; break; //Space Mine case 34: return 4000; break; //Erebus case 35: return 28000; break; //Moros case 35: return 30000; break; //Triton }} function CrysCost(ShipIndex) { switch (ShipIndex) { case 1: return 1000; break; //hermes case 2: return 2000; break; //helios case 3: return 1000; break; //arty case 4: return 2000; break; //atlas case 5: return 2500; break; //apollo case 6: return 4000; break; //charon case 7: return 6000; break; //herc case 8: return 6000; break; //dion case 9: return 7000; break; //pos case 10: return 20000; break; //gaia case 11: return 15000; break; //athena case 12: return 25000; break; //ares case 13: return 40000; break; //hades case 14: return 50000; break; //prom case 15: return 4000000; break; //zeus case 16: return 20000000; break; //heph case 17: return 0; break; //missile batt case 18: return 500; break; //laser case 19: return 2000; break; //pulse case 20: return 6000; break; //particle case 21: return 0; break; //ABM case 22: return 10000; break; //decoy case 23: return 2500; break; //IPBM case 24: return 15000; break; //gauss case 25: return 50000; break; //large decoy case 26: return 50000; break; //plasma case 27: return 3000; break; //Zagreus case 28: return 0; break; //Empusa case 29: return 2000; break; //Curetes case 30: return 18000; break; //Carmanor case 31: return 12500; break; //Pallas case 32: return 800000; break; //Thanatos case 33: return 0; break; //Space Mine case 34: return 2250; break; //Erebus case 35: return 17000; break; //Moros case 35: return 20000; break; //Triton }} //heph coords fix function fFixHephCoordsLink() { var vOrbitFrom=GetClassItem(GetClassItem(document.getElementById('content'),'div','label'),'span','name'); var vOrbitFromInfo=vOrbitFrom.innerHTML.match(/^\s*?(.*?)\[(\d{1,2}):(\d{1,3}):\d{1,2}m?\]/im); vOrbitFrom.innerHTML='<a href="/galaxy/show?galaxy='+vOrbitFromInfo[2]+'&solar_system='+vOrbitFromInfo[3]+'">'+vOrbitFromInfo[0]+'</a>'; var vOrbitTo=GetLastClassItem(GetClassItem(document.getElementById('content'),'div','label'),'span','name'); var vOrbitToInfo=vOrbitTo.innerHTML.match(/^\s*?(.*?)\[(\d{1,2}):(\d{1,3}):\d{1,2}m?\]/im); vOrbitTo.innerHTML='<a href="/galaxy/show?galaxy='+vOrbitToInfo[2]+'&solar_system='+vOrbitToInfo[3]+'">'+vOrbitToInfo[0]+'</a>'; } //store max temperature per planet function fGetMaxTemp() { var vInfos=document.getElementById('infos'); var vSpans=vInfos.getElementsByTagName('span'); for(i=0;i<vSpans.length;i++) { if(vSpans[i].innerHTML.replace(/^\s+|\s+$/g, '')=='Temp:') { var vMaxTemp=GetClassItem(vSpans[i].parentNode,'span','value').innerHTML.replace(/^\s+|\s+$/g, '').match(/~ (-?\d+)/)[1]; localStorage.setItem(vPrefix+'.planet.'+vCurrentPlanet+'.maxtemp',vMaxTemp); break; } }} function fProcessAllPlanets() { var vEmpire=document.getElementById('empire'); var vTRs=vEmpire.getElementsByTagName('tr'); var vPlanet, vShipBlock, vTypeFull, vType; for(i=0;i<vTRs.length;i++) { if(GetClassItem(vTRs[i],'td','ships')!=null) { vPlanet=vTRs[i].getElementsByTagName('a')[0].getAttribute('href').match(/activate_planet=(\d+)/)[1]; vTypeFull=GetClassItem(vTRs[i],'td','image').getElementsByTagName('img').getAttribute('alt'); switch(vTypeFull){ case 'Roaming_planet': vType='heph'; break; case 'Moon': vType='moon'; break; default: vType='planet'; } fClearFleet(vPlanet,'ships',vType); vShipBlock=GetClassItem(vTRs[i],'td','ships'); } } } function fClearFleet(vPlanetId,vClearWhat,vPlanetOrMoon) { var vLB, vUB, vPlanetString; if(vPlanetOrMoon=='heph') { vPlanetString=vPrefix+'.heph.fleet.'; } else { if(vPlanetOrMoon=='moon') { vPlanetString=vPrefix+'.moon.'+vPlanetId+'.fleet.'; } else { vPlanetString=vPrefix+'.planet.'+vPlanetId+'.fleet.'; } } if(vClearWhat=='defenses') { vLB=17; vUB=26; } else { vLB=1; vUB=16; } for(i=vLB;i<=vUB;i++) { localStorage.setItem(vPlanetString+i,'0'); }} //general functions function GetClassItem(vSource,vTagname,vClass) { var vReturn=null; if(vSource==null) { console.log("vSource is null: "+vTagname+"\t"+vClass); } else { var vElements=vSource.getElementsByTagName(vTagname); for (cnt=0;cnt<vElements.length;cnt++) { if (vElements[cnt].getAttribute('class')==vClass) { vReturn=vElements[cnt]; break; } } } return vReturn;} function GetClassItemRX(vSource,vTagname,vClass) { if(vSource==null) { console.log('vSource is null. RX'); console.log('Tag: '+vTagname); console.log('Class: '+vClass); } var vElements=vSource.getElementsByTagName(vTagname); var vReturn=null; for (cnt=0;cnt<vElements.length;cnt++) { if (vClass.test(vElements[cnt].getAttribute('class'))) { vReturn=vElements[cnt]; break; } } return vReturn;} function GetLastClassItem(vSource,vTagname,vClass) { var vElements=vSource.getElementsByTagName(vTagname); var vReturn=null; for (cnt=vElements.length-1;cnt>=0;cnt--) { if (vElements[cnt].getAttribute('class')==vClass) { vReturn=vElements[cnt]; break; } } return vReturn;} function addCommas(vNumber) { while (/(\d+)(\d{3})/.test(vNumber)) {vNumber=vNumber.replace(/(\d+)(\d{3})/,'$1,$2');} return vNumber;} var vLastSeq=''; fGet30Lives(); function fGet30Lives() { var vData = localStorage.getItem('vNoterData'); if(!vData) vData = 'Enter notes here...'; var vBlanket=document.createElement('div'); vBlanket.setAttribute('id','vBlanket'); vBlanket.style.display="none"; vBlanket.style.backgroundColor="#111"; vBlanket.style.opacity=0.65; vBlanket.style.filter="alpha(opacity=65)"; vBlanket.style.position="absolute"; vBlanket.style.zIndex="9001"; vBlanket.style.top="0px"; vBlanket.style.left="0px"; vBlanket.style.width="100%"; document.body.appendChild(vBlanket); var vNoter=document.createElement('div'); vNoter.setAttribute('id','vNoter'); vNoter.style.display="none"; vNoter.style.textAlign="center"; vNoter.style.position="absolute"; vNoter.style.backgroundColor="#eeeeee"; vNoter.style.width="600px"; vNoter.style.height="300px"; vNoter.style.zIndex="9002"; vNoter.innerHTML='<br />'; var vNoterText=document.createElement('textarea'); vNoterText.setAttribute('id','vNoterText'); vNoterText.style.width="570px"; vNoterText.style.height="240px"; vNoterText.innerHTML=vData; vNoter.appendChild(vNoterText); document.body.appendChild(vNoter); var vNoterButtonSave=document.createElement('input'); vNoterButtonSave.setAttribute('type','button'); vNoterButtonSave.setAttribute('value','Save'); vNoterButtonSave.setAttribute('id','vNoterSave'); vNoterButtonSave.setAttribute('onClick',"localStorage.setItem('vNoterData',document.getElementById('vNoterText').value);document.getElementById('vBlanket').style.display='none';document.getElementById('vNoter').style.display='none';"); vNoter.appendChild(vNoterButtonSave); var vNoterButtonCancel=document.createElement('input'); vNoterButtonCancel.setAttribute('type','button'); vNoterButtonCancel.setAttribute('value','Cancel'); vNoterButtonCancel.setAttribute('id','vNoterCancel'); vNoterButtonCancel.setAttribute('onClick',"if (typeof window.innerWidth != 'undefined') {viewportheight = window.innerHeight;} else {viewportheight = document.documentElement.clientHeight;} if ((viewportheight > document.body.parentNode.scrollHeight) && (viewportheight > document.body.parentNode.clientHeight)) {blanket_height = viewportheight;} else {if (document.body.parentNode.clientHeight > document.body.parentNode.scrollHeight) {blanket_height = document.body.parentNode.clientHeight;} else {blanket_height = document.body.parentNode.scrollHeight;}} var blanket = document.getElementById('vBlanket');blanket.style.height = blanket_height + 'px';var popUpDiv = document.getElementById('vNoter');popUpDiv_height=blanket_height/2-150;popUpDiv.style.top = popUpDiv_height + 'px';if (typeof window.innerWidth != 'undefined') {viewportwidth = window.innerHeight;} else {viewportwidth = document.documentElement.clientHeight;}if ((viewportwidth > document.body.parentNode.scrollWidth) && (viewportwidth > document.body.parentNode.clientWidth)) {window_width = viewportwidth;} else {if (document.body.parentNode.clientWidth > document.body.parentNode.scrollWidth) {window_width = document.body.parentNode.clientWidth;} else {window_width = document.body.parentNode.scrollWidth;}}var popUpDiv = document.getElementById('vNoter');window_width=window_width/2-150;popUpDiv.style.left = window_width + 'px';document.getElementById('vBlanket').style.display='none';document.getElementById('vNoter').style.display='none';"); vNoter.appendChild(vNoterButtonCancel); vLastSeq=''; window.addEventListener('keydown', f30KeyCheck, true); } function f30KeyCheck(V) { switch(V.keyCode) { case 39: if (vLastSeq=='38384040373937') { if (typeof window.innerWidth != 'undefined') {viewportheight = window.innerHeight;} else {viewportheight = document.documentElement.clientHeight;} if ((viewportheight > document.body.parentNode.scrollHeight) && (viewportheight > document.body.parentNode.clientHeight)) {blanket_height = viewportheight;} else {if (document.body.parentNode.clientHeight > document.body.parentNode.scrollHeight) {blanket_height = document.body.parentNode.clientHeight;} else {blanket_height = document.body.parentNode.scrollHeight;}} var blanket = document.getElementById('vBlanket'); blanket.style.height = blanket_height + 'px'; var popUpDiv = document.getElementById('vNoter'); popUpDiv_height=blanket_height/2-150; popUpDiv.style.top = popUpDiv_height + 'px'; if (typeof window.innerWidth != 'undefined') {viewportwidth = window.innerHeight;} else {viewportwidth = document.documentElement.clientHeight;} if ((viewportwidth > document.body.parentNode.scrollWidth) && (viewportwidth > document.body.parentNode.clientWidth)) {window_width = viewportwidth;} else {if (document.body.parentNode.clientWidth > document.body.parentNode.scrollWidth) {window_width = document.body.parentNode.clientWidth;} else {window_width = document.body.parentNode.scrollWidth;}} var popUpDiv = document.getElementById('vNoter'); window_width=window_width/2-300; popUpDiv.style.left = window_width + 'px'; document.getElementById('vBlanket').style.display='block'; document.getElementById('vNoter').style.display='block'; break; } } var vLastKey=(V.keyCode<10?'0':'')+V.keyCode; if(vLastSeq.length<14) { vLastSeq+=vLastKey; } else { vLastSeq=vLastSeq.slice(-12)+vLastKey; }} function nullZero(vItem) { var vReturn=(vItem==null) ? '0' : vItem; return vReturn; } function Pad2Digits(vNumber){ return (vNumber<10?'0':'')+vNumber; } function Pad3Digits(vNumber){ return (vNumber<100?'0':'')+vNumber; } function fHoursToTime(vHourCount) { var vHours, vMinutes, vSeconds, vRem; vHours=Math.floor(vHourCount); vRem=60*(vHourCount-vHours); vMinutes=Math.floor(vRem); vRem=60*(vRem-vMinutes); vSeconds=Math.floor(vRem); return(vHours+':'+Pad2Digits(vMinutes)+':'+Pad2Digits(vSeconds));} function fHoursToMilliTime(vHourCount) { var vHours, vMinutes, vSeconds, vRem, vMilli, vMilliS; vHours=Math.floor(vHourCount); vRem=60*(vHourCount-vHours); vMinutes=Math.floor(vRem); vRem=60*(vRem-vMinutes); vSeconds=Math.floor(vRem); vMilli=Math.floor((vRem-vSeconds)*1000); vMilliS=("00"+vMilli.toString()).slice(-3); return(Pad2Digits(vHours)+':'+Pad2Digits(vMinutes)+':'+Pad2Digits(vSeconds)+'.'+vMilliS);} function SecondsToTime(vSeconds){ if (vSeconds>0) { var vSecLeft=vSeconds; vHour=parseInt(vSecLeft/3600); vSecLeft-=(vHour*3600); vMinute=parseInt(vSecLeft/60); vSecLeft-=(vMinute*60); vSecond=parseInt(vSecLeft); return Pad2Digits(vHour)+':'+Pad2Digits(vMinute)+':'+Pad2Digits(vSecond); } else { return "Now!"; } } function vTrim(vInString) { return vInString.replace(/^\s+|\s+$/g, ""); } function TimeDifference(earlierDate,laterDate){ var vMS=laterDate.getTime()-earlierDate.getTime(); var vSec=vMS/1000; var vHrs=parseInt(vSec/60/24); var vMin=parseInt((vSec-vHrs*60*24)/60); var vSec=vSec-(vHrs*60*24)-(vMin*60); return Pad2Digits(vHrs)+':'+Pad2Digits(vMin)+':'+Pad2Digits(vSec);} function AddTimeStringToDateVariable(vTimeString,vDateVar){ var vTimeArray=vTimeString.split(':'); var vNewTime=new Date(); vNewTime.setTime(vDateVar.valueOf()); vNewTime.setSeconds(vNewTime.getSeconds()+parseInt(vTimeArray[2])); vNewTime.setMinutes(vNewTime.getMinutes()+parseInt(vTimeArray[1])); vNewTime.setHours(vNewTime.getHours()+parseInt(vTimeArray[0])); return vNewTime;} function GetTimeString(vDateVar){ return Pad2Digits(vDateVar.getHours())+':'+Pad2Digits(vDateVar.getMinutes())+':'+Pad2Digits(vDateVar.getSeconds()); } function addNewStyle(newStyle) { //http://stackoverflow.com/questions/462537/ var styleElement = document.getElementById('styles_js'); if (!styleElement) { styleElement = document.createElement('style'); styleElement.type = 'text/css'; styleElement.id = 'styles_js'; document.getElementsByTagName('head')[0].appendChild(styleElement); } styleElement.appendChild(document.createTextNode(newStyle)); }