/************************************************/
/*	Fields to add								*/
/************************************************/
var aBenefitOptions = new Array();
var aSavedBenefits = new Array();

/************************************************/
/*	Benefit Option Class - Begin				*/
/************************************************/

var InputType =	{TextBox: 0,
				 CheckBox: 1,
				 DropDownList: 2};

function BenefitOption(sName,
					   sDescription,
					   iType,
					   iCategory,
					   sOutputText)
{
	this.sName = sName;
	this.sDescription = sDescription;
	this.iType = iType;
	this.iCategory = iCategory;
	this.sOutputText = sOutputText;
	
	this.parameters = new Array();
	this.AddParameterOption = AddParameterOption;
	this.sTextStorageOutput = sTextStorageOutput;
}

function AddParameterOption(sName,
							sDefaultValue,
							bShow,
							eInputType,
							listItems)
{
	var parameter = new BenefitOptionParameter(sName, sDefaultValue, bShow, eInputType, listItems);
	this.parameters[this.parameters.length] = parameter;
	this.listItems = listItems;	
}

/************************************************/
/*	Benefit Option Parameter Class - Begin		*/
/************************************************/
function BenefitOptionParameter(sName,
								sDefaultValue,
								bShow,
								eInputType,
								listItems)
{
	this.sName = sName;
	this.sDefaultValue = sDefaultValue;
	this.bShow = bShow;
	this.eInputType = eInputType;
	this.listItems = listItems;
}
/************************************************/
/*	Benefit Option Parameter Class - End		*/
/************************************************/

/************************************************/
/*	Benefit Option Class - End					*/
/************************************************/

function GetBenefitOption(iType, iCategory)
{
	var benefitOption = null;
	for (j = 0; j < aBenefitOptions.length; j++)
	{
		if (iType == aBenefitOptions[j].iType 
			&&	iCategory == aBenefitOptions[j].iCategory)
		{
			benefitOption = aBenefitOptions[j];
		}
	}
	
	return benefitOption;
}


/************************************************/
/*	Benefit - Begin								*/
/************************************************/
function Benefit(iType,
				 iCategory,
				 bInclude)
{
	this.iType = iType;
	this.iCategory = iCategory;
	this.bInclude = bInclude;
	this.dTakeRate = 0;
	this.parameters = new Array();
	
	this.GetTakeRate = GetTakeRate;
	this.AddParameter = AddParameter;
	this.sTextStorageOutput = sTextStorageOutput;
}

function AddParameter(iParameterNumber)
{
	var i;
	var aThisOption;
	var sControl;
	var benefitOption = GetBenefitOption(this.iType, this.iCategory);
	var aThisParameter = benefitOption.parameters[iParameterNumber];
	
	switch (aThisParameter.eInputType)
	{
		case InputType.TextBox:
			sControl = 'txtParameter' + iParameterNumber;
			this.parameters[iParameterNumber] = document.getElementById(sControl).value;
			break;
		case InputType.CheckBox:
			sControl = 'chkParameter' + iParameterNumber;
			this.parameters[iParameterNumber] = document.getElementById(sControl).checked;
			break;
		case InputType.DropDownList:
			sControl = 'lstParameter' + iParameterNumber;
			var lst = document.getElementById(sControl);
			this.parameters[iParameterNumber] = lst.options[lst.selectedIndex].value;
			break;
	}
}

function GetTakeRate()
{
	var txtTake = document.getElementById('txtTakeRate');
	if (txtTake != null)
		this.dTakeRate = parseFloat(txtTake.value);
	else
		this.dTakeRate = 0;
}

function sTextStorageOutput()
{
	//	Type
	var s = 'type:' + this.iType + '|||'
	//	Category
		+ 'category:' + this.iCategory + '|||'
	//	Include
		+ 'include:' + this.bInclude + '|||';
	//	Parameters
	var i = 0;
	for (i = 0; i < this.parameters.length; i++)
	{
		s += 'parameter' + i + ':' + this.parameters[i] + '|||';
	}
	//	Take Rate
	s += 'takerate:' + this.dTakeRate + '|||';
	
	//	Item divider, end
	s += '|';
	
	return s;
}
/************************************************/
/*	Benefit - End								*/
/************************************************/

/************************************************/
/*	Hidden Data Field Management - Begin		*/
/************************************************/

var iSavedBenefits = 0;
function AddBenefit(iBenefitOptionIndex)
{
	var bo = aBenefitOptions[iBenefitOptionIndex];
	var benefit = new Benefit(bo.iType, bo.iCategory, true);
	var i;
	for (i = 0; i < bo.parameters.length; i++)
	{
		benefit.AddParameter(i);
	}
	benefit.GetTakeRate();
	aSavedBenefits[iSavedBenefits] = benefit;
	iSavedBenefits += 1;
}

function DeleteBenefit(iBenefitIndex)
{
	var i;
	var bAlreadyDeleted = false;
	
	for (i = 0; i <= iSavedBenefits; i++)
	{
		if (bAlreadyDeleted)
		{
			//	Shift entries
			aSavedBenefits[i - 1] = aSavedBenefits[i];
			
			//	Last entry
			if (iSavedBenefits == (i + 1))
				aSavedBenefits[i] = null;
		}
		else if (i == iBenefitIndex)
		{
			//	Row to delete
			bAlreadyDeleted = true;
		}
	}
	
	if (bAlreadyDeleted)
	{
		iSavedBenefits -= 1
		aSavedBenefits[iSavedBenefits] = null;
	}
	
	displayBenefits();
}

//	Toggle include benefit
function ToggleIncludeBenefit(iBenefitIndex)
{
	var benefit = aSavedBenefits[iBenefitIndex];
	benefit.bInclude = !benefit.bInclude;
	aSavedBenefits[iBenefitIndex] = benefit;
	
	AddValuesToHiddenField();
}

function AddValuesToHiddenField()
{
	var i;
	var s = '';
	var benefit;
	for (i = 0; i < iSavedBenefits; i++)
	{
		benefit = aSavedBenefits[i];
		s += benefit.sTextStorageOutput();
	}
	
	txtData.value = s;
}

function GetDataFromHiddenField()
{
	if ('' + txtData.value != '')
	{
		var sSub1 = txtData.value;
		var sSub2 = '';
		var aSubItems;
		var aSubThisItem;
		var sSubThisItem;
		
		//	Benefit Parameters
		var iType;
		var iCategory;
		var bInclude;
		var dTakeRate;
		var parameters;
		
		if (sSub1.indexOf("||||") > -1)
		{
			aSubItems = sSub1.split("||||")
			
			var i = 0;
			var j = 0;

			for (i = 0; i < aSubItems.length - 1; i++)
			{
				iType = -1;
				iCategory = -1;
				bInclude = false;
				dTakeRate = 0;
				parameters = new Array();
				
				aSubThisItem = aSubItems[i].split("|||");
				for (j = 0; j < aSubThisItem.length; j++)
				{
					sSubThisItem = aSubThisItem[j];
					if (sSubThisItem.toLowerCase().indexOf('type:') > -1)
					{
						//	Benefit Type
						sSubThisItem = sSubThisItem.replace('type:', '');
						iType = parseInt(sSubThisItem);
					}
					else if (sSubThisItem.toLowerCase().indexOf('category:') == 0)
					{
						//	Benefit Type
						sSubThisItem = sSubThisItem.replace('category:', '');
						iCategory = parseInt(sSubThisItem);
					}
					else if (sSubThisItem.toLowerCase().indexOf('include:') == 0)
					{
						//	Include
						sSubThisItem = sSubThisItem.replace('include:', '');
						if (sSubThisItem == 'true')
							bInclude = true;
						else
							bInclude = false;
					}
					else if (sSubThisItem.toLowerCase().indexOf('takerate:') == 0)
					{
						//	Take Rate
						sSubThisItem = sSubThisItem.replace('takerate:', '');
						dTakeRate = parseFloat(sSubThisItem);
					}
					else if (sSubThisItem.toLowerCase().indexOf('parameter') == 0)
					{
						//	Benefit Type
						sSubThisItem = sSubThisItem.replace('parameter', '');
						var iParameter = parseInt(sSubThisItem.substring(0,1));
						sSubThisItem = sSubThisItem.substring(2,sSubThisItem.length);
						parameters[iParameter] = sSubThisItem;
					}
				}
				
				var benefit = new Benefit(iType, iCategory, bInclude);
				benefit.dTakeRate = dTakeRate;
				benefit.parameters = parameters;
				aSavedBenefits[aSavedBenefits.length] = benefit;
				iSavedBenefits += 1;
			}
		}
	}
}

/************************************************/
/*	Hidden Data Field Management - End			*/
/************************************************/


/************************************************/
/*	Event Handlers - Begin						*/
/************************************************/
function btnAddBenefit_Click()
{
	var iSelectedIndex = lstBenefitOptions.selectedIndex;
	var iBenefitOptionIndex = parseInt(lstBenefitOptions.options[iSelectedIndex].value);
	
	var bValid = ValidateNewItem(iBenefitOptionIndex);
	
	if (bValid)
	{
		AddBenefit(iBenefitOptionIndex);
	}
	
	displayBenefits();
}

function ValidateNewItem(iBenefitOptionIndex)
{
	var benefitOption = aBenefitOptions[iBenefitOptionIndex];
	var bValid = true;
	var i = 0;
	var j = 0;
	var aRow;
	var sControlName;
	
	spnError.innerHTML = '';
	
	var control;
	for (i = 0; i < benefitOption.parameters.length; i++)
	{
		switch (benefitOption.parameters[i].eInputType)
		{
			case InputType.TextBox:
				control = document.getElementById('txtParameter' + i);
				//	Required
				bValid = ValidateRequired(control,
										  spnError,
										  benefitOption.parameters[i].sName);
				//	Valid number
				if (bValid)
				{
					bValid = ValidateNumber(control,
											spnError,
											benefitOption.parameters[i].sName);
				}
				
				//	Positive value
				if (bValid)
				{
					bValid = ValidatePositive(control,
											  spnError,
											  benefitOption.parameters[i].sName);
				}
				break;
			case InputType.CheckBox:
				break;
			case InputType.DropDownList:
				//	Not implemented yet - probably always valid
				break;
		}
	
	}
	
	var txtTake = document.getElementById('txtTakeRate');
	if (txtTake != null)
	{
		bValid = ValidateNumber(txtTake,
								spnError,
								"Take Rate");
		
		if (bValid)
		{
			bValid = ValidateRange(txtTake,
								   spnError,
								   "Take Rate",
								   0,
								   100);
		} 
		
	}
	
	return bValid;
}

/************************************************/
/*	Event Handlers - End						*/
/************************************************/

/************************************************/
/*	Display - Begin								*/
/************************************************/

function displayBenefits()
{
	sAlternatingRowColor = '';
	AddValuesToHiddenField();
	var oChild = tblDisplay.tBodies[0];
	tblDisplay.removeChild(oChild);
	
	tblDisplay.appendChild(document.createElement('tbody'));
	
	if (iSavedBenefits == 0)
	{
		tblDisplay.style.display = "none";
		if (tblDisplay_Results != null)
			tblDisplay_Results.style.display = "";
	}
	else
	{
		tblDisplay.style.display = "";
		var sSpacerImage = "<img src='/images/spacer.gif' height='7'><br>";
		
		var i = 0;
		var iRow = 0;
		var j = 0;
		var sChecked = '';

		//	Overall Header
		tblDisplay.tBodies[0].appendChild(document.createElement('tr'));
		tblDisplay.rows[iRow].vAlign  = "bottom";
		tblDisplay.rows[iRow].className = sChangeAlternatingRowColor();
		tblDisplay.rows[iRow].appendChild(document.createElement('td'));
		tblDisplay.rows[iRow].appendChild(document.createElement('td'));
		tblDisplay.rows[iRow].cells[1].colSpan = 3;
		tblDisplay.rows[iRow].cells[1].innerHTML = "<h3 class='NoMargin'>Borrower Benefits Offered with Loan</h3>";
		tblDisplay.rows[iRow].cells[1].innerHTML += "Only Checked benefits will be included in the calculation";
		
		iRow++
		for (i = 0; i < iSavedBenefits; i++)
		{
			var benefit = aSavedBenefits[i];
			var benefitOption;
			
			for (j = 0; j < aBenefitOptions.length; j++)
			{
				benefitOption = GetBenefitOption(benefit.iType, benefit.iCategory)
			}
			
			if (benefit.bInclude)
				sChecked = "checked='checked' ";
			else
				sChecked = '';
			
			tblDisplay.tBodies[0].appendChild(document.createElement('tr'));
			tblDisplay.rows[iRow].vAlign  = "top";
			tblDisplay.rows[iRow].className = sChangeAlternatingRowColor();
			
			tblDisplay.rows[iRow].appendChild(document.createElement('td'));
			tblDisplay.rows[iRow].appendChild(document.createElement('td'));
			tblDisplay.rows[iRow].appendChild(document.createElement('td'));
			tblDisplay.rows[iRow].appendChild(document.createElement('td'));
			
			//	Spacer
			tblDisplay.rows[iRow].cells[0].rowSpan = 2;
			tblDisplay.rows[iRow].cells[0].width = "3%";
			
			//	Calculate checkbox
			tblDisplay.rows[iRow].cells[1].rowSpan = 2;
			tblDisplay.rows[iRow].cells[1].width = "20px";
			tblDisplay.rows[iRow].cells[1].innerHTML = "<input type='checkbox' id='chkCalculate" + i + "' " + sChecked + " onchange='ToggleIncludeBenefit(" + i + ");'/>";
			
			//	Header
			var sTakeRate = '';
			if (benefit.dTakeRate > 0)
				sTakeRate = ' (' + Math.round(benefit.dTakeRate) + '% <a id="aTakeRate' + i + '" href="javascript:setPanelText(\'aTakeRate' + i + '\', iTakeRate);">Take Rate</a>)';
			tblDisplay.rows[iRow].cells[2].innerHTML = "<b>" + benefitOption.sName + sTakeRate + "</b>";
			//	Delete button
			tblDisplay.rows[iRow].cells[3].rowSpan = 2;
			tblDisplay.rows[iRow].cells[3].width = "34px";
			tblDisplay.rows[iRow].cells[3].innerHTML = "<input type='button' value='Del' class='LM_Button' style='height: 20px; width:30px;' onclick='DeleteBenefit(" + i + ");'>";
			iRow++
			
			//	Benefit Output
			tblDisplay.tBodies[0].appendChild(document.createElement('tr'));
			tblDisplay.rows[iRow].appendChild(document.createElement('td'));
			tblDisplay.rows[iRow].className = sAlternatingRowColor;

			var sInnerHTML = benefitOption.sOutputText;
			for (j = 0; j < benefit.parameters.length; j++)
			{
				sInnerHTML = sInnerHTML.replace("{Parameter" + j + "}", benefit.parameters[j]);
			}
			
			tblDisplay.rows[iRow].appendChild(document.createElement('td'));
			tblDisplay.rows[iRow].cells[0].innerHTML = sInnerHTML;
						
			iRow++
		}
	}
}

function displayTables_Results()
{
	var oChild = tblDisplay_Results.tBodies[0];
	tblDisplay_Results.removeChild(oChild);
	
	tblDisplay_Results.appendChild(document.createElement('tbody'));
	
	if (iSavedBenefits == 0)
	{
		//tblDisplay.style.display = "none";
		tblDisplay_Results.tBodies[0].appendChild(document.createElement('tr'));
		tblDisplay_Results.rows[0].className = "LM_theErrorMessage";
		tblDisplay_Results.rows[0].appendChild(document.createElement('td'));
		tblDisplay_Results.rows[0].cells[0].innerHTML = "There are no benefits to display.";
	}
	else
	{
		//tblDisplay.style.display = "";
		var sSpacerImage = "<img src='/images/spacer.gif' height='7'><br>";
		
		var i = 0;
		var iRow = 0;
		var j = 0;
		var aThisItem;
		var iActive;
		var sChecked = '';

		for (i = 0; i < iSavedBenefits; i++)
		{
			var benefit = aSavedBenefits[i];
			var benefitOption = GetBenefitOption(benefit.iType, benefit.iCategory);
			
			tblDisplay_Results.tBodies[0].appendChild(document.createElement('tr'));
			tblDisplay_Results.rows[iRow].vAlign  = "top";
			tblDisplay_Results.rows[iRow].appendChild(document.createElement('td'));
			tblDisplay_Results.rows[iRow].appendChild(document.createElement('td'));
			
			//	Calculate check/X
			tblDisplay_Results.rows[iRow].cells[0].width = "30px";
			if (benefit.bInclude)
				tblDisplay_Results.rows[iRow].cells[0].innerHTML = "<img src='/images/CheckmarkGreen.gif'>";
			else
				tblDisplay_Results.rows[iRow].cells[0].innerHTML = "<img src='/images/X.gif' title='Not included'>";
			
			//	Text
			var sInnerHTML = benefitOption.sOutputText;
			for (j = 0; j < benefit.parameters.length; j++)
			{
				sInnerHTML = sInnerHTML.replace("{Parameter" + j + "}", benefit.parameters[j]);
			}

			var sTakeRate = '';
			if (benefit.dTakeRate > 0)
				sTakeRate = ' (' + Math.round(benefit.dTakeRate) + '% <a id="aTakeRate' + i + '_Results" href="javascript:setPanelText(\'aTakeRate' + i + '_Results\', iTakeRate);">Take Rate</a>)';
			tblDisplay_Results.rows[iRow].cells[1].innerHTML = "<b>" + benefitOption.sName + sTakeRate + "</b><br>" + sInnerHTML;
			iRow++
		}
	}
	
	tblDisplay_Results.style.display = "";
}

function lstBenefitOptions_Change()
{
	spnError.innerHTML = '';
	var iSelectedIndex = lstBenefitOptions.selectedIndex;
	
	if (iSelectedIndex == 0)
	{
		cDivBenefit.innerHTML = '';
		cBtnAddBenefit.style.display = 'none';
	}
	else
	{
		var benefitOption = aBenefitOptions[parseInt(lstBenefitOptions.options[iSelectedIndex].value)];
		
		var sInnerHTML = '';
		var sControl = '';
		sInnerHTML = "<b>" + benefitOption.sName + "</b><br>";
		sInnerHTML += benefitOption.sDescription;
		
		//	Parameters
		sInnerHTML += "<table width='95%' cellpadding='1' cellspacing='0'>";
		var i = 0;
		for (i = 0; i < benefitOption.parameters.length; i++)
		{
			sInnerHTML += "<tr valign='middle'><td width='5%'></td><td width='55%'><b>"
						+ benefitOption.parameters[i].sName + "</b></td>"
						+ "<td>";
			
			sControl = '';
			switch (benefitOption.parameters[i].eInputType)
			{
				case InputType.TextBox:
					sControl = "<input type='textbox' id='txtParameter" + i + "' style='width: 75px;' "
							+ "value='" + benefitOption.parameters[i].sDefaultValue + "' />";
					break;
				case InputType.CheckBox:
					var sChecked;
					var bChecked = new Boolean(benefitOption.sDefaultValue.toLowerCase());
					if (bChecked){sChecked = ' checked';}
					
					sControl = "<input type='checkbox' id='chkParameter" + i + "'" + sChecked + "/>";
					break;
				case InputType.DropDownList:
					var j;
					if (benefitOption.listItems.length > 1)
					{
						sControl = "<select id='lstParameter" + i + "'>";
						for (j = 0; j < benefitOption.listItems.length; j++)
						{
							sControl += "<option value='" + benefitOption.listItems[j][1] + "'>" + benefitOption.listItems[j][0] + "</option>";
						}
						sControl += "</select>";
					}
					break;
			}
			
			sInnerHTML += "<td>" + sControl + "</td>";
		}
		
		//	Add take rate if Organization
		if (bOrganization)
		{
			sInnerHTML += "<tr valign='middle'><td width='5%'></td><td width='55%'><b>Take Rate (%)</b></td><td/><td><input type='text' id='txtTakeRate' style='width: 75px;' value='0'/></td></tr>";
		}
		
		sInnerHTML += "</table>";
		
		cDivBenefit.innerHTML = sInnerHTML;
		cBtnAddBenefit.style.display = '';
	}
}
	
var sAlternatingRowColor;
function sChangeAlternatingRowColor()
{
    if (sAlternatingRowColor == "LM_ContentRow")
        sAlternatingRowColor = "LM_ContentRowAlt"
    else
        sAlternatingRowColor = "LM_ContentRow"

    return sAlternatingRowColor
}
/************************************************/
/*	Display - End								*/
/************************************************/