var calcTabs = new Array();
var feeItems = new Array();
var disbursementItems = new Array();
var feeFields = new Array();
var disbursementFields = new Array();
var calcFees = new Object();
var thresholds = new Object();
var quoteData  = new Array();
var quoteStatus  = 'new';
var directInstruction = false;
var quoteType  = 'sale';
var formValid  = '';
var saleValid  = '';
var purchaseValid  = '';
var calcType = 'quote';
var splitbuysaleFees = 1;
var countyAreas = new Object();
var isIE, isMozilla, isSafari, isOpera = false;
var currency = '£';
var mySpacer = '&#xA0;';
var calcMethod = '1';
var purchaseFeeDiscount=0;
var saleFeeDiscount=0;

function addFee(fieldName,sectionName) {
   feeItems[fieldName]=sectionName;
   var theIndex = 0;
   if ( feeFields.length ) {
       theIndex = feeFields.length;
   }
   feeFields[theIndex] = fieldName;
}

function addDisbursement(fieldName,sectionName) {
   disbursementItems[fieldName]=sectionName;
   var theIndex = 0;
   if ( disbursementFields.length ) {
       theIndex = disbursementFields.length;
   }
   disbursementFields[theIndex] = fieldName;
}

function validate(fieldObject,dataType,fieldLabel) {
	if ( fieldObject && fieldObject.value ) {
	   //allow commas.
	   if ( dataType == 'numeric' ) {
	      if ( isNaN(fieldObject.value) ) {
	        setErrorMessage(fieldObject.id,'Please enter numbers only for '+fieldLabel);
		return 0;
	      }      
	   }
	}
	return 1;
}

function clearErrorMessage(labelID,theLabel) {
   if ( theLabel ) {
      theLabel.innerHTML = '';
   } 

   if ( labelID ) {
      var messageLabelID = labelID+'MessageLabel';
      if ( document.getElementById(messageLabelID) ) {
        document.getElementById(messageLabelID).innerHTML = '';
      }
   }
        // Generic message to point out quote submission failed
        if ( document.getElementById('quoteStatusMessage') ) {
             document.getElementById('quoteStatusMessage').innerHTML = mySpacer;
        } 
}

function setErrorMessage(labelID,message,theLabel,warningOnly) {
   if ( labelID && message) {
      var messageLabelID = labelID+'MessageLabel';
      if ( theLabel || document.getElementById(messageLabelID) ) {
        if ( theLabel ) {
           theLabel.innerHTML = message;
        }
        else {
 	   document.getElementById(messageLabelID).innerHTML = message;
        } 
        // Generic message to point out quote submission failed
        if ( document.getElementById('quoteStatusMessage') && !warningOnly) {
             document.getElementById('quoteStatusMessage').innerHTML = 'There were errors in the information provided, please review the page and re-submit where appropriate to obtain an accurate '+calcType+'.';
        } 
      }
      
      else {
        alert('Did not find object with ID '+messageLabelID);
      }
   }
}

function setBtnStatus(buttonID,status) {

       if (document.getElementById( buttonID ) ) {
       
         switch ( status ) {
            case 'recalc' : {	 	
	    	 	    	 document.getElementById(buttonID).value='Re-calculate '+calcType;
				 document.getElementById(buttonID).style.display='block';
	    	 	    	 //document.getElementById(buttonID).style.backgroundColor='#ffcccc';
				 return false;

			    }						       
            case 'init' : {	 	
	    	 	    	 document.getElementById(buttonID).value='Get '+calcType;
				 document.getElementById(buttonID).style.display='block';
	    	 	    	 //document.getElementById(buttonID).style.backgroundColor='#f4f4f4';
				 return false;
			    }						       
   	  }						       
       }						       

}

function checkAuthority() {
   if ( document.getElementById('purchase_authority') &&
        document.getElementById('purchase_authority').options.length == 1 ) {
      changeAuthority(document.getElementById('purchase_county'),document.getElementById('purchase_authority'));
   }
}

function checkBoxChanged(type) {
    if ( quoteStatus == 'new' ) {
       return 0;
    }
    document.getElementById('outcome_container').style.display='none';
}

function radioChanged(type, buttonGroup, thisValue ) { 
    if ( quoteStatus == 'new' ) {
       return 0;
       //alert('Not calculated yet');
    }

    if ( quoteData[type][buttonGroup] &&	
         quoteData[type][buttonGroup] != thisValue ) {
	 document.getElementById('outcome_container').style.display='none';
	 return 1;
	 //alert('Radio button changed from '+quoteData[type][buttonGroup] + ' to '+thisValue);
    }
    else {
    	 quoteData[type][buttonGroup] = thisValue;
	 return 0;
    }
}

function calcQuote() {
	 formValid  = '';
	 var theForm = '';
	 clearErrorMessages();
         undoBypass();
	 if ( quoteType && 
	      ( quoteType == 'sale' || quoteType == 'buysale' ) ) {

            // New method of lookup up fees based upon postcode
           if ( document.getElementById('sale_postcode') && document.getElementById('sale_postcode').onchange ) {
                document.getElementById('sale_postcode').onchange('sale_postcode');
           } 


	    theForm = document.getElementById('saleForm');
	    if ( document.getElementById('sale_price') ) {
	       if ( document.getElementById('sale_price').value.length &&
	            document.getElementById('sale_price').value == 0 || (!document.getElementById('sale_price').value.length ) ) {
		    setErrorMessage('sale_price','Sale price must be greater than 0');
		    return false;
	       }
	       else {
	            if ( !validate(document.getElementById('sale_price'),'numeric','Sale price') ) {
		       return false;
		    }
	       }	

	    }
            if ( document.getElementById('sale_postcode') ) {
               if ( document.getElementById('sale_postcode').value.length &&
                    document.getElementById('sale_postcode').value == 0 || (!document.getElementById('sale_postcode').value.length ) ) {
                    setErrorMessage('sale_postcode','Sale postcode must be provided');
                    return false;
               }
               else {
                    if ( !validate(document.getElementById('sale_postcode'),'postcode','Sale property postcode') ) {
                       //return false;
                    }
               }        

            }
	    var type = "sale";
	    // Freehold or leasehold?
	    if ( !quoteData[type] ) {
	       quoteData[type] = new Array();
	    }
	    quoteData["sale"]["price"] = document.getElementById('sale_price').value;
	    if ( theForm.sale_tenure ) {
   	       for ( i = 0; i < theForm.sale_tenure.length; i++) {
	          if ( theForm.sale_tenure[i].checked ) {   
		     quoteData["sale"]["sale_tenure"] = theForm.sale_tenure[i].value;
		  }   
	       }
	    }	 

	    var saleLimit = thresholds['sale'][ quoteData["sale"]["sale_tenure"] ]['solicitors_fee'];
	    if  ( saleLimit && 
               parseFloat(document.getElementById('sale_price').value)>=saleLimit.limit ) {
                    //alert('Hiding Sale Output block');
	       	    document.getElementById('sale_output_data').style.display = 'none';
		    document.getElementById('sale_output_dataFS').style.display = 'none';
		    document.getElementById('sale_considerations').style.display='block';
		    document.getElementById('sale_considerationsFS').style.display='block';
		    document.getElementById('outcome_container').style.display='none';
		    setErrorMessage('sale_price','Sale price above threshold - see note below.');
		    return false;
	    }	       

	    var myFeeRange = calcFees[type][quoteData["sale"]["sale_tenure"]]['scaledfees']['solicitors_fee'];
	    for ( i = 1; i < myFeeRange.length; i++) {
	        if ( parseFloat(quoteData["sale"]["price"]) < parseFloat(myFeeRange[i].range) ) {
	           if ( document.getElementById(type+"_fee_subtotal") && calcMethod == 1 ) {
		      document.getElementById(type+"_fee_subtotal").value = currency+quoteData["sale"]["solicitors_fee"] ;
                   }
		   document.getElementById("solicitors_fee").value = quoteData["sale"]["solicitors_fee"] ;
                   
		   if ( myFeeRange[i].vatrate ) {
		      quoteData["sale"]["solicitors_fee_vat"] = (parseFloat(quoteData["sale"]["solicitors_fee"]) * (myFeeRange[i].vatrate/100) ).toFixed(2);
		      document.getElementById("solicitors_fee_vat").value = quoteData["sale"]["solicitors_fee_vat"];
		      if ( document.getElementById("sale_fee_subtotal_vat") && calcMethod == 1) {
		         document.getElementById("sale_fee_subtotal_vat").value = currency+quoteData["sale"]["solicitors_fee_vat"];
                      }
		      
		   };
		   break;
	        }
		quoteData["sale"]["solicitors_fee"] = myFeeRange[i].value;
	    }

            // KMG Attempt to capture random bug from TGBaynes
            if ( quoteData["sale"]["solicitors_fee"] == '' || quoteData["sale"]["solicitors_fee"] == null ) {
               alert("This is rather embarrassing - I've detected a really unexpected technical fault with the calculator.\nPlease call us 0117 325 0200 and ask for Andrew.");
               setErrorMessage('sale_price','An error occurred - unable to calculate correct fee');
               return false;
            } 

            // Calc 'Fixed fees' enhancement for TGB
            var myFixedFees = calcFees[type][quoteData["sale"]["sale_tenure"]]['fixedfees'];
            quoteData["sale"]["fixedfees_subtotal"] = 0;
            quoteData["sale"]["fixedfees_subtotal_vat"] = 0;
            if ( myFixedFees ) {
              for ( i = 1; i < myFixedFees.length; i++) {
                if ( document.getElementById(myFixedFees[i].id) ) {
                   var thisItem = parseFloat(myFixedFees[i].value);

                   // For some fixed fees they only get charged ONCE if a joint sale/purchase is required
                   // At present there is only one fixed fee which may be affected - bank transfer fee
                   if ( splitbuysaleFees == 1 && quoteType == 'buysale' && myFixedFees[i].id == 'sale_wire_fee' ) {
                      thisItem = parseFloat(myFixedFees[i].value/2);
                   }

		   // Fee may be 0 in which case we hide it
		   // This is to support items which may be chargeable in Leasehold , but not in freehold
		   // Is this field conditional? Supports only a checkbox flag at present to identify such fields
		   if ( myFixedFees[i].conditional ) {
			if ( document.getElementById(myFixedFees[i].conditional) ) {
			    if  ( !document.getElementById(myFixedFees[i].conditional).checked ) {
			       thisItem = 0;
			    }   
			    else {
		               if ( document.getElementById(myFixedFees[i].id+'Label') ) {
			          document.getElementById(myFixedFees[i].id).style.display = 'block';
		                  document.getElementById(myFixedFees[i].id+'Label').style.display = 'block';
		                  document.getElementById(myFixedFees[i].id+'Label').parentNode.style.display = 'block';
                               }
			    }			      
			}   
		   }		   

                   // KMG Mar 2009 Same as above - but reverse logic - if the checkbox is set Fee is NOT charged
                   if ( myFixedFees[i].reverseconditional ) {
                        if ( document.getElementById(myFixedFees[i].reverseconditional) ) {
                            if  ( document.getElementById(myFixedFees[i].reverseconditional).checked ) {
                               thisItem = 0;
                            }
                            else {
                               if ( document.getElementById(myFixedFees[i].id+'Label') ) {
                                  document.getElementById(myFixedFees[i].id).style.display = 'block';
                                  document.getElementById(myFixedFees[i].id+'Label').style.display = 'block';
                                  document.getElementById(myFixedFees[i].id+'Label').parentNode.style.display = 'block';
                               }
                            }
                        }
                   }
 
		   if ( thisItem == '0' ) {
		      if ( document.getElementById(myFixedFees[i].id+'Label') ) {
		         document.getElementById(myFixedFees[i].id+'Label').parentNode.style.display = 'none';
                      }
                      if ( document.getElementById(myFixedFees[i].id ) ) {
                         document.getElementById(myFixedFees[i].id).value = 0;
                      }

		   }
		   else {
		      if ( document.getElementById(myFixedFees[i].id+'Label') &&  
		           ( document.getElementById(myFixedFees[i].id+'Label').style.display == 'none' ||
			     document.getElementById(myFixedFees[i].id+'Label').style.display == '' ) ) {
		         document.getElementById(myFixedFees[i].id+'Label').parentNode.style.display = '';
                      }

		      document.getElementById(myFixedFees[i].id).value = thisItem.toFixed(2);
                      //Here we need to change !
                      if ( calcMethod == 1 ) {
                         quoteData["sale"]["fixedfees_subtotal"] = (parseFloat(quoteData["sale"]["fixedfees_subtotal"])+thisItem).toFixed(3);
                      }
		   }
                }
                var vatCharge = '';
                if ( myFixedFees[i].vatrate ) {
                   var vatCalc = (parseFloat(thisItem) * (myFixedFees[i].vatrate/100) );
                   vatCalc = ( Math.round(vatCalc*100) )/100;
                   // For some fixed fees they only get charged ONCE if a joint sale/purchase is required
                   // At present there is only one fixed fee which is affected - bank transfer fee
                   if (splitbuysaleFees == 1 && quoteType == 'buysale' && myFixedFees[i].id == 'sale_wire_fee' ) {
                      thisItem = parseFloat(myFixedFees[i].value/2);
                      vatCalc = ( (thisItem) * (myFixedFees[i].vatrate/100) );
                      //Round it
                      vatCalc = ( Math.round(vatCalc*100) )/100; 
                   }
                   vatCharge = ' VAT @'+myFixedFees[i].vatrate+' &pound;'+vatCalc.toFixed(2);
                   if ( document.getElementById(myFixedFees[i].id+'_vat') ) {
                      document.getElementById(myFixedFees[i].id+'_vat').value = vatCalc.toFixed(2);
                   }
                  var thisVAT = vatCalc.toFixed(2);
                  if ( calcMethod == 1) { 
                     quoteData["sale"]["fixedfees_subtotal_vat"] = parseFloat(quoteData["sale"]["fixedfees_subtotal_vat"])+parseFloat(thisVAT);
                  } 
                }
              }
              
              // Old style 
              if ( calcMethod == 1 ) {

                 if ( document.getElementById(type+"_fee_subtotal") ) {
                      document.getElementById(type+"_fee_subtotal").value = currency+(parseFloat(quoteData["sale"]["fixedfees_subtotal"]+quoteData["sale"]["solicitors_fee"]).toFixed(2)) ;
                 }
                 if ( document.getElementById("sale_fee_subtotal_vat") ) {
                      document.getElementById("sale_fee_subtotal_vat").value = currency+(parseFloat(quoteData["sale"]["solicitors_fee_vat"]+quoteData["sale"]["fixedfees_subtotal_vat"]).toFixed(2));
                 }
              }
            }

	    // Calc Disbursements
	    var myDisbursements = calcFees[type][quoteData["sale"]["sale_tenure"]]['disbursements'];
	    quoteData["sale"]["disbursement_subtotal"] = 0;
	    quoteData["sale"]["disbursement_subtotal_vat"] = 0;

	    for ( i = 1; i < myDisbursements.length; i++) {
	        if ( document.getElementById(myDisbursements[i].id) ) {
		   var thisItem = parseFloat(myDisbursements[i].value);

                   // For some disbursements they only get charged ONCE if a joint sale/purchase is required
                   // At present there is only one disbursement which is affected - bank transfer fee
                   if ( splitbuysaleFees == 1 && quoteType == 'buysale' && myDisbursements[i].id == 'sale_wire_fee' ) {
                      thisItem = parseFloat(myDisbursements[i].value/2);
	           }

                   if ( myDisbursements[i].id == 'sale_bankruptcy_search' ) {
                      if ( document.getElementById('sale_parties') ) {
                         thisItem = parseFloat(parseFloat(thisItem)*parseFloat(document.getElementById('sale_parties').value));
                      }  
                   }

                   if ( myDisbursements[i].id == 'sale_electronic_id' ) {
                      thisItem = parseFloat(parseFloat(thisItem)*parseFloat(document.getElementById('sale_parties').value));
                   }

		   // Fee may be 0 in which case we hide it
		   // This is to support items which may be chargeable in Leasehold , but not in freehold
		   if ( myDisbursements[i].conditional ) {
			if ( document.getElementById(myDisbursements[i].conditional) ) {
			    if  ( !document.getElementById(myDisbursements[i].conditional).checked ) {
			       thisItem = 0;
			    } 
			    else {
		               if ( document.getElementById(myDisbursements[i].id+'Label') ) {
		                  document.getElementById(myDisbursements[i].id+'Label').parentNode.style.display = '';
                               }
			    }			      
			}   
		   }		   

                   // Reverse conditional logic Fee may be 0 in which case we hide it
                   if ( myDisbursements[i].reverseconditional ) {
                        if ( document.getElementById(myDisbursements[i].reverseconditional) ) {
                            if  ( document.getElementById(myDisbursements[i].reverseconditional).checked ) {
                               thisItem = 0;
                            }
                            else {
                               if ( document.getElementById(myDisbursements[i].id+'Label') ) {
                                  document.getElementById(myDisbursements[i].id+'Label').parentNode.style.display = '';
                               }
                            }
                        }
                   }


		   if ( thisItem == '0' ) {
		      if ( document.getElementById(myDisbursements[i].id+'Label') ) {
		         document.getElementById(myDisbursements[i].id+'Label').parentNode.style.display = 'none';
                      }
                      if ( document.getElementById(myDisbursements[i].id ) ) {
                         document.getElementById(myDisbursements[i].id).value = 0;
                      }
		   }
		   else {
		      if ( document.getElementById(myDisbursements[i].id+'Label') &&  
		           ( document.getElementById(myDisbursements[i].id+'Label').style.display == 'none' ||
			     document.getElementById(myDisbursements[i].id+'Label').style.display == '' ) ) {
		         document.getElementById(myDisbursements[i].id+'Label').parentNode.style.display = '';
                      }

		      document.getElementById(myDisbursements[i].id).value = thisItem.toFixed(2);
		      quoteData["sale"]["disbursement_subtotal"] = (parseFloat(quoteData["sale"]["disbursement_subtotal"])+thisItem).toFixed(3);
		   }   
                }
	        var vatCharge = '';
		if ( myDisbursements[i].vatrate ) {
		   var vatCalc = (parseFloat(thisItem) * (myDisbursements[i].vatrate/100) );
                   vatCalc = ( Math.round(vatCalc*100) )/100;
                   // For some disbursements they only get charged ONCE if a joint sale/purchase is required
                   // At present there is only one disbursement which is affacted - bank transfer fee
                   if (splitbuysaleFees == 1 && quoteType == 'buysale' && myDisbursements[i].id == 'sale_wire_fee' ) {
                      thisItem = parseFloat(myDisbursements[i].value/2);
                      vatCalc = ( (thisItem) * (myDisbursements[i].vatrate/100) );
                      vatCalc = ( Math.round(vatCalc*100) )/100;
                   }
		   vatCharge = ' VAT @'+myDisbursements[i].vatrate+' &pound;'+vatCalc.toFixed(2);
		   if ( document.getElementById(myDisbursements[i].id+'_vat') ) {
		      document.getElementById(myDisbursements[i].id+'_vat').value = vatCalc.toFixed(2);
                   }
                  var thisVAT = vatCalc.toFixed(2); 
                  quoteData["sale"]["disbursement_subtotal_vat"] = parseFloat(quoteData["sale"]["disbursement_subtotal_vat"])+parseFloat(thisVAT);
		}
	    }

            if ( calcMethod == 1 ) {
               quoteData["sale"]["disbursement_subtotal"] = (parseFloat(quoteData["sale"]["disbursement_subtotal"])).toFixed(2);
               quoteData["sale"]["disbursement_subtotal_vat"] = (parseFloat(quoteData["sale"]["disbursement_subtotal_vat"])).toFixed(2);
	       quoteData["sale"]['total_'+type+"_cost"] = parseFloat(quoteData["sale"]["disbursement_subtotal"]) + parseFloat(quoteData["sale"]["solicitors_fee"]);
	       quoteData["sale"]['total_'+type+"_cost_vat"] = parseFloat(quoteData["sale"]["disbursement_subtotal_vat"]) + parseFloat(quoteData["sale"]["solicitors_fee_vat"]);
               if ( document.getElementById(type+"_disbursement_subtotal") ) {
                    document.getElementById(type+"_disbursement_subtotal").value = currency+quoteData["sale"]["disbursement_subtotal"];
               }
               if ( document.getElementById(type+"_disbursement_subtotal_vat") ) {
                    document.getElementById(type+"_disbursement_subtotal_vat").value = currency+quoteData["sale"]["disbursement_subtotal_vat"];
               }

               if ( document.getElementById(type+'_fee_total') ) {
                    document.getElementById(type+'_fee_total').value = currency+parseFloat(quoteData["sale"]['total_'+type+"_cost"]+quoteData["sale"]["fixedfees_subtotal"]).toFixed(2);
               }
               if ( document.getElementById(type+'_fee_total_vat') ) {
                    document.getElementById(type+'_fee_total_vat').value = currency+parseFloat(quoteData["sale"]['total_'+type+"_cost_vat"]).toFixed(2);
               }
               if ( document.getElementById('gross_'+type+'_total') ) {
                    document.getElementById('gross_'+type+'_total').value = currency+(parseFloat(quoteData["sale"]['total_'+type+"_cost_vat"])+parseFloat(quoteData["sale"]['total_'+type+"_cost"])).toFixed(2);
               }
            }
            else {
                quoteData["sale"]["total_sale_cost"] = 0;
                quoteData["sale"]["total_sale_cost_vat"] = 0;
                quoteData["sale"]["fixedfees_subtotal"] = 0;
                quoteData["sale"]["fixedfees_subtotal_vat"] = 0;
                for ( i = 0; i < feeFields.length; i++ ) {
                    var theFieldName = feeFields[i];
                    if ( feeItems[theFieldName] == 'sale' ) {
                       var theValue = 0;
                       if ( document.getElementById(feeFields[i]) ) {
                          theValue = document.getElementById(feeFields[i]).value;
                       }
                       var theVat = 0;
                       if ( document.getElementById(feeFields[i]+'_vat') ) {
                          theVat = document.getElementById(feeFields[i]+'_vat').value;
                       }
                       if ( theValue ) {
                          quoteData["sale"]["fixedfees_subtotal"] = (parseFloat(quoteData["sale"]["fixedfees_subtotal"])+parseFloat(theValue)).toFixed(2);
                       }
                       if ( theVat ) {
                          quoteData["sale"]["fixedfees_subtotal_vat"] = (parseFloat(quoteData["sale"]["fixedfees_subtotal_vat"])+parseFloat(theVat)).toFixed(2);
                       }
                    }
                 }
                 if ( saleFeeDiscount ) {
                     //var tmpF=quoteData["sale"]["fixedfees_subtotal"];
                     var tmpF=quoteData["sale"]["solicitors_fee"];
                     tmpF=(tmpF * saleFeeDiscount/100 );
                     quoteData["sale"]["fixedfees_discount"]=tmpF;
                     quoteData["sale"]["fixedfees_subtotal"] = quoteData["sale"]["fixedfees_subtotal"]-tmpF;
                     //tmpF=quoteData["sale"]["fixedfees_subtotal_vat"];
                     tmpF=quoteData["sale"]["solicitors_fee_vat"];
                     tmpF=(tmpF * saleFeeDiscount/100 );
                     quoteData["sale"]["fixedfees_discount_vat"]=tmpF;
                     quoteData["sale"]["fixedfees_subtotal_vat"] = quoteData["sale"]["fixedfees_subtotal_vat"]-tmpF;
                     if ( document.getElementById(type+"_fee_discount") ) {
                          document.getElementById(type+"_fee_discount").value = ' - '+(parseFloat(quoteData["sale"]["fixedfees_discount"]).toFixed(2)) ;
                     }
                     if ( document.getElementById("sale_fee_discount_vat") ) {
                          document.getElementById("sale_fee_discount_vat").value = ' - '+(parseFloat(quoteData["sale"]["fixedfees_discount_vat"]).toFixed(2));
                     }
                 }

                 if ( document.getElementById("sale_fee_subtotal") ) {
                      document.getElementById("sale_fee_subtotal").value = ' '+currency+(parseFloat(quoteData["sale"]["fixedfees_subtotal"]).toFixed(2)) ;
                 }
                 if ( document.getElementById("sale_fee_subtotal_vat") ) {
                      document.getElementById("sale_fee_subtotal_vat").value = ' '+currency+(parseFloat(quoteData["sale"]["fixedfees_subtotal_vat"]).toFixed(2));
                 }
                quoteData["sale"]["disbursement_subtotal"] = 0;
                quoteData["sale"]["disbursement_subtotal_vat"] = 0;

                for ( i = 0; i < disbursementFields.length; i++ ) {
                    var theValue = 0;
                    var theFieldName = disbursementFields[i];
                    if ( disbursementItems[theFieldName] == 'sale' ) {
                       if ( document.getElementById(disbursementFields[i]) ) {
                          theValue = document.getElementById(disbursementFields[i]).value;
                       }
                       var theVat = 0;
                       if ( document.getElementById(disbursementFields[i]+'_vat') ) {
                          theVat = document.getElementById(disbursementFields[i]+'_vat').value;
                       }
                       if ( theValue ) {
                          quoteData["sale"]["disbursement_subtotal"] = (parseFloat(quoteData["sale"]["disbursement_subtotal"])+parseFloat(theValue)).toFixed(2);
                       }
                       if ( theVat ) {
                          quoteData["sale"]["disbursement_subtotal_vat"] = (parseFloat(quoteData["sale"]["disbursement_subtotal_vat"])+parseFloat(theVat)).toFixed(2);
                       }
                    }
               }
               quoteData["sale"]['total_'+type+"_cost"] = parseFloat(quoteData["sale"]["disbursement_subtotal"]) + parseFloat(quoteData["sale"]["fixedfees_subtotal"]);
               quoteData["sale"]['total_'+type+"_cost_vat"] = parseFloat(quoteData["sale"]["disbursement_subtotal_vat"]) + parseFloat(quoteData["sale"]["fixedfees_subtotal_vat"]);
               if ( document.getElementById(type+"_disbursement_subtotal") ) {
                    document.getElementById(type+"_disbursement_subtotal").value = currency+quoteData["sale"]["disbursement_subtotal"];
               }
               if ( document.getElementById(type+"_disbursement_subtotal_vat") ) {
                    if ( quoteData["sale"]["disbursement_subtotal_vat"] == '0' ) {
                        document.getElementById(type+"_disbursement_subtotal_vat").value = '';           
                    }
                    else { 
                       document.getElementById(type+"_disbursement_subtotal_vat").value = currency+quoteData["sale"]["disbursement_subtotal_vat"];
                    }
               }
               if ( document.getElementById(type+'_fee_total') ) {
                    document.getElementById(type+'_fee_total').value = currency+(parseFloat(quoteData["sale"]['total_'+type+"_cost"]).toFixed(2));
               }
               if ( document.getElementById(type+'_fee_total_vat') ) {
                    document.getElementById(type+'_fee_total_vat').value = currency+parseFloat(quoteData["sale"]['total_'+type+"_cost_vat"]).toFixed(2);
               }
               if ( document.getElementById('gross_'+type+'_total') ) {
                    document.getElementById('gross_'+type+'_total').value = currency+(parseFloat(quoteData["sale"]['total_'+type+"_cost_vat"])+parseFloat(quoteData["sale"]['total_'+type+"_cost"])).toFixed(2);
               }
            }
	    quoteStatus = 'valid';
	    document.getElementById('sale_output_data').style.display = 'block';
	    document.getElementById('sale_output_dataFS').style.display = 'block';
	    if ( quoteType == 'sale' ) {document.getElementById('btn_calc').style.display = 'none'};
	    document.getElementById('sale_considerations').style.display='none';
	    document.getElementById('sale_considerationsFS').style.display='none';
	    
         }

	 if ( quoteType && 
	      ( quoteType == 'purchase' || quoteType == 'buysale' ) ) {
	    theForm = document.getElementById('purchaseForm');

            if ( document.getElementById('purchase_postcode') && document.getElementById('purchase_postcode').onchange ) {
                 document.getElementById('purchase_postcode').onchange('purchase_postcode');
            }


            // If a transfer of equity we must have a type of transfer
           if ( document.getElementById('calculator_name') && document.getElementById('calculator_name').value=='transfer_of_equity' ) {
               var tran_type = document.getElementById('purchase_parties').options[document.getElementById('purchase_parties').selectedIndex].value;
               if ( tran_type == '' ) {
                   var fieldLabel = 'Type of Equity Transfer';
                   setErrorMessage('purchase_parties',fieldLabel+' must be selected');
                   return false;
               }
           } 

	    if ( document.getElementById('purchase_price') ) {
               var fieldLabel = 'Purchase price';
               if (document.getElementById('purchase_priceLabel').title) { fieldLabel = document.getElementById('purchase_priceLabel').title;}
	       if ( document.getElementById('purchase_price').value.length &&
	            document.getElementById('purchase_price').value == 0 || (!document.getElementById('purchase_price').value.length ) ) {
		    setErrorMessage('purchase_price',fieldLabel+' must be greater than 0');
		    return false;
	       }
	       else {
	            if ( !validate(document.getElementById('purchase_price'),'numeric',fieldLabel) ) {
		       return false;
		    }
	       }	
            if ( document.getElementById('purchase_postcode') ) {
               if ( document.getElementById('purchase_postcode').value.length &&
                    document.getElementById('purchase_postcode').value == 0 || (!document.getElementById('purchase_postcode').value.length ) ) {
                    setErrorMessage('purchase_postcode','Purchase postcode must be provided');
                    return false;
               }
               else {
                    if ( !validate(document.getElementById('purchase_postcode'),'postcode','Purchase property postcode') ) {
                       //return false;
                    }
               }

            }
					       
	    }

	    // Must have chosen an area
	    if ( document.getElementById('purchase_county') ) {
	       if ( document.getElementById('purchase_county').value == '0' ) {
		    setErrorMessage('purchase_county','Please select a county');
		    return false;
	       }
	    }

	    // Must select an authority where we are not doing a specific postcode based 
	    // LA Fee lookup
	    // Cause the form items can be remembered you can get a state where county is selected, but authority has not been selected
	    if ( document.getElementById('purchase_county') &&
                 !document.getElementById('purchase_county').value == '0' &&
	         !document.getElementById('purchase_county').value == '' ) {
		 if ( document.getElementById('purchase_authority') &&
		      document.getElementById('purchase_authority').options.length == 1 ) {
		      changeAuthority(document.getElementById('purchase_county'),document.getElementById('purchase_authority'));
		      // setErrorMessage('purchase_authority','Please select an area');
		      // return false;
		 }	       	    
	    }

	    // As above
	    if ( document.getElementById('purchase_authority') &&
                 ( !document.getElementById('purchase_authority').value ||
	            document.getElementById('purchase_authority').value == '0' ||
	            document.getElementById('purchase_authority').value == '' ) ) {
                //alert('2:Purchase Authority value is '+document.getElementById('purchase_authority').value);
		setErrorMessage('purchase_authority','Please select an area');
		return false;
	    }

	    var type = "purchase";
	    // Freehold or leasehold?
	    if ( !quoteData[type] ) {
	       quoteData[type] = new Array();
	    }

	    quoteData["purchase"]["price"] = document.getElementById('purchase_price').value;
	    if ( theForm.purchase_tenure ) {

               // KMG Nov 07 - Support a HIDDEN pre-filled value for remortgages
               if ( !theForm.purchase_tenure.length && theForm.purchase_tenure.value ) {
                 quoteData["purchase"]["purchase_tenure"] = theForm.purchase_tenure.value;  
               }
               else { 
   	          for ( i = 0; i < theForm.purchase_tenure.length; i++) {
	             if ( theForm.purchase_tenure[i].checked ) {   
		        quoteData["purchase"]["purchase_tenure"] = theForm.purchase_tenure[i].value;
		     }   
	          }
               }
	    }	 
	    var tenureType = quoteData["purchase"]["purchase_tenure"];
	    var purchaseLimit = thresholds['purchase'][tenureType]['solicitors_fee'].limit;
	    if  ( purchaseLimit && 
	             parseFloat(document.getElementById('purchase_price').value)>=purchaseLimit ) {
	       	    document.getElementById('purchase_output_data').style.display = 'none';
		    document.getElementById('purchase_output_dataFS').style.display = 'none';
		    document.getElementById('purchase_considerations').style.display='block';
		    document.getElementById('purchase_considerationsFS').style.display='block';
		    document.getElementById('outcome_container').style.display='none';
                    //alert(document.getElementById('purchase_priceLabel').value);
		    setErrorMessage('purchase_price','Purchase price above threshold - see note below.');
		    return false;
	       }	       

	    //solicitors fee
	    var myFeeRange = calcFees[type][quoteData["purchase"]["purchase_tenure"]]['scaledfees']["solicitors_fee"];
	    for ( i = 1; i < myFeeRange.length; i++) {
	        if ( parseFloat(quoteData["purchase"]["price"]) < parseFloat(myFeeRange[i].range) ) {

		   document.getElementById("purchase_solicitors_fee").value = quoteData["purchase"]["purchase_solicitors_fee"] ;
		   if ( myFeeRange[i].vatrate ) {
		      quoteData["purchase"]["purchase_solicitors_fee_vat"] = (parseFloat(quoteData["purchase"]["purchase_solicitors_fee"]) * (myFeeRange[i].vatrate/100) ).toFixed(2);
		      document.getElementById("purchase_solicitors_fee_vat").value = quoteData["purchase"]["purchase_solicitors_fee_vat"];
		   };
		   break;
	        }
		quoteData["purchase"]["purchase_solicitors_fee"] = myFeeRange[i].value;
	    }


            // KMG Attempt to capture random bug from TGBaynes
            if ( quoteData["purchase"]["purchase_solicitors_fee"] == '' || quoteData["purchase"]["purchase_solicitors_fee"] == null ) {
               alert("This is rather embarrassing - I've detected a really unexpected technical fault with the calculator.\nPlease call us 0117 325 0200 and ask for Andrew.");
               setErrorMessage('purchase_price','An error occurred - unable to calculate correct fee');
               return false;
            }

	    //land registry fee
	    myFeeRange = calcFees[type][quoteData["purchase"]["purchase_tenure"]]['scaledfees']["landregistry_fee"];
	    for ( i = 1; i < myFeeRange.length; i++) {
	        if ( parseFloat(quoteData["purchase"]["price"]) < parseFloat(myFeeRange[i].range) ) {
		   document.getElementById("landregistry_fee").value = (parseFloat(quoteData["purchase"]["landregistry_fee"])).toFixed(2) ;
		   if ( myFeeRange[i].vatrate ) {
                      if ( document.getElementById('landregistry_fee_vat') ) {
		         quoteData["purchase"]["landregistry_fee_vat"] = (parseFloat(quoteData["purchase"]["landregistry_fee"]) * (myFeeRange[i].vatrate/100) ).toFixed(2);
		         document.getElementById("landregistry_fee_vat").value = quoteData["purchase"]["landregistry_fee_vat"];
                      } 
		   };
		   break;
	        }
		quoteData["purchase"]["landregistry_fee"] = myFeeRange[i].value;
	    }

            // KMG Jul 08 Support for scaled fee SDLT
            if ( calcFees[type][quoteData["purchase"]["purchase_tenure"]]['scaledfees']["sdlt_form"] ) {
               myFeeRange = calcFees[type][quoteData["purchase"]["purchase_tenure"]]['scaledfees']["sdlt_form"];
               quoteData["purchase"]["sdlt_form"] = 0;
               document.getElementById("sdlt_form").value = 0;
               var stampduty_based = parseFloat(quoteData["purchase"]["price"]);
               for ( i = 1; i < myFeeRange.length; i++) {
                   if ( stampduty_based < parseFloat(myFeeRange[i].range) ) {
                      //alert(quoteData["purchase"]["sdlt_form"]);
                      document.getElementById("sdlt_form").value = (parseFloat(quoteData["purchase"]["sdlt_form"])).toFixed(2) ;
                      if ( myFeeRange[i].vatrate ) {
                         if ( document.getElementById('sdlt_form_vat') ) {
                            quoteData["purchase"]["sdlt_form_vat"] = (parseFloat(quoteData["purchase"]["sdlt_form"]) * (myFeeRange[i].vatrate/100) ).toFixed(2);
                            document.getElementById("sdlt_form_vat").value = quoteData["purchase"]["sdlt_form_vat"];
                         }
                      };
                      break;
                   }
                   quoteData["purchase"]["sdlt_form"] = ( parseFloat( myFeeRange[i].value ) ).toFixed(2);
               }
            }

            // KMG Nov 07 Support NO stamp duty calc when doing remortgage/Transfer of Equity

            if ( calcFees[type][quoteData["purchase"]["purchase_tenure"]]['scaledfees']["duty"] ) {
	       //stamp duty
	       myFeeRange = calcFees[type][quoteData["purchase"]["purchase_tenure"]]['scaledfees']["duty"];

               // KMG Nov 07 - Transfer of equity - Stamp duty calc depends on type of transfer and many other factors
               var stampduty_based = parseFloat(quoteData["purchase"]["price"]); 
               if ( document.getElementById('calculator_name') && document.getElementById('calculator_name').value=='transfer_of_equity' ) {
                  if ( document.getElementById('purchase_parties')  ) {
                     var tran_type = document.getElementById('purchase_parties').options[document.getElementById('purchase_parties').selectedIndex].value;
                     if ( tran_type == '2to1' ) {
                        
                        if ( document.getElementById('married_civil_partnership') ) {
                           // married/civil partnership? 
                           if ( document.getElementById('married_civil_partnership').checked == true ) {
                              if ( document.getElementById('divorce_dissolution') &&  document.getElementById('divorce_dissolution').checked == true ) {
                                 stampduty_based = 0;
                              }
                           }
                           // Not married, any mortgage debt?
                           else if (document.getElementById('current_mortgage') && document.getElementById('current_mortgage').value > 0 ) {
                              var mortgage_share = parseFloat(document.getElementById('current_mortgage').value/2);
                              stampduty_based = stampduty_based+mortgage_share;
                           }
                           
                        }  
                     }
                     else if ( tran_type == '1to2+' ) {
                        if ( document.getElementById('transfer_method') ) {
                           if ( document.getElementById('transfer_method').options[document.getElementById('transfer_method').selectedIndex].value == 'gift' ) {
                              stampduty_based = 0;
                           }
                        }
                     } 
                  }
               } 

               for ( i = 1; i < myFeeRange.length; i++) {
                   if ( stampduty_based < parseFloat(myFeeRange[i].range) ) {
                      document.getElementById("stamp_duty").value = (parseFloat(quoteData["purchase"]["stamp_duty"])).toFixed(2) ;
                      if ( myFeeRange[i].vatrate ) {
                         if ( document.getElementById('stamp_duty_vat') ) {
                            //alert('Vat on stamp duty lt');
                            quoteData["purchase"]["stamp_duty_vat"] = (parseFloat(quoteData["purchase"]["stamp_duty"]) * (myFeeRange[i].vatrate/100) ).toFixed(2);
                            document.getElementById("stamp_duty_vat").value = quoteData["purchase"]["stamp_duty_vat"];
                         }
                      };
                      break;
                   }
                   //quoteData["purchase"]["stamp_duty"] = ( parseFloat(quoteData["purchase"]["price"]) * ( myFeeRange[i].value) ).toFixed(2);
                   quoteData["purchase"]["stamp_duty"] = ( parseFloat(stampduty_based) * ( myFeeRange[i].value) ).toFixed(2);
                   if ( document.getElementById('purchase_ftb') &&
                        document.getElementById('purchase_ftb').checked &&
                        quoteType == 'purchase' &&
                        stampduty_based > 1 &&
                        stampduty_based <=250000 ) {
                      quoteData["purchase"]["stamp_duty"] = 0;
                   }
               }

            }
            else {
               quoteData["purchase"]["stamp_duty"] = 0;
            }

            // Old style 
            if ( calcMethod == 1 ) {
	       if ( document.getElementById(type+"_fee_subtotal") ) {
	            var total = 0;
		    if ( quoteData["purchase"]["landregistry_fee"]  ) {
		       total = parseFloat(total)+parseFloat(quoteData["purchase"]["landregistry_fee"]);
		    }
		    if ( quoteData["purchase"]["purchase_solicitors_fee"]  ) {
		       total = parseFloat(total)+parseFloat(quoteData["purchase"]["purchase_solicitors_fee"]);
	  	    }
		    document.getElementById(type+"_fee_subtotal").value = parseFloat(total).toFixed(2);
	       }	 

	       if ( document.getElementById(type+"_fee_subtotal_vat") ) {
	            var total = 0;
		    if ( document.getElementById('landregistry_fee_vat') && quoteData["purchase"]["landregistry_fee_vat"]  ) {
		       total = parseFloat(total)+parseFloat(quoteData["purchase"]["landregistry_fee_vat"]);
		    }
		    if ( quoteData["purchase"]["purchase_solicitors_fee_vat"]  ) {
		       total = parseFloat(total)+parseFloat(quoteData["purchase"]["purchase_solicitors_fee_vat"]);
		    }
		    document.getElementById(type+"_fee_subtotal_vat").value = parseFloat(total).toFixed(2);
               }
            }	       

            // Calc 'Fixed fees' enhancement for TGB
            var myFixedFees = calcFees[type][quoteData["purchase"]["purchase_tenure"]]['fixedfees'];
            quoteData["purchase"]["fixedfees_subtotal"] = 0;
            quoteData["purchase"]["fixedfees_subtotal_vat"] = 0;
            if ( myFixedFees ) {
              for ( i = 1; i < myFixedFees.length; i++) {
                if ( document.getElementById(myFixedFees[i].id) ) {
                   var thisItem = parseFloat(myFixedFees[i].value);

                   // For some fixed fees they only get charged ONCE if a joint sale/purchase is required
                   // At present there is only one fixed fee which may be affected - bank transfer fee
                   if ( splitbuysaleFees == 1 && quoteType == 'buysale' && myFixedFees[i].id == 'purchase_wire_fee' ) {
                      thisItem = parseFloat(myFixedFees[i].value/2);
                   }

                   // Fee may be 0 in which case we hide it
                   // This is to support items which may be chargeable in Leasehold , but not in freehold
                   // Is this field conditional? Supports only a checkbox flag at present to identify such fields
                   if ( myFixedFees[i].conditional ) {
                        if ( document.getElementById(myFixedFees[i].conditional) ) {
                            if  ( !document.getElementById(myFixedFees[i].conditional).checked ) {
                               thisItem = 0;
                            }
                            else {
                               if ( document.getElementById(myFixedFees[i].id+'Label') ) {
                                  document.getElementById(myFixedFees[i].id).style.display = 'block';
                                  document.getElementById(myFixedFees[i].id+'Label').style.display = 'block';
                                  document.getElementById(myFixedFees[i].id+'Label').parentNode.style.display = 'block';
                               }
                            }               
                        }
                   }

                   // Reverse conditional Fee may be 0 in which case we hide it
                   // This is to support items which may be chargeable in Leasehold , but not in freehold
                   // Is this field reverse conditional? Supports only a checkbox flag at present to identify such fields
                   if ( myFixedFees[i].reverseconditional ) {
                        if ( document.getElementById(myFixedFees[i].reverseconditional) ) {
                            if  ( document.getElementById(myFixedFees[i].reverseconditional).checked ) {
                               thisItem = 0;
                            }
                            else {
                               if ( document.getElementById(myFixedFees[i].id+'Label') ) {
                                  document.getElementById(myFixedFees[i].id).style.display = 'block';
                                  document.getElementById(myFixedFees[i].id+'Label').style.display = 'block';
                                  document.getElementById(myFixedFees[i].id+'Label').parentNode.style.display = 'block';
                               }
                            }
                        }
                   }

                   if ( myFixedFees[i].id == 'local_authority_search' ) {
                      // We either lookup this fee based upon a postcode/ajax lookup
                      // OR  
                      // We look up the fee based upon our county object if it exists

                      var theLocalSearchFee = 0;
                      if ( !isNaN(myFixedFees[i].value) ) {
                         theLocalSearchFee  = myFixedFees[i].value;
                      }
                      if ( document.getElementById('purchase_authority') ) {
                         var selectedIndex = document.getElementById('purchase_authority').selectedIndex+1;
			 var theCounty = '';
			 // KMG To support straight 'authority' selection
			 if ( document.getElementById('purchase_county') ) {
                            theCounty = document.getElementById('purchase_county').value;
                         }
			 else {
                            theCounty = document.getElementById('purchase_authority').value;
                         }

                         theLocalSearchFee = countyAreas[theCounty][selectedIndex].value;
                      }
                      thisItem = parseFloat(theLocalSearchFee);
                   }

                   if ( thisItem == '0' ) {
                      if ( document.getElementById(myFixedFees[i].id+'Label') ) {
                         document.getElementById(myFixedFees[i].id+'Label').parentNode.style.display = 'none';
                      }
                      if ( document.getElementById(myFixedFees[i].id ) ) {
                         document.getElementById(myFixedFees[i].id).value = 0;
                      }
                   }
                   else {
                      if ( document.getElementById(myFixedFees[i].id+'Label') &&
                           ( document.getElementById(myFixedFees[i].id+'Label').style.display == 'none' ||
                             document.getElementById(myFixedFees[i].id+'Label').style.display == '' ) ) {
                         document.getElementById(myFixedFees[i].id+'Label').parentNode.style.display = '';
                      }

                      document.getElementById(myFixedFees[i].id).value = thisItem.toFixed(2);
                      quoteData["purchase"]["fixedfees_subtotal"] = (parseFloat(quoteData["purchase"]["fixedfees_subtotal"])+thisItem).toFixed(3);
                   }


                }
                var vatCharge = '';
                if ( myFixedFees[i].vatrate ) {
                   var vatCalc = (parseFloat(thisItem) * (myFixedFees[i].vatrate/100) );
                   vatCalc = ( Math.round(vatCalc*100) )/100;
                   // For some fixed fees they only get charged ONCE if a joint sale/purchase is required
                   // At present there is only one fixed fee which is affected - bank transfer fee
                   if (splitbuysaleFees == 1 && quoteType == 'buysale' && myFixedFees[i].id == 'purchase_wire_fee' ) {
                      thisItem = parseFloat(myFixedFees[i].value/2);
                      vatCalc = ( (thisItem) * (myFixedFees[i].vatrate/100) );
                      vatCalc = ( Math.round(vatCalc*100) )/100;
                   }
                   vatCharge = ' VAT @'+myFixedFees[i].vatrate+' '+currency+vatCalc.toFixed(2);
                   if ( document.getElementById(myFixedFees[i].id+'_vat') ) {
                      document.getElementById(myFixedFees[i].id+'_vat').value = vatCalc.toFixed(2);
                   }
                  var thisVAT = vatCalc.toFixed(2);
                  quoteData["purchase"]["fixedfees_subtotal_vat"] = parseFloat(quoteData["purchase"]["fixedfees_subtotal_vat"])+parseFloat(thisVAT);
                }

              if ( purchaseFeeDiscount ) {
                 if ( document.getElementById("purchase_fee_discount") ) {
                    var tmpFee = parseFloat(quoteData["purchase"]["fixedfees_subtotal"]+quoteData["purchase"]["solicitors_fee"]);
                    tmpFee = parseFloat(tmpFee * purchaseFeeDiscount/100 ).toFixed(2);
                    document.getElementById("purchase_fee_discount").value = ' '+currency+tmpFee; 
                 }
                 if ( document.getElementById(type+"_fee_subtotal") ) {
                      document.getElementById(type+"_fee_subtotal").value = ' '+currency+(parseFloat(quoteData["purchase"]["fixedfees_subtotal"]+quoteData["purchase"]["solicitors_fee"]).toFixed(2)) ;
                 }
                 if ( document.getElementById("purchase_fee_subtotal_vat") ) {
                      document.getElementById("purchase_fee_subtotal_vat").value = ' '+currency+(parseFloat(quoteData["purchase"]["solicitors_fee_vat"]+quoteData["purchase"]["fixedfees_subtotal_vat"]).toFixed(2));
                 }
              }
              else {
                 if ( document.getElementById(type+"_fee_subtotal") ) {
                      document.getElementById(type+"_fee_subtotal").value = ' '+currency+(parseFloat(quoteData["purchase"]["fixedfees_subtotal"]+quoteData["purchase"]["solicitors_fee"]).toFixed(2)) ;
                 }
                 if ( document.getElementById("purchase_fee_subtotal_vat") ) {
                      document.getElementById("purchase_fee_subtotal_vat").value = ' '+currency+(parseFloat(quoteData["purchase"]["solicitors_fee_vat"]+quoteData["purchase"]["fixedfees_subtotal_vat"]).toFixed(2));
                 }
              }
           }
         }

	    // Calc Disbursements
	    var myDisbursements = calcFees[type][quoteData["purchase"]["purchase_tenure"]]['disbursements'];
	    quoteData["purchase"]["disbursement_subtotal"] = 0;
	    quoteData["purchase"]["disbursement_subtotal_vat"] = 0;
	    for ( i = 1; i < myDisbursements.length; i++) {
	        if ( document.getElementById(myDisbursements[i].id) ) {
		   var thisItem = parseFloat(myDisbursements[i].value);
		   if ( myDisbursements[i].id == 'bankruptcy_search' ) {
		      thisItem = parseFloat(parseFloat(thisItem)*parseFloat(document.getElementById('purchase_parties').value));
		   } 
                   if ( myDisbursements[i].id == 'electronic_id' ) {
                      if ( quoteType == 'buysale'){
                         if ( multiEID == 1){
                            thisItem = parseFloat(parseFloat(thisItem)*parseFloat(document.getElementById('purchase_parties').value));
                         }else{thisItem=0}
                      }
                      else {thisItem = parseFloat(parseFloat(thisItem)*parseFloat(document.getElementById('purchase_parties').value));}
                   }

                   // For some disbursements they only get charged ONCE if a joint sale/purchase is required
                   // At present there is only one disbursement which is affacted - bank transfer fee
                   if ( splitbuysaleFees == 1 && quoteType == 'buysale' && myDisbursements[i].id == 'tt_fee' ) {
                      thisItem = parseFloat(myDisbursements[i].value/2);
                   }

                   
		   // Fee may be 0 in which case we hide it
		   // This is to support items which may be chargeable in Leasehold , but not in freehold
		   if ( myDisbursements[i].conditional ) {
			if ( document.getElementById(myDisbursements[i].conditional) ) {
			    if  ( !document.getElementById(myDisbursements[i].conditional).checked ) {
			       thisItem = 0;
			    } 
			    else {
		               if ( document.getElementById(myDisbursements[i].id+'Label') ) {
		                  document.getElementById(myDisbursements[i].id+'Label').parentNode.style.display = '';
                               }
			    }			      
			}   
		   }		   
                   // Reverse conditional Fee may be 0 in which case we hide it
                   // This is to support items which may be chargeable in Leasehold , but not in freehold
                   if ( myDisbursements[i].reverseconditional ) {
                        if ( document.getElementById(myDisbursements[i].reverseconditional) ) {
                            if  ( document.getElementById(myDisbursements[i].reverseconditional).checked ) {
                               thisItem = 0;
                            }
                            else {
                               if ( document.getElementById(myDisbursements[i].id+'Label') ) {
                                  document.getElementById(myDisbursements[i].id+'Label').parentNode.style.display = '';
                               }
                            }
                        }
                   }

		   if ( myDisbursements[i].id == 'local_authority_search' ) {
                      // We either lookup this fee based upon a postcode/ajax lookup
                      // OR  
		      // We look up the fee based upon our county object if it exists

                      var theLocalSearchFee = 0;
                      if ( !isNaN(myDisbursements[i].value) ) {
                         theLocalSearchFee  = myDisbursements[i].value;
                      }
                      if ( document.getElementById('purchase_authority') ) {
		         var selectedIndex = document.getElementById('purchase_authority').selectedIndex+1;
			 var theCounty = '';
			 if ( document.getElementById('purchase_county') ) {
		            theCounty = document.getElementById('purchase_county').value;	
                         }
                         else {
			    theCounty = document.getElementById('purchase_authority').value;
                         }

		         theLocalSearchFee = countyAreas[theCounty][selectedIndex].value;
                      } 
		      thisItem = parseFloat(theLocalSearchFee);
		   } 
		   if ( thisItem == '0' ) {
		      if ( document.getElementById(myDisbursements[i].id+'Label') ) {
		         document.getElementById(myDisbursements[i].id+'Label').parentNode.style.display = 'none';
                      }
                      if ( document.getElementById(myDisbursements[i].id ) ) {
                         document.getElementById(myDisbursements[i].id).value = 0; 
                      }
		   }
		   else {
		      if ( document.getElementById(myDisbursements[i].id+'Label') &&  
		           ( document.getElementById(myDisbursements[i].id+'Label').style.display == 'none' ||
			     document.getElementById(myDisbursements[i].id+'Label').style.display == '' ) ) {
		         document.getElementById(myDisbursements[i].id+'Label').parentNode.style.display = '';
                      }


		      document.getElementById(myDisbursements[i].id).value = thisItem.toFixed(2);
                      if ( calcMethod == 1 ) {   
		         quoteData["purchase"]["disbursement_subtotal"] = (parseFloat(quoteData["purchase"]["disbursement_subtotal"])+thisItem).toFixed(3);
                      }
		   }   

		   //document.getElementById(myDisbursements[i].id).value = thisItem.toFixed(2);
		   //quoteData["purchase"]["disbursement_subtotal"] = (parseFloat(quoteData["purchase"]["disbursement_subtotal"])+thisItem).toFixed(2);
                }
	        var vatCharge = '';
		if ( myDisbursements[i].vatrate ) {
		   var vatCalc = (parseFloat(thisItem) * (myDisbursements[i].vatrate/100) );
                   vatCalc = ( Math.round(vatCalc*100) )/100;
                   // For some disbursements they only get charged ONCE if a joint sale/purchase is required
                   // At present there is only one disbursement which is affacted - bank transfer fee
                   if ( splitbuysaleFees == 1 && quoteType == 'buysale' && myDisbursements[i].id == 'tt_fee' ) {
                      thisItem = parseFloat(myDisbursements[i].value/2);
                      vatCalc = ( (thisItem) * (myDisbursements[i].vatrate/100) );
                      vatCalc = ( Math.round(vatCalc*100) )/100;
                   }
		   vatCharge = ' VAT @'+myDisbursements[i].vatrate+' '+currency+vatCalc.toFixed(2);
		   if ( document.getElementById(myDisbursements[i].id+'_vat') ) {
		      document.getElementById(myDisbursements[i].id+'_vat').value = vatCalc.toFixed(2);
                   }
                   var thisVAT = vatCalc.toFixed(2);
                   if ( calcMethod == 1 ) {
                      quoteData["purchase"]["disbursement_subtotal_vat"] = parseFloat(quoteData["purchase"]["disbursement_subtotal_vat"])+parseFloat(thisVAT);
                   }
		}
                quoteData["purchase"]["disbursement_subtotal_vat"] = (parseFloat(quoteData["purchase"]["disbursement_subtotal_vat"])).toFixed(2);
	    }
            if ( calcMethod  == 1 ) { // old style total calc 
	       quoteData["purchase"]["disbursement_subtotal"] = (parseFloat(quoteData["purchase"]["disbursement_subtotal"])+parseFloat(quoteData["purchase"]["stamp_duty"] )).toFixed(2);
	       quoteData["purchase"]['total_'+type+"_cost"] = parseFloat(quoteData["purchase"]["disbursement_subtotal"]) + parseFloat(quoteData["purchase"]["purchase_solicitors_fee"])+parseFloat(quoteData["purchase"]["landregistry_fee"]);
               if ( !quoteData["purchase"]["landregistry_fee_vat"] ) {
                  quoteData["purchase"]["landregistry_fee_vat"] = 0;
               }
	       quoteData["purchase"]['total_'+type+"_cost_vat"] = parseFloat(quoteData["purchase"]["disbursement_subtotal_vat"]) + parseFloat(quoteData["purchase"]["purchase_solicitors_fee_vat"])+ parseFloat(quoteData["purchase"]["landregistry_fee_vat"]);

            }
            else {
                quoteData["purchase"]["fixedfees_subtotal"] = 0;
                quoteData["purchase"]["fixedfees_subtotal_vat"] = 0;
                for ( i = 0; i < feeFields.length; i++ ) {
                    var theFieldName = feeFields[i];
                    if ( feeItems[theFieldName] == 'purchase' ) {
                       var theValue = 0;
                       if ( document.getElementById(feeFields[i]) ) {
                          theValue = document.getElementById(feeFields[i]).value;
                       } 
                       var theVat = 0;
                       if ( document.getElementById(feeFields[i]+'_vat') ) {
                          theVat = document.getElementById(feeFields[i]+'_vat').value;
                       }
                       if ( theValue ) {
                          quoteData["purchase"]["fixedfees_subtotal"] = (parseFloat(quoteData["purchase"]["fixedfees_subtotal"])+parseFloat(theValue)).toFixed(2);
                       } 
                       if ( theVat ) {
                          quoteData["purchase"]["fixedfees_subtotal_vat"] = (parseFloat(quoteData["purchase"]["fixedfees_subtotal_vat"])+parseFloat(theVat)).toFixed(2);
                       } 
                    } 
                 }  

                 if ( purchaseFeeDiscount ) {
                     //var tmpF=quoteData["purchase"]["fixedfees_subtotal"];
                     var tmpF=quoteData["purchase"]["purchase_solicitors_fee"];
                     tmpF=(tmpF * purchaseFeeDiscount/100 );
                     quoteData["purchase"]["fixedfees_discount"]=tmpF;
                     quoteData["purchase"]["fixedfees_subtotal"] = quoteData["purchase"]["fixedfees_subtotal"]-tmpF;
                     //tmpF=quoteData["purchase"]["fixedfees_subtotal_vat"];
                     tmpF=quoteData["purchase"]["purchase_solicitors_fee_vat"];
                     tmpF=(tmpF * purchaseFeeDiscount/100 );
                     quoteData["purchase"]["fixedfees_discount_vat"]=tmpF;
                     quoteData["purchase"]["fixedfees_subtotal_vat"] = quoteData["purchase"]["fixedfees_subtotal_vat"]-tmpF;
                     if ( document.getElementById(type+"_fee_discount") ) {
                          document.getElementById(type+"_fee_discount").value = ' - '+(parseFloat(quoteData["purchase"]["fixedfees_discount"]).toFixed(2)) ;
                     }
                     if ( document.getElementById("purchase_fee_discount_vat") ) {
                          document.getElementById("purchase_fee_discount_vat").value = ' - '+(parseFloat(quoteData["purchase"]["fixedfees_discount_vat"]).toFixed(2));
                     }
                 }
                 if ( document.getElementById(type+"_fee_subtotal") ) {
                      document.getElementById(type+"_fee_subtotal").value = ' '+currency+(parseFloat(quoteData["purchase"]["fixedfees_subtotal"]).toFixed(2)) ;
                 }
                 if ( document.getElementById("purchase_fee_subtotal_vat") ) {
                      document.getElementById("purchase_fee_subtotal_vat").value = ' '+currency+(parseFloat(quoteData["purchase"]["fixedfees_subtotal_vat"]).toFixed(2));
                 }
                
                quoteData["purchase"]["disbursement_subtotal"] = 0;
                quoteData["purchase"]["disbursement_subtotal_vat"] = 0;
                for ( i = 0; i < disbursementFields.length; i++ ) {
                    var theFieldName = disbursementFields[i];
                    if ( disbursementItems[theFieldName] == 'purchase' ) {
                       var theValue = 0;
                       if ( document.getElementById(disbursementFields[i]) ) {
                          theValue = document.getElementById(disbursementFields[i]).value;
                       }
                       var theVat = 0;
                       if ( document.getElementById(disbursementFields[i]+'_vat') ) {
                          theVat = document.getElementById(disbursementFields[i]+'_vat').value;
                       }
                       if ( theValue ) {
                          quoteData["purchase"]["disbursement_subtotal"] = (parseFloat(quoteData["purchase"]["disbursement_subtotal"])+parseFloat(theValue)).toFixed(2);
                       }
                       if ( theVat ) {
                          quoteData["purchase"]["disbursement_subtotal_vat"] = (parseFloat(quoteData["purchase"]["disbursement_subtotal_vat"])+parseFloat(theVat)).toFixed(2);
                       }
                   }
                 }
               quoteData["purchase"]['total_'+type+"_cost"] = parseFloat(quoteData["purchase"]["disbursement_subtotal"]) + parseFloat(quoteData["purchase"]["fixedfees_subtotal"]);
               quoteData["purchase"]['total_'+type+"_cost_vat"] = parseFloat(quoteData["purchase"]["disbursement_subtotal_vat"]) + parseFloat(quoteData["purchase"]["fixedfees_subtotal_vat"]);
                 
            } 

	    if ( document.getElementById(type+"_disbursement_subtotal") ) {
		 document.getElementById(type+"_disbursement_subtotal").value = currency+quoteData["purchase"]["disbursement_subtotal"];
            }
	    if ( document.getElementById(type+"_disbursement_subtotal_vat") ) {
                 document.getElementById(type+"_disbursement_subtotal_vat").value = '';
                 if ( quoteData["purchase"]["disbursement_subtotal_vat"] > 0 ) {
		    document.getElementById(type+"_disbursement_subtotal_vat").value = currency+quoteData["purchase"]["disbursement_subtotal_vat"];
                 }
            }
	    if ( document.getElementById(type+'_fee_total') ) {
		 document.getElementById(type+'_fee_total').value = currency+parseFloat(quoteData["purchase"]['total_'+type+"_cost"]).toFixed(2);
            }
	    if ( document.getElementById(type+'_fee_total_vat') ) {
		 document.getElementById(type+'_fee_total_vat').value = currency+parseFloat(quoteData["purchase"]['total_'+type+"_cost_vat"]).toFixed(2);
            }
	    if ( document.getElementById('gross_'+type+'_total') ) {
		 document.getElementById('gross_'+type+'_total').value = currency+(parseFloat(quoteData["purchase"]['total_'+type+"_cost_vat"])+parseFloat(quoteData["purchase"]['total_'+type+"_cost"])).toFixed(2);
            }

	    quoteStatus = 'valid';
	    document.getElementById('purchase_output_data').style.display = 'block';
	    document.getElementById('purchase_output_dataFS').style.display = 'block';
	    //document.getElementById('btn_calc').style.backgroundColor = '#ccffcc';
	    document.getElementById('purchase_considerations').style.display='none';
	    document.getElementById('purchase_considerationsFS').style.display='none';
	    if ( quoteType == 'purchase' ) {document.getElementById('btn_calc').style.display = 'none'};
	    
         }
	 
	 if ( quoteStatus == 'valid' ) {
	    //alert('Quote Status is '+quoteStatus+' Quote Type is '+quoteType);
	    if ( quoteType == 'buysale' ) {
	       if ( document.getElementById(quoteType+'_total') ) {
	       	//document.getElementById(quoteType+'_total').value = '£'+(parseFloat(quoteData["sale"]["total_sale_cost"])+parseFloat(quoteData["purchase"]["total_purchase_cost"])).toFixed(2);
		var saleCost = (parseFloat(quoteData["sale"]['total_sale_cost_vat'])+parseFloat(quoteData["sale"]['total_sale_cost'])).toFixed(2);
		var purchaseCost = (parseFloat(quoteData["purchase"]['total_purchase_cost_vat'])+parseFloat(quoteData["purchase"]['total_purchase_cost'])).toFixed(2);
 		document.getElementById(quoteType+'_total').value = '£'+(parseFloat(saleCost)+(parseFloat(purchaseCost))).toFixed(2);

		 if ( document.getElementById(quoteType+'_total_vat') ) {
		    document.getElementById(quoteType+'_total_vat').value = ' ';
                 }
	       }
	       document.getElementById('buysale_output_data').style.display = 'block';
	       document.getElementById('buysale_output_dataFS').style.display = 'block';
               if ( document.getElementById('buysale') ) {
                  document.getElementById('buysale').style.display='block';
               }

               // Make sure sale output is displayed
               document.getElementById('sale_output_data').style.display = 'block';

	       document.getElementById('btn_calc').style.display = 'none'
	    };

	    showQuoteOptions();
            if ( quoteType == 'sale') {
               scrollToObject('sale_output_data');
            }
	    if ( quoteType == 'purchase' || quoteType =='buysale' ) {
	       scrollToObject('purchase_output_data');
	    }
	 }	 	 
	 else {
	 }

	 return false;
}

function byPassQuote() {
   if ( document.getElementById('btn_email') ) {
      document.getElementById('btn_email').style.display = 'none';
   } 
   if ( document.getElementById('btn_instruct') ) {
      document.getElementById('btn_instruct').style.display = 'none';
   }
   if ( document.getElementById('send_via_email') ) {
      document.getElementById('send_via_email').style.display = 'none';
   }
   if ( document.getElementById('infoDiv') ) {
      document.getElementById('infoDiv').style.display = 'none';
   }
   if ( document.getElementById('instruct_us') ) {
      document.getElementById('instruct_us').style.display = 'block';
   }
   if ( document.getElementById('outcome_container') ) {
      document.getElementById('outcome_container').style.display='block';
   } 
   if ( document.getElementById('instruct_usFormLegend') ) {
      var oldHeader = document.getElementById('instruct_usFormLegend').innerHTML;
      var myRegExp = /Accept Quote/;
      oldHeader = oldHeader.replace(myRegExp,'Instruct Us');
      document.getElementById('instruct_usFormLegend').innerHTML = oldHeader;
   }
   directInstruction = true;
}

function undoBypass() {
   if ( document.getElementById('btn_bypasscalc') ) {
      document.getElementById('btn_bypasscalc').style.display = 'none';
   }
   if ( document.getElementById('btn_email') ) {
      document.getElementById('btn_email').style.display = 'block';
   } 
   if ( document.getElementById('btn_instruct') ) {
      document.getElementById('btn_instruct').style.display = 'block';
   }
   if ( document.getElementById('send_via_email') ) {
      document.getElementById('send_via_email').style.display = 'block';
   }
   if ( document.getElementById('infoDiv') ) {
      document.getElementById('infoDiv').style.display = 'block';
   }
   if ( document.getElementById('instruct_us') ) {
      document.getElementById('instruct_us').style.display = 'none';
   }
   if ( document.getElementById('outcome_container') ) {
      document.getElementById('outcome_container').style.display='none';
   }
   if ( document.getElementById('instruct_usFormLegend') ) {
      var oldHeader = document.getElementById('instruct_usFormLegend').innerHTML;
      var myRegExp = /Instruct Us/;
      oldHeader = oldHeader.replace(myRegExp,'Accept Quote');
      document.getElementById('instruct_usFormLegend').innerHTML = oldHeader;
   }
   directInstruction = false;
}

function showQuoteOptions() {
   var outcomeCtns = getElementsByClass(document,"top_level_outcome",'div');      
    if ( outcomeCtns.length > 0 ) {
      for (i = 0, j= 0; i < outcomeCtns.length; i++) {
	 outcomeCtns[i].style.display = 'none';
      }
    }	 
    document.getElementById('outcome_container').style.display='block';
}

function clearErrorMessages() {
   var labels = getElementsByClass(document,"ErrorMessageLabel",'label');      
    if ( labels.length > 0 ) {
      for (i = 0, j= 0; i < labels.length; i++) {
	 labels[i].innerHTML = '';
      }
    }	 
        // Generic message to point out quote submission failed
        if ( document.getElementById('quoteStatusMessage') ) {
             document.getElementById('quoteStatusMessage').innerHTML = mySpacer;
        }
}

function showInfo(target,message) {
    if ( document.getElementById(target) ) {
        //document.getElementById(target).innerHTML=message;
    }
}

function scrollToObject(theObjectID,offsetBy) {	
    if ( document.getElementById(theObjectID) ) {
       var pos = findPos( document.getElementById(theObjectID) );
       var topPos = parseFloat(pos[1]);
       window.scrollTo(0,topPos);
    }	
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}



function emailQuote(thisBtn) {
    var outcomeBtns = getElementsByClass(document,"outcomeBtn",'input');      
    if ( outcomeBtns.length > 0 ) {
      for (i = 0, j= 0; i < outcomeBtns.length; i++) {
	 outcomeBtns[i].className = 'outcomeBtn';
      }
    }	 
    thisBtn.className = 'outcomeBtn selectedOutcome';
   
    var outcomeCtns = getElementsByClass(document,"top_level_outcome",'div');      
    if ( outcomeCtns.length > 0 ) {
      for (i = 0, j= 0; i < outcomeCtns.length; i++) {
	 outcomeCtns[i].style.display = 'none';
      }
    }	 
  
    if ( document.getElementById('send_via_email') ) {
        document.getElementById('send_via_email').style.display='block';
    }
    document.getElementById('send_via_emailFormErrors').style.display='none';
}

function instructQuote(thisBtn) {
    var outcomeBtns = getElementsByClass(document,"outcomeBtn",'input');      
    if ( outcomeBtns.length > 0 ) {
      for (i = 0, j= 0; i < outcomeBtns.length; i++) {
	 outcomeBtns[i].className = 'outcomeBtn';
      }
    }	 
    thisBtn.className = 'outcomeBtn selectedOutcome';
 
    var outcomeCtns = getElementsByClass(document,"top_level_outcome",'div');      
    if ( outcomeCtns.length > 0 ) {
      for (i = 0, j= 0; i < outcomeCtns.length; i++) {
	 outcomeCtns[i].style.display = 'none';
      }
    }	 
    
    if ( document.getElementById('instruct_us') ) {
        document.getElementById('instruct_us').style.display='block';
    }
    document.getElementById('instruct_usFormErrors').style.display='none';
    if ( document.getElementById('sale_address') ) {
       document.getElementById('sale_address').style.display='block';
    }
    if ( document.getElementById('purchase_address') ) {
       document.getElementById('purchase_address').style.display='block';
    }
    if ( document.getElementById('sale_addressLabel') ) {
       document.getElementById('sale_addressLabel').style.display='block';
    }
    if ( document.getElementById('purchase_addressLabel') ) {
       document.getElementById('purchase_addressLabel').style.display='block';
    }
    switch (quoteType) {
       case 'sale':{if ( document.getElementById('purchase_address') ) {document.getElementById('purchase_address').style.display='none'};if ( document.getElementById('purchase_addressLabel') ) {document.getElementById('purchase_addressLabel').style.display='none'};break;};
       case 'purchase':{if ( document.getElementById('sale_address') ) { document.getElementById('sale_address').style.display='none'};if (document.getElementById('sale_addressLabel') ) {document.getElementById('sale_addressLabel').style.display='none'};break;}
    };
}

function switchTab(showTabArray,thisTab) {
   // showTabArray is an associative array of container names to show
   document.getElementById('outcome_container').style.display='none';
   if ( document.getElementById('btn_calc') ) {
      setBtnStatus('btn_calc','init');
   }   
   if ( calcTabs.length > 0 ) {
      quoteType = thisTab;

      for (i = 0; i < calcTabs.length; i++) {
         calcTabs[i].style.display='none';
         if ( showTabArray[calcTabs[i].id]) {
            calcTabs[i].style.display='block';
         }
      }

      // Now we switch the classes to make the tabs turn on/off
      var selectedTabs = getElementsByClass(document,"tabCurrent",'li');      
      if ( selectedTabs.length > 0 ) {
         for (i = 0, j= 0; i < selectedTabs.length; i++) {
	    selectedTabs[i].className = 'tab';
	 }
      }	 
      if ( document.getElementById(thisTab) ) {
        document.getElementById(thisTab).className='tabCurrent';
      }

      if ( thisTab == 'buysale' && document.getElementById('purchase_ftbLabel') ) {
         document.getElementById('purchase_ftbLabel').parentNode.style.display='none';
      }
      else {
         if ( document.getElementById('purchase_ftbLabel') ) {
            document.getElementById('purchase_ftbLabel').parentNode.style.display='';
         }
      }
      
   }
}

function copy_form_field(parentForm, fieldName, fieldValue ) {
   if ( document.getElementById('h_'+fieldName)){ return 0};	 
   inputText = document.createElement("input");
   inputText.setAttribute("type",'hidden');
   inputText.id = 'h_'+fieldName;
   inputText.name = 'h_'+fieldName;
   inputText.setAttribute("value",fieldValue);
   parentForm.appendChild(inputText);
}

function copy_quotes_to_textareas(parentForm) {
   //alert(quoteType) ;
   if ( quoteType == 'sale' || quoteType=='buysale') {
      inputText = document.createElement("textarea");
      inputText.style.display='none';
      inputText.id = 'sale_quote_TA';
      inputText.name = 'sale_quote_TA';
      parentForm.appendChild(inputText);
      inputText.value = document.getElementById('sale_output_dataFS').innerHTML;
   }
   if ( quoteType == 'purchase' || quoteType=='buysale') {
      inputText = document.createElement("textarea");
      inputText.style.display='none';
      inputText.id = 'purchase_quote_TA';
      inputText.name = 'purchase_quote_TA';
      parentForm.appendChild(inputText);
      inputText.value = document.getElementById('purchase_output_dataFS').innerHTML;
   }
   if ( quoteType == 'buysale') {
      inputText = document.createElement("textarea");
      inputText.style.display='none';
      inputText.id = 'buysale_quote_TA';
      inputText.name = 'buysale_quote_TA';
      parentForm.appendChild(inputText);
      inputText.value = document.getElementById('buysale_output_dataFS').innerHTML;
   }
} 

function submitQuote(thisForm) {
   // Need to get all the form fields input and add them to thisForm	 
   var submitFields = new Array();
   var formOK = captcha_check(thisForm);
   if ( formOK == '0') { return false;};
   if ( ( quoteType == 'sale' || quoteType == 'buysale') && (!directInstruction == true)) {
      var formElements = document.getElementById('saleForm').elements;
      for (i = 0; i < formElements.length; i++) {
         submitFields[submitFields.length] = formElements[i];
      }
      var formElements = document.getElementById('sale_output_data').elements;
      for (i = 0; i < formElements.length; i++) {
         submitFields[submitFields.length] = formElements[i];
      }
   }	  
   if ( ( quoteType == 'purchase' || quoteType=='buysale') && (!directInstruction == true)) {
      var formElements = document.getElementById('purchaseForm').elements;
      for (i = 0; i < formElements.length; i++) {
         submitFields[submitFields.length] = formElements[i];
      }
      var formElements = document.getElementById('purchase_output_data').elements;

      for (i = 0; i < formElements.length; i++) {
         submitFields[submitFields.length] = formElements[i];
      }

   }	
   if ( quoteType == 'buysale' && (!directInstruction == true)) {
      var formElements = document.getElementById('buysale_output_data').elements;
      for (i = 0; i < formElements.length; i++) {
         submitFields[submitFields.length] = formElements[i];
      }
   }	

   var theSubmittedForm = document.getElementById(thisForm+'Form');

   if ( !directInstruction == true ) {
      copy_quotes_to_textareas( theSubmittedForm );
   }

   // Add any default extra calculated/control stuff we want
   copy_form_field(theSubmittedForm, 'quoteType',quoteType );

   if ( quoteData["sale"] && quoteData["sale"]["sale_tenure"] && (!directInstruction == true) ) {
     copy_form_field(theSubmittedForm, 'saleTenure', quoteData["sale"]["sale_tenure"] );
   }
   if ( quoteData["purchase"] && quoteData["purchase"]["purchase_tenure"] && (!directInstruction == true) ) {
     copy_form_field(theSubmittedForm, 'purchaseTenure', quoteData["purchase"]["purchase_tenure"] );
   }
   
   // loop through the fields and add them

   for (var i = 0; i < submitFields.length; i++) {
        var addField = 0;
        var thisType = submitFields[i].toString();
        if ( submitFields[i].id.indexOf('tenure')>-1 ){continue};
        if ( isIE ) {
           thisType = submitFields[i].tagName;
        }
	switch (thisType) {
           case 'INPUT': addField=1;break;
           case 'SELECT': addField=1;break;
	   case '[object HTMLTextAreaElement]': addField=1;break;
	   case '[object HTMLInputElement]': addField=1;break;
	   case '[object HTMLSelectElement]': addField=1;break;
	}   
	if ( addField ) {
           //alert('Adding field '+submitFields[i].id+' '+submitFields[i].value); 
           var fldVal = submitFields[i].value;
           if ( submitFields[i].type && submitFields[i].type=='checkbox' ) {
              if (submitFields[i].checked) {fldVal='Yes'}else{fldVal='No'};
           }
           copy_form_field(theSubmittedForm, submitFields[i].id,fldVal );
        }
   }
   //alert('Here in submit quote');
   theSubmittedForm.submit();
}

function initCalculator(tab,thiscalcType,splitFeeFlag) {
   //alert(tab);
   calcTabs = getElementsByClass(document,"calcContainer",'div');
   document.getElementById('outcome_container').style.display='none';
   if ( thiscalcType ) {
      calcType = thiscalcType;
   }
   if (!isNaN(splitFeeFlag) &&  splitFeeFlag.length ) {
      splitbuysaleFees = splitFeeFlag;
   }
   
   if ( tab ) {
      var tabArray=new Array();
      if ( tab == 'buysale') {
         tabArray['buysale']=1
         tabArray['sale']=1
         tabArray['purchase']=1      
      }
      else{tabArray[tab]=1};
      
      switchTab(tabArray,tab);
   }

   // Style disabled elements how we want them, not how IE insists
   disabledItems = getElementsByClass(document,"disabled",'INPUT'); 
   for (i = 0; i < disabledItems.length; i++) {
      disabledItems[i].style.color = 'black';
   }
}

function getElementsByClass(d,needle, tag) {
  if ( !tag ) { 
      tag = '*';
  } 

  var my_array = d.getElementsByTagName(tag);
  var retvalue = new Array();
  var i = 0;
  var j = 0;

  for (i = 0, j= 0; i < my_array.length; i++) {
    var c = " " + my_array[i].className + " ";
    if (c.indexOf(" " + needle + " ") != -1)
      retvalue[j++] = my_array[i];
  }
  return retvalue;
}

function changePostcode(thisPostcode) {
    var tranType = '';
    if ( document.getElementById(thisPostcode) ) {
       var key = document.getElementById(thisPostcode).value;
       if ( thisPostcode.indexOf('sale') > -1 ) {
           tranType = 'Sale';
       }
       else if ( thisPostcode.indexOf('purchase') > -1 ) {
           tranType = 'Purchase';
       }
       if ( !key.length ) { 
          // Hide purchase/sale out put
          setErrorMessage(thisPostcode,tranType+' postcode must be provided');
          return 0;
       }

       //alert('/cms/calculator/getfees'+'?tag=conveyancing&key='+key);     
       var theTag = 'conveyancing';
       if ( document.getElementById('calculator_type') &&
            document.getElementById('calculator_type').value == 'remortgage' ) {
            theTag = 'remortgage';
       }

       var myRequest = sendRequest('/cms/calculator/getfees'+'?tag='+theTag+'&key='+key.toLowerCase(),'','get','','getfees');
       //alert('/cms/calculator/getfees'+'?tag='+theTag+'&key='+key.toLowerCase()); 
       //alert('Got response '+myRequest); 
       if (myRequest.readyState == 4) {
          
          // Clear any previous error message
          clearErrorMessage(thisPostcode);

          // Check to see if we failed the postcode lookup and used the default fee set 
          if ( myRequest.responseXML.getElementsByTagName("fee_note") && myRequest.responseXML.getElementsByTagName("fee_note")[0] ) {
             var fee_note = myRequest.responseXML.getElementsByTagName("fee_note")[0].firstChild.nodeValue;
             //alert(tranType+' '+tranType.toLowerCase()+"_fee_note"); 
             if ( myRequest.responseXML.getElementsByTagName(tranType.toLowerCase()+"_fee_note") && myRequest.responseXML.getElementsByTagName(tranType.toLowerCase()+"_fee_note")[0] ) {
                fee_note = fee_note+myRequest.responseXML.getElementsByTagName(tranType.toLowerCase()+"_fee_note")[0].firstChild.nodeValue;
             } 
             setErrorMessage(thisPostcode,fee_note,'','warningOnly');
          }

          var officeSet = '';
          // Set office set against Postcode msg
          if ( myRequest.responseXML.getElementsByTagName("office_set") && myRequest.responseXML.getElementsByTagName("office_set")[0] ) {
             officeSet = myRequest.responseXML.getElementsByTagName("office_set")[0].firstChild.nodeValue;
          }

          // Looks up Local Authority search fee based upon postcode mapping
          var response = myRequest.responseXML.getElementsByTagName("fees")[0];
          if ( response == null ) {
             setErrorMessage(thisPostcode,'Fee lookup failed - please enter a valid postcode',thisPostcode);
          }
          for ( i = 0; i < response.childNodes.length;i++ ) {
            var disbursementName = response.childNodes[i].nodeName;
            switch ( disbursementName ) {
               case 'local_authority_search' : {
                   var purchaseDisbursements = calcFees['purchase']['freehold']['disbursements'];
                   for ( x = 1; x < purchaseDisbursements.length; x++ ) {
                      if ( calcFees['purchase']['freehold']['disbursements'][x].id == disbursementName ) {
                           //alert( x+' '+response.childNodes[i].firstChild.nodeValue );
                           calcFees['purchase']['freehold']['disbursements'][x].value = response.childNodes[i].firstChild.nodeValue;
                      }
                   }
                   var purchaseDisbursements = calcFees['purchase']['leasehold']['disbursements'];
                   for ( x = 1; x < purchaseDisbursements.length; x++ ) {
                      if ( calcFees['purchase']['leasehold']['disbursements'][x].id == disbursementName ) {
                           calcFees['purchase']['leasehold']['disbursements'][x].value = response.childNodes[i].firstChild.nodeValue;
                      }
                   }
              
                   // Some clients treat it as a fee not a disbursement  
                   if ( feeItems['local_authority_search'])  {
                   var purchaseFixedFees = calcFees['purchase']['freehold']['fixedfees'];
                   for ( x = 1; x < purchaseFixedFees.length; x++ ) {
                      if ( calcFees['purchase']['freehold']['fixedfees'][x].id == disbursementName ) {
                           //alert( x+' '+response.childNodes[i].firstChild.nodeValue );
                           calcFees['purchase']['freehold']['fixedfees'][x].value = response.childNodes[i].firstChild.nodeValue;
                      }
                   }
                   var purchaseFixedFees = calcFees['purchase']['leasehold']['fixedfees'];
                   for ( x = 1; x < purchaseFixedFees.length; x++ ) {
                      if ( calcFees['purchase']['leasehold']['fixedfees'][x].id == disbursementName ) {
                           calcFees['purchase']['leasehold']['fixedfees'][x].value = response.childNodes[i].firstChild.nodeValue;
                      }
                   }

                   }
                   break;
               }
            }
          }

          // Lookup Solicitors scaled fee based upon tran type and tenure type
          var scaled_fees_type = '';
          if ( thisPostcode.indexOf('sale') > -1 ) {
               scaled_fees_type = 'sale';
          }   
          if ( thisPostcode.indexOf('purchase') > -1 ) {
               scaled_fees_type = 'purchase';
          }   
          if ( scaled_fees_type ) {
             //alert ( ' Lookup will process the node '+scaled_fees_type);
             // We should always get the objects initialised from the initial XML definition for scaled fees, we just override it here
             // var response = myRequest.responseXML.getElementsByTagName(scaled_fees_type)[0];

             var responseXML = myRequest.responseXML;
             var root=responseXML.documentElement;
             var response = root.getElementsByTagName(scaled_fees_type)[0];

             if ( response.getElementsByTagName('freehold')[0] ) {
                var storedNode = 'freehold';
                var myNodeSet = response.getElementsByTagName('freehold')[0];
                load_scaled_fees(scaled_fees_type,storedNode,myNodeSet);
                ajax_reload_disbursements(scaled_fees_type,storedNode,myNodeSet);
             }
             if ( response.getElementsByTagName('leasehold')[0] ) {
                var storedNode = 'leasehold';
                var myNodeSet = response.getElementsByTagName('leasehold')[0];
                load_scaled_fees(scaled_fees_type,storedNode,myNodeSet);
                ajax_reload_disbursements(scaled_fees_type,storedNode,myNodeSet);
             }

             //alert(scaled_fees_type+' has '+response.childNodes.length+' nodes');
             //for ( i = 0; i < response.childNodes.length;i++ ) {
             //   if ( response.childNodes[i] && response.childNodes[i].nodeName ) { 
             //      //alert('Child Node is '+response.childNodes[i].nodeName);
             //      var nodeName = response.childNodes[i].nodeName;
             //      if ( nodeName == 'freehold' || nodeName == 'leasehold' ) {
             //         var storedNode = response.childNodes[i].nodeName;
             //         var myNodeSet = response.childNodes[i]; 
             //         load_scaled_fees(scaled_fees_type,storedNode,myNodeSet);
             //         ajax_reload_disbursements(scaled_fees_type,storedNode,myNodeSet);
             //      } 
             //   }
             //}  
 
             if ( document.getElementById(scaled_fees_type+'_postcodeMessageLabel') ) {
                thisPostcode = scaled_fees_type+'_postcode';
                //alert(thisPostcode);
                //setErrorMessage(thisPostcode,officeSet,'','warningOnly');
             } 


          }
          return response;
       } 
       return 0;
    }
    else {
       return 0; 
    }
    return 1;
}

function ajax_reload_disbursements(tranType,xmlTenure,xmlNodeSet) {
   var reload_disbursements = xmlNodeSet.childNodes;
   var tenure = '';
   var theForm = document.getElementById(tranType+'Form');
   if ( tranType == 'sale' ) {
      if ( theForm.sale_tenure ) {
         for ( i = 0; i < theForm.sale_tenure.length; i++) {
            if ( theForm.sale_tenure[i].checked ) {
                tenure = theForm.sale_tenure[i].value;
            }
         }
      }
   }
   if ( tranType == 'purchase' ) {
      if ( theForm.purchase_tenure ) {
         for ( i = 0; i < theForm.purchase_tenure.length; i++) {
            if ( theForm.purchase_tenure[i].checked ) {
                tenure = theForm.purchase_tenure[i].value;
            }
         }
      }
   }   
   if ( tenure != xmlTenure ) {
      //alert( ' Tran Type '+tranType+' Form Tenure '+tenure+' XML Tenure '+xmlTenure );
      return; 
   }
   //alert( ' Tran Type '+tranType+' Tenure '+tenure );

   var disNodes=undefined;
   for ( i = 0; i < reload_disbursements.length; i++ ) {
      if ( reload_disbursements[i].nodeName == 'disbursements' ) {
          if ( reload_disbursements[i].hasChildNodes() ) {
             disNodes = reload_disbursements[i].childNodes;
          }
      } 
   }
   if ( !disNodes ) {return}; 
   var disbursements = calcFees[tranType][tenure]['disbursements'];
   for ( i = 0; i < disNodes.length; i++ ) {
      var disbursementName = disNodes[i].nodeName;
      //alert(disbursementName);
      for ( x = 1; x < disbursements.length; x++ ) {
         if ( calcFees[tranType][tenure]['disbursements'][x].id == disbursementName ) {
           //alert( disbursementName+' '+disNodes[i]+' Name = '+disNodes[i].firstChild.nodeName+' Value = '+disNodes[i].firstChild.childNodes[0].nodeValue );
           calcFees[tranType][tenure]['disbursements'][x].value = disNodes[i].firstChild.childNodes[0].nodeValue;
         }
      }
      // Some clients treat it as a fee not a disbursement  
      if ( feeItems[disbursementName])  {
         var purchaseFixedFees = calcFees[tranType][tenure]['fixedfees'];
            for ( x = 1; x < purchaseFixedFees.length; x++ ) {
            if ( calcFees[tranType][tenure]['fixedfees'][x].id == disbursementName ) {
               calcFees[tranType][tenure]['fixedfees'][x].value = disNodes[i].firstChild.childNodes[0].nodeValue;
            }
         }
      }
   }
}

function load_scaled_fees(tranType, tenure, xmlNodeSet ) {
       //alert('Loading scaled fees for '+tranType+' '+tenure ); 
       var scaledfeeCount = xmlNodeSet.childNodes.length;   
       for ( i = 0; i < scaledfeeCount;i++ ) {
           var nodeName = xmlNodeSet.childNodes[i].nodeName;
           //alert(nodeName);
           if ( !calcFees[tranType][tenure]["scaledfees"][nodeName] ) {
                calcFees[tranType][tenure]['scaledfees'][nodeName] = new Array();
           } 
           switch (nodeName ) {
              case 'solicitors_fee'  : {
                 var itemCount = xmlNodeSet.childNodes[i].childNodes.length;
                 var feeCounter = 1;  
                 for ( x = 0; x < itemCount;x++ ) {
                    if ( xmlNodeSet.childNodes[i].childNodes[x].nodeName == 'item' ) { 
                       //alert('KMG Here '+tranType+' '+tenure+' '+nodeName);
                       calcFees[tranType][tenure]['scaledfees'][nodeName][feeCounter] = new Object(); 
                       var range = '';
                       var value = '';
                       if ( isIE ) {
                         range = xmlNodeSet.childNodes[i].childNodes[x].childNodes[0].firstChild.nodeValue;
                         value = xmlNodeSet.childNodes[i].childNodes[x].childNodes[1].firstChild.nodeValue;   
                       }                      
                       else { 
                         range = xmlNodeSet.childNodes[i].childNodes[x].childNodes[1].firstChild.nodeValue;
                         value = xmlNodeSet.childNodes[i].childNodes[x].childNodes[3].firstChild.nodeValue;
                       }  
                       calcFees[tranType][tenure]['scaledfees'][nodeName][feeCounter].range = range;
                       calcFees[tranType][tenure]['scaledfees'][nodeName][feeCounter].value = value;
                       calcFees[tranType][tenure]['scaledfees'][nodeName][feeCounter].vatrate = '17.50';
                       //calcFees[tranType][tenure]['scaledfees'][nodeName][feeCounter].vatrate = '15.00';
                       feeCounter++;
                    }
                 }
              }
           } 
       }
}

function changeAuthority(thisCounty,theDropDown) { 
    if ( thisCounty.value  && theDropDown )  {	
	 theDropDown.options.length = 0;
	 if ( thisCounty.value != '0' ) {
            for (i = 1; i < countyAreas[thisCounty.value].length; i++) {
	       theDropDown.options[i-1] = new Option();
	       theDropDown.options[i-1].value = countyAreas[thisCounty.value][i].title;
	       theDropDown.options[i-1].text = countyAreas[thisCounty.value][i].title;
	    } 
         }
    }
}

function BrowserDetection() {
    if (navigator.userAgent.indexOf('MSIE') != -1)
        isIE = true;
    else if (navigator.userAgent.indexOf('Safari') != -1)
        isSafari = true;
    else if (navigator.userAgent.indexOf('Opera') != -1)
        isOpera = true;
    else
        isMozilla = true;
};

function getXMLHTTPObject(){
    //instantiate new XMLHTTP object
    var objhttp=(window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');
    if(!objhttp){return};
    // assign event handler
    
    if (navigator.userAgent.indexOf('MSIE') != -1)
        isIE = true;
    else if (navigator.userAgent.indexOf('Safari') != -1)
        isSafari = true;
    else if (navigator.userAgent.indexOf('Opera') != -1)
        isOpera = true;
    else
        isMozilla = true;

    return objhttp;
};

// function sendRequest
function sendRequest(url,data,method,header,calltype){
    // get XMLHTTP object
    objhttp=getXMLHTTPObject();
    //alert('KMG '+objhttp);
    
    if ( !isIE ) { 
       objhttp.onreadystatechange = processReqChange(objhttp,calltype);
    }
 
    // set default values
    if(!url){url='/cms/calculator/auth'};
    if(!data){data=''}; 
    if(!method){method='get'};
    if(!header){header='Content-Type:text/html; charset=iso-8859-1'};
    // open socket connection in asyncronous mode
    objhttp.open(method,url,false);
    // send header
    objhttp.setRequestHeader(header.split(':')[0],header.split(':')[1]);
    // send data
    objhttp.send(null);
    // return xmlhttp object
    return objhttp;
};

function processReqChange(req,calltype) {
    // only if req shows "loaded"
    if (req.readyState == 4) {

    }
};

function captcha_check(thisForm) {
    var theCaptchaText = ''; 
    if ( document.getElementById(thisForm+'Form') ) {
       theSubmittedForm =  document.getElementById(thisForm+"Form"); 
    }
    else {
       alert('Form does not exist '+thisForm);
    }
    //alert('The form is '+theSubmittedForm.id);
    //alert('The captcha object is '+theSubmittedForm.captcha_text);
    if ( theSubmittedForm.captcha_text ) {
       theCaptchaText = theSubmittedForm.captcha_text.value;
    } 
    if ( theCaptchaText ) {
       //alert('Captcha check');
       myRequest = sendRequest('/cms/calculator/auth'+'?captcha_text='+theCaptchaText,'','get','','auth'); 

       if (myRequest.readyState == 4) {
          var response = myRequest.responseXML.getElementsByTagName("auth")[0].childNodes[0].nodeValue;
          if ( response == '0' ) {
             setErrorMessage('captcha_text'+thisForm+'Form','Authentication failed - please copy security image text exactly');
             var randomnumber=Math.floor(Math.random()*1000000);      
             document.getElementById('captchaImg').src = '/cms/captcha/securityimage.png'+'?'+randomnumber;      
          } 
          return response;
       }
       return 0;
    }
    else {
       return 0;
    }
    return 1;
}


function fetchAddress(theFormID,theID) {
   var webservice = '/cms/calculator/postcodelookup?';

   myRequest = sendRequest(webservice+'id='+theID,'','get','','fetch');

   if (myRequest.readyState == 4) {
      var my_address = myRequest.responseXML.getElementsByTagName("Item");
      var theFormObject = document.getElementById(theFormID);
      
      if (my_address.length && my_address.length == 1) {
         if ( theFormObject.address1 ) {
            if ( my_address[0].getAttribute('line1') ) {
               theFormObject.address1.value = my_address[0].getAttribute('line1');
            }
            else {
               theFormObject.address1.value = ''; 
            }
         }
         if ( theFormObject.address2 ) {
            if ( my_address[0].getAttribute('line2') ) {
               theFormObject.address2.value = my_address[0].getAttribute('line2');
               if ( my_address[0].getAttribute('line3') ) {
                  theFormObject.address2.value = theFormObject.address2.value+','+my_address[0].getAttribute('line3');
               }
               if ( my_address[0].getAttribute('line4') ) {
                  theFormObject.address2.value = theFormObject.address2.value+','+my_address[0].getAttribute('line4');
               }
            }
            else {
               theFormObject.address2.value = '';
            }
 
         }
         if ( theFormObject.town ) {
            if ( my_address[0].getAttribute('post_town') ) {
               theFormObject.town.value = my_address[0].getAttribute('post_town');
            }
            else {
               theFormObject.town.value = '';
            }
         }
         if ( theFormObject.county ) {
            if ( my_address[0].getAttribute('county') ) {
               theFormObject.county.value = my_address[0].getAttribute('county');
            }
            else {
               theFormObject.county.value = '';
            }
         }
         if ( theFormObject.postcode ) {
            if ( my_address[0].getAttribute('postcode') ) {
               theFormObject.postcode.value = my_address[0].getAttribute('postcode');
            }
            else {
               theFormObject.postcode.value = '';
            }
         }


      }  
   }
   document.getElementById("pcaResultContainer").style.display = 'none';
}

function lookup_postcode(theButton,theForm,thePostcode) {
   var webservice = '/cms/calculator/postcodelookup?';
   var storedButtonValue = theButton.value;  
   myRequest = sendRequest(webservice+'postcode='+theForm.postcode.value,'','get','','ByPostcode');

   var theLabelID = 'postcode'+theForm.id+'MessageLabel';

   clearErrorMessage('postcode',document.getElementById(theLabelID));

   var myPopUp = document.getElementById("pcaResultContainer");
   if (!myPopUp) {
       myPopUp = document.createElement("div");
       myPopUp.id = "pcaResultContainer";
       myPopUp.className = "pcaResultContainer";
       document.getElementsByTagName("body")[0].appendChild(myPopUp);
   }
   else {
       while (myPopUp.childNodes.length > 0) {
          myPopUp.removeChild(myPopUp.childNodes[myPopUp.childNodes.length - 1]);
       }
   }
   myPopUp.style.display = 'none';
   div1 = document.createElement("div");
   div1.innerHTML ='Searching for address, please wait a moment.';
   div1.className = "pcaResultHeader";
   myPopUp.appendChild(div1);
   showMenuAtElement(document,'pcaResultContainer', theForm.postcode, 1, 4);
   myPopUp.style.position = 'absolute';
   myPopUp.style.display='block';
   myPopUp.style.zIndex = '99999';

   if (myRequest.readyState == 4) {
      var my_postcodes = myRequest.responseXML.getElementsByTagName("Item");

      while (myPopUp.childNodes.length > 0) {
          myPopUp.removeChild(myPopUp.childNodes[myPopUp.childNodes.length - 1]);
      }

      if ( my_postcodes.length && 
           my_postcodes[0].getAttribute('error_number') && 
           my_postcodes[0].getAttribute('message') ) {
           myPopUp.style.display = 'none';
           setErrorMessage('postcode','Lookup failed - please enter a full postcode',document.getElementById(theLabelID)); 
           theButton.value = storedButtonValue;
           return 0;
      }
      if ( my_postcodes.length ) {
         // Create floating div
         
         var img1 = document.createElement("img");
         img1.src = "/global/images/toolbar/minus.gif";
         img1.alt = "close";
         img1.title = "close";
         img1.className = "lookupImgClose";
         img1.onclick = Function("document.getElementById('"+theButton.id+"').value = '"+storedButtonValue+"';document.getElementById('pcaResultContainer').style.display = 'none';");

         div1 = document.createElement("div");
         div1.appendChild(img1);
         
         text1 = document.createTextNode('Please choose an address from the list.');
         div1.appendChild(text1);
         div1.className = "pcaResultHeader";
         myPopUp.appendChild(div1);
         div1 = document.createElement("div");
         div1.id = 'pcaResult';
         div1.className = 'pcaResult';
         myPopUp.appendChild(div1);
         for (i = 0; i < my_postcodes.length; i++) {
            addLookUpItem(div1,
                        'pca_'+i,
                        '#pca',
                        my_postcodes[i].getAttribute('description'),
                        '',
                        myPopUp.style.width,
                        Function("fetchAddress('"+theForm.id+"','"+my_postcodes[i].getAttribute('id')+"');") );
         }
         showMenuAtElement(document,'pcaResultContainer', theForm.postcode, 1, 4);
         myPopUp.style.position = 'absolute';
         myPopUp.style.display='block';
         myPopUp.style.zIndex = '99999';
         theButton.value = storedButtonValue;
         return 1;
      }
      else {
         document.getElementById('pcaResultContainer').style.display = 'none';
         setErrorMessage('postcode','Lookup failed - please enter a full valid postcode.',document.getElementById(theLabelID));
      }
   }
}

function addLookUpItem(myPopUp, id, href, title, menuclassName, width, onclick) {
    if ( !menuclassName ) {
       menuclassName = 'popupItem';
    }
    containerDiv = document.createElement("div");

    containerDiv.setAttribute("style", "position:relative;float:left;clear:both;width:97%;height:auto;display:block;vertical-align:middle;margin:0px;padding:0px;");

    myPopUp.appendChild(containerDiv);

    span1 = document.createElement("span");

    if ( isIE ) {
       span1.setAttribute("style","width:96%;height:auto;position:relative;float:left;margin:0px;padding:0px;cursor:pointer;display:block;");
    }
    else {
       span1.setAttribute("style","width:100%;height:auto;position:relative;float:left;margin:0px;padding:0px;cursor:pointer;display:block;");
    }
    anchor1 = document.createElement("a");
    anchor1.setAttribute("href", href);
    anchor1.id = id;
    text1 = document.createTextNode(title);
    anchor1.className = 'popupItem';
           if ( isIE ) {
              anchor1.style.width = '100%';
           }
           else {
              anchor1.style.width = '96%';
           }

    if ( onclick ) {
       anchor1.onclick = onclick;
    }

    anchor1.appendChild(text1);
    span1.appendChild(anchor1);
    containerDiv.appendChild(span1);
}

function showMenuAtElement(d,popup, el, addOffSet,moveUp) {
  var p = getAbsolutePos(el);
  var y_coord = p.y + el.offsetHeight+2;
  if ( addOffSet == 0 ) {
     y_coord = p.y;
  }
  var x_coord = p.x+1;
  if ( moveUp) {
     y_coord = y_coord+moveUp;
  }
  showPopUpAt(d, popup, el,x_coord, y_coord);
}

function fieldVisibility(visibleFields,hiddenFields) {
    BrowserDetection() 
    var fieldCount = visibleFields.length;
    if ( fieldCount ) {
       for ( i = 0;i<fieldCount;i++ ) {
         if (document.getElementById('tr_'+visibleFields[i])) {
             if (isIE) {
               document.getElementById('tr_'+visibleFields[i]).style.display='block';
             }
             else { 
               document.getElementById('tr_'+visibleFields[i]).style.display='table-row';
             }
         }  
       }
    }
    fieldCount = hiddenFields.length;
    if ( fieldCount ) {
       for ( i = 0;i<fieldCount;i++ ) {
         if (document.getElementById('tr_'+hiddenFields[i])) {
             document.getElementById('tr_'+hiddenFields[i]).style.display='none';
         }  
       }
    }

     
} 

