
//
// Copyright Canadian Small Caps
// http://www.smallcaps.ca

FALSE = 0
TRUE = 1

// Performs all the calculations.
//
function doCalculations()
{
var result = 0.0;
var vMonthsToExpiry = 0.0;
var now = new Date();
var vPriceAtExpiry = 0.0;
var vAnnualPercentIncrease = 10.0;

	// Calculate the price to break even
	result = (document.frmWarrantCalculator.txtExcercisePrice.value * 1.0) + 
			(document.frmWarrantCalculator.txtWarrantPrice.value * document.frmWarrantCalculator.txtExchangeRatio.value);
	document.frmWarrantCalculator.txtBreakEvenPrice.value = Math.round(result*100)/100;

	// Calculate Potential Profit/Loss.
	result = document.frmWarrantCalculator.txtStockPrice.value - document.frmWarrantCalculator.txtBreakEvenPrice.value;
	document.frmWarrantCalculator.txtPotentialProfitLoss.value = Math.round(result*100)/100;
	
	// Calcualte perecent to break even.
	result = ((result - document.frmWarrantCalculator.txtStockPrice.value) / 
							  document.frmWarrantCalculator.txtStockPrice.value) * 100;
	document.frmWarrantCalculator.txtBreakEvenPercent.value = Math.round(result*100)/100;

	// Calculate Intrinsic Value
	result = (document.frmWarrantCalculator.txtStockPrice.value - 
						     document.frmWarrantCalculator.txtExcercisePrice.value) / 
						     document.frmWarrantCalculator.txtExchangeRatio.value;
	document.frmWarrantCalculator.txtIntrinsicValue.value = Math.round(result*100)/100;
	if (document.frmWarrantCalculator.txtIntrinsicValue.value < 0)
		document.frmWarrantCalculator.txtIntrinsicValue.value = 0;

	// Calculate time value.
	result = (document.frmWarrantCalculator.txtWarrantPrice.value - 
						     document.frmWarrantCalculator.txtIntrinsicValue.value);
	document.frmWarrantCalculator.txtTimeValue.value = Math.round(result*100)/100;
	if (document.frmWarrantCalculator.txtTimeValue.value < 0)
		document.frmWarrantCalculator.txtTimeValue.value = 0;

	// Calcualte the leverage
	result = document.frmWarrantCalculator.txtStockPrice.value / 
						(document.frmWarrantCalculator.txtWarrantPrice.value * 
						 document.frmWarrantCalculator.txtExchangeRatio.value);
	document.frmWarrantCalculator.txtLeverage.value = Math.round(result*100)/100;

	vMonthsToExpiry = monthDiff(now.getDate(), now.getMonth() + 1, now.getYear(), 
							document.frmWarrantCalculator.ddlExpiryDay.value,
							document.frmWarrantCalculator.ddlExpiryMonth.value,
							document.frmWarrantCalculator.ddlExpiryYear.value);
							
	// Calculate years to expiry
	document.frmWarrantCalculator.txtYearsRemaining.value = Math.round((vMonthsToExpiry / 12)*100)/100;

	// Calculate share price at expiry
	vPriceAtExpiry = (document.frmWarrantCalculator.txtStockPrice.value * 1.0);
	vAnnualPercentIncrease = (document.frmWarrantCalculator.txtAnnualSharePriceIncrease.value / 100);

	
	// Add the increase for each whole year
	for (; vMonthsToExpiry >= 12; vMonthsToExpiry -= 12)
	{
		vPriceAtExpiry += (vPriceAtExpiry * vAnnualPercentIncrease); 
	}

	
	// Calculate for the remainder of the year
	vPriceAtExpiry += vPriceAtExpiry * ((vMonthsToExpiry / 12) * vAnnualPercentIncrease);

	document.frmWarrantCalculator.txtPriceAtExpiry.value = Math.round(vPriceAtExpiry*100)/100;
	
	// Calculate Warrnt Price at Expiry.
	result = (vPriceAtExpiry - document.frmWarrantCalculator.txtExcercisePrice.value) / 
					        document.frmWarrantCalculator.txtExchangeRatio.value;
	document.frmWarrantCalculator.txtWarrantValueAtExpiry.value = Math.round(result*100)/100;
	if (document.frmWarrantCalculator.txtWarrantValueAtExpiry.value < 0)
		document.frmWarrantCalculator.txtWarrantValueAtExpiry.value = 0;
	
	// Calculate overall warrant price % increase
	if (document.frmWarrantCalculator.txtWarrantValueAtExpiry.value == 0)
		document.frmWarrantCalculator.txtOverallWarrantPercentIncrease = 0;
	else
	{
		result = (document.frmWarrantCalculator.txtWarrantValueAtExpiry.value - document.frmWarrantCalculator.txtWarrantPrice.value) / document.frmWarrantCalculator.txtWarrantPrice.value * 100;
		document.frmWarrantCalculator.txtOverallWarrantPercentIncrease.value = Math.round(result);		
	}
	
	// Calculate annual warrant price % increase
	if (document.frmWarrantCalculator.txtWarrantValueAtExpiry.value == 0)
		document.frmWarrantCalculator.txtAnnualWarrantPercentIncrease = 0;
	else
	{
		result = document.frmWarrantCalculator.txtOverallWarrantPercentIncrease.value / document.frmWarrantCalculator.txtYearsRemaining.value;
		document.frmWarrantCalculator.txtAnnualWarrantPercentIncrease.value = Math.round(result);
	}
		
	// Calculate overall share price % increase
	if (document.frmWarrantCalculator.txtWarrantValueAtExpiry.value == 0)
		document.frmWarrantCalculator.txtOverallWarrantPercentIncrease = 0;
	else
	{
		result = (document.frmWarrantCalculator.txtPriceAtExpiry.value - document.frmWarrantCalculator.txtStockPrice.value) / document.frmWarrantCalculator.txtStockPrice.value * 100;
		document.frmWarrantCalculator.txtOverallSharePercentIncrease.value = Math.round(result);
	}	
	
	
}

// Reset the calculations.
//
function doReset()
{
	document.frmWarrantCalculator.txtWarrantPrice.value = 0;
    document.frmWarrantCalculator.txtStockPrice.value = 0;
    document.frmWarrantCalculator.txtExcercisePrice.value = 0;
    document.frmWarrantCalculator.txtExchangeRatio.value = 1;
	document.frmWarrantCalculator.txtBreakEvenPrice.value = 0;
    document.frmWarrantCalculator.txtBreakEvenPercent.value = 0;
	document.frmWarrantCalculator.txtIntrinsicValue.value = 0;
	document.frmWarrantCalculator.txtTimeValue.value = 0;
	document.frmWarrantCalculator.txtLeverage.value = 0;
	document.frmWarrantCalculator.txtPriceAtExpiry.value = 0;
	document.frmWarrantCalculator.txtWarrantValueAtExpiry.value = 0;
}


// Get the months between two dates
function monthDiff(sDay, sMonth, sYear, eDay, eMonth, eYear)
{
var months = 0.0;
var now = new Date();		// Today's date

	// Check for year differences 
	while (eYear > sYear)
	{
		eYear--;
		months += 12;
	}

	// Check for month differences
	while (eMonth > sMonth)
	{
		eMonth--;
		months++;
	}

	// Check for month differences
	while (eMonth < sMonth)
	{
		eMonth++;
		months--;
	}

	// Add in a fraction of months for the day difference
	months += (eDay - sDay) / 30;

	return months;
}


