//*************************************************************************
// property_searchform.js
//*************************************************************************

/*f
<!-- -->
<!-- The copyright in the work that is PublicAccess is the exclusive -->
<!-- property of CAPS Solutions Ltd, and its respective copyright owners, and is -->
<!-- protected under United Kingdom copyright law and other international copyright -->
<!-- treaties and conventions. 
<!-- © 2004. CAPS Solutions Ltd and its licensor(s). All rights reserved. -->
*/

//**********************************************************************************
// checks that all required fields have been filled
// Calls functions from validate.js
//**********************************************************************************


var szRangeText;
var szStartChar;
var iStartChar;
var szEndChar;
var iEndChar;
		
function verify(f){

	var bUsrnEntered = ForceEntry(f.srchUsrn);
	var bStreetNameEntered = ForceEntry(f.srchStreetName);
	var bPropNameEntered = ForceEntry(f.srchProperty);
	var bPostCodeEntered = ForceEntry(f.srchPostCode);
	
	//Check for existence of objects on the page prior to checking the object
	//as they may have been commented out during customisation of the site
	var bUPRNSearchAvailable = false;
	var bUPRNEntered = false;
	if (f.srchUPRN) {
		bUPRNEntered = ForceEntry(f.srchUPRN);
		bUPRNSearchAvailable = true;
	}
	
	var szPropName = f.srchProperty.value;
	var szStreetName = f.srchStreetName.value;

	szPropChar = szPropName.substr(0,1);
	
	var iFirstVal = parseInt(szPropChar);
	
	//#CP changed - we might have a number and a name so check whole string not just first char
	var bPropertyNameIsText = isNaN(szPropName);
	
	// check that the street name entered has not been reset by the user
	if (bStreetNameEntered){
		if(szStreetName=='(No Street Selected)'){
			f.srchStreetName.value = '';
			bStreetNameEntered = false;
		}
	}
	
	// if searching by property name/number
	if (bPropNameEntered){
		
		// if property is a number
		if (!bPropertyNameIsText && !bStreetNameEntered && !bPostCodeEntered) {
			alert("Please select a street name along with the property number.");
			return false;
		}
		
		// if property is a name
		if (bPropertyNameIsText && !bStreetNameEntered && szPropName.length < 4) {
			alert("Please select a street name from the list and/or enter a longer property name.");
			return false;
		}
		
	}
	
	// if postcode is entered, check for at leats 3 chars
	if (bPostCodeEntered){
		
		var szPostcode = f.srchPostCode.value;
		var lPostcodeLen = szPostcode.length;
		if(lPostcodeLen < 5){
			alert("Please enter a minimum of a postcode sector when searching using postcode details e.g. AA1 2.");
			return false;
		}
		else {
				if (lPostcodeLen == 5) {
					if (szPostcode.charAt(4)==" ") {
						alert("Please enter a minimum of a postcode sector when searching using postcode details e.g. AA1 2.");
						return false;
					}
				}
				else
				{
					if (szPostcode.charAt(4)!=" " && szPostcode.charAt(3)!=" ") {
						alert("For a postcode to be valid please enter a space between the two parts of the post code e.g. AA1 2AA.");
						return false;
					}
				}								
		}
	}

	//check for appropriate number of chars for a UPRN
	if (bUPRNEntered) {
		
		var szUPRN = f.srchUPRN.value;
		var lUPRNLen = szUPRN.length;
		
		if (lUPRNLen < 12){
			alert("Please enter a full property UPRN.");
			return false;
		}
	}
	
	// check that if street is typed they know to use lookup
	if (bStreetNameEntered && !bUsrnEntered){
		alert("Please select a street from the list by clicking on the list.");
		return false;
	}
	
	//need to decide error to display if no data entered and whether UPRN is an available search
	if (!bUPRNSearchAvailable) {
		// must enter one of : street, propertyname or postcode
		if (!bUsrnEntered && !bPropNameEntered  && !bPostCodeEntered){
				alert("Please enter a property name/number, postcode or street name.");
				return false;
		}
		
	}
	else
	{
		// must enter one of : street, propertyname, postcode or UPRN
		if (!bUsrnEntered && !bPropNameEntered  && !bPostCodeEntered && !bUPRNEntered){
				alert("Please enter a property name/number, postcode, street name or property UPRN.");
				return false;
		}
	
	
	}

	//added so the street name text box is added when the used hits return
	if (bPropertyNameIsText && bStreetNameEntered) {
		changeStreetSelect();
	}
	
	if (bStreetNameEntered) {
		changeStreetSelect();
	}

	if (f.btnSubmitGaz) f.btnSubmitGaz.disabled=true;
	else if (f.KHTML_btnSubmitGaz) f.KHTML_btnSubmitGaz.disabled=true;
	return true;

}


//***********************************************************
// resets the form and the streetlist scroller
//***********************************************************
function resetGazForm(){
	
	var elStreetSelect = document.forms[0].elements['selStreetList'];
	var elHidUSRN = document.forms[0].elements['srchUsrn'];
	var bHideFullStreetList = document.getElementById('hidefullstreetlist').value;
	
	document.forms['searchform'].reset()
	elStreetSelect.selectedIndex = 0;
	elStreetSelect._lastselectedoption = 0;
	elStreetSelect._lastsearchstringlength = 0;
	elHidUSRN.value="";
	if (bHideFullStreetList=="true") {
		document.getElementById('selStreetChoiceList').selectedIndex = (document.getElementById('streetgroup').value - 1);
	}
	
	return;

}


//***********************************************************
// functions for the scrolling street list
//***********************************************************
function scrollGazSelect(){

	var elStreetSelect = document.forms[0].elements['selStreetList'];
	var elStreetSearchTxtBox = document.forms[0].elements['srchStreetName'];
	var elHidUSRN = document.forms[0].elements['srchUsrn'];
	var szTxt = elStreetSearchTxtBox.value;
	
	if (szTxt == ""){
		//backspace or delete to start of textbox - return selected index to (None) and cease search
		elStreetSelect.selectedIndex = 0;
		elStreetSelect._lastselectedoption = 0;
		elStreetSelect._lastsearchstringlength = 0;
		elHidUSRN.value="";
		return;
	}
	
	//loop through the options and check for this substring at the start of each option text value
	szTxt = szTxt.toUpperCase();
	var iTxtLength = szTxt.length;
	
	var bHideFullStreetList = document.getElementById('hidefullstreetlist').value;
	
	if (iTxtLength==1 && bHideFullStreetList=="true")
	{
		var iFirstCharCode =  szTxt.charCodeAt(0);
		if ((iFirstCharCode < iStartChar) || (iFirstCharCode > iEndChar))
		{
			var szTypoError = "The first letter of your street is not between the letters " + szRangeText + ". ";
			szTypoError+="Please select the appropriate group of streets from the 'Street Group' list.";
			alert(szTypoError);
			elStreetSearchTxtBox.value="";
			var elStreetChoiceSelect = document.forms[0].elements['selStreetChoiceList'];
			elStreetChoiceSelect.focus();
			return;
		}
		
	}
	var elOptions = elStreetSelect.options;
	var iOptionCount = elOptions.length;
	var iItemsDisplayed = elStreetSelect.size;
		
	var iStartSearchAt = elStreetSelect._lastselectedoption - 0;
	
	// check to see if backspacing - need to reset search appropriately
	if(iTxtLength < elStreetSelect._lastsearchstringlength){
		// start from beginning if deleting chars - don't know at what point the previous letter 
		// starts in the list
		iStartSearchAt = 0;
	}else{
		// only test from last selected option if adding characters
		iStartSearchAt = elStreetSelect._lastselectedoption - 0;
	}
	elStreetSelect._lastsearchstringlength = iTxtLength;
	
	for (var i = iStartSearchAt; i < iOptionCount;i++){
		
		var szTest = (elOptions[i].text).toUpperCase();
		szTest = szTest.substring(0, iTxtLength);
			
		//if (szTest.indexOf(sTxt) != -1){
		if (szTest==szTxt){
			if (i+iItemsDisplayed<elStreetSelect.length) {
				elStreetSelect.selectedIndex = i + iItemsDisplayed;
			}
			else {
				elStreetSelect.selectedIndex = elStreetSelect.length - 1;
			}
			elStreetSelect.selectedIndex = i;
			elStreetSelect._lastselectedoption = i;
			scrolledoption = elOptions[i].text;
				
			
			
			// make this the selected property			
			elHidUSRN.value = elOptions[i].value;
			return;
		}
	
	}
	
}

// highlights the select box and street name text box
function highlightStreetSelect(){
	document.forms[0].elements['selStreetList'].style.backgroundColor = "#FEFFC1";
	document.forms[0].elements['srchStreetName'].style.backgroundColor = "#FEFFC1";
}
function unhighlightStreetSelect(){
	document.forms[0].elements['selStreetList'].style.backgroundColor = "#FFFFFF";
	document.forms[0].elements['srchStreetName'].style.backgroundColor = "#FFFFFF";
}

// if clicked directly
function changeStreetSelect(){
	var theSelect = document.forms[0].elements['selStreetList'];
	var iSelIndex = theSelect.selectedIndex;
	document.forms[0].elements['srchUsrn'].value = theSelect.options[iSelIndex].value;
	document.forms[0].elements['srchStreetName'].value = theSelect.options[iSelIndex].text;
	
}

function clickGazSelect(){
	var scrolledoption = document.forms[0].elements['selStreetList'];
	if (scrolledoption != ""){
		document.forms[0].searchval.value = scrolledoption;
		bFullStreetName = true;
		document.forms[0].elements.fullStreet.value = true;
	}
}


function selectStreetGroup(){
	var theSelect = document.forms[0].elements['selStreetChoiceList'];
	var strCurrentModule = document.forms[0].elements['module'].value;
	var iSelIndex = theSelect.selectedIndex;
	var szloc = 'property_searchform.aspx?module=' + strCurrentModule + '&group='+(iSelIndex+1);
	if (document.forms[0].elements['srchProperty'].value!="") szloc+='&pr='+document.forms[0].elements['srchProperty'].value;
	if (document.forms[0].elements['srchPostCode'].value!="") szloc+='&pc=' + document.forms[0].elements['srchPostCode'].value;
	if (document.forms[0].elements['srchUPRN']) {
	if (document.forms[0].elements['srchUPRN'].value!="") szloc+='&uprn=' + document.forms[0].elements['srchUPRN'].value;
	}
	document.location = szloc;
}

