function selectAll(element) {
	var T = document.form1.elements[element];   
	for (var i=0;i<T.length;i++) {
 		T[i].checked = true;
	}
}

function selectAllAdvanced(element) {
	var A=element;
	if (A) {
		if (A.length!=undefined) {
			for(var i=0; i<A.length;i++) {
				if (!A[i].disabled) {
					A[i].checked=true;	
				}else{
					A[i].checked=false;
				}			
			}			
		}else{ 
			if (!A.disabled) {
				A.checked=true;
			}else{
				A.checked=false;
			}
		}
	}
}

function deSelectAll(element) {
	var T = document.form1.elements[element];   
	for (var i=0;i<T.length;i++) {
 		T[i].checked = false;
	}
}

function deSelectAllAdvanced(element) {
	var A=element;
	if (A) {
		if (A.length!=undefined) {
			for(var i=0; i<A.length;i++) {
				A[i].checked=false;				
			}			
		}else{ 
			A.checked=false;
		}
	}	
}

function toggleShowObject(value,display) {
	if (document.getElementById(value)) {
		if (display) { 
			document.getElementById(value).style.display='block';
		}else{
			document.getElementById(value).style.display='none';
		}
	}
}

function toggleShowTableRow(elementName) {
	
	if (document.getElementById(elementName)) {
	
		var row = document.getElementById(elementName);
	
		if(navigator.appName.indexOf("Microsoft")>-1) {
			row.style.display = (row.style.display == 'block')? 'none' : 'block';
		}else{
			row.style.display = (row.style.display == 'table-row')? 'none' : 'table-row';
		}
	
	}
	
}

function getSelectedRadioValue(elementName) {
	// returns the value of the selected radio button or "" if no button is selected
	var A=document.form1.elements[elementName];
	if (A) {
   		var i = getSelectedRadio(A);
   		if (i == -1) {
			return "";
		}else{
			if (A[i]) { // Make sure the button group is an array (not just one button)
				return A[i].value;
			}else{ // The button group is just the one button, and it is checked
				return A.value;
			}
		}
	}else{
		return '';
	}
}

function validateCheckboxesTicked(elementName) {
	
	var A = document.form1.elements[elementName+'[]'];
	
	var numTicked = 0;
	
	if (A.length!=undefined) {
		
		for (var i=0; i<A.length; i++) {
			if (A[i].checked==true) {
				numTicked++;	
			}
		}
		
	}else{
		if (A.checked==true) {
			numTicked++;	
		}
	}
	
	if (numTicked>0) {
		return true;
	}else{
		return false;
	}
	
}

function validateEmail(emailStr) {
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
		
	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) {
		//alert("Email address seems incorrect (check @ and .'s)")
		return false;
	}
	var user=matchArray[1]
	var domain=matchArray[2]
		
	if (user.match(userPat)==null) {
		//alert("The username doesn't seem to be valid.")
		return false;
	}
		
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		// this is an IP address
		for (var i=1;i<=4;i++) {
		if (IPArray[i]>255) {
			//alert("Destination IP address is invalid!")
			return false;
		}
		}
		return true;
	}
		
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		//alert("The domain name doesn't seem to be valid.")
		return false;
	}
		
	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || 
		domArr[domArr.length-1].length>4) {
	  // alert("The address must end in a three-letter domain, or two letter country.")
	   return false;
	}
		
	if (len<2) {
	   var errStr="This address is missing a hostname!"
	   //alert(errStr)
	   return false;
	}
		
	return true;
}

function validatePostcode(postcode){ //check postcode format is valid
	test = postcode;
	size = test.length
	while (test.slice(0,1) == " ") {
		test = test.substr(1,size-1);size = test.length
	}
	while(test.slice(size-1,size)== " ") {
		test = test.substr(0,size-1);size = test.length
	}
	if (size < 6 || size > 8) { return false; }
	if (!(isNaN(test.charAt(0)))) { return false; }
	if (isNaN(test.charAt(size-3))) { return false; }
	if (!(isNaN(test.charAt(size-2)))) { return false; }
	if (!(isNaN(test.charAt(size-1)))) { return false; }
	if (!(test.charAt(size-4) == " ")) { return false;  }
	count1 = test.indexOf(" ");count2 = test.lastIndexOf(" ");
	if (count1 != count2){ return false; }
	return true;
}

function formatNumber(nStr) {
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function updatePrices(department) {
	
	var A = document.formQuickSearch;
	var B = 0;
	
	var selectedIndexNumber = 0
	
	if (department=="RS") {
		
		B = 0;
		selectedIndexNumber = 0;
		
		A.minimumPrice.length=0;
		
		if (minBlankOption!="") { A.minimumPrice.options[0] = new Option(minBlankOption, ''); B++; }
		
		for (var i=B; i<minPriceArray.length; i++) {
			A.minimumPrice.options[i] = new Option('£'+formatNumber(minPriceArray[i]),minPriceArray[i]);
			if (minPriceArray[i]==minDefault) { selectedIndexNumber = i; }
		}
		A.minimumPrice.selectedIndex=selectedIndexNumber;
		
		B = 0;
		selectedIndexNumber = 0;
		
		A.maximumPrice.length=0;
		
		if (maxBlankOption!="") { A.maximumPrice.options[0] = new Option(maxBlankOption, ''); B++; }
		
		for (var i=B; i<maxPriceArray.length; i++) {
			A.maximumPrice.options[i] = new Option('£'+formatNumber(maxPriceArray[i]),maxPriceArray[i]);
			if (maxPriceArray[i]==maxDefault) { selectedIndexNumber = i; }
		}
			
		A.maximumPrice.selectedIndex=selectedIndexNumber;

		B = 0;
		selectedIndexNumber = 0;
		
		A.regionID.length=0;
		
		if (regionBlankOption!="") { A.regionID.options[0] = new Option(regionBlankOption, ''); B++; }
		
		for (var i=0; i<RSRegionArray.length; i++) {
			regionSplit=RSRegionArray[i].split("|"); 
			A.regionID.options[B] = new Option(regionSplit[1],regionSplit[0]);
			if (regionSplit[0]==regionDefault) { selectedIndexNumber = B; }
			B++;
		}
			
		A.regionID.selectedIndex=selectedIndexNumber;

	}
	
	if (department=="RL") {
		
		B = 0;
		selectedIndexNumber = 0;
		
		A.minimumPrice.length=0;
		
		if (minBlankOption!="") { A.minimumPrice.options[0] = new Option(minBlankOption, ''); B++; }
		
		rentFrequency = A.minimumRentFrequency.value;
		
		if (rentFrequency=="") { // if no frequency set yet
			rentFrequency = minRentArray.pop();
			A.minimumRentFrequency.value = rentFrequency;
		}
		
		for (var i=B; i<minRentArray.length; i++) {
			A.minimumPrice.options[i] = new Option('£'+formatNumber(minRentArray[i])+' '+rentFrequency,minRentArray[i]);
			if (minPriceArray[i]==minDefault) { selectedIndexNumber = i; }
		}
			
		A.minimumPrice.selectedIndex=selectedIndexNumber;
		
		B = 0;
		selectedIndexNumber = 0;
		
		A.maximumPrice.length=0;
		
		if (maxBlankOption!="") { A.maximumPrice.options[0] = new Option(maxBlankOption, ''); B++; }
		
		rentFrequency = A.maximumRentFrequency.value;
		
		if (rentFrequency=="") { // if no frequency set yet
			rentFrequency = maxRentArray.pop();
			A.maximumRentFrequency.value = rentFrequency;
		}
		
		for (var i=B; i<maxRentArray.length; i++) {
			A.maximumPrice.options[i] = new Option('£'+formatNumber(maxRentArray[i])+' '+rentFrequency,maxRentArray[i]);
			if (maxPriceArray[i]==maxDefault) { selectedIndexNumber = i; }
		}
			
		A.maximumPrice.selectedIndex=selectedIndexNumber;

		B = 0;
		selectedIndexNumber = 0;
		
		A.regionID.length=0;
		
		if (regionBlankOption!="") { A.regionID.options[0] = new Option(regionBlankOption, ''); B++; }
		
		for (var i=0; i<RLRegionArray.length; i++) {
			regionSplit=RLRegionArray[i].split("|"); 
			A.regionID.options[B] = new Option(regionSplit[1],regionSplit[0]);
			if (regionSplit[0]==regionDefault) { selectedIndexNumber = B; }
			B++;
		}
			
		A.regionID.selectedIndex=selectedIndexNumber;

	} 
	
	if (department=="C") {
		
		B = 0;
		selectedIndexNumber = 0;
		
		A.regionID.length=0;
		
		if (regionBlankOption!="") { A.regionID.options[0] = new Option(regionBlankOption, ''); B++; }
		
		for (var i=0; i<CRegionArray.length; i++) {
			regionSplit=CRegionArray[i].split("|"); 
			A.regionID.options[B] = new Option(regionSplit[1],regionSplit[0]);
			if (regionSplit[0]==regionDefault) { selectedIndexNumber = B; }
			B++;
		}
			
		A.regionID.selectedIndex=selectedIndexNumber;
	}
	
	if (department=="LA") {
		
		B = 0;
		selectedIndexNumber = 0;
		
		A.regionID.length=0;
		
		if (regionBlankOption!="") { A.regionID.options[0] = new Option(regionBlankOption, ''); B++; }
		
		for (var i=0; i<LARegionArray.length; i++) {
			regionSplit=LARegionArray[i].split("|"); 
			A.regionID.options[B] = new Option(regionSplit[1],regionSplit[0]);
			if (regionSplit[0]==regionDefault) { selectedIndexNumber = B; }
			B++;
		}
			
		A.regionID.selectedIndex=selectedIndexNumber;
	}
	
}

function addToBasket(profileID) {
	
	if (profileID!="" && profileID!="0") {
	
	var currentText = document.getElementById('basketText_'+profileID).innerHTML;
	
	document.getElementById('basketText_'+profileID).innerHTML = 'Loading...';
	
	new Ajax.Request('add_to_basket.php', {
		  onSuccess: function(reponse) {
			 	
				var ajaxReturn = reponse.responseText
				
				switch (ajaxReturn) {
					case "Added": {
						document.getElementById('basketText_'+profileID).innerHTML = 'Remove From Basket';
						break;
					}
					case "Removed": {
						document.getElementById('basketText_'+profileID).innerHTML = 'Add To Basket';
						break;
					}
					default : { alert("An error occured while trying to adding this property to your basket.\n\nPlease try again"); }
				}
				
		  }, parameters: "profileID="+profileID,onFailure: function(transport){ document.getElementById('basketText_'+profileID).innerHTML = currentText; alert('There was an error with your request. Please retry and if the problem persists contact support'+ transport.responseText) }
		});
	
	}else{
		alert("No profileID passed");	
	}
	
}

function getVendorProperty(propertyID) {
	
	if (propertyID!="" && propertyID!="0") {
		
		new Ajax.Request('vendor_property.php', {
			onSuccess: function(reponse) {
					
				var ajaxReturn = reponse.responseText;
				
				if (ajaxReturn=="Invalid") {
					alert("Invalid Property");
				}else{
					document.getElementById('div_ownersProperties').style.display = 'none';
					document.getElementById('div_ownersProperty').innerHTML = ajaxReturn;
					document.getElementById('div_ownersPropertiesLink').style.display = 'block';
					document.getElementById('div_ownersProperty').style.display = 'block';
				}
				
		  	}, parameters: "propertyID="+propertyID+"&dontDisplay="+document.getElementById('span_dontDisplay').innerHTML,onFailure: function(transport){ alert('There was an error with your request. Please retry and if the problem persists contact support'+ transport.responseText) }
		
		});
		
	}else{
		alert("No propertyID passed");	
	}
	
}

function backToVendorsProperties() {
	document.getElementById('div_ownersPropertiesLink').style.display = 'none';
	document.getElementById('div_ownersProperty').style.display = 'none';
	document.getElementById('div_ownersProperties').style.display = 'block';
}

function switchVendorLoginDiv(divID) {
	
	if (document.getElementById('div_'+divID)) { document.getElementById('div_vendor_summary').style.display = 'none'; document.getElementById('span_vendor_summary').style.fontWeight = 'normal'; }
	if (document.getElementById('div_'+divID)) { document.getElementById('div_vendor_marketing').style.display = 'none'; document.getElementById('span_vendor_marketing').style.fontWeight = 'normal'; }
	if (document.getElementById('div_'+divID)) { document.getElementById('div_vendor_viewings').style.display = 'none'; document.getElementById('span_vendor_viewings').style.fontWeight = 'normal'; }
	if (document.getElementById('div_'+divID)) { document.getElementById('div_vendor_offers').style.display = 'none'; document.getElementById('span_vendor_offers').style.fontWeight = 'normal'; }
	
	document.getElementById('div_'+divID).style.display = 'block';
	document.getElementById('span_'+divID).style.fontWeight = 'bold';
	
}

function in_array(checkField, checkArray) {
	var inArray = false;
	for (var i=0; i<checkArray.length; i++) {
		if (checkArray[i]==checkField) { inArray=true; }
	}
	return inArray;
}

function updateRegistrationRows(department) {
	
	toggleRegistrationFields(department);
	
}

// turn off fields that aren't used by the passed department and turn on the ones that are
function toggleRegistrationFields(department) {	
	
	var arrayNumber = 0;
	var numbersToCheck = new Array();
	switch (department) {
		case "RS": { arrayNumber = 0; break; }
		case "RL": { arrayNumber = 1; break; }
		case "C": { arrayNumber = 2; break; }
		case "LA": { arrayNumber = 3; break; }
		default: { alert("Invalid department"); }
	}
	
	for (var a=0; a<4; a++) {
		for (var i=0; i<fieldsArray[a].length; i++) {
			toggleShowObject('row_registration_'+fieldsArray[a][i],false);
			toggleShowObject('row_registration_'+fieldsArray[a][i]+'a',false);
			toggleShowObject('row_registration_'+fieldsArray[a][i]+'b',false);
		}
	}
	
	// turn on fields for passed department
	for (var i=0; i<fieldsArray[arrayNumber].length; i++) {
		toggleShowTableRow('row_registration_'+fieldsArray[arrayNumber][i]);
		toggleShowTableRow('row_registration_'+fieldsArray[arrayNumber][i]+'a');
		toggleShowTableRow('row_registration_'+fieldsArray[arrayNumber][i]+'b');
	}
	
}

var baseopacity=65

function slowhigh(which2){
	imgobj=which2
	browserdetect=which2.filters? "ie" : typeof which2.style.MozOpacity=="string"? "mozilla" : ""
	instantset(baseopacity)
	highlighting=setInterval("gradualfade(imgobj)",50)
}

function slowlow(which2){
	cleartimer()
	instantset(baseopacity)
}

function instantset(degree){
	if (browserdetect=="mozilla")
	imgobj.style.MozOpacity=degree/100
	else if (browserdetect=="ie")
	imgobj.filters.alpha.opacity=degree
}

function cleartimer(){
	if (window.highlighting) clearInterval(highlighting)
}

function gradualfade(cur2){
	if (browserdetect=="mozilla" && cur2.style.MozOpacity<1)
	cur2.style.MozOpacity=Math.min(parseFloat(cur2.style.MozOpacity)+0.1, 0.99)
	else if (browserdetect=="ie" && cur2.filters.alpha.opacity<100)
	cur2.filters.alpha.opacity+=10
	else if (window.highlighting)
	clearInterval(highlighting)
}
