// (c)2009 Exstrom Laboratories LLC

function initPage(){setupTabs();getParams();}
function getTabs(){var divs=document.getElementsByTagName("div");var countTabs=0;var tabs=[];var countTabPages=0;var tabPages=[];for(var i=0;i<divs.length;++i){if(divs[i].className=="tabTab"){tabs[countTabs]=divs[i];++countTabs;}else if(divs[i].className=="tabPage"){tabPages[countTabPages]=divs[i];++countTabPages;}}
var tabInfo=[tabs,tabPages];return tabInfo;}
function setupTabs(){var tabInfo=getTabs();var tabs=tabInfo[0];var tabPages=tabInfo[1];tabPages[0].style.display="block";tabPages[0].style.backgroundColor="#ffc";tabs[0].style.backgroundColor="#ffc";for(var i=1;i<tabPages.length;++i){tabPages[i].style.display="hidden";}}
function tabClicked(ntab){var tabInfo=getTabs();var tabs=tabInfo[0];var tabPages=tabInfo[1];tabs[ntab-1].style.backgroundColor="#ffc";var container=document.getElementById("tabCont1");var bgcolor=container.style.backgroundColor;for(var i=0;i<tabPages.length;++i){if(i!=(ntab-1)){tabs[i].style.backgroundColor=bgcolor;tabPages[i].style.display="none";}}
tabPages[ntab-1].style.display="block";tabPages[ntab-1].style.backgroundColor="#ffc";}
function toggleShow(elementName){var elem=document.getElementById(elementName);var isShown=(elem.style.visibility=="visible")?true:false;elem.style.visibility=isShown?"hidden":"visible";elem.style.display=isShown?"none":"inline";}
function readParams()
{var rStr1=document.twobets.rtextbox1.value;var pStr1=document.twobets.ptextbox1.value;var rStr2=document.twobets.rtextbox2.value;var pStr2=document.twobets.ptextbox2.value;var r1=text2num(rStr1);var p1=text2num(pStr1);var r2=text2num(rStr2);var p2=text2num(pStr2);var n1=r1.length;var n2=r2.length;if(n1!=p1.length){alert("Please enter the same number of returns and probabilities for the 1st bet.");return 0;}
if(n2!=p2.length){alert("Please enter the same number of returns and probabilities for the 2nd bet.");return 0;}
if(n1==1){alert("Please enter more than one return and probability for the 1st bet.");return 0;}
if(n2==1){alert("Please enter more than one return and probability for the 2nd bet.");return 0;}
return[r1,p1,r2,p2];}
function getParams(){var params=readParams();var rv1=params[0];var pv1=params[1];var rv2=params[2];var pv2=params[3];var n1=rv1.length;var n2=rv2.length;drawProbPlot(rv1,pv1,rv2,pv2);showKF(kfidouble(rv1,rv2,pv1,pv2));}
function showKF(kfarray){var kfbet1=kfarray[0];var kfbet2=kfarray[1];kfbet1*=100;kfbet2*=100;var cash=100-kfbet1-kfbet2;var output1=document.getElementById("output1");output1.innerHTML=kfbet1.toFixed(4)+"%";var output2=document.getElementById("output2");output2.innerHTML=kfbet2.toFixed(4)+"%";var output3=document.getElementById("output3");output3.innerHTML=cash.toFixed(4)+"%";kfbet1/=100;kfbet2/=100;document.twobets.fraction1.value=kfbet1.toFixed(4);document.twobets.fraction2.value=kfbet2.toFixed(4);}
function simulateBets()
{var frac1=parseFloat(document.twobets.fraction1.value);var frac2=parseFloat(document.twobets.fraction2.value);var nbets=parseFloat(document.twobets.nbets.value);var params=readParams();var rv1=params[0];var pv1=params[1];var rv2=params[2];var pv2=params[3];var pvsum1=0;var pvsum2=0;for(var i=0;i<pv1.length;++i)
pvsum1+=pv1[i];if(pvsum1<0.999999999999){alert("Bet 1 probabilities do not add to 1. Cannot run simulation.");return 0;}
for(var i=0;i<pv2.length;++i)
pvsum2+=pv2[i];if(pvsum2<0.999999999999){alert("Bet 2 probabilities add to "+pvsum2+" < 1. Cannot run simulation.");return 0;}
var vec=sim_fbet_double(nbets,rv1,pv1,rv2,pv2,frac1,frac2);var outstr="";for(var i=0;i<vec.length;++i)
outstr+=vec[i].valueOf().toFixed(4)+"\n";document.twobets.results.value=outstr;drawSimPlot(vec);}
function drawSimPlot(data2plot)
{var d1=new Array(data2plot.length);for(var i=0;i<data2plot.length;++i)
d1[i]=[i+1,data2plot[i]];new Proto.Chart($('PlotContainer2'),[{data:d1,label:"Simulation Dataset",lines:{show:true,fill:false},points:{show:true}}]);var container=document.getElementById("PlotContainer2");var plotlabel=document.createElement("div");plotlabel.style.position="absolute";plotlabel.style.left=(Math.floor(container.offsetWidth/4)+50)+"px";plotlabel.style.top="-25px";var plotlabeltext=document.createElement("i");plotlabeltext.innerHTML="<strong>"+"Total Assets"+"</strong>";plotlabel.appendChild(plotlabeltext);container.appendChild(plotlabel);}
function drawProbPlot(retv1,probv1,retv2,probv2)
{var d1=new Array(retv1.length);var d2=new Array(retv2.length);var largest1=Math.max.apply(null,retv1);var smallest1=Math.min.apply(null,retv1);var largest2=Math.max.apply(null,retv2);var smallest2=Math.min.apply(null,retv2);var largest=largest1>largest2?largest1:largest2;var smallest=smallest1<smallest2?smallest1:smallest2;for(var i=0;i<retv1.length;++i)
d1[i]=[retv1[i],probv1[i]];for(var i=0;i<retv2.length;++i)
d2[i]=[retv2[i],probv2[i]];var buffer=(largest-smallest)*0.10;new Proto.Chart($('PlotContainer1'),[{data:d1,label:"Bet 1 probabilities"},{data:d2,label:"Bet 2 probabilities"}],{bars:{show:true,autoScale:false,barWidth:0.05},xaxis:{min:smallest-buffer,max:largest+buffer,tickSize:1,tickDecimals:0.1}});var container=document.getElementById("PlotContainer1");var plotlabel=document.createElement("div");plotlabel.style.position="absolute";plotlabel.style.left=(Math.floor(container.offsetWidth/4)+15)+"px";plotlabel.style.top="-25px";var plotlabeltext=document.createElement("i");plotlabeltext.innerHTML="<strong>"+"Probability Distribution"+"</strong>";plotlabel.appendChild(plotlabeltext);container.appendChild(plotlabel);}