
var SV={};SV.confirmDelete=function(){return confirm("Are you sure you wish to delete this item?");};SV.createCookie=function(name,value,days){var date,expires;if(days){date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));expires='; expires='+date.toGMTString();}else{expires='';}
document.cookie=name+'='+value+expires+'; path=/';};SV.readCookie=function(name){var nameEQ=name+'=',ca=document.cookie.split(';'),i,c;for(i=0;i<ca.length;i++){c=ca[i];while(c.charAt(0)===' '){c=c.substring(1,c.length);}
if(c.indexOf(nameEQ)===0){return c.substring(nameEQ.length,c.length);}}
return null;};SV.eraseCookie=function(name){SV.createCookie(name,'',-1);};SV.typeOf=function typeOf(value){var s=typeof value;if(s==='object'){if(value){if(typeof value.length==='number'&&!(value.propertyIsEnumerable('length'))&&typeof value.splice==='function'){s='array';}}else{s='null';}}
return s;};SV.entityify=function(str){return(str===undefined)?'':str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");};SV.toggleSettings=function(){if($('settingschunk').visible()){$('settingschunk').hide();$('settingsToggle').update('[+] Settings');}else{$('settingschunk').show();$('settingsToggle').update('[-] Settings');}};SV.toggleBanner=function(){if($('banner').visible()){$('banner').hide();$('bannerToggle').update('[+] Banner');SV.createCookie('suppressBanner','',1000);}else{$('banner').show();$('bannerToggle').update('[-] Banner');SV.eraseCookie('suppressBanner');}};SV.addRow=function(row,contentPrefix){var html='<tr><td><input type="text" size="45" name="'+contentPrefix+'Name[]"></td>'+'<td class="amount">'+'<input type="text"'+' size="10"'+' value="0"'+' name="'+contentPrefix+'Amount[]"'+' class="amount"'+' onchange="SV.valueChanged();">'+'</td>'+'<td>'+'<a href="" onclick="SV.deleteRow(this.parentNode.parentNode); return false;">'+'<img src="images/delete.gif" border="0"></img>'+'</a></td></tr>';Element.insert(row,{before:html});};SV.deleteRow=function(row){Element.remove(row);SV.LOGIC.recalc();};SV.changeUnits=function(){var units=document.valuation.units[document.valuation.units.selectedIndex].value;$('unitsView').update(units);};SV.getUnitsSelector=function(selected){var millionSelected=(selected=='$ million')?' selected':'';var thousandSelected=(selected=='$ thousand')?' selected':'';var oneSelected=(selected=='$')?' selected':'';return'<select id="units" name="units" onchange="SV.changeUnits();">'+'<option value="$ million"'+millionSelected+'>$ million</option>'+'<option value="$ thousand"'+thousandSelected+'>$ thousand</option>'+'<option value="$"'+oneSelected+'>$</option>'+'</select>';};SV.changeDecimals=function(name){var selectedIndex=document.valuation[name].selectedIndex;SV.MODEL[name]=parseInt(document.valuation[name][selectedIndex].value,10);SV.LOGIC.recalc();};SV.changeMonth=function(name){var selectedIndex=document.valuation.month.selectedIndex;SV.MODEL.month=parseInt(document.valuation.month[selectedIndex].value,10);SV.LOGIC.recalc();SV.LOGIC.updateValuation();};SV.getDecimalsSelector=function(selected,name){var zeroSelected=(selected==0)?' selected':'';var oneSelected=(selected==1)?' selected':'';var twoSelected=(selected==2)?' selected':'';var threeSelected=(selected==3)?' selected':'';return'<select id="'+name+'" name="'+name+'" onchange="SV.changeDecimals(\''+name+'\');">'+'<option value="0"'+zeroSelected+'>0</option>'+'<option value="1"'+oneSelected+'>1</option>'+'<option value="2"'+twoSelected+'>2</option>'+'<option value="3"'+threeSelected+'>3</option>'+'</select>';};SV.getMonthSelector=function(selected,name){var options='',i,selectedAttribute;for(i=1;i<13;i++){selectedAttribute=(selected===i)?' selected':'';options+='<option value="'+i+'"'+selectedAttribute+'>'+i+'</option>';}
return'<select id="'+name+'" name="'+name+'" onchange="SV.changeMonth(\''+name+'\');">'+
options+'</select>';};SV.clean=function(num){if(num===''){return 0;}
if(isNaN(num)){return 0;}
return parseFloat(num);};SV.addCommas=function(nStr){var x,x1,x2;nStr+='';x=nStr.split('.');x1=x[0];x2=x.length>1?'.'+x[1]:'';var rgx=/(\d+)(\d{3})/;while(rgx.test(x1)){x1=x1.replace(rgx,'$1'+','+'$2');}
return x1+x2;};SV.fmt=function(num,decimals){num=parseFloat(num);num=(isNaN(num))?0:num;if(num<0){return'('+SV.addCommas(Math.abs(num).toFixed(decimals))+')';}else{return SV.addCommas(num.toFixed(decimals))+"&nbsp;";}};SV.dbFmt=function(num,decimals){num=parseFloat(num);num=(isNaN(num))?0:num;return SV.addCommas(num.toFixed(decimals));};SV.sumFields=function(fieldName){var sum=0;for(var i=0;i<document.valuation.length;i++){if(document.valuation.elements[i].name==fieldName){sum+=SV.clean(document.valuation.elements[i].value);}}
return sum;};SV.valueChanged=function(){SV.MODEL.symbol=$F('symbol').toUpperCase();SV.LOGIC.recalc();};SV.getSettingsTop=function(hrefname){return'<table width="100%">'+'<tr>'+'<td align="left">'+'<a id="settingsToggle" href="" onclick="SV.toggleSettings(); return false;")>[+] Settings</a>'+'</td>'+'<td align="right">'+'</td>'+'</tr>'+'</table>'+'<div id="settingschunk" style="display:none;">'+'<table class="valuation">'+'<tbody>';};SV.getSettingsBottom=function(){return'</tbody>'+'</table>'+'</div>';};SV.getValuationTop=function(){return'<div class="chunk">'+'<table class="valuation">'+'<tbody>';};SV.getValuationBottom=function(){return'</tbody>'+'</table>'+'</div>';};SV.getEditArrayLine=function(type,name,value){return'<tr>'+'<td>'+'<input type="text" size="45" maxlength="100" name="'+type+'Name[]" value="'+name+'">'+'</td>'+'<td class="amount">'+'<input type="text"'+' size="10"'+' maxlength="50"'+' name="'+type+'Amount[]"'+' class="amount"'+' onchange="SV.valueChanged();"'+' value="'+value+'">'+'</td>'+'<td>'+'<a href="" onclick="SV.deleteRow(this.parentNode.parentNode); return false;"><img src="images/delete.gif" border="0"></img></a>'+'</td>'+'</tr>';};SV.getEditArrayLines=function(type,array){var i,html='';if(array!==undefined){for(i=0;i<array.length;i++){html+=SV.getEditArrayLine(type,SV.entityify(array[i][0]),SV.clean(array[i][1]));}}
return html;};SV.getYears=function(firstYear,years){var i,html='';for(i=0;i<years;i++){html+='<td class="amount">'+(firstYear+i)+'&nbsp;</td>';}
return html;};SV.getEditGrid=function(grid){var i,html='';if(grid!==undefined){for(i=0;i<grid.length;i++){html+=SV.getEditGridLine(grid,i);}}
return html;};SV.getDisplayGrid=function(grid){var i,html='';if(grid!==undefined){for(i=0;i<grid.length;i++){html+=SV.getDisplayGridLine(grid,i);}}
return html;};SV.getEditGridLine=function(grid,row){var i,html='';html+='<tr>'+'<td>'+'<input type="text"'+' size="25"'+' maxlength="100"'+' id="cashCol0Row'+row+'"'+' name="cashCol0Row'+row+'"'+' value="'+grid[row][0]+'">'+'</td>';for(i=1;i<grid[row].length;i++){html+='<td>'+'<input type="text"'+' size="7"'+' id="cashCol'+i+'Row'+row+'"'+' name="cashCol'+i+'Row'+row+'"'+' class="amount"'+' onchange="SV.valueChanged();"'+' value="'+grid[row][i]+'">'+'</td>';}
html+='<td>'+'<a href="" onclick="SV.deleteDcfRow('+row+'); return false;">'+'<img src="images/delete.gif" border="0"></img>'+'</a>'+'</td>'+'</tr>';return html;};SV.getDisplayGridLine=function(grid,row){var i,html='<tr><td>'+grid[row][0]+'</td>';for(i=1;i<grid[row].length;i++){html+='<td class="amount">&nbsp;'+SV.fmt(grid[row][i],SV.MODEL.decimals)+'</td>';}
return html+'</tr>';};SV.getViewArrayLines=function(array,decimals){var i,html='';if(array!==undefined){for(i=0;i<array.length;i++){html+=SV.getViewLine(SV.entityify(array[i][0]),SV.fmt(array[i][1],decimals));}}
return html;};SV.getFormLine=function(label,name,value,id,maxlength){return'<tr>'+SV.getLabelInputPair(label,name,value,id,maxlength)+'</tr>';};SV.get3ColFormLine=function(label,name,value,id,maxlength){return'<tr>'+
SV.getLabelInputPair(label,name,value,id,maxlength)+'<td></td>'+'</tr>';};SV.getLabelInputPair=function(label,name,value,id,maxlength){var idAttribute=(id===undefined)?'':' id="'+id+'"';return'<td>'+label+'</td>'+'<td class="amount">'+'<input type="text"'+' size="10"'+' maxlength="'+maxlength+'"'+' name="'+name+'"'+' class="amount"'+' onchange="SV.valueChanged();"'+' value="'+value+'"'+
idAttribute+'>'+'</td>';};SV.getViewLine=function(label,value,id){var idAttribute=(id===undefined)?'':' id="'+id+'"';return'<tr><td>'+label+'</td>'+'<td'+idAttribute+' class="amount">'+value+'</td></tr>';};SV.get3ColViewLine=function(label,value,id){var idAttribute=(id===undefined)?'':' id="'+id+'"';return'<tr><td>'+label+'</td>'+'<td'+idAttribute+' class="amount">'+value+'</td><td></td></tr>';};SV.getAddLineLink=function(type,text){return'<tr><td colspan="3">'+'<a href="" onclick="SV.addRow(this.parentNode.parentNode, \''+type+'\'); return false;">'+text+'</a>'+'</td></tr>';};SV.getHrLine=function(colspan){return'<tr><td colspan="'+colspan+'"><hr/></td></tr>';};SV.getArrayFromForm=function(fieldName){var array=[];for(var i=0;i<document.valuation.length;i++){if(document.valuation.elements[i].name==fieldName){array.push(document.valuation.elements[i].value);}}
return array;};SV.getPairArrayFromForm=function(prefix){var array=[],i,names=SV.getArrayFromForm(prefix+'Name[]'),amounts=SV.getArrayFromForm(prefix+'Amount[]');for(i=0;i<names.length;i++){array.push([names[i],SV.clean(amounts[i])]);}
return array;};SV.getOptionalTotal=function(shouldDisplay,title,total,decimals){if(shouldDisplay){return SV.getViewLine(title,SV.fmt(total,decimals));}else{return'';}};SV.preSubmit=function(){SV.LOGIC.updateModel();document.valuation.valuation.value=Object.toJSON(SV.MODEL);document.valuation.valuePerShare.value=SV.dbFmt(SV.MODEL.finalValuePerShare,SV.MODEL.valuePerShareDecimals);return true;};SV.recalcBelowEquity=function(){$('equity').update(SV.fmt(SV.MODEL.equity,SV.MODEL.decimals));var equityAdjustments=SV.sumFields('equityAdjustmentAmount[]');SV.MODEL.equityAdjusted=SV.MODEL.equity+equityAdjustments;$('equityAdjusted').update(SV.fmt(SV.MODEL.equityAdjusted,SV.MODEL.decimals));var shares=SV.clean(document.valuation.shares.value);var sharesAdjustments=SV.sumFields('sharesAdjustmentAmount[]');SV.MODEL.sharesAdjusted=shares+sharesAdjustments;$('sharesAdjusted').update(SV.fmt(SV.MODEL.sharesAdjusted,SV.MODEL.decimals));if(SV.MODEL.equityAdjusted<0||SV.MODEL.sharesAdjusted===0){SV.MODEL.valuePerShare=0;$('valuePerShare').update(SV.fmt(0,SV.MODEL.valuePerShareDecimals));$('finalValuePerShare').update(SV.fmt(0,SV.MODEL.valuePerShareDecimals));$('bigvalue').update('$'+SV.dbFmt(0,SV.MODEL.valuePerShareDecimals));return;}
SV.MODEL.valuePerShare=SV.MODEL.equityAdjusted/SV.MODEL.sharesAdjusted;$('valuePerShare').update(SV.fmt(SV.MODEL.valuePerShare,SV.MODEL.valuePerShareDecimals));var valuePerShareAdjustments=SV.sumFields('valuePerShareAdjustmentAmount[]');SV.MODEL.finalValuePerShare=SV.MODEL.valuePerShare+valuePerShareAdjustments;$('finalValuePerShare').update(SV.fmt(SV.MODEL.finalValuePerShare,SV.MODEL.valuePerShareDecimals));$('bigvalue').update('$'+SV.dbFmt(SV.MODEL.finalValuePerShare,SV.MODEL.valuePerShareDecimals));};SV.recalcCashDown=function(){var cashSum=SV.sumFields('cashAmount[]');var debtSum=SV.sumFields('debtAmount[]');var surplusAssetsSum=SV.sumFields('surplusAssetAmount[]');SV.MODEL.equity=SV.MODEL.enterpriseValue+cashSum+debtSum+surplusAssetsSum;SV.recalcBelowEquity();};SV.updateModelBelowEquity=function(){SV.MODEL.equityAdjustments=SV.getPairArrayFromForm('equityAdjustment');SV.MODEL.shares=SV.clean($F('shares'));SV.MODEL.sharesAdjustments=SV.getPairArrayFromForm('sharesAdjustment');SV.MODEL.valuePerShareAdjustments=SV.getPairArrayFromForm('valuePerShareAdjustment');};SV.updateModelCashDown=function(){SV.MODEL.cash=SV.getPairArrayFromForm('cash');SV.MODEL.debt=SV.getPairArrayFromForm('debt');SV.MODEL.surplusAssets=SV.getPairArrayFromForm('surplusAsset');SV.updateModelBelowEquity();};SV.getViewHtmlEquityDown=function(){return SV.getViewLine('Equity value',SV.fmt(SV.MODEL.equity,SV.MODEL.decimals))+
SV.getViewArrayLines(SV.MODEL.equityAdjustments,SV.MODEL.decimals)+
SV.getOptionalTotal(SV.MODEL.equityAdjustments.length>0,'Equity value (adjusted)',SV.MODEL.equityAdjusted,SV.MODEL.decimals)+
SV.getHrLine(2)+
SV.getViewLine('Ordinary shares on issue',SV.fmt(SV.MODEL.shares,SV.MODEL.decimals))+
SV.getViewArrayLines(SV.MODEL.sharesAdjustments,SV.MODEL.decimals)+
SV.getOptionalTotal(SV.MODEL.sharesAdjustments.length>0,'Ordinary shares on issue (adjusted)',SV.MODEL.sharesAdjusted,SV.MODEL.decimals)+
SV.getHrLine(2)+
SV.getViewLine('Value per share $',SV.fmt(SV.MODEL.valuePerShare,SV.MODEL.valuePerShareDecimals))+
SV.getViewArrayLines(SV.MODEL.valuePerShareAdjustments,SV.MODEL.valuePerShareDecimals)+
SV.getOptionalTotal(SV.MODEL.valuePerShareAdjustments.length>0,'Value per share (adjusted) $',SV.MODEL.finalValuePerShare,SV.MODEL.valuePerShareDecimals)+
SV.getValuationBottom();};SV.getViewHtmlCashDown=function(){return SV.getViewArrayLines(SV.MODEL.cash,SV.MODEL.decimals)+
SV.getViewArrayLines(SV.MODEL.debt,SV.MODEL.decimals)+
SV.getViewArrayLines(SV.MODEL.surplusAssets,SV.MODEL.decimals)+
SV.getHrLine(2)+
SV.getViewHtmlEquityDown();};SV.getValuationHtmlEquityDown=function(){return SV.get3ColViewLine('Equity value',SV.fmt(SV.MODEL.equity,SV.MODEL.decimals),'equity')+
SV.getEditArrayLines('equityAdjustment',SV.MODEL.equityAdjustments)+
SV.getAddLineLink('equityAdjustment','[+] Add equity value adjustment')+
SV.get3ColViewLine('Equity value (adjusted)',SV.fmt(SV.MODEL.equityAdjusted,SV.MODEL.decimals),'equityAdjusted')+
SV.getHrLine(3)+
SV.get3ColFormLine('Ordinary shares on issue','shares',SV.MODEL.shares,'shares',50)+
SV.getEditArrayLines('sharesAdjustment',SV.MODEL.sharesAdjustments)+
SV.getAddLineLink('sharesAdjustment','[+] Add shares adjustment')+
SV.get3ColViewLine('Ordinary shares on issue (adjusted)',SV.fmt(SV.MODEL.sharesAdjusted),'sharesAdjusted')+
SV.getHrLine(3)+
SV.get3ColViewLine('Value per share $','','valuePerShare')+
SV.getEditArrayLines('valuePerShareAdjustment',SV.MODEL.valuePerShareAdjustments)+
SV.getAddLineLink('valuePerShareAdjustment','[+] Add value per share adjustment')+
SV.get3ColViewLine('Value per share (adjusted) $',SV.fmt(SV.MODEL.finalValuePerShare,SV.MODEL.valuePerShareDecimals),'finalValuePerShare')+
SV.getValuationBottom();};SV.getValuationHtmlCashDown=function(){return SV.get3ColViewLine('Cash','')+
SV.getEditArrayLines('cash',SV.MODEL.cash)+
SV.getAddLineLink('cash','[+] Add cash item')+
SV.get3ColViewLine('Debt','')+
SV.getEditArrayLines('debt',SV.MODEL.debt)+
SV.getAddLineLink('debt','[+] Add debt item')+
SV.get3ColViewLine('Surplus assets','')+
SV.getEditArrayLines('surplusAsset',SV.MODEL.surplusAssets)+
SV.getAddLineLink('surplusAsset','[+] Add surplus asset')+
SV.getHrLine(3)+
SV.getValuationHtmlEquityDown();};SV.getFirstYearSelector=function(selected){var curr=new Date().getFullYear();var next=curr+1;var nextNext=next+1;var currSelected=(selected==curr)?'selected="selected"':'';var nextSelected=(selected==next)?'selected="selected"':'';var nextNextSelected=(selected==nextNext)?'selected="selected"':'';return'<select name="firstYear" onchange="SV.changeFirstYear();">'+'<option value="'+curr+'" '+currSelected+'>'+curr+'</option>'+'<option value="'+next+'" '+nextSelected+'>'+next+'</option>'+'<option value="'+nextNext+'" '+nextNextSelected+'>'+nextNext+'</option>'+'</select>';};SV.getColsSelector=function(selected){var i,s,html='<select name="cols" onchange="SV.changeCols();">';for(i=1;i<21;i++){s=(i==selected)?'selected="selected"':'';html+='<option value="'+i+'" '+s+">"+i+'</option>';}
html+='</select>';return html;};SV.getDcfViewLine=function(idPrefix,array,decimals){var i,html='';if(array!==undefined){for(i=0;i<array.length;i++){html+='<td id="'+(idPrefix+i)+'" class="amount">'+SV.fmt(array[i],decimals)+'</td>';}}
return html;};SV.addDcfRow=function(){SV.LOGIC.updateModel();SV.addRowToModel();SV.LOGIC.updateForm();SV.LOGIC.recalc();};SV.addRowToModel=function(){var col,currRows=SV.MODEL.grid.length;SV.MODEL.grid[currRows]=[];for(col=0;col<(SV.MODEL.cols+1);col++){SV.MODEL.grid[currRows][col]=(col>0)?0:'';}};SV.deleteDcfRow=function(row){SV.LOGIC.updateModel();SV.deleteRowFromModel(row);SV.LOGIC.updateForm();SV.LOGIC.recalc();};SV.deleteRowFromModel=function(row){SV.MODEL.grid.splice(row,1);};SV.changeFirstYear=function(){SV.LOGIC.updateModel();SV.LOGIC.updateForm();SV.LOGIC.recalc();};SV.changeCols=function(){var cols=parseInt(document.valuation.cols[document.valuation.cols.selectedIndex].value,10);if(cols>SV.MODEL.cols){SV.addCols(cols);}
if(cols<SV.MODEL.cols){SV.removeCols(cols);}
SV.LOGIC.recalc();};SV.addCols=function(cols){SV.LOGIC.updateModel();SV.addColsToModel(cols);SV.LOGIC.updateForm();};SV.addColsToModel=function(cols){var row,col;if(SV.MODEL.grid!==undefined){for(row=0;row<SV.MODEL.grid.length;row++){for(col=SV.MODEL.cols;col<cols;col++){SV.MODEL.grid[row][col+1]=0;SV.MODEL.freeCashFlows[col]=0;SV.MODEL.discountFactors[col]=0;SV.MODEL.presentValues[col]=0;}}}
SV.MODEL.cols=cols;};SV.removeCols=function(newCols){if(confirm('This will delete '+(SV.MODEL.cols-newCols)+' column/s, continue?')){SV.LOGIC.updateModel();SV.removeColsFromModel(newCols);SV.LOGIC.updateForm();}};SV.removeColsFromModel=function(cols){var row;if(SV.MODEL.grid!==undefined){for(row=0;row<SV.MODEL.grid.length;row++){SV.MODEL.grid[row].splice(cols+1);SV.MODEL.freeCashFlows.splice(cols);SV.MODEL.discountFactors.splice(cols);SV.MODEL.presentValues.splice(cols);}}
SV.MODEL.cols=cols;};
