﻿/* PACKER here: http://dean.edwards.name/packer/*/

var lb_lastPostcodeChecked = null;

var lb_detailedMortgageTypes = { remortgage: {ltvPercent: 90.0, id: 1}, firstTimeBuyer: {ltvPercent: 85.0, id: 2}, selfCertifyRemortgage: {ltvPercent: 85.0, id: 3}, selfCertifyOther: {ltvPercent: 85.0, id: 4}, buyToLet: {ltvPercent: 85.0, id: 5}, purchase: {ltvPercent: 90.0, id: 6}, adverseRemortgage: {ltvPercent: 80.0, id: 7}, adverseOther: {ltvPercent: 80.0, id: 8} };

/* URLs for web services*/
var lb_ajaxBrokerSearchUrl = 'mortgages.leadbay.co.uk/webservice/broker_search_webservice.aspx';
var lb_ajaxProcessLeadUrl = 'mortgages.leadbay.co.uk/webservice/process_lead_webservice.aspx';

var lb_ajaxTestBrokerSearchUrl = 'testmortgages.leadbay.co.uk/webservice/broker_search_webservice.aspx';
var lb_ajaxTestProcessLeadUrl = 'testmortgages.leadbay.co.uk/webservice/process_lead_webservice.aspx';

/*var lb_ajaxTestBrokerSearchUrl = 'leadbay/webservice/broker_search_webservice.aspx';
var lb_ajaxTestProcessLeadUrl = 'leadbay/webservice/process_lead_webservice.aspx';*/

var arrSubmitButtonIDs;
arrSubmitButtonIDs = new Array();

var pdArray;
pdArray = new Array;

var submittedClientID = null;

/* ==================================================================================
   MORTGAGE FORM VALIDATION SETUP
   ================================================================================== */

/* Step 1*/
addValidation( [ $('LB_MortgageType') ], [{validator: radioButtonListHasValueValidator, validationData: null, errorMessages: ["Make a selection"]}], $('LB_MortgageType_Label'), $('LB_MortgageType_ErrorAdvice'), false, false, true, $('LB_Step1_NextButton'), true, true, false, null, null, null );
addValidation( [ $('LB_AmountToBorrow') ], [{validator: textboxHasValueValidator, validationData: null, errorMessages: ["Enter value, e.g. £225,500"]}, {validator: ValidIntegerValidator, validationData: null, errorMessages: ["Enter valid value"]}, {validator: GreaterThanValueValidator, validationData: {minValue: 24999}, errorMessages: ["Must be £25,000 or over"]}, {validator: LessThanValueValidator, validationData: {maxValue: 5000000}, errorMessages: ["Must be under £5,000,000"]} ], $('LB_AmountToBorrow_Label'), $('LB_AmountToBorrow_ErrorAdvice'), true, true, true, $('LB_Step1_NextButton'), false, true, false, null, null, null, [addCommasToNumberTextbox] );
/*addValidation( [ $('LB_MortgagePeriod') ], [{validator: selectHasValueValidator, validationData: null, errorMessages: ["Make a selection"]}], $('LB_MortgagePeriod_Label'), $('LB_MortgagePeriod_ErrorAdvice'), false, false, true, $('LB_Step1_NextButton'), false, true, false, null, null, null );*/

/* Step 2*/
addValidation( [ $('LB_PropertyValue') ], [{validator: textboxHasValueValidator, validationData: null, errorMessages: ["Enter value, e.g. £250,000"]}, {validator: ValidIntegerValidator, validationData: null, errorMessages: ["Enter valid value"]}, {validator: GreaterThanValueValidator, validationData: {minValue: 24999}, errorMessages: ["Must be £25,000 or over"]}, {validator: LessThanValueValidator, validationData: {maxValue: 5000000}, errorMessages: ["Must be under £5,000,000"]} ], $('LB_PropertyValue_Label'), $('LB_PropertyValue_ErrorAdvice'), true, true, true, $('LB_Step2_NextButton'), false, true, false, null, null, null, [addCommasToNumberTextbox] );
addValidation( [ $('LB_FirstTimeBuyer') ], [{validator: radioButtonListHasValueValidator, validationData: null, errorMessages: ["Make a selection"]}], $('LB_FirstTimeBuyer_Label'), $('LB_FirstTimeBuyer_ErrorAdvice'), false, false, true, $('LB_Step2_NextButton'), true, true, false, null, null, null );
addValidation( [ $('LB_SelfCertifyIncome') ], [{validator: radioButtonListHasValueValidator, validationData: null, errorMessages: ["Make a selection"]}], $('LB_SelfCertifyIncome_Label'), $('LB_SelfCertifyIncome_ErrorAdvice'), false, false, true, $('LB_Step2_NextButton'), true, true, false, null, null, null );

/* Step 2b*/
var lb_amountToBorrowValidator2 = addValidation( [ $('LB_AmountToBorrow2') ], [{validator: textboxHasValueValidator, validationData: null, errorMessages: ["Enter value, e.g. £225,500"]}, {validator: ValidIntegerValidator, validationData: null, errorMessages: ["Enter valid value"]}, {validator: GreaterThanValueValidator, validationData: {minValue: 24999}, errorMessages: ["Must be £25,000 or over"]}, {validator: LessThanValueValidator, validationData: {maxValue: 5000000}, errorMessages: ["Must be under £5,000,000"]}, {validator: DetailedLtvValidator, validationData: $('LB_PropertyValue2'), errorMessages: ["Amount to borrow is more than ###MAXLTV###% of property value. Amend borrow amount or property value."]} ], $('LB_AmountToBorrow2_Label'), $('LB_AmountToBorrow2_ErrorAdvice'), true, true, true, $('LB_Step2b_NextButton'), false, false, false, null, null, null, [addCommasToNumberTextbox] );
addValidation( [ $('LB_PropertyValue2') ], [{validator: textboxHasValueValidator, validationData: null, errorMessages: ["Enter value, e.g. £250,000"]}, {validator: ValidIntegerValidator, validationData: null, errorMessages: ["Enter valid value"]}, {validator: GreaterThanValueValidator, validationData: {minValue: 24999}, errorMessages: ["Must be £25,000 or over"]}, {validator: LessThanValueValidator, validationData: {maxValue: 5000000}, errorMessages: ["Must be under £5,000,000"]}, {validator: FireAmountToBorrowValidator, validationData: $('LB_AmountToBorrow2'), errorMessages: null} ], $('LB_PropertyValue2_Label'), $('LB_PropertyValue2_ErrorAdvice'), true, true, true, $('LB_Step2b_NextButton'), false, false, false, [lb_amountToBorrowValidator2], null, null, [addCommasToNumberTextbox] );

/* Step 3*/
addValidation( [ $('LB_FirstName') ], [{validator: textboxHasValueValidator, validationData: null, errorMessages: ["Enter first name"]}, {validator: RegexValidator, validationData: "^[-`'\\wÁáĆćÉéÍíĹĺŃńÓóŔŕŚśÚúÝýŹźÀàÈèÌìÒòÙùÂâĈĉÊêĜĝĤĥÎîĴĵÔôŜŝÛûŴŵŶŷÄäËëÏïÖöÜüŸÿßÃãẼẽĨĩÑñÕõŨũỸỹÇçĢģĶķĻļŅņŖŗŞşŢţĐđŮůǍǎČčĎďĚěǏǐĽľŇňǑǒŘřŠšŤťǓǔŽžĀāĒēĪīŌōŪūǢǣǖǘǚǜĂăĔĕĞğĬĭŎŏŬŭĊċĖėĠġİıŻżĄąĘęĮįǪǫŲųḌḍḤḥḶḷḸḹṂṃṆṇṚṛṜṝṢṣṬṭŁłŐőŰűĿŀĦħÐðÞþŒœÆæØøÅåƏə\\s]{2,50}$", errorMessages: ["Enter valid name"]}, {validator: RegexValidator, validationData: "^[\\D]{2,}$", errorMessages: ["Enter valid name"]} ], $('LB_FirstName_Label'), $('LB_FirstName_ErrorAdvice'), true, false, true, $('LB_Step3_FinishButton'), false, false, false, null, null, null );
addValidation( [ $('LB_LastName') ], [{validator: textboxHasValueValidator, validationData: null, errorMessages: ["Enter last name"]}, {validator: RegexValidator, validationData: "^[-`'\\wÁáĆćÉéÍíĹĺŃńÓóŔŕŚśÚúÝýŹźÀàÈèÌìÒòÙùÂâĈĉÊêĜĝĤĥÎîĴĵÔôŜŝÛûŴŵŶŷÄäËëÏïÖöÜüŸÿßÃãẼẽĨĩÑñÕõŨũỸỹÇçĢģĶķĻļŅņŖŗŞşŢţĐđŮůǍǎČčĎďĚěǏǐĽľŇňǑǒŘřŠšŤťǓǔŽžĀāĒēĪīŌōŪūǢǣǖǘǚǜĂăĔĕĞğĬĭŎŏŬŭĊċĖėĠġİıŻżĄąĘęĮįǪǫŲųḌḍḤḥḶḷḸḹṂṃṆṇṚṛṜṝṢṣṬṭŁłŐőŰűĿŀĦħÐðÞþŒœÆæØøÅåƏə\\s]{2,50}$", errorMessages: ["Enter valid name"]}, {validator: RegexValidator, validationData: "^[\\D]{2,}$", errorMessages: ["Enter valid name"]} ], $('LB_LastName_Label'), $('LB_LastName_ErrorAdvice'), true, false, true, $('LB_Step3_FinishButton'), false, false, false, null, null, null );
addValidation( [ $('LB_EmailAddress') ], [{validator: textboxHasValueValidator, validationData: null, errorMessages: ["Enter e-mail address"]}, {validator: EmailAddressValidator, validationData: null, errorMessages: ["Invalid e-mail address"]} ], $('LB_EmailAddress_Label'), $('LB_EmailAddress_ErrorAdvice'), true, false, true, $('LB_Step3_FinishButton'), false, false, false, null, null, null );
addValidation( [ $('LB_PhoneNumber') ], [{validator: textboxHasValueValidator, validationData: null, errorMessages: ["Enter number"]}, {validator: UkPhoneNumberValidator, validationData: null, errorMessages: UkPhoneNumberErrorMessages} ], $('LB_PhoneNumber_Label'), $('LB_PhoneNumber_ErrorAdvice'), true, false, true, $('LB_Step3_FinishButton'), false, false, false, null, null, null );
addValidation( [ $('LB_AlternatePhoneNumber') ], [{validator: textboxHasValueValidator, validationData: null, errorMessages: ["Enter number"]}, {validator: UkPhoneNumberValidator, validationData: null, errorMessages: UkPhoneNumberErrorMessages} ], $('LB_AlternatePhoneNumber_Label'), $('LB_AlternatePhoneNumber_ErrorAdvice'), true, false, true, $('LB_Step3_FinishButton'), false, false, false, null, null, null );
addValidation( [ $('LB_FirstLineAddress') ], [{validator: textboxHasValueValidator, validationData: null, errorMessages: ["Enter address"]}, {validator: RegexValidator, validationData: "^[-`'&:\\.,/\\\\\\(\\)\\wÁáĆćÉéÍíĹĺŃńÓóŔŕŚśÚúÝýŹźÀàÈèÌìÒòÙùÂâĈĉÊêĜĝĤĥÎîĴĵÔôŜŝÛûŴŵŶŷÄäËëÏïÖöÜüŸÿßÃãẼẽĨĩÑñÕõŨũỸỹÇçĢģĶķĻļŅņŖŗŞşŢţĐđŮůǍǎČčĎďĚěǏǐĽľŇňǑǒŘřŠšŤťǓǔŽžĀāĒēĪīŌōŪūǢǣǖǘǚǜĂăĔĕĞğĬĭŎŏŬŭĊċĖėĠġİıŻżĄąĘęĮįǪǫŲųḌḍḤḥḶḷḸḹṂṃṆṇṚṛṜṝṢṣṬṭŁłŐőŰűĿŀĦħÐðÞþŒœÆæØøÅåƏə\\s]{2,128}$", errorMessages: ["Enter valid address"]} ], $('LB_FirstLineAddress_Label'), $('LB_FirstLineAddress_ErrorAdvice'), true, false, true, $('LB_Step3_FinishButton'), false, false, false, null, null, null );
var lb_postcodeValidator = addValidation( [ $('LB_Postcode') ], [{validator: textboxHasValueValidator, validationData: null, errorMessages: ["Enter postcode"]}, {validator: PostcodeValidator, validationData: null, errorMessages: ["Enter valid postcode"]} ], $('LB_Postcode_Label'), $('LB_Postcode_ErrorAdvice'), true, false, true, $('LB_Step3_FinishButton'), false, false, false, null, null, null );
addValidation( [ $('LB_DateOfBirth_Day'), $('LB_DateOfBirth_Month'), $('LB_DateOfBirth_Year') ], [{validator: dateGroupValidator, validationData: null, errorMessages: ["Select date of birth", "Invalid date"]}, {validator: ageValidator, validationData: {minAge: 18, maxAge: 65}, errorMessages: ["Must be 18 or over", "Must be 65 or under"]} ], $('LB_DateOfBirth_Label'), $('LB_DateOfBirth_ErrorAdvice'), false, false, true, $('LB_Step3_FinishButton'), true, false, false, null, null, null );

/* ==================================================================================
   MORTGAGE FORM EVENT SETUP
   ================================================================================== */

/* Mortgage Type on Step 1 - defines what is visible on Step 2*/
addEvent( $('LB_MortgageType'), 'onclick', mortgageTypeChange );
addEvent( $('LB_MortgageType_2'), 'onclick', mortgageTypeChange );
addEvent( $('LB_MortgageType_3'), 'onclick', mortgageTypeChange );

/* Back, Next, Finish buttons*/
addEvent( $('LB_Step1_NextButton'), 'onclick', LB_Step1_NextButton_Event_Click );

addEvent( $('LB_Step2_BackButton'), 'onclick', LB_Step2_BackButton_Event_Click );
addEvent( $('LB_Step2_NextButton'), 'onclick', LB_Step2_NextButton_Event_Click );

addEvent( $('LB_Step2b_BackButton'), 'onclick', LB_Step2b_BackButton_Event_Click );
addEvent( $('LB_Step2b_NextButton'), 'onclick', LB_Step2b_NextButton_Event_Click );

addEvent( $('LB_Step3_BackButton'), 'onclick', LB_Step3_BackButton_Event_Click );
addEvent( $('LB_Step3_FinishButton'), 'onclick', LB_Step3_FinishButton_Event_Click );

/* Monitor Postcode field for changes*/
addEvent( $('LB_Postcode'), 'onkeyup', getBrokerName );
addEvent( $('LB_Postcode'), 'onblur', getBrokerName );
addEvent( $('LB_Postcode'), 'onchange', getBrokerName );

function showPD(pdDetails)
{
    var pdTable = document.createElement("table"); 
    var providerCount = 0;
    pdArray.extend(pdDetails);
    arrSubmitButtonIDs.length = 0; 
    $('LB_PdTableDiv').innerHTML = '';
    $('LB_ConsentDiv').innerHTML = "Based on your mortgage details we have selected:";
    $('LB_ConsentDivBottom').innerHTML = "Click <b>SUBMIT</b> to confirm that you are happy to be contacted by telephone or email and you agree to our " + getPrivacyPolicyText();
    $('LB_ConsentDivBottom').setAttribute('style', 'display: block; font-size: 12px;');
    $('LB_ConsentDivBottom').style.display = 'block';
   $('LB_ConsentDivBottom').style.fontSize = '12px';
	$('LB_ConsentDiv').style.display = "block";
	$('LB_Step3_FinishButton').style.display = 'none';
    for (var pdIndex = 0; pdIndex < pdDetails.length; pdIndex++ )
    {
          /* get the current provider in the loop*/
          var currpdDetail =  pdDetails[pdIndex];
          
          /*###  NEW ROW ###*/
          var newRow = document.createElement("tr");
          newRow.className = 'LB_PdRow';
         
          /*###  IMAGE CELL ###*/
          var imgCell = document.createElement("td");
          imgCell.className = 'LB_PdImageCell';
          
          var imgEl = document.createElement("img");
          imgEl.setAttribute("src", currpdDetail.logoUrl);
          if(!window.ie)
            {imgEl.style.margin = '5px 5px 0px 5px';}
          else 
            {imgEl.style.margin = '5px';}
         
         imgCell.appendChild(imgEl);
         newRow.appendChild(imgCell);
        
        
          /*###  TEXT CELL ###*/
          var textCell = document.createElement("td");
          textCell.className = 'LB_PdTextCell';
          textCell.vAlign = 'middle';
          if(currpdDetail.clientType && currpdDetail.clientType == '4' )
          {
                providerCount++;
                textCell.innerHTML += '<div><b>' + currpdDetail.companyName + '</b><br />Based on the information you have given us, this mortgage provider has competitive rates that are likely to suit your requirements.</div>';
          }
          else
          {
                textCell.innerHTML += '<div><b>' + currpdDetail.companyName + '</b><br />This mortgage adviser will give you advice on mortgage products from a range of lenders.</div>';
          } 
          newRow.appendChild(textCell);
        /*###  BUTTON CELL ###*/
        var buttonCell  = document.createElement("td");
        buttonCell.vAlign = 'middle';
        buttonCell.setAttribute("valign", "middle");
        buttonCell.className = 'LB_PdButtonCell';
        
         /* create the submit button with id from webservice*/
        var buttonEl = document.createElement("input");
        buttonEl.type = "button";
        buttonEl.value  ="Submit";
        buttonEl.className = "LB_Button LB_Next_Button";
        buttonEl.id = currpdDetail.clientId;
        
        /* add ID to array of submit button IDs for iteration in other functions*/
        arrSubmitButtonIDs.extend([currpdDetail.clientId]);
        buttonCell.fontSize = '120%;'
        buttonCell.appendChild(buttonEl);
        newRow.appendChild(buttonCell);
        
        /*###  ADD ROW TO TABLE ###  */
        pdTable.appendChild(newRow);
        
        /*###  ADD BLANK ROW FOR SPACING ###*/
        var blankRow = document.createElement("tr"); 
        var blankCell = document.createElement("td"); 
        
        blankCell.setAttribute("colspan", "3");
        blankCell.style.fontSize = '1px';
        blankCell.innerHTML = '<img src=\'https://forms.leadbay.co.uk/Mortgages/HtmlIntegration/Images/rowSpacer.gif\' />';
        blankRow.appendChild(blankCell);
        pdTable.appendChild(blankRow);
    } 
    if(providerCount != 0)
        {
              $('LB_ConsentDiv').innerHTML = "Select which mortgage specialist you would like to speak to:";  
        }  
    $('LB_PdTableDiv').innerHTML = '<table cellspacing=\'0\' cellpadding=\'0\' id=\'LB_PdTable\'>' + pdTable.innerHTML + '</table>';
}

function addValidationToSubmitButtons()
{
    for (var arrIndex = 0; arrIndex < arrSubmitButtonIDs.length; arrIndex++ )
       {
            addEvent($(arrSubmitButtonIDs[arrIndex]), 'onclick', LB_Step3_FinishButton_Event_Click );
            $(arrSubmitButtonIDs[arrIndex]).validators = new Array();
            $(arrSubmitButtonIDs[arrIndex]).validators.extend($('LB_Step3_FinishButton').validators);
       }    
}

function getPrivacyPolicyText()
{
    if(typeof(lb_privacyPolicyUrl) != 'undefined' && lb_privacyPolicyUrl != '')
    { 
        lb_privacyPolicyUrl = lb_privacyPolicyUrl.trim(); 
        
        if (!(lb_privacyPolicyUrl.indexOf("http") >= 0 || lb_privacyPolicyUrl.indexOf("https") >= 0 ))
            {lb_privacyPolicyUrl = 'http://' + lb_privacyPolicyUrl;}
            
        return '<a target=\'_blank\' href=\"' + lb_privacyPolicyUrl + '\">privacy policy</a>.'; 
    }
    else
    {
        return 'privacy policy.';
    }
}    

function mortgageTypeChange()
{
	if( this == window )
	{
		sessionStartPing( "MORTGAGEHTML10", "MORTGAGE" );
	}

	var propertyValueLabel = "What is the estimated value of the property you want to buy?";
	var firstTimeBuyerDivDisplay = "none";

	switch( getRadioButtonListSelectedValue('LB_MortgageType') )
	{
		case 'buy':
		{
			firstTimeBuyerDivDisplay = "";
			break;
		}

		case 'remortgage':
		{
			propertyValueLabel = "What is the estimated value of the property you want to remortgage?";
			break;
		}
	}

	$('LB_FirstTimeBuyer_Div').style.display = firstTimeBuyerDivDisplay;
	$('LB_PropertyValue2_Label').innerHTML = $('LB_PropertyValue_Label').innerHTML = propertyValueLabel;
}

/* ==================================================================================
   MORTGAGE FORM BUTTON EVENT HANDLERS
   ================================================================================== */

function findElementPosition(element)
{
	var curleft = curtop = 0;
	if (element.offsetParent)
	{
		curleft = element.offsetLeft;
		curtop = element.offsetTop;
		while (element = element.offsetParent)
		{
			curleft += element.offsetLeft;
			curtop += element.offsetTop;
		}

	}

	return {left: curleft, top: curtop};
}

/* Step 1*/
function LB_Step1_NextButton_Event_Click( event )
{
	var event = new Event(event);
	
	setCurrentControlFocus( event.target );

	if( validateMultiple( event ) )
	{
		/* Change the visible wizard step	*/
		$('LB_Step1').className = 'LB_FormStep LB_FormStepHidden';
		$('LB_Step2').className = 'LB_FormStep LB_FormStepVisible';

		/* Update the status of this session in the database*/
		sessionStepPing( "STEP2", 0 );
	}
}

/* Step 2*/
function LB_Step2_BackButton_Event_Click( event )
{
	var event = new Event(event);
	setCurrentControlFocus( event.target );

	$('LB_Step2').className = 'LB_FormStep LB_FormStepHidden';
	$('LB_Step1').className = 'LB_FormStep LB_FormStepVisible';
}

function LB_Step2_NextButton_Event_Click( event )
{
	var event = new Event(event);
	setCurrentControlFocus( event.target );

	if( validateMultiple( event ) )
	{
		$('LB_Step2').className = 'LB_FormStep LB_FormStepHidden';

		/* Copy off the values from PropertyValue and AmountToBorrow into the replica boxes on Step2b. If the
		 LTV is out of whack then we can re-present the boxes to the user and get them to adjust the values*/
		$('LB_PropertyValue2').value = $('LB_PropertyValue').value;
		$('LB_AmountToBorrow2').value = $('LB_AmountToBorrow').value;

		var mortgageType = getRadioButtonListSelectedValue('LB_MortgageType');
		var firstTimeBuyer = parseInt(getRadioButtonListSelectedValue('LB_FirstTimeBuyer'));
		var selfCertifyIncome = parseInt(getRadioButtonListSelectedValue('LB_SelfCertifyIncome'));
		var ltvPercent = calculateLtvPercent( getFloatFromTextbox($('LB_AmountToBorrow')), getFloatFromTextbox($('LB_PropertyValue')) );

		var detailedMortgageType = getDetailedMortgageType( mortgageType, customerHasBadCredit(), firstTimeBuyer, selfCertifyIncome, ltvPercent );

		/* Re-check the Loan-To-Value now that we have ALL the information we need to make a decision (e.g. credit score)*/
		if( ltvPercent > detailedMortgageType.ltvPercent )
		{
			/* If Loan-To-Value is now too high, then we need to show user the Property Value and Amount To Borrow and get
			 them to change one*/
			$('LB_LtvProblem').innerHTML = 'Amount you wish to borrow is more than ' + detailedMortgageType.ltvPercent + '% of your property value. If you are able to increase your deposit please adjust the amount you wish to borrow.';
			$('LB_Step2b').className = 'LB_FormStep LB_FormStepVisible';

			/* Update the status of this session in the database*/
			sessionStepPing( "STEP2B", 0 );
		}
		else
		{
			/* Otherwise, if Loan-To-Value is fine, jump to last Step (Contact Details) as normal*/
			$('LB_Step3').className = 'LB_FormStep LB_FormStepVisible';

			/* Update the status of this session in the database*/
			sessionStepPing( "STEP3", 0 );

			/* We call this here in case they've gone back through the form and changed an earlier value - we now
			 need to get a new broker name for them as the type of lead might have changed*/
			getBrokerName(true);
		}
	}
}

/* Step 2b*/
function LB_Step2b_BackButton_Event_Click( event )
{
	var event = new Event(event);
	setCurrentControlFocus( event.target );

	/* Copy back the values from PropertyValue2 and AmountToBorrow2 into the original boxes on Step1 & 2.*/
	$('LB_PropertyValue').value = $('LB_PropertyValue2').value;
	$('LB_AmountToBorrow').value = $('LB_AmountToBorrow2').value;

	$('LB_Step2b').className = 'LB_FormStep LB_FormStepHidden';
	$('LB_Step2').className = 'LB_FormStep LB_FormStepVisible';
}

function LB_Step2b_NextButton_Event_Click( event )
{
	var event = new Event(event);
	setCurrentControlFocus( event.target );

	/* Copy back the values from PropertyValue2 and AmountToBorrow2 into the original boxes on Step1 & 2.*/
	$('LB_PropertyValue').value = $('LB_PropertyValue2').value;
	$('LB_AmountToBorrow').value = $('LB_AmountToBorrow2').value;

	if( validateMultiple( event ) )
	{
		$('LB_Step2b').className = 'LB_FormStep LB_FormStepHidden';
		$('LB_Step3').className = 'LB_FormStep LB_FormStepVisible';

		/* Update the status of this session in the database*/
		sessionStepPing( "STEP3", 0 );

		/* We call this here in case they've gone back through the form and changed an earlier value - we now
		 need to get a new broker name for them as the type of lead might have changed*/
		getBrokerName(true);
	}
}

/* Step 3*/
function LB_Step3_BackButton_Event_Click( event )
{
	var event = new Event(event);
	setCurrentControlFocus( event.target );

	$('LB_Step3').className = 'LB_FormStep LB_FormStepHidden';
	$('LB_Step2').className = 'LB_FormStep LB_FormStepVisible';

}

function LB_Step3_FinishButton_Event_Click( event )
{
	var event = new Event(event);
	setCurrentControlFocus( event.target );

	if( validateMultiple( event ) )
	{
	    submittedClientID = event.target.id;
        $(submittedClientID).value = "Submitting";
	
        for (var arrIndex = 0; arrIndex < arrSubmitButtonIDs.length; arrIndex++ )
           {
                /*find the companyname of the submitted client */
                if(pdArray[arrIndex].clientId == submittedClientID)
                    {
                        $('LB_BrokerNameThankYou').innerHTML = pdArray[arrIndex].companyName + ' ';
                    }  
                /*disable all the submit buttons    */
                $(arrSubmitButtonIDs[arrIndex]).disabled = true;
           }   

/*		var stepPosition = findElementPosition($('LB_Step3'));*/

/*		$('back').style.left = stepPosition.left;
		$('back').style.top = stepPosition.top;
		$('back').style.width = $('LB_Step3').offsetWidth;
		$('back').style.height = $('LB_Step3').offsetHeight;
		$('back').style.visibility = "visible";


		$('indicator').style.left = stepPosition.left + (($('LB_Step3').offsetWidth - $('indicator').offsetWidth) / 2) + "px";
		$('indicator').style.top = stepPosition.top + (($('LB_Step3').offsetHeight - $('indicator').offsetHeight) / 2) + "px";
		$('indicator').style.visibility = "visible";		*/
		
		setTimeout('revertSubmitButton()', 20000);
		
		submitLead();
	}
	
	return false;
}

function revertSubmitButton()
{
        for (var arrIndex = 0; arrIndex < arrSubmitButtonIDs.length; arrIndex++ )
           {
                $(arrSubmitButtonIDs[arrIndex]).disabled = false;
	            $(arrSubmitButtonIDs[arrIndex]).value = "Submit";
           }   
	
/*	$('LB_SubmitIndicator').style.visibility = "hidden";
	$('LB_AlphaLayer').style.visibility = "hidden";*/

	return;
}

/* ==================================================================================
   JSON AJAX MORTGAGE CALLBACK FUNCTIONS
   ================================================================================== */

function BrokerSearchCallback(BrokerDetails, ProviderArray)
{
	if( BrokerDetails )
	{
		if( BrokerDetails.Error.ErrorNumber == '0' )
		{
		    arrSubmitButtonIDs.length = 0;
			showPD(ProviderArray);
            addValidationToSubmitButtons();
/*			var BrokerText = BrokerDetails.Broker.DisplayText;
			BrokerText = BrokerText.replace('Based on your mortgage requirements we have selected an FSA regulated broker called ', '');
			BrokerText = BrokerText.replace(' to help you with your enquiry. ', '');
			BrokerText = BrokerText.replace('Please click Submit to confirm that you are happy for them to contact you by telephone.', '');
			$('LB_BrokerName').innerHTML = BrokerText.replace(/&amp;/g, "&");
			$('LB_Consent').style.visibility = 'visible';*/
			$('LB_SessionId').value = BrokerDetails.Broker.Id;
			$('LB_Step3_FinishButton').disabled = false;
			$('LB_Step3_FinishButton').value = "Submit";
		}
		else
		{
			$('LB_BrokerName').innerHTML = 'ERROR ' + BrokerDetails.Error.ErrorMessage;
			/*$('LB_Consent').style.visibility = 'hidden';*/
			$('LB_SessionId').value = '';
		}
	}
}

function ProcessLeadCallback( returnData )
{
	var grossLeadPrice = 0;

	if( returnData.Lead && returnData.Lead.GrossPrice )
	{
		grossLeadPrice = returnData.Lead.GrossPrice;
	}

	switch( returnData.Error.ErrorNumber )
	{
		case '235':
		case '0':
		{
			/* Update the status of this session in the database*/
			sessionStepPing( "FINISH", 1, "&lp=" + grossLeadPrice );

			if( lb_redirectThankYouPage )
			{
				if( lb_leadPriceQueryStringParameterName )
				{
					if( lb_thankYouPageHref.indexOf("?") > 0 )
					{
						lb_thankYouPageHref += "&" + lb_leadPriceQueryStringParameterName + "=" + grossLeadPrice;
					}
					else
					{
						lb_thankYouPageHref += "?" + lb_leadPriceQueryStringParameterName + "=" + grossLeadPrice;
					}
				}
							
				window.location.href = lb_thankYouPageHref;
			}
			else
			{
				$('LB_Step3').className = 'LB_FormStep LB_FormStepHidden';
				$('LB_Step4').className = 'LB_FormStep LB_FormStepVisible';
				createMarketingMessageElement(returnData.Lead.BrokerMarketingMessage);
			}
			
			break;
		}

		case '100':
		{
			setControlToErrorState( lb_postcodeValidator, "Enter valid UK postcode" );
			break;
		}
		
		default:
		{
			/* Unknown error*/
			break;
		}
	}
}

/* ==================================================================================
   JSON AJAX MORTGAGE CALLOUT FUNCTIONS
   ================================================================================== */

function buildBasicQueryString()
{
	var postcode = $('LB_Postcode').value.trim().toUpperCase();

	var queryString = '?';
	
	switch( getRadioButtonListSelectedValue('LB_MortgageType') )
	{
		case 'remortgage':
		{
			queryString += 'Mortgage_Type=1';
			break;
		}				
		case 'buyToLet':
		{
			queryString += 'Mortgage_Type=5';
			break;
		}
		case 'buy':
		{
			queryString += 'Mortgage_Type=6';
			break;
		}
	}

	queryString += '&Mortgage_Size=' + $('LB_AmountToBorrow').value;
	queryString += '&Property_Value=' + $('LB_PropertyValue').value;
	queryString += '&SelfCert=';
	queryString += getRadioButtonListSelectedValue('LB_SelfCertifyIncome') === null ? '0' : getRadioButtonListSelectedValue('LB_SelfCertifyIncome');
	queryString += '&BadCredit=';
	queryString += customerHasBadCredit() ? '1' : '0';
	queryString += '&FTB=';
	queryString += getRadioButtonListSelectedValue('LB_FirstTimeBuyer') == null ? '0' : getRadioButtonListSelectedValue('LB_FirstTimeBuyer');
	queryString += '&FP=0';
	queryString += '&Postcode=' + escape(postcode);
	queryString += '&Password=' + 'xxxx';
	queryString += '&IPAddress=fillip';
	queryString += '&AffiliateID=' + (lb_testing ? lb_testAffiliateId : lb_affiliateId);
	queryString += '&ajax=y&filladdress=1';
	queryString += '&lender=y';

	return queryString;
}

function getBrokerName(overrideIdenticalPostcodeCheck)
{
	var postcode = $('LB_Postcode').value.trim().toUpperCase();

	if( lb_lastPostcodeChecked == postcode && overrideIdenticalPostcodeCheck != true )
	{
		return;
	}
	else
	{
		lb_lastPostcodeChecked = postcode;
	}

	if( postcodeTest( postcode ) != -1 )
	{
		$('LB_PdTableDiv').innerHTML = '';
		arrSubmitButtonIDs.length = 0;
		$('LB_Step3_FinishButton').style.display = 'inline';
		$('LB_ConsentDiv').style.display = "none";
		$('LB_ConsentDivBottom').style.display = "none";
		$('LB_SessionId').value = '';
		$('LB_Step3_FinishButton').disabled = false;
		$('LB_Step3_FinishButton').value = "Submit";
		return;
	}

	$('LB_Step3_FinishButton').disabled = true;
	$('LB_Step3_FinishButton').value = "Searching...";

	var queryString = buildBasicQueryString();

	if( lb_testing )
	{
		remoteJson({"uri": getPageProtocol() + lb_ajaxTestBrokerSearchUrl + queryString});
	}
	else
	{
		remoteJson({"uri": getPageProtocol() + lb_ajaxBrokerSearchUrl + queryString});
	}

	return true;
}

function submitLead()
{
	if( $('LB_SessionId').value.length < 1 || $('LB_SessionId').value == '' )
	{
		getBrokerName();
	}

	var queryString = buildBasicQueryString();
	
	queryString += '&Title=&First_Name=' + $('LB_FirstName').value;
	queryString += '&Surname=' + $('LB_LastName').value;
	queryString += '&DOBday=' + $('LB_DateOfBirth_Day').value;
	queryString += '&DOBmonth=' + $('LB_DateOfBirth_Month').value;
	queryString += '&DOByear=' + $('LB_DateOfBirth_Year').value;
	queryString += '&adr1=' + $('LB_FirstLineAddress').value;
	queryString += '&adr2=&town=&county=';
	queryString += '&Home_Phone=' + $('LB_PhoneNumber').value;
	queryString += '&Work_Phone=' + $('LB_AlternatePhoneNumber').value;
	queryString += '&Mobile_Phone=&Email=' + $('LB_EmailAddress').value;
	queryString += '&Mortgage_Time_Scale=1&Payment_Term=' + $('LB_MortgagePeriod').value;
	queryString += '&Other_Info=&sessionid=' + $('LB_SessionId').value;
	queryString += '&ClientIDWinner=' + submittedClientID;;
	queryString += '&TrackingCode='
	if(typeof(lb_trackingCode) != 'undefined')
	    queryString += escape(lb_trackingCode.toUpperCase());
	queryString += '&Keywords='
	if(typeof(lb_keywords) != 'undefined')
	    queryString += escape(lb_keywords);
	queryString += '&PageHref=' + escape(window.location.href);
	queryString += '&FormVersion=' + getFormVersion();
    if (typeof(lb_scriptTagForm)!='undefined' && lb_scriptTagForm== true)
	    queryString += '&ScriptTag=y';
	    
	if( lb_testing )
	{
		remoteJson({"uri": getPageProtocol() + lb_ajaxTestProcessLeadUrl + queryString});
	}
	else
	{
		remoteJson({"uri": getPageProtocol() + lb_ajaxProcessLeadUrl + queryString});
	}
	
	return true;
}

/* ==================================================================================
   VALIDATORS - MORTGAGE SPECIFIC
   ================================================================================== */

function FireAmountToBorrowValidator( event, controls, validation, extraValidators )
{
	/* Check if AmountToBorrow is filled out*/
	if( validation.validationData.value.length > 0 )
	{
		delayedValidate.attempt( event, extraValidators[0] );
	}
	
	return {errorCode: -1};
}

function BasicLtvValidator( event, controls, validation, extraValidators )
{
	/* Check if PropertyValue is filled out*/
	if( validation.validationData.value.length > 0 )
	{
		var amountToBorrow = parseFloat(controls[0].value);
		var propertyValue = getFloatFromTextbox(validation.validationData);

		var loanToValuePercent = calculateLtvPercent( amountToBorrow, propertyValue );

		if( loanToValuePercent > 110.0 )
		{
			return {errorCode: 0};
		}
	}
	
	return {errorCode: -1};
}

function DetailedLtvValidator( event, controls, validation, extraValidators )
{
	/* Check if PropertyValue is filled out*/
	if( validation.validationData.value.length > 0 )
	{
		var mortgageType = getRadioButtonListSelectedValue('LB_MortgageType');
		var firstTimeBuyer = parseInt(getRadioButtonListSelectedValue('LB_FirstTimeBuyer'));
		var selfCertifyIncome = parseInt(getRadioButtonListSelectedValue('LB_SelfCertifyIncome'));
		var ltvPercent = calculateLtvPercent( parseFloat(controls[0].value), getFloatFromTextbox(validation.validationData) );

		var detailedMortgageType = getDetailedMortgageType( mortgageType, customerHasBadCredit(), firstTimeBuyer, selfCertifyIncome, ltvPercent );

		if( ltvPercent > detailedMortgageType.ltvPercent )
		{
			return {errorCode: 0, errorMessage: validation.errorMessages[0].replace(/###MAXLTV###/, detailedMortgageType.ltvPercent) };
		}
	}
	
	return {errorCode: -1};
}


/* ==================================================================================
   UTILITY FUNCTIONS - MORTGAGE SPECIFIC
   ================================================================================== */

function calculateLtvPercent( amountToBorrow, propertyValue )
{
	return ( amountToBorrow / propertyValue ) * 100.0;
}

function customerHasBadCredit()
{
	if( $('LB_CCJ').checked || $('LB_MissedPayments').checked || $('LB_Bankrupt_IVA').checked )
	{
		return true;
	}
	
	return false;
}

/* Check Visio diagram named "Mortgage Types Flowchart.vsd" for a flowchart of this*/
function getDetailedMortgageType( basicMortgageType, badCredit, firstTimeBuyer, selfCertifyIncome, ltvPercent )
{
	switch( basicMortgageType )
	{
		case 'buy':
			if( firstTimeBuyer )
			{
			    var ftbCategory;
			    
			    if( firstTimeBuyer ) ftbCategory = lb_detailedMortgageTypes.firstTimeBuyer;
			    if( selfCertifyIncome ) ftbCategory = lb_detailedMortgageTypes.selfCertifyOther;
			    if( badCredit ) ftbCategory = lb_detailedMortgageTypes.adverseOther;
			    
                return ftbCategory;
			}
			else
			{
				if( badCredit )
				{
					return lb_detailedMortgageTypes.adverseOther;
				}
				else
				{
					if( selfCertifyIncome )
					{
						return lb_detailedMortgageTypes.selfCertifyOther;
					}
					else
					{
						return lb_detailedMortgageTypes.purchase;
					}
				}
			}
			
		case 'remortgage':
			if( selfCertifyIncome )
			{
				return lb_detailedMortgageTypes.selfCertifyRemortgage;
			}
			else
			{
				if( badCredit )
				{
					return lb_detailedMortgageTypes.adverseRemortgage;
				}
				else
				{
					return lb_detailedMortgageTypes.remortgage;
				}
			}

		case 'buyToLet':
			if( badCredit )
			{
				return lb_detailedMortgageTypes.adverseOther;
			}
			else
			{
				return lb_detailedMortgageTypes.buyToLet;
			}
	}
}

function getPrivacyPolicyText()
{
    if(typeof(lb_privacyPolicyUrl) != 'undefined' && lb_privacyPolicyUrl != '')
    { 
        lb_privacyPolicyUrl = lb_privacyPolicyUrl.trim(); 
        
        if (!(lb_privacyPolicyUrl.indexOf("http") >= 0 || lb_privacyPolicyUrl.indexOf("https") >= 0 ))
            {lb_privacyPolicyUrl = 'http://' + lb_privacyPolicyUrl;}
            
        return '<a target=\'_blank\' href=\"' + lb_privacyPolicyUrl + '\">privacy policy</a>.'; 
    }
    else
    {
        return 'privacy policy.';
    }
}    

function prefillFormFromQueryString()
{
    var prefillObject = {};
    convertQueryStringParamsToLower();
    
	if( lb_queryObject[lb_formPrefillQueryStringParameters.mortgageSize] )
	{    
	    prefillObject.mortgageSize = lb_queryObject[lb_formPrefillQueryStringParameters.mortgageSize];
	}
	
	if( lb_queryObject[lb_formPrefillQueryStringParameters.mortgageType] )
	{    
	    prefillObject.mortgageType = lb_queryObject[lb_formPrefillQueryStringParameters.mortgageType];
	}
	
	if( lb_queryObject[lb_formPrefillQueryStringParameters.mortgagePeriod] )
	{    
	    prefillObject.mortgagePeriod = lb_queryObject[lb_formPrefillQueryStringParameters.mortgagePeriod];
	}
	
	if( lb_queryObject[lb_formPrefillQueryStringParameters.propertyValue] )
	{    
	    prefillObject.propertyValue = lb_queryObject[lb_formPrefillQueryStringParameters.propertyValue];
	}
	
	if( lb_queryObject[lb_formPrefillQueryStringParameters.firstTimeBuyer] )
	{    
	    prefillObject.firstTimeBuyer = lb_queryObject[lb_formPrefillQueryStringParameters.firstTimeBuyer];
	}

	prefillForm(prefillObject)
}

function convertQueryStringParamsToLower()
{
    if( lb_formPrefillQueryStringParameters.mortgageSize ) lb_formPrefillQueryStringParameters.mortgageSize = lb_formPrefillQueryStringParameters.mortgageSize.toLowerCase();
    if( lb_formPrefillQueryStringParameters.mortgageType ) lb_formPrefillQueryStringParameters.mortgageType = lb_formPrefillQueryStringParameters.mortgageType.toLowerCase();
    if( lb_formPrefillQueryStringParameters.mortgagePeriod ) lb_formPrefillQueryStringParameters.mortgagePeriod = lb_formPrefillQueryStringParameters.mortgagePeriod.toLowerCase();
    if ( lb_formPrefillQueryStringParameters.propertyValue ) lb_formPrefillQueryStringParameters.propertyValue = lb_formPrefillQueryStringParameters.propertyValue.toLowerCase();
    if (lb_formPrefillQueryStringParameters.firstTimeBuyer ) lb_formPrefillQueryStringParameters.firstTimeBuyer = lb_formPrefillQueryStringParameters.firstTimeBuyer.toLowerCase();
}

function prefillForm(prefillObject)
{
	if( prefillObject.mortgageType )
	{
		$('LB_MortgageType').checked = false;
		$('LB_MortgageType_2').checked = false;
		$('LB_MortgageType_3').checked = false;

		switch( prefillObject.mortgageType )
		{
		    /* remortgage*/
			case '1': 
				$('LB_MortgageType_2').checked = true;
				break;
			/* buy*/
			case '6': 
				$('LB_MortgageType').checked = true;
				break;
			/* buytolet*/
			case '5': 
				$('LB_MortgageType_3').checked = true;
				break;
		}
		
        mortgageTypeChange()
		
	}
	
	if( prefillObject.mortgageSize )
	{
		$('LB_AmountToBorrow').value = prefillObject.mortgageSize;
	}
	
	if( prefillObject.mortgagePeriod)
	{
	    $('LB_MortgagePeriod').value = prefillObject.mortgagePeriod;
	    if( prefillObject.mortgagePeriod != $('LB_MortgagePeriod').value)
	        {$('LB_MortgagePeriod').value = 25;}
	}
	
	if( prefillObject.propertyValue )
	{
		$('LB_PropertyValue').value = prefillObject.propertyValue;
	}

	if( prefillObject.firstTimeBuyer && ( prefillObject.firstTimeBuyer == 'true' || prefillObject.firstTimeBuyer == '1') )
	{
		$('LB_FirstTimeBuyer').checked = true;
	}
	else
	{
	    if(prefillObject.firstTimeBuyer == 'false' || prefillObject.firstTimeBuyer == '0')
		    $('LB_FirstTimeBuyer_1').checked = true;
	}
	
    $('LB_Form').style.display = '';

	if( prefillObject.mortgageSize && prefillObject.mortgageType )
	{

		var errors = 0;
		
		if( $('LB_Step1_NextButton').validators )
		{
			for( var i = 0 ; i < $('LB_Step1_NextButton').validators.length ; i++ )
			{
				errors += delayedValidate.attempt( null, $('LB_Step1_NextButton').validators[i] );
			}
		}

		if( errors == 0 )
		{
			/* Change the visible wizard step	*/
			$('LB_Step1').className = 'LB_FormStep LB_FormStepHidden';
			$('LB_Step2').className = 'LB_FormStep LB_FormStepVisible';
		}
	}					
}

function createMarketingMessageElement(MarketingMessage)
{
    if(typeof(MarketingMessage) != 'undefined')
   {
        if(MarketingMessage != '')
        {
            MarketingMessage = MarketingMessage.replace(/&lt;/gi, '<').replace(/&gt;/gi, '>').replace(/&amp;/gi, '&').replace(/&quot;/gi, '"');
            $('LB_Step4').innerHTML = '<tr><td class="LB_Headline">Finished</td></tr><tr><td class="LB_FormStepContent" id="LB_Step4_Content"><br />Thank you for your enquiry.<br /><br />Your adviser will be in touch with you shortly.<br /><br />' + MarketingMessage +'<br /><br /></td></tr>'; 
        }   
   }      
}

function domreadyFunctions(){
    if(typeof(lb_prefillFromQS) != 'undefined' && lb_prefillFromQS == true)
        prefillFormFromQueryString();
    mortgageTypeChange();
    var myTips = new Tips($$('.LB_ToolTip'), {className: "LB_ToolTip", maxTitleChars: 1000});
}

if (typeof(lb_scriptTagForm)!='undefined' && lb_scriptTagForm== true)
{
    $('LB_ToolTipSelfCertify').title = "Do you need to self-certify your income? :: Self-certification mortgages/remortgages are available to those who find it difficult to prove their income, typically the self-employed. Reasons include:<ul><li>Accounts do not reflect their current income</li><li>Accounts are not readily available from an accountant</li><li>Income is made up of bonuses</li><li>Income fluctuates</li><li>Income is made up from dividends</li><li>Income comes from more than one source</li></ul>";  
    window.addEvent('domready',domreadyFunctions());
} 