
var origData=null;var origXP={};var currentFilter="*";var currentMembers=false;var hideLowActions=false;var amount=1.0;var calcFunctions={};calcFunctions[12]=calcBonusFire;var nonGroupFilters={};nonGroupFilters[12]=true;var extraMultiples={};var calcID=0;extraMultiples[23]=[{key:"1",text:"Normal hammer"},{key:"2",text:"Sacred clay hammer"},{key:"2.2",text:"Volatile clay hammer"}];extraMultiples[13]=[{key:"1",text:"Normal needle"},{key:"1|General-1|Jewelry-1|Glass-2|Leather-1|Battlestaff",text:"Sacred clay needle"},{key:"1|General-1|Jewelry-1|Glass-2.2|Leather-1|Battlestaff",text:"Volatile clay needle"}];extraMultiples[12]=[{key:"1",text:"Using Flame Gloves"},{key:"2",text:"Using Ring of Fire"}];extraMultiples[11]=[{key:"1",text:"Normal harpoon"},{key:"1|Net-1|Rod-1|Cage-2|Harpoon-1|Other",text:"Sacred clay harpoon"},{key:"1|Net-1|Rod-1|Cage-2.2|Harpoon-1|Other",text:"Volatile clay harpoon"}];extraMultiples[10]=[{key:"1",text:"Normal knife"},{key:"1|Ammo-1|Thrown-2|Bow(u)-1.5|Bow(s)",text:"Sacred clay knife"},{key:"1|Ammo-1|Thrown-2.2|Bow(u)-1.6|Bow(s)",text:"Volatile clay knife"}];extraMultiples[15]=[{key:"1",text:"Normal pickaxe"},{key:"2",text:"Sacred clay pickaxe"},{key:"2.2",text:"Volatile clay pickaxe"}];extraMultiples[6]=[{key:"1",text:"Bury bones"},{key:"4|Bone-1|Remains-1|Other",text:"Use the Ectofuntus"},{key:"3.5|Bone-1|Remains-1|Other",text:"Use Gilded Altar (2 marble burners)"}];extraMultiples[5]=[{key:"1",text:"Accurate Mode"},{key:"1",text:"Rapid Mode"},{key:".5",text:"Longrange Mode"},{key:".5",text:"Cannon Mode"}];extraMultiples[14]=[{key:"1",text:"Normal hammer"},{key:"2",text:"Sacred clay hammer"},{key:"2.2",text:"Volatile clay hammer"}];extraMultiples[3]=[{key:"1",text:"Aggressive Mode"},{key:".33",text:"Controlled Mode"}];extraMultiples[9]=[{key:"1",text:"Normal hatchet"},{key:"2",text:"Sacred clay hatchet"},{key:"2.2",text:"Volatile clay hatchet"}];extraMultiples[1]=[{key:"1",text:"Accurate Mode"},{key:".33",text:"Controlled Mode"}];extraMultiples[2]=[{key:"1",text:"Defensive Mode"},{key:".33",text:"Controlled Mode"}];var filters={};filters[23]=["Cheap","Average","Expensive"];filters[8]=["General","Fish","Gnome Cuisine","Ale"];filters[13]=["General","Glass","Leather","Jewelry","Battlestaff"];filters[20]=["Vegetable","General","Flower","Herb","Bush","Tree","Fruit"];filters[11]=["Net","Cage","Rod","Harpoon","Other"];filters[10]=["Ammo","Thrown","Bow(u)","Bow(s)"];filters[16]=["Herb","Potion","Mix"];filters[22]=["Bird Snare","Tracking","Butterfly","Imp","Deadfall","Box trap","Rabbit snare","Net trap","Pitfall","Falconry"];filters[7]=["Regular","Ancient","Lunar"];filters[6]=["Bone","Remains","Other"];filters[14]=["Bar","Bronze","Iron","Steel","Mithril","Adamant","Rune"];filters[24]=["Gold","Green","Crimson","Blue"];filters[18]=["Door","Pickpocket","Stall","Chest"];function init(calcType){calcID=calcType;if(extraMultiples[calcType]){var container=cg_ge("multipleCell");var first=true;for(var i=0;i<extraMultiples[calcType].length;i++){var input=cg_ce("input");var p=extraMultiples[calcType][i].key;if(p.indexOf("|")<0){input.id=p;}
input.type="radio";if(first){input.checked=true;first=false;}
var name=extraMultiples[calcType][i].text;if(nonGroupFilters[calcID]==null){input.name="specr";}
else{input.type="checkbox";}
input.onclick=addRadioBonus.bind(this,"*="+p);cg_ae(container,input);cg_ae(container,cg_ct(name));cg_ae(container,cg_ce("br"));}}
if(filters[calcType]){cg_ge("filterRow").style.display="block";for(var i=0;i<filters[calcType].length;i++){var option=cg_ce("option");option.value=filters[calcType][i];option.innerHTML=filters[calcType][i];cg_ae(cg_ge("filterBy"),option);}}
if(cg_getCookie("Login.SkillData")!=null){cg_ge("currentxp").value=getSkillValue(calcType,"xp");cg_ge("currentlvl").value=getSkillValue(calcType);if(cg_ge("currentlvl").value!="99"){cg_ge("goallvl").value=(getSkillValue(calcType)*1)+1;}
else{cg_ge("goallvl").value="99";}
sync('goal','xp',cg_ge("goallvl").value);}
reCalculate();}
function updateChar(){cg_ge("currentxp").value=getSkillValue(calcID,"xp");cg_ge("currentlvl").value=getSkillValue(calcID);if(cg_ge("currentlvl").value!="99"){cg_ge("goallvl").value=(getSkillValue(calcID)*1)+1;}
else{cg_ge("goallvl").value="99";}
sync('goal','xp',cg_ge("goallvl").value);reCalculate();}
function reCalculate(){var grid=cg_datagrids["calcs"];if(origData==null){origData=grid.data;grid.callBack=rePopulate;for(var i=0;i<grid.data.length;i++){var field=cg_ge("count_"+grid.data[i].id);var xp=grid.data[i].xp;var number=Math.ceil(gainXP/xp);if(number<0){number=0;}
grid.data[i].count=number;if(origXP[grid.data[i].id]==null){origXP[grid.data[i].id]=grid.data[i].xp;}}}
var currentXP=cg_ge("currentxp").value*1;var nextXP=cg_ge("goalxp").value*1;var gainXP=nextXP-currentXP;var status=document.getElementById('status_inner');if(rev_Mode==0){var pct=round((1-(gainXP/(nextXP-startXp(currentXP))))*100,2);for(var i=0;i<origData.length;i++){if(origData[i].__tr){var xp=origData[i].xp;var number=Math.ceil(gainXP/xp);if(number<0){number=0;}
if(Curse.User.isModerator){origData[i].__tr.childNodes[6].innerHTML=number;}
else{origData[i].__tr.childNodes[5].innerHTML=number;}}}
if(gainXP<=0){pct=100;status.innerHTML='You have reached your target. You&nbsp;are&nbsp;<b id="progressMade">'+pct+'%</b>&nbsp;of&nbsp;the&nbsp;way&nbsp;there.';}
else{status.innerHTML=' You&nbsp;are&nbsp;<b id="progressMade">'+pct+'%</b>&nbsp;of&nbsp;the&nbsp;way&nbsp;there. You need <b id="progressLeft">'+numberFormat(gainXP)+' XP</b> to reach your target.';}
status.innerHTML+='<div id="progress_bar"><table cellspacing="0" style="width: 100%"><tr><td style="background-color: #191; width: '+pct+'%"></td><td style="background-color: #911; width: '+(100-pct)+'%"></td></tr></table></div>'}
else{var acts=document.getElementById('numacts').value-0;for(var i=0;i<origData.length;i++){if(origData[i].__tr){var rowXP=origData[i].xp;var cxp=currentXP+(acts*(rowXP));var last=findLevel(cxp);var lxp=findXp(last);last+=round((cxp-lxp)/(findXp(last+1)-lxp),1);if(Curse.User.isModerator){origData[i].__tr.childNodes[6].innerHTML='Level '+last;}
else{origData[i].__tr.childNodes[5].innerHTML='Level '+last;}}}}}
function numberFormat(nStr){if(nStr>999999){nStr+='';nStr=nStr.slice(0,-6)+','+nStr.slice(-6,-3)+','+nStr.slice(-3);}
else if(nStr>999){nStr+='';nStr=nStr.slice(0,-3)+','+nStr.slice(-3);}
return nStr;}
function round(num,mult){mult=Math.pow(10,mult);return Math.round(num*mult)/mult;}
function filterMatch(data,matchString){var subType=Curse.Lookup.client_item_skill_sub_id[matchString.toLowerCase()];if(subType!=null){if(subType!=data.sub_type){return false;}}
return true;}
function rePopulate(replace){var newData=[];for(var i=0;i<origData.length;i++){if(amount!=null){var field=cg_ge("xp_"+origData[i].id);if(amount.toString().indexOf("|")>=0){var parts=amount.split("-");for(var j=0;j<parts.length;j++){var namount=parts[j].split("|")[0]*1;var ntype=parts[j].split("|")[1];if(filterMatch(origData[i],ntype)){origData[i].xp=origXP[origData[i].id]*namount;}}}
else{origData[i].xp=origXP[origData[i].id]*amount;}
if(field){field.innerHTML=roundPerc(origData[i].xp);}
if(origData[i].__tr){if(Curse.User.isModerator){origData[i].__tr.childNodes[5].innerHTML=roundPerc(origData[i].xp);}
else{origData[i].__tr.childNodes[4].innerHTML=roundPerc(origData[i].xp);}}}
if(currentMembers&&(origData[i].members))
{continue;}
if(hideLowActions&&(origData[i].level<((cg_ge("currentlvl").value*1)-10))){continue;}
if(currentFilter!="*"){var subType=Curse.Lookup.client_item_skill_sub_id[currentFilter.replace(" ","_")];if(subType!=null){if(subType!=origData[i].sub_type){continue;}}}
newData.push(origData[i]);}
if(replace==null){Curse.DataGrid.addOrReplaceData({data:newData,parent:"results",id:"calcs",message:"Undo actions will appear here."});}
reCalculate();}
function sync(Col,Row,Val){if(Row=='xp')
document.getElementById(Col+Row).value=findXp(Val);else
document.getElementById(Col+Row).value=findLevel(Val);var startLevel=document.getElementById("currentlvl").value*1;var goalLevel=document.getElementById("goallvl").value*1;if(startLevel>=goalLevel&&startLevel<99){if(Col=='goal'&&Row=='xp'){}
else{document.getElementById("goallvl").value=startLevel+1;}
if(Col=='goal'&&Row=='lvl'){}
else{document.getElementById("goalxp").value=findXp(document.getElementById("goallvl").value);}}}
function startXp(current){return findXp(findLevel(current));}
function hideLow(hide){hideLowActions=hide;rePopulate();}
function hideMember(hide){currentMembers=hide;rePopulate();}
function calcBonusFire(){var amount=1;var fireRing=cg_ge("2");if(fireRing.checked){amount*=1.025;}
var flameGloves=cg_ge("1");if(flameGloves.checked){amount*=1.025;}
return amount;}
function addRadioBonus(multiple){if(calcFunctions[calcID]!=null){amount=calcFunctions[calcID]();}
else{if(multiple.indexOf("|")>=0){amount=multiple.replace("*=","");}
else{var bparts=multiple.split("=");amount=bparts[1]*1.0;}}
rePopulate();}
function filter(value){currentFilter=value.toLowerCase();rePopulate();}
function goalStart(dot){rePopulate();}
var rev_Mode=0;function reverseMode(dot){var goal=document.getElementById('goalxp');var goallv=document.getElementById('goallvl');if(dot==true){document.getElementById('status_inner').innerHTML='Enter the number of actions to perform: <input type="text" size="8" id="numacts" onkeyup="rePopulate()" value="1" />';document.getElementById('target_t').style.display='none';document.getElementById('target_f').style.display='none';}
else{goal.value=findXp(findLevel(document.getElementById('currentxp').value)+1);goallv.value=findLevel(goal.value);document.getElementById('target_t').style.display='';document.getElementById('target_f').style.display='';}
rev_Mode=dot==true?1:0;rePopulate();}
function checkUpDown(event){var value=0;var obj;if(event.currentTarget){value=(event.currentTarget.value*1);obj=event.currentTarget;}
else{value=(event.srcElement.value*1);obj=event.srcElement;}
if(event.keyCode==40&&value>1)
{obj.value=value-1;}
else if(event.keyCode==38&&value<99)
{obj.value=value+1;}}