
function refreshStates()
{
	// this function is called once the page has loaded and basically just calls all of the functions below.
	// to set the view state based on current values that may have come from  the database.
	
	// may have to use the php code to handle the add/remove stuff since its not based on a value in a control
	
	var noApps = 2; // total possible number of applicants;
	var noEmps = 1; // number of employments. this may change if previous employment records are simplified (to 1)
	/* SEC1 */
		sec1_setNoApplicants();
	
	/* SEC2 */
	
	/* SEC3 */
		for( apNo = 1; apNo <= noApps; apNo++ )
		{
			for( empNo = 1; empNo <= noEmps; empNo++ )
			{
				sec3_part_time_toggle_hours( apNo, empNo );
				sec3_other_income_toggle( apNo, empNo );
				
				sec3_employment_type_toggle( apNo, empNo ); 
				toggleEmpSelfCertOptions( apNo, empNo );
				toggleSelfEmpSelfCertOptions( apNo, empNo );
				sec3_self_employed_accounts_selected(apNo, empNo)					

				sec3_second_job_toggle(apNo, empNo)
				sec3_second_employment_type_toggle( apNo, empNo );
				toggleSecondEmpSelfCertOptions( apNo, empNo );
				toggleSecondSelfEmpSelfCertOptions( apNo, empNo );
				sec3_second_self_employed_accounts_selected(apNo, empNo)
			}
			// previous employment (note goes from 2 to 3)
			/*
				note this is an exception since its an add/remove handled by javascript,
				this is ok because of the fact that if the type is not set for a record
				it may as well be removed because that hides every field.
			*/
			for( preEmpNo = 2; preEmpNo <= 3; preEmpNo++ )
			{
				sec3_employment_type_toggle( apNo, preEmpNo );
			}
		}
		
	/* SEC4 */
		sec4_tenure_lease_remaining();
		sec4_standardProperty();
		sec4_select_prop_type_base();
		sec4_property_council_toggle();
		sec4_prop_mo_proivder_change();
		sec4_prop_mo_subprime_other_change();
		sec4_prop_mo_pri_other_change()
		sec4_blur_prop_mo_dur();		
		sec4_pre_mort_toggle();
		sec4_prop_rental_income();
		sec4_prop_shared_percent();
		sec4_toggle_scotland_cottage();
	/* SEC5 */
		sec5_toggleSecuredLoans();
	
	/* SEC6 */

	/* SEC7 */
	
	/* SEC8 */
}


/* <application details section> */
/*	Name: app_details_check_ppp_valid
	Notes: This function relates to the following project task details: 
	
	For each applicant: 
	"0" => "PPP+Life",
	"1" => "PPP Only",
	"2" => "Life Only",
	"3" => "None"

	Default the list to "PPP+Life". 
	NOTE: If Joint application; The 2nd applicant cannot have a PPP option selected unless the first applicant has one as well. 
	eg. 
		App1: PPP Only, App2: Life Only is valid
		App1: PPP Only, App2: none is valid 
		App1: none: App2: PPP Only is NOT valid 
	This function is called when either app 1 is changed or app 2 is changed.
	If it's an error, reset the 2nd applicant to none.
*/
function is_ppp_option(id)
{
	if( (id == '0') || (id=='1') || (id=='2') ) return true;
	else return false;
}
function is_two_app()
{
	if( document.getElementById('noapplicants').value == '2' ) return true;
	else return false;
}

function app_details_check_ppp_valid() // requests_logic: NA
{
	if( is_two_app() == true )
	{
		if( is_ppp_option( document.getElementById('app1pppoption').value ))
		{
			// then second one can be anything so ok.
		}
		else
		{ 
			// error if 2nd option is ppp
			if( is_ppp_option( document.getElementById('app2pppoption').value ))
			{
				alert("Applicant 2 can only have a payment plan protection option if applicant 1 does");
				document.getElementById('app2pppoption').value = '3'; // 3 is option 'None'.
			}
		}
	}

}
					
/* </application details section> */


/* <secured loans> */
// this is for toggling the secured loans. 
function sec5_toggleSecuredLoans() 
{
	if( document.getElementById('infosecurednoloans').value == "0" )
	{
		 changeObjectDisplay("sec5showSecuredLoans1", 'none');
		 changeObjectDisplay("sec5showSecuredLoans2", 'none');			
	}
	else if( document.getElementById('infosecurednoloans').value == "1" )
	{
		 changeObjectDisplay("sec5showSecuredLoans1", 'block');
		 changeObjectDisplay("sec5showSecuredLoans2", 'none');		
	}
	else 
	{
		 changeObjectDisplay("sec5showSecuredLoans1", 'block');
		 changeObjectDisplay("sec5showSecuredLoans2", 'block');
	}
}

/* </secured loans> */


/* <property section> */
function sec4_standardProperty()
{
	if( document.getElementById('propisstandard').value == "1" )
	{
		 // property is non-standard so show list
		 changeObjectDisplay("sec4PropNonstd", 'block');
	}
	else
	{
		 // property is standard so hide sec4-prop-nonstd
		 changeObjectDisplay("sec4PropNonstd", 'none');
	}
}
/*	Name: select_prop_type_base
	Notes: Called when user selects the property type (flat etc). Needs to 
	show/hide certain fields in this sub-section.
*/ 
function sec4_select_prop_type_base()
{
	switch( document.getElementById('proptypebase').value.toString() )
	{
		case "3": // maisonettes
			changeObjectDisplay("sec4-flat-maisonette-specific", "block");
			changeObjectDisplay("sec4-flat-specific", "none");
			break;
		case "5": // flats
			changeObjectDisplay("sec4-flat-specific", "block");
			changeObjectDisplay("sec4-flat-maisonette-specific", "block");
			break;
		case "9": // apartments
			changeObjectDisplay("sec4-flat-maisonette-specific", "block");
			changeObjectDisplay("sec4-flat-specific", "none");
			break;
		default: 
			changeObjectDisplay("sec4-flat-specific", "none");
			changeObjectDisplay("sec4-flat-maisonette-specific", "none");
	}
}

function sec4_toggle_scotland_cottage()
{
	switch( document.getElementById('propcountry').value.toString() )
	{
		case "1": // scotland
			changeObjectDisplay("sec4-scotland-flat-maisonette-specific", "block");
			break;
		default: 
			changeObjectDisplay("sec4-scotland-flat-maisonette-specific", "none");
			document.getElementById('propcottagestyle').checked = false;
	}
}

function sec4_tenure_lease_remaining()
{
	switch( document.getElementById('propholding').value.toString() )
	{
		case "2":
			changeObjectDisplay("sec4-lease-remaining", "block");
			break;
		default:
			changeObjectDisplay("sec4-lease-remaining", "none");	
	}
}


/*	Name: property_council_toggle()
	Show council fields only if the 'Ex-council property' checkbox has been checked.
*/
function sec4_property_council_toggle()
{
	if( isCheckboxSet('propcouncilisTrue', 1))
	{
		 // property is standard so hide list
		 changeObjectDisplay("sec4-council-specific", 'block');
	}
	else
	{
		 // property is non-standard so show sec4-prop-nonstd
		 changeObjectDisplay("sec4-council-specific", 'none');
	}		
}
/*	Name: prop_mo_proivder_change()
	Descriptoin: when you select a subprime mortgage provider you need to display the list of subprime providers.

*/
function sec4_prop_mo_proivder_change()
{ 
	switch( document.getElementById('propmoprovider').value.toString() )
	{
		case "0": 
			changeObjectDisplay("sec4-mort-prov-type-spec", "block"); // show the secondary lender
			changeObjectDisplay("sec4-mort-pri-name", "none"); // hide the primary lender name					
			break;
		default: 
			changeObjectDisplay("sec4-mort-prov-type-spec", "none");
			changeObjectDisplay("sec4-mort-pri-name", "block"); // show the primary lender  name						
	}
}
/*	Name: prop_mo_subprime_other_change()
	Descriptoin: when you select a subprime mortgage provider you need to display the list of subprime providers.
*/

function sec4_prop_mo_subprime_other_change()
{
	switch( document.getElementById('propsubprimeproviders').value.toString() )
	{
		case "11": 
			changeObjectDisplay("sec4-mort-prov-type-spec-o", "block");
			break;
		default: 
			changeObjectDisplay("sec4-mort-prov-type-spec-o", "none");
	}
}
/*	Name: prop_mo_pri_other_change()
	Descriptoin: when you select a subprime mortgage provider you need to display the list of subprime providers.
*/
function sec4_prop_mo_pri_other_change()
{
	switch( document.getElementById('propmopriname').value.toString() )
	{
		case "100": 
			changeObjectDisplay("sec4-mort-pri-type-spec-o", "block");
			break;
		default: 
			changeObjectDisplay("sec4-mort-pri-type-spec-o", "none");
	}
}	


function sec4_pre_mort_toggle()
{
	// select ctrl to toggle onChange
	var ctrlElement = 'premorttype';

	// conditional divs to show/hide
	var PrevMortDiv = 'sec4-premort-prev-mort';
	var PrivRentedDiv = 'sec4-premort-rented';
	var CouncilDiv = 'sec4-premort-council';
	var ParentsDiv = 'sec4-premort-parents';

	// hide all dependencies, then show what you need for each section below.
	changeObjectDisplay(PrevMortDiv, "none");			
	changeObjectDisplay(PrivRentedDiv, "none");			
	changeObjectDisplay(CouncilDiv, "none");			
	changeObjectDisplay(ParentsDiv, "none");			

	switch( document.getElementById(ctrlElement).value.toString() )
	{
		case "0":
			break;
		case "1": // previous mortgage 
			changeObjectDisplay(PrevMortDiv, "block");			
			changeObjectDisplay(PrivRentedDiv, "none");			
			changeObjectDisplay(CouncilDiv, "none");			
			changeObjectDisplay(ParentsDiv, "none");
			break;
		case "2": // privately rented
			changeObjectDisplay(PrevMortDiv, "none");			
			changeObjectDisplay(PrivRentedDiv, "block");			
			changeObjectDisplay(CouncilDiv, "none");			
			changeObjectDisplay(ParentsDiv, "none");
			break;
		case "3": // council tenant
			changeObjectDisplay(PrevMortDiv, "none");			
			changeObjectDisplay(PrivRentedDiv, "none");			
			changeObjectDisplay(CouncilDiv, "block");			
			changeObjectDisplay(ParentsDiv, "none");
			break;
		case "4": // living with parents
			changeObjectDisplay(PrevMortDiv, "none");			
			changeObjectDisplay(PrivRentedDiv, "none");			
			changeObjectDisplay(CouncilDiv, "none");			
			changeObjectDisplay(ParentsDiv, "block");
			break;				
	}
}

/*	Name: prop_rental_income()
	Description: hide/show div with rental income figure IFF ownership == Buy-To-Let
*/
function sec4_prop_rental_income()
{
	switch( document.getElementById('propownership2').value.toString() )
	{
		case "2": 
			changeObjectDisplay("sec4-btl-rental-income", "block");
			break;
		default: 
			changeObjectDisplay("sec4-btl-rental-income", "none");
	}
}

/*	Name: prop_shared_percent()
	Description: hide/show div with property share % figure IFF ownership == shared
*/
function sec4_prop_shared_percent()
{
	switch( document.getElementById('propownership1').value.toString() )
	{
		case "2": 
			changeObjectDisplay("sec4-shared-percent", "block");
			break;
		default: 
			changeObjectDisplay("sec4-shared-percent", "none");
	}
}
/* </property section> */


/* <credit check section> */
/* </ccjs> */

// kjp - this doesn't need to be included in refreshStates for editing because the derived values
// are already stored in seperate fields.
function sec6_ccMonthlypayment(balNo)
{	// only applies to Credit Card(2), Budget Card(5), MailOrder(3), Comms Supplier(8)
	var balance = document.getElementById('exptype'+balNo).value;
	if( balance == 2 || balance == 3 || balance == 5 || balance == 8 )
	{
		var balance;
		var monthlycc;
		balance = document.getElementById('expbalance'+balNo).value;
		monthlycc = Math.round(balance * 3)/100;
		document.getElementById('expmonthlypayments'+balNo).value = monthlycc;
	}
}

/* </credit check section> */





/*	Name: part_time_toggle_hours
	Notes: conditinoally display the hours input when you select part-time.
*/
function sec3_part_time_toggle_hours(apNo, empNo)
{
	var ctrlElement = new String('emp'+apNo+'ft'+empNo);
	var ctrldDiv = new String('sec3-ap'+apNo+'-hours-'+empNo);
	if( document.getElementById(ctrlElement).value == "1" )
	{
		 changeObjectDisplay(ctrldDiv, 'block');
	}
	else
	{
		 changeObjectDisplay(ctrldDiv, 'none');
	}

}

/*	Name: second_part_time_toggle_hours
	Notes: conditinoally display the hours input when you select part-time, for the SECOND job
*/
function sec3_second_part_time_toggle_hours(apNo, empNo)
{
	var ctrlElement = new String('emp'+apNo+'secondft'+empNo);
	var ctrldDiv = new String('sec3-ap'+apNo+'-second-hours-'+empNo);
	if( document.getElementById(ctrlElement).value == "1" )
	{
		 changeObjectDisplay(ctrldDiv, 'block');
	}
	else
	{
		 changeObjectDisplay(ctrldDiv, 'none');
	}

}

/*	Name: other_income_toggle()
	Notes: only show other types of income if they indicate they have other types of income.
*/
function sec3_other_income_toggle(apNo, empNo)
{
	var ctrlElement = new String('emp'+apNo+'otherincomechk'+empNo);
	var ctrldDiv = new String('sec3-ap'+apNo+'-other-income-chk-'+empNo);

	if( isCheckboxSet(ctrlElement, 1))
	{
		changeObjectDisplay(ctrldDiv, 'block');
	}
	else
	{
		sec3_reset_other_inc( apNo, empNo );
		changeObjectDisplay(ctrldDiv, 'none');
	}
}

/*	Name: employment_type_toggle 
	Notes: re-configure current employment form depending on the employment type.
		"0"=> " ",
		"1"=>"Employed",
		"2"=>"Self-employed",
		"3"=>"Not employed",
		"4"=>"Retired"
*/

function sec3_reset_other_inc( apNo, empNo )
{
	var income = new Array(	"emp"+apNo+"incomepsp"+empNo,
						"emp"+apNo+"incomeppri"+empNo,
						"emp"+apNo+"incomedla"+empNo,
						"emp"+apNo+"incomeib"+empNo,
						"emp"+apNo+"incomectc"+empNo,
						"emp"+apNo+"incomewtc"+empNo,
						"emp"+apNo+"incomemp"+empNo,
						"emp"+apNo+"incomeri"+empNo,
						"emp"+apNo+"incomegrob"+empNo,
						"emp"+apNo+"incomems"+empNo,
						"emp"+apNo+"incomeii"+empNo,
						"emp"+apNo+"incomeoi"+empNo
						)
	var i;
	for( i in income )
	{
		document.getElementById( income[i] ).value = "0.00";
	}
}

function sec3_employment_type_toggle(apNo, empNo)
{
	// select ctrl to toggle onChange
	var ctrlElement = new String('emp'+apNo+'type'+empNo);

	// conditional divs to show/hide
	var employmentDiv = new String('sec3-ap'+apNo+'-type-employed-'+empNo);
	var selfEmpDiv = new String('sec3-ap'+apNo+'-type-selfemp-'+empNo);
	var notEmp = new String('sec3-ap'+apNo+'-type-notemp-'+empNo);
	var retired = new String('sec3-ap'+apNo+'-type-retired-'+empNo);
	var empSelfEmpDiv = new String('sec3-ap'+apNo+'-type-empSelfEmp-'+empNo);
	var empAllDiv = new String('sec3-ap'+apNo+'-type-all-'+empNo);
	// hide all dependencies, then show what you need for each section below.

	changeObjectDisplay(employmentDiv, "none");			
	changeObjectDisplay(selfEmpDiv, "none");			
	changeObjectDisplay(notEmp, "none");			
	changeObjectDisplay(retired, "none");			
	
	// shared 
	changeObjectDisplay(empSelfEmpDiv, "none");			 // employed || self employed
	changeObjectDisplay(empAllDiv, "none");			// all options
	
	var empID = document.getElementById(ctrlElement).value.toString()
	sec3_reset_emp_inc_and_evidence( apNo, empNo, empID );	// reset income and evidence values accordingly
	switch( empID )
	{
		case "0":
			break;
		case "1": // employed 
			changeObjectDisplay(employmentDiv, "block");
			changeObjectDisplay(empSelfEmpDiv, "block");
			changeObjectDisplay(empAllDiv,"block");
			break;
		case "2": // self-employed
			changeObjectDisplay(selfEmpDiv, "block");
			changeObjectDisplay(empSelfEmpDiv, "block");
			changeObjectDisplay(empAllDiv, "block");
			break;
		case "3": // not employed
			changeObjectDisplay(notEmp, "block");
			changeObjectDisplay(empAllDiv,"block");
			sec1_checkEmpandPPP(apNo);
			break;
		case "4": // retired
			changeObjectDisplay(retired, "block");
			changeObjectDisplay(empAllDiv,"block");
			sec1_checkEmpandPPP(apNo);
			break;				
	}
}

/*	Reset gross Income and Evidence
*/
function sec3_reset_emp_inc_and_evidence( apNo, empNo, empID )
{	// only the current employment provides evidence and income options (empNo = 1)
	// this method will not affect any previous employment records
	if( empNo == "1") 
	{
		switch( empID )
		{
			case "0":	// no job - reset ALL income and evidence
			case "3":
			case "4":
				document.getElementById('emp'+apNo+'incomeei1').value = "0.00";	// reset employed income
				document.getElementById('emp'+apNo+'empevidence1').value = 0;	// reset employed evidence
				document.getElementById('emp'+apNo+'empscevidence1').value = 0; // reset employed, self-cert evidence

				document.getElementById('emp'+apNo+'incomesei1').value = "0.00";	// reset self-employed income
				document.getElementById('emp'+apNo+'selfempevidence1').value = 0;	// reset employed evidence
				document.getElementById('emp'+apNo+'selfempscevidence1').value = 0; // reset self-employed, self-cert evidence
				toggleEmpSelfCertOptions( apNo, empNo ); // hide employed, self-cert options div
				toggleSelfEmpSelfCertOptions( apNo, empNo ); // hide self-employed, self-cert options div
				toggleAccWarning('emp'+apNo+'empscevidence1', 'sec3-emp-accountant-warning-'+apNo);
				toggleAccWarning('emp'+apNo+'selfempscevidence1', 'sec3-accountant-warning-'+apNo);
				break;
			case "1":	// employed
				document.getElementById('emp'+apNo+'incomesei1').value = "0.00";	// reset self-employed income
				document.getElementById('emp'+apNo+'selfempevidence1').value = 0;	// reset employed evidence
				document.getElementById('emp'+apNo+'selfempscevidence1').value = 0; // reset self-employed, self-cert evidence
				toggleSelfEmpSelfCertOptions( apNo, empNo ); // hide self-employed, self-cert options div
				toggleAccWarning('emp'+apNo+'empscevidence1', 'sec3-emp-accountant-warning-'+apNo);

				break;
			case "2":	// self-employed
				document.getElementById('emp'+apNo+'incomeei1').value = "0.00";	// reset employed income
				document.getElementById('emp'+apNo+'empevidence1').value = 0;	// reset employed evidence
				document.getElementById('emp'+apNo+'empscevidence1').value = 0; // reset employed, self-cert evidence
				toggleEmpSelfCertOptions( apNo, empNo ); // hide employed, self-cert options div
				toggleAccWarning('emp'+apNo+'selfempscevidence1', 'sec3-accountant-warning-'+apNo);
				break;
		}
	}
}

/*	Name: second_employment_type_toggle 
	Notes: re-configure current employment form depending on the employment type.
		"0"=> " ",
		"1"=>"Employed",
		"2"=>"Self-employed",
*/
function sec3_second_employment_type_toggle(apNo, empNo)
{
	// select ctrl to toggle onChange
	var ctrlElement = new String('emp'+apNo+'secondtype'+empNo);

	// conditional divs to show/hide
	var employmentDiv = new String('sec3-ap'+apNo+'-second-type-employed-'+empNo);
	var selfEmpDiv = new String('sec3-ap'+apNo+'-second-type-selfemp-'+empNo);
	// hide all dependencies, then show what you need for each section below.

	changeObjectDisplay(employmentDiv, "none");			
	changeObjectDisplay(selfEmpDiv, "none");			
	
	var empID = document.getElementById(ctrlElement).value.toString();
	sec3_reset_second_emp_inc_and_evidence( apNo, empNo, empID );
	switch( empID )
	{
		case "0":
			break;
		case "1": // employed 
			changeObjectDisplay(employmentDiv, "block");
			break;
		case "2": // self-employed
			changeObjectDisplay(selfEmpDiv, "block");
			break;
	}
}

/*	Reset gross Income and Evidence
*/
function sec3_reset_second_emp_inc_and_evidence( apNo, empNo, empID )
{	// only the current employment provides evidence and income options (empNo = 1)
	// this method will not affect any previous employment records
	if( empNo == "1") 
	{
		switch( empID )
		{
			case "0":	// no job - reset ALL income and evidence
				document.getElementById('emp'+apNo+'incomesji1').value = "0.00";	// reset 2nd job employed income
				document.getElementById('emp'+apNo+'secondempevidence1').value = 0;	// reset 2nd job employed evidence
				document.getElementById('emp'+apNo+'sjempscevidence1').value = 0; // reset 2nd job employed, self-cert evidence

				document.getElementById('emp'+apNo+'incomesseji1').value = "0.00";	// reset 2nd job self-employed income
				document.getElementById('emp'+apNo+'secondsempevidence1').value = 0;	// reset 2nd job self-employed evidence
				document.getElementById('emp'+apNo+'sjselfempscevidence1').value = 0; // reset 2nd job self-employed, self-cert evidence
				toggleSecondEmpSelfCertOptions( apNo, empNo ); // hide employed, self-cert options div
				toggleSecondSelfEmpSelfCertOptions( apNo, empNo ); // hide self-employed, self-cert options div
				toggleAccWarning('emp'+apNo+'sjempscevidence1', 'sec3-second-emp-accountant-warning-'+apNo);
				toggleAccWarning('emp'+apNo+'sjselfempscevidence1', 'sec3-second-accountant-warning-'+apNo);
				break;
			case "1":	// employed
				document.getElementById('emp'+apNo+'incomesseji1').value = "0.00";	// reset 2nd job self-employed income
				document.getElementById('emp'+apNo+'secondsempevidence1').value = 0;	// reset 2nd job self-employed evidence
				document.getElementById('emp'+apNo+'sjselfempscevidence1').value = 0; // reset 2nd job self-employed, self-cert evidence
				toggleSecondSelfEmpSelfCertOptions( apNo, empNo ); // hide self-employed, self-cert options div
				toggleAccWarning('emp'+apNo+'sjempscevidence1', 'sec3-second-emp-accountant-warning-'+apNo);
				break;
			case "2":	// self-employed
				document.getElementById('emp'+apNo+'incomesji1').value = "0.00";	// reset 2nd job employed income
				document.getElementById('emp'+apNo+'secondempevidence1').value = 0;	// reset 2nd job employed evidence
				document.getElementById('emp'+apNo+'sjempscevidence1').value = 0; // reset 2nd job employed, self-cert evidence
				toggleSecondEmpSelfCertOptions( apNo, empNo ); // hide employed, self-cert options div
				toggleAccWarning('emp'+apNo+'sjselfempscevidence1', 'sec3-second-accountant-warning-'+apNo);
				break;
		}
	}
}

/*	Name: self_emp_accounts_selected
	Notes: handles user checking self-employed and then selecting accounts. Need to know
	how many years available.
*/
function sec3_self_employed_accounts_selected(apNo, empNo)
{	
	var ctrlElement = new String('emp'+apNo+'selfempevidence'+empNo);
	var ctrldDiv = new String('sec3-ap'+apNo+'-accounts-noyears-'+empNo);
	if( document.getElementById(ctrlElement).value == "1" ) // option 1 == "Accounts"
	{
		 changeObjectDisplay(ctrldDiv, 'block');
	}
	else
	{
		 changeObjectDisplay(ctrldDiv, 'none');
	}
}

/*	Name: second_self_emp_accounts_selected
	Notes: handles user checking self-employed and then selecting accounts. Need to know
	how many years available.
*/
function sec3_second_self_employed_accounts_selected(apNo, empNo)
{	
	var ctrlElement = new String('emp'+apNo+'secondsempevidence'+empNo);
	var ctrldDiv = new String('sec3-ap'+apNo+'-second-accounts-noyears-'+empNo);
	if( document.getElementById(ctrlElement).value == "1" ) // option 1 == "Accounts"
	{
		 changeObjectDisplay(ctrldDiv, 'block');
	}
	else
	{
		 changeObjectDisplay(ctrldDiv, 'none');
	}
}

/* hide/show second job section in the current job details */
function sec3_second_job_toggle(apNo, empNo)
{
	var ctrlElement = new String('emp'+apNo+'secondjobchk'+empNo);
	var ctrldDiv = new String('sec3-ap'+apNo+'-second-job-chk-'+empNo);
	var empType = new String('emp'+apNo+'secondtype'+empNo);
	if( isCheckboxSet(ctrlElement, 1)) 
	{
		changeObjectDisplay(ctrldDiv, 'block');
	}
	else
	{
		document.getElementById(empType).value = 0;	// reset type to NULL
		sec3_reset_second_emp_inc_and_evidence( apNo, empNo, "0" );	// reset all second job evidences and income
		changeObjectDisplay(ctrldDiv, 'none');
	}
}

function sec1_checkEmpandPPP( apNo )
{	// unemployed and retired applicants can only have Life protection plan
	switch( document.getElementById( 'app'+apNo+'pppoption' ).value )
	{
		case "0":
		case "1":
			alert('Applicant # '+apNo+' PPP option changed to Life Only, other PPP options are not available for unemployed/retired applicants');
			document.getElementById( 'app'+apNo+'pppoption' ).value = 2;
			break;
	}
}
	
function sec1_setNoApplicants()
{
	// get value
	var noAp = getNoApplicants();

	if( (noAp != 1) && (noAp != 2) ) alert('error');
	for( i =1; i<8; i++ ) 
	{
		// don't check the current section
		// only check sections which have already been visited:
		secStatus = getSecStatus( i );
		if( (secStatus.toString() != '0') ) checkSec( i ); 
	} // re-check all the sections incase there is now an error.
	switch( noAp.toString() )
	{
		case '1':
			changeObjectDisplay("sec1-ap2", "none");			
			changeObjectDisplay("sec2-ap2", "none");			
			changeObjectDisplay("empAp2", "none");			
			changeObjectDisplay("empAp2-current", "none");	
			changeObjectVisibility("newValue0app2dobday", "hidden"); // select fix
			changeObjectVisibility("newValue0app2dobmonth", "hidden");
			
			// not redundant - used to hideo specific controls that behave inapropriately
			changeObjectVisibility("add2dur1M", "hidden");
			changeObjectVisibility("add2dur1Y", "hidden");
			changeObjectVisibility("add2dur2M", "hidden");
			changeObjectVisibility("add2dur2Y", "hidden");
			changeObjectVisibility("add2dur3M", "hidden");
			changeObjectVisibility("add2dur3Y", "hidden");
			changeObjectVisibility("add2dur4M", "hidden");
			changeObjectVisibility("add2dur4Y", "hidden");
			changeObjectVisibility("add2dur5M", "hidden");
			changeObjectVisibility("add2dur5Y", "hidden");
			changeObjectVisibility("emp2type1", "hidden");
			changeObjectVisibility("emp2type3", "hidden");
			changeObjectVisibility("emp2type4", "hidden");
			changeObjectVisibility("emp2type5", "hidden");
			changeObjectVisibility("emp2dur1M", "hidden");
			changeObjectVisibility("emp2dur1Y", "hidden");
			changeObjectVisibility("emp2dur2M", "hidden");
			changeObjectVisibility("emp2dur2Y", "hidden");
			changeObjectVisibility("emp2dur3M", "hidden");
			changeObjectVisibility("emp2dur3Y", "hidden");
			changeObjectVisibility("emp2dur4M", "hidden");
			changeObjectVisibility("emp2dur4Y", "hidden");
			changeObjectVisibility("emp2dur5M", "hidden");
			changeObjectVisibility("emp2dur5Y", "hidden");
			break;
		case '2':
			changeObjectDisplay("sec1-ap2", "block");			
			changeObjectDisplay("sec2-ap2", "block");			
			changeObjectDisplay("empAp2", "block");			
			changeObjectDisplay("empAp2-current", "block");	
			changeObjectVisibility("newValue0app2dobday", "visible"); // select fix
			changeObjectVisibility("newValue0app2dobmonth", "visible");
			
			// redundant??
			changeObjectVisibility("add2dur1M", "visible");
			changeObjectVisibility("add2dur1Y", "visible");
			changeObjectVisibility("add2dur2M", "visible");
			changeObjectVisibility("add2dur2Y", "visible");
			changeObjectVisibility("add2dur3M", "visible");
			changeObjectVisibility("add2dur3Y", "visible");
			changeObjectVisibility("add2dur4M", "visible");
			changeObjectVisibility("add2dur4Y", "visible");
			changeObjectVisibility("add2dur5M", "visible");
			changeObjectVisibility("add2dur5Y", "visible");
			changeObjectVisibility("emp2type1", "visible");
			changeObjectVisibility("emp2type2", "visible");
			changeObjectVisibility("emp2type3", "visible");
			changeObjectVisibility("emp2type4", "visible");
			changeObjectVisibility("emp2type5", "visible");
			changeObjectVisibility("emp2dur1M", "visible");
			changeObjectVisibility("emp2dur1Y", "visible");
			changeObjectVisibility("emp2dur2M", "visible");
			changeObjectVisibility("emp2dur2Y", "visible");
			changeObjectVisibility("emp2dur3M", "visible");
			changeObjectVisibility("emp2dur3Y", "visible");
			changeObjectVisibility("emp2dur4M", "visible");
			changeObjectVisibility("emp2dur4Y", "visible");
			changeObjectVisibility("emp2dur5M", "visible");
			changeObjectVisibility("emp2dur5Y", "visible");
			break;		
		default:
			alert(noAp.toString());
	}
	checkWholeForm();
}

function get_total_months_from_year_month( year, month )
{
	yeari = parseInt(year);
	monthi = parseInt(month);
	
	if( isNaN( yeari )) yeari = 0;
	if( isNaN( monthi )) monthi = 0;
	
	totalMonths = 12*yeari + monthi;
	return totalMonths;
}


/*	Name: sec4_blur_prop_mo_dur()
	Notes: needs to check if the value in the input is less than 12. if so, display previous mortgage 
	details.
*/
function sec4_blur_prop_mo_dur()
{
	monthPart = document.getElementById('propmodurM').value;
	yearPart = document.getElementById('propmodurY').value;
	
	totalMonths = get_total_months_from_year_month( yearPart, monthPart );
	
	if( totalMonths < 12 ) // show previous mortgage inputs
	{
		changeObjectDisplay("sec4-pre-mortgage", "block");
	}
	else
	{
		changeObjectDisplay("sec4-pre-mortgage", "none");				
	}
}

function removeAdr(apNo, adrNo)
{
	var adrDiv = new String('sec2-ap'+apNo+'-a'+adrNo); // eg. sec2-ap1-a2
	changeObjectDisplay(adrDiv, 'none');
	// if you remove an adr. you also need to set the duration to 0. this value is used to hide the adr in the form.
	var keyFieldIdY = new String('add'+apNo+'dur'+adrNo+'Y');
	var keyFieldIdM = new String('add'+apNo+'dur'+adrNo+'M');		
	document.getElementById(keyFieldIdY).value = '0'; // set to 0 which is unset. used to decide to display rec. or not.		
	document.getElementById(keyFieldIdM).value = '0'; // set to 0 which is unset. used to decide to display rec. or not.				
	return true;
}

function showNextAdr(apNo)
{
	var baseDivName = new String('sec2-ap'+apNo+'-a');
	// find the first one that's hidden and show it. 
	for( adrNo = 1; adrNo < 6; adrNo++ )
	{
		if( getObjectDisplay(baseDivName+adrNo.toString()) == 'none' )
		{
			changeObjectDisplay(baseDivName+adrNo.toString(), 'block');
			break;
		}
	}
	return true;
}

function removeEmp(apNo, empNo)
{
	var empDiv = new String('sec3-ap'+apNo+'-e'+empNo); // eg. sec3-ap1-e2
	changeObjectDisplay(empDiv, 'none');
	// to remove a previous employment record, set the type to 0.
	var keyFieldId = new String('emp'+apNo+'type'+empNo);
	document.getElementById(keyFieldId).value = '0'; // set to 0 which is unset. used to decide to display rec. or not.
	return true;
}
	
function showNextEmp(apNo)
{
	var baseDivName = new String('sec3-ap'+apNo+'-e');
	// find the first one that's hidden and show it. 
	for( empNo = 1; empNo < 4; empNo++ )
	{
		if( getObjectDisplay(baseDivName+empNo.toString()) == 'none' )
		{
			changeObjectDisplay(baseDivName+empNo.toString(), 'block');
			break;
		}
	}
	return true;
}

function removeCCJ(ccjNo)
{
	var ccjDiv = new String('sec6-ccj'+ccjNo); // eg. sec6-ccj2
	changeObjectDisplay(ccjDiv, 'none');
	// must set key_field to 0 or empty such that other systems treat this record as removed.
	var keyFieldId = new String('infoccjvalue'+ccjNo);
	document.getElementById(keyFieldId).value = ''; // set to empty
	// TODO HERE: set other fields to null to avoid irellevant data in the database.		
	return true;
}

function showNextCCJ()
{
	var baseDivName = new String('sec6-ccj');
	// find the first one that's hidden and show it. 
	for( no = 1; no <= 12; no++ )
	{
		if( getObjectDisplay(baseDivName+no.toString()) == 'none' )
		{
			changeObjectDisplay(baseDivName+no.toString(), 'block');
			break;
		}
	}
	return true;
}

function removeDefault(defaultNo)
{
	var defDiv = new String('sec6-def'+defaultNo); // eg. sec6-ccj2
	changeObjectDisplay(defDiv, 'none');
	var keyFieldId = new String('infodefaultvalue'+defaultNo);
	document.getElementById(keyFieldId).value = ''; // set to empty
	// TODO HERE: set other fields to null to avoid irellevant data in the database.		
	return true;
}
function showNextDefault()
{
	var baseDivName = new String('sec6-def');
	// find the first one that's hidden and show it. 
	for( no = 1; no <= 20; no++ )
	{
		if( getObjectDisplay(baseDivName+no.toString()) == 'none' )
		{
			changeObjectDisplay(baseDivName+no.toString(), 'block');
			break;
		}
	}
	return true;
}

function removeExp(expNo)
{
	var expDiv = new String('sec6-exp'+expNo); // eg. sec6-exp6
	changeObjectDisplay(expDiv, 'none');
	var keyFieldId = new String('exptype'+expNo);
	document.getElementById(keyFieldId).value = '0'; // set to empty
	// set other fields to null to avoid irellevant data in the database.		
	var expBalance = String('expbalance'+expNo);
	var expMonthlyPay = String('expmonthlypayments'+expNo);
	var expMissed = String('expmissedpayments'+expNo);
	
	document.getElementById(expBalance).value = '0.00';
	document.getElementById(expMonthlyPay).value = '0.00';
	document.getElementById(expMissed).value = 0;	// index of option
	return true;
	return true;
}
function showNextExp()
{
	var baseDivName = new String('sec6-exp');
	// find the first one that's hidden and show it. 
	for( no = 1; no <= 20; no++ )
	{
		if( getObjectDisplay(baseDivName+no.toString()) == 'none' )
		{
			changeObjectDisplay(baseDivName+no.toString(), 'block');
			break;
		}
	}
	return true;
}

function hideAllSec()
{
	changeObjectDisplay("sec1", "none");
	changeObjectDisplay("sec2", "none");
	changeObjectDisplay("sec3", "none");
	changeObjectDisplay("sec4", "none");
	changeObjectDisplay("sec5", "none");
	changeObjectDisplay("sec6", "none");
	changeObjectDisplay("sec7", "none");
	changeObjectDisplay("sec7", "none");
}

function showSec(secNo)
{
	changeObjectDisplay('sec'+secNo.toString(), "block");			
}

function switchSec(secNo)
{
	oldSec = document.getElementById('currentSec').value;
	document.getElementById('currentSec').value = secNo;		
	if( isFormReadOnly() )
	{
		isSecOkay = true;
		setSecStatus(oldSec, 'notEdited', 0); 
	}
	else // proceed as normals
	{
		isSecOkay = checkSec(oldSec); // KJP 2006-01-05: analsysis of bug - something in here is stopping code from proceeding
		isFormOkay = checkSec(0);
		if( isSecOkay == true )
		{
			setSecStatus(oldSec, 'complete', 3); // note this means that the class is being set twice.
		}		
		else
		{
			// alert("Please ensure this section is fully completed");
			setSecStatus(oldSec, 'error', 2);
		}
	}		
	setSecStatus(secNo, 'active', 1);
	hideAllSec();			
	showSec( secNo );
	
	// Chin 25/01/06
	// goto #top - fix for pages loading in the middle
	location.href="#top";
	return true;
}


/* Misc utility functions */

function getMonths( noYears, noMonths )
{	
	var yrs = new Number(noYears);
	var mnths = new Number( noMonths );
	return( (12*yrs) + mnths );
}

function getNoMonthsById( id )
{
	yrs = id + 'Y';
	mon = id + 'M';
	return( getMonths( document.getElementById(yrs).value, document.getElementById(mon).value ));
}

function tallyDisplayedMonths_address(apNo)
{
	var apNo = new Number(apNo);
	var noMonths = new Number();
	
	//sec2-ap1-a3
	var baseDivId = new String('sec2-ap'+apNo.toString()+'-a'); 
	for( i = 1; i < 6; i++ )
	{
		if( getObjectDisplay(baseDivId+i.toString()) == 'block') 
		{
			noMonths = noMonths + getNoMonthsById('add'+apNo.toString()+'dur'+i.toString());//add1dur5
		}
	}			
	return (noMonths);
}

function tallyDisplayedMonths_employment(apNo)
{
	var apNo = new Number(apNo);
	var noMonths = new Number();

	//sec2-ap1-a3
	var baseDivId = new String('sec3-ap'+apNo.toString()+'-e'); 
	for( i = 1; i < 6; i++ )
	{
		if( getObjectDisplay(baseDivId+i.toString()) == 'block') 
		{
			noMonths = noMonths + getNoMonthsById('emp'+apNo.toString()+'dur'+i.toString());//emp1dur1
		}
	}			
	return (noMonths);
}

function getNoApplicants()
{
	// returuns the current setting for the number of applicants.
	var noAp = new Number();
	noAp = document.getElementById('noapplicants').value;
	if( (noAp == 1) || (noAp == 2) ) return noAp;
	else return false;		
}



/*	Name: 	isCheckboxSet
	Desc:	If the checkbox has been set then in edit mode, its checked property will be true. 
			In readonly mode, it is a hidden control and so doesn't have a checked property, instead
			you need to compare it to the value that it stores when it is checked.
*/
function isCheckboxSet( elementId, checkedVal )
{
	if( isFormReadOnly() )
	{
		// look at value
		if( document.getElementById(elementId).value == checkedVal ) return true;
		else return false;
	}
	else
	{
		if( document.getElementById(elementId).checked == true ) return true;
		else return false;
	}
}

/* Name:	showResultsDiv
   Desd:	unhide the search div only when user clicks search button
			otherwise div should remain hidden - handled by switchSec() function above
   Auth:	Chin
 */
 function showResultsDiv( elementId )
 {
	if( getObjectDisplay(elementId) == 'none' )
	{
		changeObjectDisplay(elementId, 'block');
	}
 }
 
 function hideResultsDiv( elementId )
 {	// resets page content of the iframe to iframe.php - does not contain any search result data
		changeObjectDisplay(elementId, 'none');
		frames['productResultsFrame'].location.href = "/search/iframe.php";
 }
 
 function productSearch( elementId )
 {
	// show the hidden iframe
	showResultsDiv("sec7-productSearch");
	document.getElementById("productResultsFrame").height = 500;

	// goto anchor
	document.location.href = "#results";
	
	// set form action and target for product search
	document.getElementById(elementId).action = "/search/myProducts.php";
	document.getElementById(elementId).target = "productResultsFrame";
	
	// submit form - target is iframe
	document.getElementById(elementId).submit();
 }
 
 function applicationSubmit( elementId )
 {
	// reset form action and target to itself to make use of fsdbm functions
	document.getElementById(elementId).action = "/apply/ap.php";
	document.getElementById(elementId).target = "_self";
	
	// submit form
	// fsdbm will perform necessary actions to add new application record
	document.getElementById(elementId).submit();
	
	//TODO: REDIRECT TO CONFIRM PAGE/MY APPS PAGE
 }	

// show hide warning msg for accounts/accountant evidence
function toggleAccWarning( selectID, warningID )
{
	switch( document.getElementById( selectID ).value )
	{
		case "2":
		case "3":
			changeObjectDisplay( warningID, "block");
			break
		default:
			changeObjectDisplay( warningID, "none");
	}
}

// show/hide self-cert evidence options
function toggleEmpSelfCertOptions( apNo, empNo )
{
	var ctrlElement = new String('emp'+apNo+'empevidence'+empNo);
	var ctrldDiv = new String('sec3-ap'+apNo+'-emp-sc-'+empNo);

	switch( document.getElementById(ctrlElement).value ) // option 1 == "Accounts"
	{
		case "0": // none
		case "1": // accounts
			changeObjectDisplay(ctrldDiv, 'none');
			document.getElementById('emp'+apNo+'empscevidence1').value = 0; // reset employed, self-cert evidence
			toggleAccWarning('emp'+apNo+'empscevidence1', 'sec3-emp-accountant-warning-'+apNo);
			break;
		case "3": // self-cert 
			changeObjectDisplay(ctrldDiv, 'block');
		// case "2": // this option has been removed
			break;
	}
}

function toggleSelfEmpSelfCertOptions( apNo, empNo )
{
	var ctrlElement = new String('emp'+apNo+'selfempevidence'+empNo);
	var ctrldDiv = new String('sec3-ap'+apNo+'-selfemp-sc-'+empNo);

	switch( document.getElementById(ctrlElement).value ) // option 1 == "Accounts"
	{
		case "0": // none
		case "1": // accounts
			changeObjectDisplay(ctrldDiv, 'none');
			document.getElementById('emp'+apNo+'selfempscevidence1').value = 0; // reset self-employed, self-cert evidence
			toggleAccWarning('emp'+apNo+'selfempscevidence1', 'sec3-accountant-warning-'+apNo);
			break;
		case "3": // self-cert 
			changeObjectDisplay(ctrldDiv, 'block');
		// case "2": // this option has been removed
			break;
	}
}

function toggleSecondEmpSelfCertOptions( apNo, empNo )
{
	var ctrlElement = new String('emp'+apNo+'secondempevidence'+empNo);
	var ctrldDiv = new String('sec3-ap'+apNo+'-second-emp-sc-'+empNo);

	switch( document.getElementById(ctrlElement).value ) // option 1 == "Accounts"
	{
		case "0": // none
		case "1": // accounts
			changeObjectDisplay(ctrldDiv, 'none');
			document.getElementById('emp'+apNo+'sjempscevidence1').value = 0; // reset 2nd job employed, self-cert evidence
			toggleAccWarning('emp'+apNo+'sjempscevidence1', 'sec3-second-emp-accountant-warning-'+apNo);
			break;
		case "3": // self-cert 
			changeObjectDisplay(ctrldDiv, 'block');
		// case "2": // this option has been removed
			break;
	}
}

function toggleSecondSelfEmpSelfCertOptions( apNo, empNo )
{
	var ctrlElement = new String('emp'+apNo+'secondsempevidence'+empNo);
	var ctrldDiv = new String('sec3-ap'+apNo+'-second-selfemp-sc-'+empNo);

	switch( document.getElementById(ctrlElement).value ) // option 1 == "Accounts"
	{
		case "0": // none
		case "1": // accounts
			changeObjectDisplay(ctrldDiv, 'none');
			document.getElementById('emp'+apNo+'sjselfempscevidence1').value = 0; // reset 2nd job self-employed, self-cert evidence
			toggleAccWarning('emp'+apNo+'sjselfempscevidence1', 'sec3-second-accountant-warning-'+apNo);
			break;
		case "3": // self-cert 
			changeObjectDisplay(ctrldDiv, 'block');
		// case "2": // this option has been removed
			break;
	}
}

function calcDiscount()
{
	var purPrice = document.getElementById('purPrice');
	var councilVal = document.getElementById('councilVal');

	if( isNaN(parseFloat(purPrice.value)) || purPrice.value < 0 )
	{
		alert('Invalid purchase price value');
		purPrice.value = "";
		purPrice.focus();
	}
	if( isNaN(parseFloat(councilVal.value)) || councilVal.value < 0 )
	{
		alert('Invalid council valuation value');
		councilVal.value = "";
		councilVal.focus();
	}
	else
	{
		var discount = councilVal.value - purPrice.value;
			if ( discount < 0 ) discount = 0;											   
		document.getElementById('propcouncildiscount').value = discount;
		document.getElementById('propcouncildiscount').focus();
		document.getElementById('propcouncildiscount').blur();
	}
}