//Used for Google Analytics tracking
var CTATitle = "CTA=sr_title";
var CTAImage = "CTA=sr_image";
var CTAButton = "CTA=sr_details_button";
var CTAImagesButton = "CTA=sr_photos_button";
var CTAReviewsButton = "CTA=sr_reviews";

//Used for the default order on HML
var HMLInitialOrdering = true;
function jvReplace(s1, s2, s3) {
		i = s1.indexOf(s2);
		if (i >= 0) {
			return s1.substring(0,i) + s3 + jvReplace(s1.substring(i+s2.length, s1.length), s2, s3);
		} else {
			return s1;
		}
	}
	function linkReplace(text, myspace) {
			var jrep = 0;
			var myChars = "*/!'`#~:;?\\|,";
			var newStr = jvReplace(jvReplace(jvReplace(jvReplace(jvReplace(jvReplace(text, "\n", myspace), "&", myspace), "\t", myspace), "\"", myspace), "_", myspace), " ", myspace);
			for(jrep=0; jrep<13; jrep++) {
				newStr = jvReplace(newStr, myChars.charAt(jrep)+"", "");
			}
			return newStr = jvReplace(jvReplace(newStr, "--", "-"), "--", "-");

	}
// Object holding result data
//occupancy_rate, villa_link,
function res(ind, villa_id, res_date, nights, villa_name, resort_id, region_id, picture, accom_only_sale, accom_only_rrp, package_sale, package_rrp, car_status, air_id, flight_cache_id, breakage_id, villa_info, bedrooms, bathrooms, max_occ, ac, pool_heating, boj, resort_type_id, primary_index, promo_only_ids, promo_flights_ids, rental_type_id, occupancy_rate, overall_rating,num_reviews,new_villa,hml_prices,low_seasons, mid_seasons, high_seasons, p_res_user, jvh_reserve, xml_villa, carTotal,insTotal,insXTotal,transTotal) {
	this.ind = ind;
	this.villa_id = villa_id;
	this.res_date = d(res_date);
	this.nights = nights;
	this.villa_name = villa_name;
	this.resort_id = resort_id;
	this.resort_name = '';
	this.lowSeasons = low_seasons;
	this.midSeasons = mid_seasons;
	this.highSeasons = high_seasons;
	this.hml_prices = hml_prices;
	this.rental_type_id = rental_type_id;
	this.occupancy_rate = occupancy_rate;
	this.overall_rating = overall_rating;
	this.num_reviews = num_reviews;
	this.new_villa = new_villa;

	if (p_res_user) {
		this.jvh_reserve = jvh_reserve;
		this.xml_villa = xml_villa;
		this.carTotal = carTotal;
		this.insTotal = insTotal;
		this.insXTotal = insXTotal;
		this.transTotal = transTotal;
		this.carOn = true;
		this.insOn = true;
		this.XSOn = true;
		this.reqTrans = transferRegions.indexOf("," + region_id + ",") > -1;/*(region_id == 13) AD 09032009 use list instead of 1 region */
		this.transOn = this.reqTrans;
	}

	for (var i=0;i<resorts.length;i++) {
		if (resorts[i].id == resort_id) {
			this.resort_name = resorts[i].name;
			break;
		}
	}
	this.region_id = region_id;
	this.region_name = '';
	this.region_name_file_name = '';
	for (var i=0;i<regs.length;i++) {
		if (regs[i].id == region_id) {
			this.region_name = regs[i].name;
			this.region_name_file_name = fileNameRegs[i].name;
			break;
		}
	}

	myVilla_link = "/" + linkReplace(trim(this.region_name), "-") + "/" + linkReplace(trim(jvReplace(this.resort_name, ".", "")), "-") + "/" + linkReplace(trim(jvReplace(this.villa_name, ".", "")), "-") + "-" + this.villa_id + "/";
	this.villa_link = myVilla_link.toLowerCase();

	//this.group_id = group_id;
	this.picture = picture;
	this.accom_only_sale = accom_only_sale;
	this.accom_only_rrp = accom_only_rrp;
	this.package_sale = package_sale;
	this.package_rrp = package_rrp;
	if (package_sale > 0) {
		this.pp_price = Math.ceil(package_sale / totalPax);// pp_price;
	} else {
		this.pp_price = Math.ceil(accom_only_sale / totalPax);// pp_price;
	}
	this.car_status = car_status;
	this.ob_dep_air_id = airs[air_id].id;
	this.ob_dep_air_name = airs[air_id].name;
	this.flight_cache_id = flight_cache_id;
	this.breakage_id = breakage_id;

	this.villa_info = jvReplace(jvReplace(jvReplace(villa_id + "," +villa_info, "9", "X"), ",", "Y"), "0", "Z");
	this.bedrooms = bedrooms;
	this.bathrooms = bathrooms;
	this.max_occ = max_occ;
	this.ac = ac;
	this.pool_heating = pool_heating;
	this.boj = boj;
	this.resort_type_id = resort_type_id;
	this.primary_index = primary_index;
	if (primary_index != null) {
		r[primary_index].alt_result = this;
		this.is_alt_result = true;
	} else {
		this.is_alt_result = false;
	}

	this.offer_only_text = "";
	if (promo_only_ids != "") {
		var ids = promo_only_ids.split(",");
		var done_msg = false;
		for (var i=0;i<ids.length;i++) {
			for (var j=0;j<promos.length;j++) {
				if (ids[i] == promos[j].id) {
					if (promos[j].text.indexOf("{PERCENTAGE}") > -1 && promos[j].text.indexOf("<li") == -1)
						this.offer_only_text += promos[j].text.replace(/\{PERCENTAGE\}/i, Math.floor(((this.accom_only_rrp - this.accom_only_sale) / this.accom_only_rrp) * 100)+"%") + "<br/>";
					else if (promos[j].text.indexOf("{AMOUNT}") > -1 && promos[j].text.indexOf("<li") == -1)
						this.offer_only_text += promos[j].text.replace(/\{AMOUNT\}/i, Math.floor(this.accom_only_rrp - this.accom_only_sale)) + "<br/>";
					else
						if (promos[j].text.indexOf("<li") != -1) {
							if(!done_msg){
								this.offer_only_text += '<span style="color:red;"><strong>' + lblVillaOnlyOffer + '</strong></span><br />';
								done_msg = true;
							}
							if (promos[j].text.indexOf("{PERCENTAGE}") > -1)
								this.offer_only_text += promos[j].text.replace(/\{PERCENTAGE\}/i, Math.floor(((this.accom_only_rrp - this.accom_only_sale) / this.accom_only_rrp) * 100)+"%");
							else if (promos[j].text.indexOf("{AMOUNT}") > -1)
								this.offer_only_text += promos[j].text.replace(/\{AMOUNT\}/i, Math.floor(this.accom_only_rrp - this.accom_only_sale));
							else
								this.offer_only_text += promos[j].text;
						}
						else {
							this.offer_only_text += promos[j].text + "<br/>";
						}
					break;
				}
			}
		}
	}

	this.offer_flights_text = "";
	if (promo_flights_ids != "") {
		var ids = promo_flights_ids.split(",");
		var done_msg = false;
		for (var i=0;i<ids.length;i++) {
			for (var j=0;j<promos.length;j++) {

				if (ids[i] == promos[j].id) {
					if (promos[j].text.indexOf("{PERCENTAGE}") > -1 && promos[j].text.indexOf("<li") == -1)
						this.offer_flights_text += promos[j].text.replace(/\{PERCENTAGE\}/i, ""+Math.floor(((this.package_rrp - this.package_sale) / this.accom_only_rrp) * 100)+"%") + "<br/>";
					else if (promos[j].text.indexOf("{AMOUNT}") > -1 && promos[j].text.indexOf("<li") == -1)
						this.offer_flights_text += promos[j].text.replace(/\{AMOUNT\}/i, ""+Math.floor(this.package_rrp - this.package_sale) ) + "<br/>";
					else
						if (promos[j].text.indexOf("<li") != -1) {
							if(!done_msg){
								this.offer_flights_text += '<span style="color:red;"><strong>' + lblVillaFlightsOffer + '</strong></span><br />';
								done_msg = true;
							}
							if (promos[j].text.indexOf("{PERCENTAGE}") > -1)
								this.offer_flights_text += promos[j].text.replace(/\{PERCENTAGE\}/i, Math.floor(((this.package_rrp - this.package_sale) / this.accom_only_rrp) * 100)+"%");
							else if (promos[j].text.indexOf("{AMOUNT}") > -1)
								this.offer_flights_text += promos[j].text.replace(/\{AMOUNT\}/i, Math.floor(this.package_rrp - this.package_sale));
							else
								this.offer_flights_text += promos[j].text;
						}
						else {
							this.offer_flights_text += promos[j].text + "<br/>";
						}

					break;
				}
			}
		}
	}
}

// object to hold hml prices
function hml_price (low_season, mid_season, high_season, low_season_next_year, mid_season_next_year, high_season_next_year, low_season_year_after_next, mid_season_year_after_next, high_season_year_after_next) {
	this.low_season = low_season;
	this.mid_season = mid_season
	this.high_season = high_season;
	this.low_season_next_year = low_season_next_year;
	this.mid_season_next_year = mid_season_next_year;
	this.high_season_next_year = high_season_next_year;
	this.low_season_year_after_next = low_season_year_after_next;
	this.mid_season_year_after_next = mid_season_year_after_next;
	this.high_season_year_after_next = high_season_year_after_next;

	// sets up boolean values to say if each year has availability
	this.this_year = (low_season == "" && mid_season == "" && high_season == "") ? false : true;
	this.next_year = (low_season_next_year == "" && mid_season_next_year == "" && high_season_next_year == "") ? false : true;
	this.year_after_next = (low_season_year_after_next == "" && mid_season_year_after_next == "" && high_season_year_after_next == "") ? false : true;
}

// Data holding
function filterResults() {
	document.getElementById('curPage').value = 1;
	buildTable();
}

function promo(id, text) {
	this.id = id;
	this.text = text;
}

function reg(id, name, group_id) {
	this.id = id;
	this.name = name;
	this.group_id = group_id;
}

function resort(id,name,region_id,count) {
	this.id = id;
	this.name = name;
	this.region_id = region_id;
	this.count = count;
}

function regSeason(id,months,type) {
	this.id = id;
	this.months = months;
	this.type = type;
}

function air(id, name) {
	this.id = id;
	this.name = name;
}

function bedroom(id, name) {
	this.id = id;
	this.name = name;
}

// QS Functions
function initQSResults() {
	updateAltResults();
	updatePriceRange(false);
	var ob = document.getElementById('selOrderBy');
	orderBy(ob.options[ob.selectedIndex].value,false);

	if (!anyDestView) {
		document.getElementById('loadingHead').style.display = "none";
		buildTable();
	} else {
		document.getElementById('iFramePageNav').src = "/search/jvh08/anydestination.cfm?stage=1";
	}

	var selRes = document.getElementById('selResort');
	if (selRes) {
		document.getElementById('lblChooseResort').style.display = (resorts.length == 1) ? "none" : "block";
		selRes.style.display = (resorts.length == 1) ? "none" : "block";
	}

	initQS();	// quick search

}

function updatePriceRange(doUpdate) {

	var selMinPrice = document.getElementById('selMinPrice');
	var selMaxPrice = document.getElementById('selMaxPrice');

	var tMin = 0;
	var tMax = 9999;

	if (selMinPrice && selMaxPrice) {
		tMin = selMinPrice.options[selMinPrice.selectedIndex].value;
		tMax = selMaxPrice.options[selMaxPrice.selectedIndex].value;
	}

	if ((!isNumeric(tMin) && tMin != "") || (!isNumeric(tMin) && tMin != "")) {
		alert(lblnumbersonly);
	} else {
		if (tMin == "") tMin = 0;
		if (tMax == "") tMax = 9999;
		filterMinPrice = tMin;
		filterMaxPrice = tMax;
		if (doUpdate) filterResults();
	}
}

function updateBedrooms (bedrooms) {
	filterBedrooms = bedrooms;
	filterResults();
}

function numPerPage(selPos) {
	if (selPos == 1) {
		document.getElementById('selPerPage2').selectedIndex = document.getElementById('selPerPage').selectedIndex;
	} else if (selPos == 2) {
		document.getElementById('selPerPage').selectedIndex = document.getElementById('selPerPage2').selectedIndex;
		location.hash="#results";
	}
	filterResults();
}

function comparePrice(a,b) {
	if (a.flight_cache_id == "" && b.flight_cache_id == "") {
		return (a.accom_only_sale+99999) - (b.accom_only_sale+99999);
	} else if (a.flight_cache_id == "") {
		return (a.accom_only_sale+99999) - b.package_sale;
	} else if (b.flight_cache_id == "") {
		return a.package_sale - (b.accom_only_sale+99999);
	} else {
		return a.package_sale - b.package_sale;
	}
}

function compareRPrice(a,b) {
	if (a.flight_cache_id == "" && b.flight_cache_id == "") {
		return (b.accom_only_sale-99999) - (a.accom_only_sale-99999);
	} else if (a.flight_cache_id == "") {
		return b.package_sale - (a.accom_only_sale-99999);
	} else if (b.flight_cache_id == "") {
		return (b.accom_only_sale-99999) - a.package_sale;
	} else {
		return b.package_sale - a.package_sale;
	}
}

function compareVillaSaving(a,b) {
	if (b.package_rrp-b.package_sale == 0 && a.package_rrp-a.package_sale == 0) {
		return a.package_sale - b.package_sale;
	} else {
		return ((b.package_rrp-b.package_sale)/b.accom_only_sale) - ((a.package_rrp-a.package_sale)/a.accom_only_sale);
	}
}

function compareDest(a,b) {
	var x = a.region_name.toLowerCase();
	var y = b.region_name.toLowerCase();
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function compareAir(a,b) {
	var x = a.ob_dep_air_name.toLowerCase();
	var y = b.ob_dep_air_name.toLowerCase();
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function compareBedrooms(a,b) {
	var x = a.bedrooms;
	var y = b.bedrooms;
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function compareRBedrooms(a,b) {
	var x = a.bedrooms;
	var y = b.bedrooms;
	return ((x < y) ? 1 : ((x > y) ? -1 : 0));
}

function compareLowSeasonPrice(a, b) {
	if (a < b) {
		return -1;
	}
	else if (a > b) {
		return 1;
	}
	else {
		return 0;
	}
}

function compareHMLDefault (a, b) {
	if (a.rental_type_id < b.rental_type_id) {
		return -1;
	}
	else if (a.rental_typeid > b.rental_type_id) {
		return 1;
	}
	else { // same rental_type_id
		if (a.rental_type_id == 1) { // both are contract villas
			if (a.occupancy_rate < 80 && b.occupancy_rate < 80) {
				return compareLowSeasonPrice(a.accom_only_rrp,b.accom_only_rrp);
			}
			else if (a.occupancy_rate >= 80 && b.occupancy_rate >= 80) {
				return compareLowSeasonPrice(a.accom_only_rrp,b.accom_only_rrp);
			}
			else if (a.occupancy_rate < 80 && b.occupancy_rate >= 80) {
				return -1;
			}
			else if (a.occupancy_rate >= 80 && b.occupancy_rate < 80) {
				return 1;
			}
		}
		else {
			return compareLowSeasonPrice(a.accom_only_rrp,b.accom_only_rrp);
		}
	}
}

function compareRatings(a,b) {
	if (a.num_reviews < 2) a.overall_rating = 0;
	if (b.num_reviews < 2) b.overall_rating = 0;
	var x = a.overall_rating;
	var y = b.overall_rating;
	return ((x > y) ? -1 : ((x < y) ? 1 : 0));
}

function compareReviews(a,b) {
	var x = a.num_reviews;
	var y = b.num_reviews;
	return ((x > y) ? -1 : ((x < y) ? 1 : 0));
}

function orderBy(type, doUpdate, selPos) {
	switch(type) {
		case 'price':
			r.sort(comparePrice);
			break;
		case 'rprice':
			r.sort(compareRPrice);
			break;
		case 'dest':
			r.sort(comparePrice);
			r.sort(compareDest);
			break;
		case 'air':
			r.sort(comparePrice);
			r.sort(compareAir);
			break;
		case 'bedrooms':
			r.sort(compareBedrooms);
			break;
		case 'rbedrooms':
			r.sort(compareRBedrooms);
			break;
		case 'HMLdefault':
			if (HMLInitialOrdering) {
				r.sort(compareHMLDefault);
				HMLInitialOrdering = false;
			}
			break;
		case 'villa_saving':
			r.sort(compareVillaSaving);
			break;
		case 'ratings':
			r.sort(compareReviews);
			r.sort(compareRatings);
			break;
		case 'reviews':
			r.sort(compareRatings);
			r.sort(compareReviews);
			break;
	}
	/* The ordering of the array has been updated, we need to re-point any primary index values to the actual new position in the array */
	for (var i=0;i<results.length;i++) {
		if (results[i].primary_index != null) {
			var prim = altResults[results[i].primary_index];
			for (var j=0;j<results.length;j++) {
				if (prim == results[j].ind) {
					results[i].primary_index = j;
					results[j].ind = j;
				}
			}
		}

		/* Update the other select box too */
		if (selPos == 1)	{
			document.getElementById('selOrderBy2').selectedIndex = document.getElementById('selOrderBy').selectedIndex;
		} else if (selPos == 2) {
			document.getElementById('selOrderBy').selectedIndex = document.getElementById('selOrderBy2').selectedIndex;
		}

	}
	/* Store the rearranged primary/alternate positions */
	updateAltResults();

	if (doUpdate) filterResults();
}


function gotoPage(val, anc) {
	var curPage = parseFloat(document.getElementById('curPage').value);
	var redo = false;
	if (val == "next" && (curPage+1) <= totalPages) {
		curPage++;
		redo = true;
	} else if (val == "prev" && (curPage-1) >= 1) {
		curPage--;
		redo = true;
	} else if (val != "prev" && val != "next") {
		curPage = val;
		redo = true;
	}
	if (redo) {
		document.getElementById('curPage').value = curPage;
		filterClick('current_page',curPage);
		buildTable();
		if (anc) location.hash="#results";
	}
}

function updateAltResults() {
	altResults = new Array();
	for (var i=0;i<results.length;i++) {
		if (results[i].primary_index != null) {
			altResults[results[i].primary_index] = i;
		}
	}
}

function resetFilters(incRegion) {
	document.getElementById('chkAC').checked = false;
	document.getElementById('chkCarOpt').checked = false;
	document.getElementById('chkCarRec').checked = false;
	document.getElementById('chkCarEss').checked = false;
	document.getElementById('chkBOJ').checked = false;
	document.getElementById('chkLR').checked = false;
	document.getElementById('listSelResort').value = '';

	if (incRegion) {
		document.getElementById('listSelDest').value = '';
		var selDes = document.getElementById('selDest');
		if (selDes) selDes.selectedIndex = 0;
	}
	var selRes = document.getElementById('selResort');
	if (selRes) selRes.selectedIndex = 0;
	var selBed = document.getElementById('bedroomFilter');
	if (selBed) selBed.selectedIndex = 0;
	var selRating = document.getElementById('selRating');
	if (selRating) selRating.selectedIndex = 0;

	filterMinPrice = 0;
	filterMaxPrice = 9999;
	filterBedrooms = 0;

	var selMinPrice = document.getElementById('selMinPrice');
	var selMaxPrice = document.getElementById('selMaxPrice');
	if (selMinPrice && selMaxPrice) {
		selMinPrice.selectedIndex = 0;
		selMaxPrice.selectedIndex = selMaxPrice.options.length-1;
	}
	resetExtraFilters();
	filterResults();
}

function pagination(curPage, totalPages) {
	var insHTML = insHTML2 = '';
	var shownDot = false;

	document.getElementById('prevPage').className = (curPage == 1) ? "inactive" : "";
	document.getElementById('nextPage').className = (curPage == totalPages) ? "inactive" : "";
	document.getElementById('prevPage2').className = (curPage == 1) ? "inactive" : "";
	document.getElementById('nextPage2').className = (curPage == totalPages) ? "inactive" : "";

	if (totalPages > 1) {
		for (var i=1;i<=totalPages;i++) {
			if (i == curPage) {
				insHTML += '<span style="font-weight:bold;">' + i + '</span> | ';
				insHTML2 += '<span style="font-weight:bold;">' + i + '</span> | ';
			} else {
				if ((i <= 5 && curPage <= 5) || (curPage > 5 && i > (curPage-5) && i <= curPage)) {
					insHTML += '<a href="javascript:gotoPage(' + i + ', false);">' + i + '</a> | ';
					insHTML2 += '<a href="javascript:gotoPage(' + i + ', true);">' + i + '</a> | ';
				}	else if (i > curPage && !shownDot) {
					insHTML += '... <a href="javascript:gotoPage(' + totalPages + ', false);">' + totalPages + '</a> ';
					insHTML2 += '... <a href="javascript:gotoPage(' + totalPages + ', true);">' + totalPages + '</a> ';
					shownDot = true;
				}
			}
		}
	}
	document.getElementById('pagination').innerHTML = insHTML;
	document.getElementById('pagination2').innerHTML = insHTML2;
}


function subForm(key, pageItem) {
	var result = results[key];
		var CTAText = "";
		if (pageItem == 0) {
			CTAText = CTATitle;
		}	else if (pageItem == 1) {
			CTAText = CTAImage;
		}	else if (pageItem == 2) {
			CTAText = CTAButton;
		}	else if (pageItem == 3) {
			CTAText = CTAImagesButton;
		} else if (pageItem == 4) {
			CTAText = CTAReviewsButton;
		}
	document.frmVilla.action = result.villa_link + '?' + CTAText;

	if (searchMode == "low_mid_high") {
		document.frmVilla.submit();
	} else {

		if (result.carTotal) {
			document.frmVilla.formoptions.value=result.carOn +"," + result.insOn + "," + result.XSOn + "," + result.transOn;
		}

		if (pageItem == 4) document.frmVilla.action += "&tab=reviews";
		document.frmVilla.RESORT.value = result.resort_id;
		document.frmVilla.villa.value = result.villa_info;
		document.frmVilla.dep_date.value = padout(result.res_date.getFullYear()) + "-" + padout(result.res_date.getMonth()+1) + "-" + padout(result.res_date.getDate()) + " 00:00:00.0";
		document.frmVilla.correct_air_id.value = result.ob_dep_air_id;
		document.frmVilla.duration.value = result.nights;
		document.frmVilla.breakage_type_id.value = result.breakage_id;
		document.frmVilla.flight_cache_id.value = result.flight_cache_id;

		/* Append a Best of James */
		document.frmVilla.boj_resort.value = document.frmVilla.boj_villa.value = document.frmVilla.boj_dep_date.value = document.frmVilla.boj_correct_air_id.value = document.frmVilla.boj_duration.value = document.frmVilla.boj_breakage_type_id.value = document.frmVilla.boj_flight_cache_id.value = document.frmVilla.boj_region_id.value = document.frmVilla.boj_region_name.value = document.frmVilla.boj_resort_name.value = document.frmVilla.boj_villa_name.value = document.frmVilla.boj_icon_info.value = document.frmVilla.boj_picture.value = "";

		if (result.boj != 1) {
			var resLen = results.length;
			var bojRes;

			for (var i=0;i<resLen;i++) {
				bojRes = results[i];

				if (bojRes.boj == 1 && result.res_date - bojRes.res_date == 0 && result.region_id == bojRes.region_id && result.nights == bojRes.nights && bojRes.pp_price > result.pp_price) {
					document.frmVilla.boj_resort.value = bojRes.resort_id;
					document.frmVilla.boj_villa.value = bojRes.villa_info;
					document.frmVilla.boj_dep_date.value = padout(bojRes.res_date.getFullYear()) + "-" + padout(bojRes.res_date.getMonth()+1) + "-" + padout(bojRes.res_date.getDate()) + " 00:00:00.0";
					document.frmVilla.boj_correct_air_id.value = bojRes.ob_dep_air_id;
					document.frmVilla.boj_duration.value = bojRes.nights;
					document.frmVilla.boj_breakage_type_id.value = bojRes.breakage_id;
					document.frmVilla.boj_flight_cache_id.value = bojRes.flight_cache_id;
					document.frmVilla.boj_region_id.value = bojRes.region_id;
					document.frmVilla.boj_region_name.value = bojRes.region_name;
					document.frmVilla.boj_resort_name.value = bojRes.resort_name;
					document.frmVilla.boj_villa_name.value = bojRes.villa_name;
					document.frmVilla.boj_picture.value = bojRes.picture;
					document.frmVilla.boj_icon_info.value = bojRes.max_occ + "," + bojRes.bedrooms + "," + bojRes.bathrooms + "," + bojRes.car_status + "," + bojRes.ac + "," + bojRes.pool_heating;

					break;
				}
			}
		}
		document.frmVilla.submit();
	}
}

function viewAll() {

	anyDestView = false;
	var sradiv = document.getElementById('search_results_all_div');
	var head = document.getElementById('anyDestHead');
	sradiv.style.display = 'none';
	head.style.display = 'none';	
	buildTable();
	
}

function viewAllByCountry() {
	anyDestView = true;
	resetFilters(true);
	buildAnyDestTable();
}

function buildAnyDestTable() {
	
	anyDestView = true;
	
	document.getElementById('pagination_div').style.display = 'none';
	document.getElementById('loadingHead').style.display = "none";	
	document.getElementById('boxfilter').style.display = 'none';
	document.getElementById('linkViewAll').style.display = '';
	document.getElementById('linkViewAnyDest').style.display = 'none';
	
	var sradiv = document.getElementById('search_results_all_div');
	var head = document.getElementById('anyDestHead');
	var listRegionsShown = ",";
	var resultHTML = '<table cellpadding="0" cellspacing="0" width="100%" border="0"><tr>';

	var resLen = results.length;
	var numShown = 0;
	var numRegions = 0;
	var numPerRegion = Array();
	
	// Find number per region
	for (var i=0;i<resLen;i++) {
		var result = results[i];
		if (numPerRegion[result.region_id] != undefined) {
			numPerRegion[result.region_id]++;
		} else {
			numPerRegion[result.region_id] = 1;
			numRegions++;
		}
	}
	
	head.innerHTML = numRegions + ' destinations offering ' + resLen + ' holidays';
	head.style.display = '';
	document.getElementById('numResultsHead').style.display = 'none';

	for (var i=0;i<resLen;i++) {
		var result = results[i];
		if (listRegionsShown.indexOf("," + result.region_id + ",") == -1) {
			
			if (numShown%2 == 0 && numShown != 0) {
				resultHTML += '</tr><tr>';
			}
			resultHTML += '<td><div style="padding:7px;width:368px;background-color:white;position:relative;border-bottom: 6px solid #4299F0;';
			if (numShown%2 == 0) { 
				resultHTML += 'border-right: 5px solid #4299F0;';
			}
			resultHTML += '"><img src="/images/jvh08/corner-tl.gif" style="position:absolute; left:0; top:0" /><img src="/images/jvh08/corner-tr.gif" style="position:absolute; right:0; top:0" /><img src="/images/jvh08/corner-bl.gif" style="position:absolute; left:0; bottom:0" /><img src="/images/jvh08/corner-br.gif" style="position:absolute; right:0; bottom:0" /><a href="/search/jvh08/anydestination.cfm?stage=2" target="iFramePageNav" onclick="return showRegion(' + result.region_id + ');" style="font-size:120%; font-weight:bold">' + numPerRegion[result.region_id] + ' ' + result.region_name + ' ';
			resultHTML += (numPerRegion[result.region_id] > 1) ? 'holidays' : 'holiday';
			resultHTML += '</a><br/><a href="/search/jvh08/anydestination.cfm?stage=2" target="iFramePageNav" onclick="return showRegion(' + result.region_id + ');"><img src="' + imgDir + 'galleries/' + padout(result.region_id) + result.region_name_file_name.replace(/ /g, "").replace(/\-/g, "").replace(/\'/g, "") + '/Villas/Photos/' + padout(result.region_id) + result.picture + '/' + padout(result.region_id) + result.picture + '_EXT_5.jpg" style="float:left;margin:5px 5px 0 0;" width="177" height="120" /></a>';
					
			resultHTML += '<div style="margin-top:5px;float:left;width:178px"><div style="border:1px solid #E5E5E6;padding:3px;" class="headVO"><span style="color:#394792"><b>Villa only from</b></span><br/>';
			
			if (result.accom_only_sale < result.accom_only_rrp) {
				resultHTML += '<span style="text-decoration:line-through;font-size:120%">' + curSym(result.accom_only_rrp) + '</span>&nbsp;-&nbsp;<span style="color:#4299F0;font-size:120%">' + curSym(result.accom_only_sale) + '</span>';
			} else {
				resultHTML += '<span style="color:#4299F0;font-size:120%">' + curSym(result.accom_only_sale) + '</span>';
			}
			
			resultHTML += '</div><div style="background-color:#F5F5F5; border:1px solid #E5E5E6; padding:3px; font-weight:bold"><span style="color:#394792"><b>Villa and flights from</b></span><br/>';

			if (result.package_sale < result.package_rrp && result.package_sale != 0) {
				resultHTML += '<span style="text-decoration:line-through;font-size:120%">' + curSym(result.package_rrp) + '</span>&nbsp;-&nbsp;<span style="color:#4299F0;font-size:120%">' + curSym(result.package_sale) + '</span>';
				resultHTML += '&nbsp;&nbsp;=&nbsp;&nbsp;<span style="font-size:130%">' + curSym(result.pp_price) +  ''+ lblpp +'</span>';
			} else if (result.package_sale == 0) {
				resultHTML += '<div class="vf">Click View Holidays</div>';
			} else {
				resultHTML += '<span style="color:#4299F0;font-size:120%">'+curSym(result.package_sale);
				resultHTML += '&nbsp;&nbsp;=&nbsp;&nbsp;<span style="font-size:110%">' + curSym(result.pp_price) + lblpp +'</span></span>';
			}
			villa_position = 1;
			resultHTML += '</div><br/><div style="float:right; display:table"><a href="/search/jvh08/anydestination.cfm?stage=2" target="iFramePageNav" onclick="return showRegion(' + result.region_id + ');" class="defaultButtonCTA" style="display:table-cell"><img alt="" title="" src="/images/buttons/btn_sec1_cta.jpg" style="vertical-align:-8px;"/>View holiday';
			if (numPerRegion[result.region_id] > 1) resultHTML += 's';
			resultHTML += '</a></div></div><div style="clear:both"></div></div></td>';
			
			listRegionsShown += result.region_id + ",";
			numShown++;
		}
	}
	
	resultHTML += '</tr></table>';
	sradiv.innerHTML = resultHTML;
	sradiv.style.display = 'block';
	
}

function showRegion(reg_id) {
	anyDestView = false;
	var sradiv = document.getElementById('search_results_all_div');
	sradiv.style.display = 'none';
	document.getElementById('listSelDest').value = ',' + reg_id +',';
	resetFilters(false);	// not region
	filterClick('Region',reg_id);
	window.scrollTo(0,0);
	return true;
}

function buildTable() {

	var villasShown = new Array();
	var villasTested = new Array();

	var curPage = parseFloat(document.getElementById('curPage').value);
	var selPerPage = document.getElementById('selPerPage');
	var perPage = parseFloat(selPerPage.options[selPerPage.selectedIndex].value);
	var listSelDest = document.getElementById('listSelDest').value;
	var listSelResort = document.getElementById('listSelResort').value;
	var page_tbl = document.getElementById('pagination_table');
	var page_tbl2 = document.getElementById('pagination_table2');
	var no_res_msg = document.getElementById('no_res_msg');
	var selRating = document.getElementById('selRating');
	var minRating = (selRating) ? parseFloat(selRating.options[selRating.selectedIndex].value) : -1;

	var srdiv = document.getElementById('search_results_div');
	srdiv.innerHTML = "";
	
	var chkCarOpt = document.getElementById('chkCarOpt');
	var chkCarRec = document.getElementById('chkCarRec');
	var chkCarEss = document.getElementById('chkCarEss');
	var chkBOJ = document.getElementById('chkBOJ');
	var chkLR = document.getElementById('chkLR');
	var chkAC = document.getElementById('chkAC');
	var selDes = document.getElementById('selDest');
	var selRes = document.getElementById('selResort');
	var selBeds = document.getElementById('bedroomFilter');
	var resortsLen = resorts.length;
	var resultHTML = "";
	var numPassed = 0;
	var numCarOpt = 0;
	var numCarRec = 0;
	var numCarEss = 0;
	var numNoCar = 0;
	var numBOJ = 0;
	var numLR = 0;
	var numAC = 0;
	var numRegs = new Array();

	var regsLen = regs.length;
	for (var i=0;i<regsLen;i++) {
		numRegs[regs[i].id] = 0;
	}

	for (var ir=0;ir<resortsLen;ir++) {
		resorts[ir].count = 0;
	}

	var numBeds = new Array();
	for (var i=0;i<bedrooms.length;i++) {
		numBeds[i] = 0;
	}

	var listCar = ",";
	if (chkCarOpt.checked) listCar += "1,4,";
	if (chkCarRec.checked) listCar += "2,";
	if (chkCarEss.checked) listCar += "3,";
	if (listCar == ",") listCar = "";

	maxPrice = minPrice = 0;
	if (searchMode == "low_mid_high") {
		var hml_selected_year = document.getElementById("hml_selected_year").value;
	}

	var iconDir;
	var villa_position = 0;
	var resLen = results.length;
	
	for (var i=0;i<resLen;i++) {

		var result = results[i];
		iconDir = (result.boj == 1) ? "/images/feature_icons/boj/small/" : "/images/feature_icons/std/small/";

		var include_hml_result = false;
		if (searchMode != "low_mid_high"
			|| (searchMode == "low_mid_high" && hml_selected_year == hml_now_year && result.hml_prices.this_year)
			|| (searchMode == "low_mid_high" && hml_selected_year == (hml_now_year + 1) && result.hml_prices.next_year)
			|| (searchMode == "low_mid_high" && hml_selected_year == (hml_now_year + 2) && result.hml_prices.year_after_next)
		) {
			include_hml_result = true;
		}

		if (!result.is_alt_result) {
			// Car status
			for (var j=1;j<=4;j++) {
				if (result.car_status == j
							&& ((chkAC.checked && result.ac == 1) || !chkAC.checked)
							&& ((chkBOJ.checked && result.boj == 1) || !chkBOJ.checked)
							&& ((chkLR.checked && result.resort_type_id == 2) || !chkLR.checked)
							&& (listSelDest.indexOf("," + result.region_id + ",") > -1 || listSelDest == "")
							&& (listSelResort.indexOf("," + result.resort_id + ",") > -1 || listSelResort == "")
							&& result.pp_price <= filterMaxPrice
							&& result.pp_price >= filterMinPrice
							&& ((filterBedrooms == result.bedrooms && filterBedrooms != 0) || (filterBedrooms == 0))
							&& include_hml_result
							&& (minRating == -1 || (result.overall_rating >= minRating && result.num_reviews >= 2))
							&& testExtraFilters(result)
				) {					
					if (j == 1) {
						numCarOpt++;
					} else if (j == 2) {
						numCarRec++;
					} else if (j == 3) {
						numCarEss++;
					}
					else{
						numNoCar++;
						numCarOpt++;
					}
				}
			}

			// For BOJ
			if (result.boj == 1
						&& ((chkAC.checked && result.ac == 1) || !chkAC.checked)
						&& ((chkLR.checked && result.resort_type_id == 2) || !chkLR.checked)
						&& (listCar.indexOf("," + result.car_status + ",") > -1 || listCar == "")
						&& (listSelDest.indexOf("," + result.region_id + ",") > -1 || listSelDest == "")
						&& (listSelResort.indexOf("," + result.resort_id + ",") > -1 || listSelResort == "")
						&& result.pp_price <= filterMaxPrice
						&& result.pp_price >= filterMinPrice
						&& ((filterBedrooms == result.bedrooms && filterBedrooms != 0) || (filterBedrooms == 0))
						&& include_hml_result
						&& (minRating == -1 || (result.overall_rating >= minRating && result.num_reviews >= 2))
						&& testExtraFilters(result)
			) {
				numBOJ++;
			}

			// For LR
			if (result.resort_type_id == 2
						&& ((chkAC.checked && result.ac == 1) || !chkAC.checked)
						&& ((chkBOJ.checked && result.boj == 1) || !chkBOJ.checked)
						&& (listCar.indexOf("," + result.car_status + ",") > -1 || listCar == "")
						&& (listSelDest.indexOf("," + result.region_id + ",") > -1 || listSelDest == "")
						&& (listSelResort.indexOf("," + result.resort_id + ",") > -1 || listSelResort == "")
						&& result.pp_price <= filterMaxPrice
						&& result.pp_price >= filterMinPrice
						&& ((filterBedrooms == result.bedrooms && filterBedrooms != 0) || (filterBedrooms == 0))
						&& include_hml_result
						&& (minRating == -1 || (result.overall_rating >= minRating && result.num_reviews >= 2))
						&& testExtraFilters(result)
			) {
				numLR++;
			}

			// For AC
			if (result.ac == 1
						&& ((chkBOJ.checked && result.boj == 1) || !chkBOJ.checked)
						&& (listCar.indexOf("," + result.car_status + ",") > -1 || listCar == "")
						&& ((chkLR.checked && result.resort_type_id == 2) || !chkLR.checked)
						&& (listSelDest.indexOf("," + result.region_id + ",") > -1 || listSelDest == "")
						&& (listSelResort.indexOf("," + result.resort_id + ",") > -1 || listSelResort == "")
						&& result.pp_price <= filterMaxPrice
						&& result.pp_price >= filterMinPrice
						&& ((filterBedrooms == result.bedrooms && filterBedrooms != 0) || (filterBedrooms == 0))
						&& include_hml_result
						&& (minRating == -1 || (result.overall_rating >= minRating && result.num_reviews >= 2))
						&& testExtraFilters(result)
			) {
				numAC++;
			}

			// For dest list
			var regsLen = regs.length;
			for (var ir=0;ir<regsLen;ir++) {
				var regs_id = regs[ir].id;
				if (result.region_id == regs_id
						&& ((chkAC.checked && result.ac == 1) || !chkAC.checked)
						&& ((chkBOJ.checked && result.boj == 1) || !chkBOJ.checked)
						&& ((chkLR.checked && result.resort_type_id == 2) || !chkLR.checked)
						&& (listCar.indexOf("," + result.car_status + ",") > -1 || listCar == "")
						&& result.pp_price <= filterMaxPrice
						&& result.pp_price >= filterMinPrice
						&& ((filterBedrooms == result.bedrooms && filterBedrooms != 0) || (filterBedrooms == 0))
						&& include_hml_result
						&& (minRating == -1 || (result.overall_rating >= minRating && result.num_reviews >= 2))
						&& testExtraFilters(result)
				) {
						numRegs[regs_id]++;
				}
			}

			// For dest list (resorts)
			for (var ir=0;ir<resortsLen;ir++) {
				if (result.resort_id == resorts[ir].id
						&& ((chkAC.checked && result.ac == 1) || !chkAC.checked)
						&& ((chkBOJ.checked && result.boj == 1) || !chkBOJ.checked)
						&& ((chkLR.checked && result.resort_type_id == 2) || !chkLR.checked)
						&& (listCar.indexOf("," + result.car_status + ",") > -1 || listCar == "")
						&& result.pp_price <= filterMaxPrice
						&& result.pp_price >= filterMinPrice
						&& ((filterBedrooms == result.bedrooms && filterBedrooms != 0) || (filterBedrooms == 0))
						&& include_hml_result
						&& (minRating == -1 || (result.overall_rating >= minRating && result.num_reviews >= 2))
						&& testExtraFilters(result)
				) {
						resorts[ir].count++;
				}
			}

			// for bedrooms
			for (var ib=0;ib<bedrooms.length;ib++) {
				if ((bedrooms[ib].id == result.bedrooms) &&

					((chkAC.checked && result.ac == 1) || !chkAC.checked)
						&& ((chkBOJ.checked && result.boj == 1) || !chkBOJ.checked)
						&& ((chkLR.checked && result.resort_type_id == 2) || !chkLR.checked)
						&& (listCar.indexOf("," + result.car_status + ",") > -1 || listCar == "")
						&& (listSelDest.indexOf("," + result.region_id + ",") > -1 || listSelDest == "")
						&& (listSelResort.indexOf("," + result.resort_id + ",") > -1 || listSelResort == "")
						&& result.pp_price <= filterMaxPrice
						&& result.pp_price >= filterMinPrice
						&& ((filterBedrooms == result.bedrooms && filterBedrooms != 0) || (filterBedrooms == 0))
						&& include_hml_result
						&& (minRating == -1 || (result.overall_rating >= minRating && result.num_reviews >= 2))
						&& testExtraFilters(result)
				) {
					numBeds[ib]++;
				}
			}

			villasTested[villasTested.length] = result.villa_id;

			// Decide whether to show this villa based on what 'page' the user is on and whether it passes all the current filters
			var passedPage = passedFilter = false;

			if ((!chkAC.checked || (chkAC.checked && result.ac == 1))
					&& (!chkBOJ.checked || (chkBOJ.checked && result.boj == 1))
					&& ((chkLR.checked && result.resort_type_id == 2) || !chkLR.checked)
					&& (listSelDest == "" || (listSelDest != "" && listSelDest.indexOf("," + result.region_id + ",") != -1))
					&& (listSelResort == "" || (listSelResort != "" && listSelResort.indexOf("," + result.resort_id + ",") != -1))
					&& (result.pp_price <= filterMaxPrice	&& result.pp_price >= filterMinPrice)
					&& (listCar == "" || (listCar != "" && listCar.indexOf("," + result.car_status + ",") != -1))
					&& ((filterBedrooms == result.bedrooms && filterBedrooms != 0) || (filterBedrooms == 0))
					&& include_hml_result
					&& (minRating == -1 || (result.overall_rating >= minRating && result.num_reviews >= 2))
					&& testExtraFilters(result)
			) { 
				passedFilter = true;
				numPassed++;
			}

			if (numPassed <= curPage*perPage && numPassed > (curPage-1)*perPage) {
				passedPage = true;
			}

			if (passedFilter) {
				if (result.pp_price < minPrice || minPrice == 0) minPrice = result.pp_price;
				if (result.pp_price > maxPrice || maxPrice == 0) maxPrice = result.pp_price;
			}
			
			
			// If passed tests, show row
			if (passedPage && passedFilter) {
				villa_position += 1;
				villasShown[villasShown.length] = result.villa_id;

				resultHTML += '<table border="0" width="97%" id="row_' + result.villa_id + '" cellpadding="0" cellspacing="0" style="margin: 4px 6px 1px 6px"><tr><td colspan="2" valign="bottom" style="padding-bottom:2px; color:#394792; font-size:120%; font-weight:bold"><div style="float:left;padding:1px 0;"><a href="' + result.villa_link + '?' + CTATitle + '" onClick="document.getElementById(\'villa_position\').value='+villa_position+';subForm(' + i + ',0);return false;">' + result.villa_name + '</a> ' + result.resort_name + ' - ' + result.region_name + '</div>';

				resultHTML += '<div style="float:right;">';
				if (result.boj == 1) resultHTML += '<img src="/images/layout/BOJ-' + langCode + '.gif" alt="Best of James" align="absmiddle" />';
				if (result.boj == 1 && result.resort_type_id == 2) resultHTML += ' &amp; ';
				if (result.resort_type_id == 2) resultHTML += '<img src="/images/layout/LR-' + langCode + '.gif" alt="' + lblleisure + '" align="absmiddle" />';
				resultHTML += '</div>';

				resultHTML += '</td></tr><tr><td width="220" valign="top" style="padding-bottom: 7px" rowspan="2" nowrap><a style="display: block; width: 195px; height: 130px; margin:0 0 5px" href="' + result.villa_link + '?' + CTAImage + '" onClick="document.getElementById(\'villa_position\').value='+villa_position+';subForm(' + i + ',1);return false;"><img src="' + imgDir + 'galleries/' + padout(result.region_id) + result.region_name_file_name.replace(/ /g, "").replace(/\-/g, "").replace(/\'/g, "") + '/Villas/Photos/' + padout(result.region_id) + result.picture + '/' + padout(result.region_id) + result.picture + '_EXT_5.jpg" width="195" height="130" alt="' + result.villa_name + '" /></a><br style="display:none" /><img alt="' + lblSleeps + ' ' + result.max_occ + '" src="' + iconDir + 'Sleeps' + result.max_occ + '.jpg" style="vertical-align:top" /><img alt="'+ result.bedrooms +' '+ lblBedrooms + '" src="' + iconDir + 'Beds' + result.bedrooms + '.jpg" style="padding-left:3px;vertical-align:top" /><img alt="' + result.bathrooms + ' ' + lblBathrooms + '" src="' + iconDir + 'Baths' + result.bathrooms + '.jpg" style="padding-left:3px;vertical-align:top" />';

				if (result.car_status == 1) {
					carImg = "Car_Optional_";
					caralt = lblCarOpt;
				} else if (result.car_status == 2) {
					carImg = "Car_recommended_";
					caralt = lblCarRec;
				} else if (result.car_status == 3) {
					carImg = "Car_Essential_";
					caralt = lblCarEss;
				} else {
					carImg = "";
					caralt = lblCarNo;
				}

				if (carImg != "") {
					resultHTML += '<img alt="' + caralt + '" src="' + iconDir + carImg + langCode + '.jpg" style="padding-left:3px;vertical-align:top" />';
				}
				if (result.ac == 1) {
					resultHTML += '<img alt="'+ lblAC +'" src="' + iconDir + 'AirCon.jpg" style="padding-left:3px;vertical-align:top" />';
				}

				if (result.pool_heating == 1) {
					resultHTML += '<img alt="'+ lblHeatedPool +'" src="' + iconDir + 'Heatedpool_' + langCode + '.jpg" style="padding-left:3px;vertical-align:top" />';
				}

				resultHTML += '</td><td valign="top">';

				if (searchMode == "low_mid_high") {

					//sets up the hml year selections
					var hml_year_selection_html = lblhmlpricesfor + "&nbsp;";

					var low_season_price = 0;
					var mid_season_price = 0;
					var high_season_price = 0;

					if (hml_show_this_year) {
						if (hml_selected_year != hml_now_year) {
							hml_year_selection_html += "<a href='JavaScript:switch_hml_year(" + hml_now_year + ");'>" + hml_now_year + "</a>";
						}
						else {
							hml_year_selection_html += hml_now_year;
							low_season_price = result.hml_prices.low_season;
							mid_season_price = result.hml_prices.mid_season;
							high_season_price = result.hml_prices.high_season;
						}
						if (hml_show_next_year) {
							hml_year_selection_html += " | ";
						}
					}
					if (hml_show_next_year) {
						if (hml_selected_year != (hml_now_year + 1)) {
							hml_year_selection_html += "<a href='JavaScript:switch_hml_year(" + (hml_now_year + 1) + ");'>" + (hml_now_year + 1) + "</a>";
						}
						else {
							hml_year_selection_html += (hml_now_year + 1);
							low_season_price = result.hml_prices.low_season_next_year;
							mid_season_price = result.hml_prices.mid_season_next_year;
							high_season_price = result.hml_prices.high_season_next_year;
						}
						if (hml_show_year_after_next) {
							hml_year_selection_html += " | ";
						}
					}
					if (hml_show_year_after_next) {
						if (hml_selected_year != (hml_now_year + 2)) {
							hml_year_selection_html += "<a href='JavaScript:switch_hml_year(" + (hml_now_year + 2) + ");'>" + (hml_now_year + 2) + "</a>";
						}
						else {
							hml_year_selection_html += (hml_now_year + 2);
							low_season_price = result.hml_prices.low_season_year_after_next;
							mid_season_price = result.hml_prices.mid_season_year_after_next;
							high_season_price = result.hml_prices.high_season_year_after_next;
						}
					}
					document.getElementById("hml_year_selection").innerHTML = hml_year_selection_html;

					var lowSeason = getMonthList(result.lowSeasons);
					var midSeason = getMonthList(result.midSeasons);
					var highSeason = getMonthList(result.highSeasons);

					var fontClass = (result.boj == 1) ? "bojFont" : "stdFont";

					resultHTML += '<div style="font-weight:bold; margin: 0 0 5px 0;">' + lblnightsvillaonly + '</div>';

					resultHTML += display_hml_season(lbllowseason,lowSeason,low_season_price,fontClass);
					resultHTML += display_hml_season(lblmidseason,midSeason,mid_season_price,fontClass);
					resultHTML += display_hml_season(lblhighseason,highSeason,high_season_price,fontClass);

					resultHTML += '<div style="margin:0px;width:450px;margin-bottom:-20px;">' + lblhmlotherdurations_part1 + ' <a href="' + result.villa_link + '" onClick="document.getElementById(\'villa_position\').value='+villa_position+';subForm(' + i + ',2);return false;">' + lblhmlotherdurations_part2 + '</a> ' + lblhmlotherdurations_part3 +'</div>';

				} else {

					resultHTML += '<table width="100%" id="prices_' + result.villa_id + '" border="0" cellpadding="3" cellspacing="0" class="price_panel"><tr><td class="head">' + lblDate + '</td><td class="head" width="60">' + lblDur + '</td><td class="head">' + lblPort + '</td>';
					
					if (searchMode != "package") {
						resultHTML += '<td class="head" width="105">' + lblVilla + '</td><td class="headVF" colspan="2" width="182" style="border-right:none">' + lblVillaAndFlights;
						if (ferryRegions.indexOf("," + result.region_id + ",") > -1 && airportsShowFerryMsg.indexOf("," + depAirId + ",") > -1 && use_crossings && !isFerry) {
							resultHTML += '*';
						}
						resultHTML += '</td>';
					} else {
						resultHTML += '<td class="headVF" colspan="2" width="182" style="border-right:none">Holiday price</td>';
					}
					
					resultHTML += '</tr><tr class="bold';

					if (result.offer_only_text != "" || (result.offer_flights_text != "" && result.package_sale != 0)) resultHTML += ' dashed';

					resultHTML += '"><td valign="top">' + result.res_date.getDate() + ' ' + monthNames[result.res_date.getMonth()] + ' ' + result.res_date.getFullYear().toString().substr(2,2) + '</td><td valign="top">' + result.nights + ' ' + lblNights + '</td><td valign="top">' + result.ob_dep_air_name + '</td>';
					
					if (searchMode != "package") {
						resultHTML += '<td valign="top" style="font-size:115%" width="105">';

						if (result.accom_only_sale < result.accom_only_rrp) {
							resultHTML += '<span style="text-decoration:line-through">' + curSym(result.accom_only_rrp) + '</span>&nbsp;-&nbsp;<span style="color:#4299F0">' + curSym(result.accom_only_sale) + '</span>';
						} else {
							resultHTML += '<span style="color:#4299F0">' + curSym(result.accom_only_sale) + '</span>';
						}

						resultHTML += '</td>';
						
					}

					if (result.package_sale < result.package_rrp && result.package_sale != 0) {
						resultHTML += '<td valign="top" style="font-size:115%;border-right:none" width="182" class="vf"><span style="text-decoration:line-through">' + curSym(result.package_rrp) + '</span>&nbsp;-&nbsp;<span style="color:#4299F0">' + curSym(result.package_sale) + '</span>';
						resultHTML += '&nbsp;&nbsp;=&nbsp;&nbsp;<span style="font-size:120%">' + curSym(result.pp_price) +  ''+ lblpp +'</span>';
						resultHTML += '</td>';
					} else if (result.package_sale == 0) {
						resultHTML += '<td valign="top" width="182" style="border-right:none;" class="vf"><a href="' + result.villa_link + '?' + CTAButton + '" onClick="document.getElementById(\'villa_position\').value='+villa_position+';subForm(' + i + ',2);return false;" style="color:#4299F0; text-decoration:none">' + lblClickMore +'</a></td>';
					} else {
						resultHTML += '<td valign="top width="182" style="font-size:115%;color:#4299F0;border-right:none" class="vf">' + curSym(result.package_sale);
						resultHTML += '&nbsp;&nbsp;=&nbsp;&nbsp;<span style="font-size:120%">' + curSym(result.pp_price) + lblpp +'</span>';
						resultHTML += '</td>';
					}


					resultHTML += '</tr>';

					if ((result.offer_only_text != "" || (result.offer_flights_text != "" && result.package_sale != 0)) && searchMode != "package") {
						if (result.offer_flights_text == result.offer_only_text && result.package_sale != 0) {
							resultHTML += '<tr><td colspan="3"></td><td valign="top"  colspan="3" >' + result.offer_only_text;
						} else {
							resultHTML += '<tr><td></td><td></td><td></td><td valign="top" ';
							resultHTML+= ' width="105" >' + result.offer_only_text + '</td><td valign="top" width="182" colspan="2"  class="vf">';
							if (result.package_sale != 0) resultHTML += result.offer_flights_text;
						}
						resultHTML += '</td></tr>';
					} else if (result.offer_flights_text != "") {
						resultHTML += '<tr><td></td><td></td><td></td><td valign="top" class="vf">';
						if (result.package_sale != 0) resultHTML += result.offer_flights_text;
						resultHTML += '</td></tr>';
					}

					resultHTML += resUser(i);

					resultHTML += '</table>';

					if (ferryRegions.indexOf("," + result.region_id + ",") > -1 && airportsShowFerryMsg.indexOf("," + depAirId + ",") > -1 && use_crossings && !isFerry) {
						if(result.region_id != 84) {
							resultHTML += '<div style="margin:5px; font-size:95%">* Ferry or Eurotunnel crossings also available</div>';
						} else {
							resultHTML += '<div style="margin:5px; font-size:95%">* Ferry crossings also available</div>';
						}
					}

				}

				resultHTML += '</td></tr><tr><td colspan="2" height="35" align="right">';

				if (use_customer_reviews && searchMode != "low_mid_high") {
					resultHTML += '<div style="float:left;font-size:90%;padding-right:15px">';
					if (result.overall_rating != "" && result.num_reviews != "" && result.num_reviews >= 2) {
						resultHTML += '<a href="' + result.villa_link + (result.villa_link.indexOf("?") > -1 ? '&amp;' : '?') + 'tab=reviews' + '" onClick="document.getElementById(\'villa_position\').value='+villa_position+';subForm(' + i + ',4);return false;" class="grey">' + ratingIcons(result.overall_rating, 5, 'large', lblRatingAlt.replace('[overallRating]',result.overall_rating)) + result.overall_rating + ' ' + lblRating + ' - <b>' + result.num_reviews + ' ' + (result.num_reviews > 1 ? lblReviews : lblReview) + '</b></a>';
					} else if (result.new_villa) {
						resultHTML += lblNewVillaAwaiting;
					} else {
						resultHTML += lblAwaiting;
					}
					resultHTML += '</div>';
				}

				if (bookmarkedVillas != "X") {
					if (bookmarkedVillas.indexOf(  ""+result.villa_id + ",") >=0) {
						resultHTML += '<div id="bookmark'+result.villa_id+'" style="float:left;"> <a href="JAVASCRIPT:ajaxSend(\'/villa-shortlist/ajax.cfm?villa_id='+result.villa_id+'&resdate='+result.res_date.getDate() + '/' + (result.res_date.getMonth()+1) + '/' + result.res_date.getFullYear()  +'&mkV&bookmarkme=false&divName=bookmark'+result.villa_id+'\', \'generic\');"><img src="/images/buttons/remove_shortlist.gif"/>Remove</a> | <a href="/villa-shortlist/">View Shortlist</a></div></div>';
					} else {
						resultHTML += '<div id="bookmark'+result.villa_id+'" style="float:left;"> <a href="JAVASCRIPT:ajaxSend(\'/villa-shortlist/ajax.cfm?villa_id='+result.villa_id+'&resdate='+result.res_date.getDate() + '/' + (result.res_date.getMonth()+1) + '/' + result.res_date.getFullYear()  +'&mkV&bookmarkme=true&divName=bookmark'+result.villa_id+'\', \'generic\');"><img src="/images/buttons/add_shortlist.gif"/>Add to shortlist</a></div></div>';
					}
				}
				resultHTML += '<div style="float:right; display:table"><a href="' + result.villa_link + '?' + CTAButton + '" onClick="document.getElementById(\'villa_position\').value='+villa_position+';subForm(' + i + ',2);return false;" class="defaultButtonCTA" style="display:table-cell"><img alt="" title="" src="/images/buttons/btn_sec1_cta.jpg" style="vertical-align:-8px;"/>';

				resultHTML += (searchMode == "low_mid_high") ? lblCheckAvail : lblMoreDetails;

				resultHTML += '</a></div></td></tr><tr><td colspan="2" style="padding:0 0"><div style="background-color:#50A1F3;height:1px;"><!-- --></div></td></tr></table>';

				var container = document.createElement("div");
				container.innerHTML = resultHTML;
				srdiv.appendChild(container);
				resultHTML = "";

			}


		}



	}	// end for

	if (numCarRec + numCarEss == 0 && numNoCar == numCarOpt) {
		//Can hide the cars
		document.getElementById("carStatusCheckboxes").style.display='none';
	} else {
		document.getElementById("carStatusCheckboxes").style.display='block';
	}

	if (selDes) {
		//var curSelIndex = selDes.selectedIndex;
		selDes.length = 0;
		selDes.options[0] = new Option(lblAll, -1);
		for (var ir=0;ir<regsLen;ir++) {
			if (numRegs[regs[ir].id]) {
				selDes.options[selDes.length] = new Option(regs[ir].name + " (" + numRegs[regs[ir].id] + ")", regs[ir].id);
			} else {
				selDes.options[selDes.length] = new Option(regs[ir].name + " (0)", regs[ir].id);
			}
		}

		var listSelDest = document.getElementById('listSelDest');
		if (listSelDest.value != "") {
			selDes.value = listSelDest.value.substr(1,listSelDest.value.length-2);
		}
		//selDes.selectedIndex = curSelIndex;
	}


	if (selRes) {
		selRes.length = 0;
		selRes.options[0] = new Option(lblAll, -1);
		for (var ir=0;ir<resortsLen;ir++) {
			selRes.options[selRes.length] = new Option(resorts[ir].name + " (" + resorts[ir].count + ")", resorts[ir].id);
		}
		var listSelResort = document.getElementById('listSelResort');
		if (listSelResort.value != "") {
			selRes.value = listSelResort.value.substr(1,listSelResort.value.length-2);
		}
	}

	if (selBeds) {
		selBeds.length = 0;
		selBeds.options[0] = new Option(lblAll, 0);
		for (var ir=0;ir<bedrooms.length;ir++) {
			selBeds.options[selBeds.length] = new Option(bedrooms[ir].name + " (" + numBeds[ir] + ")", bedrooms[ir].id);
		}
		for (var ir=0;ir<selBeds.length;ir++) {
			if (selBeds[ir].value == filterBedrooms) {
				selBeds.selectedIndex = ir;
			}
		}
	}

	document.getElementById('numCarOpt').innerHTML = numCarOpt;
	document.getElementById('numCarRec').innerHTML = numCarRec;
	document.getElementById('numCarEss').innerHTML = numCarEss;
	document.getElementById('numAC').innerHTML = numAC;
	document.getElementById('numBOJ').innerHTML = numBOJ;
	document.getElementById('numLR').innerHTML = numLR;

	document.getElementById('pagination_div').style.display = 'block';

	totalPages = Math.ceil(numPassed/perPage);
	pagination(curPage, totalPages);
	var fromRange = (curPage*perPage - perPage) + 1;
	var toRange = curPage*perPage;
	if (toRange > numPassed) toRange = numPassed;
	document.getElementById('resRange').innerHTML = (numPassed == 1) ? 1 : fromRange + " - " + toRange;
	document.getElementById('resRange2').innerHTML = (numPassed == 1) ? 1 : fromRange + " - " + toRange;
	document.getElementById('totalRes').innerHTML = numPassed;
	document.getElementById('totalRes2').innerHTML = numPassed;

	document.getElementById('lblresults').style.display = (numPassed == 1) ? 'none' : '';
	document.getElementById('lblresult').style.display = (numPassed == 1) ? '' : 'none';
	document.getElementById('lblresults2').style.display = (numPassed == 1) ? 'none' : '';
	document.getElementById('lblresult2').style.display = (numPassed == 1) ? '' : 'none';

	document.getElementById('prevPage').style.display = (totalPages == 1) ? 'none' : '';
	document.getElementById('prevPage2').style.display = (totalPages == 1) ? 'none' : '';
	document.getElementById('nextPage').style.display = (totalPages == 1) ? 'none' : '';
	document.getElementById('nextPage2').style.display = (totalPages == 1) ? 'none' : '';

	document.getElementById('lblNumHols').innerHTML = numPassed;
	if (!anyDestView) {
		document.getElementById('boxfilter').style.display = 'block';
		document.getElementById('numResultsHead').style.display = 'block';	
		all_div = document.getElementById('search_results_all_div');
		if (all_div) {
			all_div.style.display = 'none';
			document.getElementById('linkViewAll').style.display = 'none';
			document.getElementById('linkViewAnyDest').style.display = '';
			document.getElementById('anyDestHead').style.display = 'none';
		}
	}

	if (!firstRun) {
		filterClick('num_hols',numPassed);
	}
	firstRun = false;

	if (numPassed > 0 && !anyDestView) {
		page_tbl.style.display = '';
		page_tbl2.style.display = '';
		no_res_msg.style.display = 'none';
	} else {
		page_tbl.style.display = 'none';
		page_tbl2.style.display = 'none';
		if (!anyDestView) {
			no_res_msg.style.display = '';
		}
	}

}

function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}


function addVilla(villa_id, addORrem) {
	if (addORrem) {
		bookmarkedVillas = bookmarkedVillas + villa_id + ",";
	} else {
		bookmarkedVillas = bookmarkedVillas.replace(","+villa_id+",", ",");
	}
}
function display_hml_season (season_title, season_list, season_price, fontClass) {
	var hml_html = "";
	hml_html += '<div class="season-back-taller" style="font-size:140%"/>' + season_title + '<br/>';
	var hml_margin_top = 9;
	if (season_list.split(",").length > 5) {
		hml_margin_top = 2;
	}
	hml_html += '<div style="font-size: 70%; line-height: 120%; margin:' + hml_margin_top + 'px 0">' + season_list + '</div>';
	hml_html += (season_price == 0) ? '<div class="' + fontClass + '" style="font-size:95%;">' + lblFullyBooked + '</div>' : '<div class="' + fontClass + '" style="font-size:110%;">' + curSym(season_price) + '</div>';
	hml_html += '</div>';
	return hml_html;
}

function switch_hml_year (year) {
	document.getElementById("hml_selected_year").value = year;
	buildTable();
}


// Generic
function switchTab(tab) {
	var bf = document.getElementById('boxfilter');
	var li = document.getElementById('tabnav').getElementsByTagName('li');
	if (li) {
		for (var i=0;i<li.length;i++) {
			if (li[i].id) {
				boxName = li[i].id.substr(3);
				box = document.getElementById('box' + boxName);
				if (box) {
					if (boxName == tab) {
						box.style.display = 'block';
						li[i].className = 'active';
					} else {
						box.style.display = 'none';
						li[i].className = '';
					}
				}
			}
		}
	}
}

function regName(str) {
	return str.replace(/ /g, "");
}

function padout(number) {
	return (number < 10) ? '0' + number : number;
}

function d(dt) {
	/* Returns JS date object from '01/01/07' format */
	return new Date(parseFloat(dt.substring(0,2))+2000, parseFloat(dt.substring(2,4))-1, dt.substring(4,6));
}

function curSym(price) {
	switch (countryId) {
		case 9:
			return "&pound;" + price;
			break;
		case 25:
			return "&euro;" + price;
			break;
		case 22:
			return price + "&euro;";
			break;
	}
}

function isNumeric(sText) {
	 var valid = "0123456789.";
	 var cha;
	 for (var i=0;i<sText.length; i++)  {
			cha = sText.charAt(i);
			if (valid.indexOf(cha) == -1) {
			 return false;
			}
		}
	 return true;
 }

function getMonthList(monthList) {
	var txt = "";
	if (monthList == "") {
		return "";
	}
	else {
		var monthsToUse = monthList.split(",");
		for (var i = 0; i < monthsToUse.length; i++) {
			txt = txt + monthNames[monthsToUse[i]-1];
			if (i != monthsToUse.length - 1) {
				txt = txt + ", ";
			}
		}
		return txt;
	}
}

function ratingIcons(rating, total, size, alt) {
	var tickIcon = Math.floor(rating);
	if (rating > Math.floor(rating)) tickIcon += ".5";
	return '<img src="/images/accom_page/tick-' + size + '-' + tickIcon + '.gif" alt="' + alt + '" style="vertical-align: middle;" />';
}

function addData(id, num_beds_double, num_beds_single, num_beds_twin, accom_type_id, accom_style_id, local_style_id, distance_beach, distance_bar, distance_restaurant, distance_supermarket, pool_type, pool_shape, pool_size, pool_ladder, pool_steps, pool_gated) {
	for (i=0; i< r.length; i++) {
		if (r[i].villa_id == id) {
			r[i].num_beds_double = num_beds_double;
			r[i].num_beds_single = num_beds_single;
			r[i].num_beds_twin = num_beds_twin;
			r[i].accom_type_id = accom_type_id;
			r[i].accom_style_id = accom_style_id;
			r[i].local_style_id = local_style_id;	
			r[i].distance_beach = distance_beach;
			r[i].distance_bar = distance_bar;
			r[i].distance_restaurant = distance_restaurant;
			r[i].distance_supermarket = distance_supermarket;
			r[i].pool_type = pool_type;
			r[i].pool_shape = pool_shape;
			r[i].pool_size = pool_size;
			r[i].pool_ladder = pool_ladder;
			r[i].pool_steps = pool_steps;
			r[i].pool_gated = pool_gated;
		}
	}
}

var usingExtraFilters = false;
var filterDoubleBedsSB = null;
var filterTwinBedsSB = null;
var filterSingleBedsSB = null;
var filterBedroomsSB = null;
var filterBathroomsSB = null;
var filterNonLeisureCB = null;
var filterPoolHeatingCB = null;
var filterAccomTypeSB = null;
var filterDistanceBeachSB = null;
var filterDistanceBarSB = null;
var filterDistanceRestaurantSB = null;
var filterDistanceSupermarketSB = null;
var filterPoolTypeSB = null;
var filterPoolShapeSB = null;
var filterPoolSizeSB = null;
var filterAccomStyleSB = null;
var filterPoolStepsCB = null;
var filterPoolLadderCB = null;
var filterPoolGatedCB = null;

function useExtrafilters() {
	filterDoubleBedsSB = document.getElementById("filterDoubleBeds");
	filterTwinBedsSB = document.getElementById("filterTwinBeds");
	filterSingleBedsSB = document.getElementById("filterSingleBeds");
	filterBedroomsSB = document.getElementById("filterBedrooms");
	filterBathroomsSB = document.getElementById("filterBathrooms");
	filterNonLeisureCB = document.getElementById("filterNonLeisure");
	filterPoolHeatingCB = document.getElementById("filterPoolHeating");
	filterAccomTypeSB = document.getElementById("filterAccomType");
	filterDistanceBeachSB = document.getElementById("filterDistanceBeach");
	filterDistanceBarSB = document.getElementById("filterDistanceBar");
	filterDistanceRestaurantSB = document.getElementById("filterDistanceRestaurant");
	filterDistanceSupermarketSB = document.getElementById("filterDistanceSupermarket");
	filterPoolTypeSB = document.getElementById("filterPoolType");
	filterPoolShapeSB = document.getElementById("filterPoolShape");
	filterPoolSizeSB = document.getElementById("filterPoolSize");
	filterAccomStyleSB = document.getElementById("filterAccomStyle");
	filterPoolStepsCB = document.getElementById("filterPoolSteps");
	filterPoolLadderCB = document.getElementById("filterPoolLadder");
	filterPoolGatedCB = document.getElementById("filterPoolGated");
	usingExtraFilters = true;
}

function testExtraFilters(result2) {
	if (!usingExtraFilters)
		return true;
	accType = filterAccomTypeSB.options[filterAccomTypeSB.selectedIndex].value;
	disBeach = filterDistanceBeachSB.options[filterDistanceBeachSB.selectedIndex].value;
	disBar = filterDistanceBarSB.options[filterDistanceBarSB.selectedIndex].value;
	disRest = filterDistanceRestaurantSB.options[filterDistanceRestaurantSB.selectedIndex].value;
	disSprMrk = filterDistanceSupermarketSB.options[filterDistanceSupermarketSB.selectedIndex].value;
	poolType = filterPoolTypeSB.options[filterPoolTypeSB.selectedIndex].value;
	poolShape = filterPoolShapeSB.options[filterPoolShapeSB.selectedIndex].value;
	poolSize = filterPoolSizeSB.options[filterPoolSizeSB.selectedIndex].value;
	accomStyle = filterAccomStyleSB.options[filterAccomStyleSB.selectedIndex].value;
	
	return (
			(filterDoubleBedsSB.selectedIndex == 0 || result2.num_beds_double == filterDoubleBedsSB.selectedIndex)
			&& (filterTwinBedsSB.selectedIndex == 0 || result2.num_beds_twin == filterTwinBedsSB.selectedIndex)
			&& (filterSingleBedsSB.selectedIndex == 0 || result2.num_beds_single == filterSingleBedsSB.selectedIndex)
			&& (filterBedroomsSB.selectedIndex == 0 || result2.bedrooms == filterBedroomsSB.selectedIndex)
			&& (filterBathroomsSB.selectedIndex == 0 || result2.bathrooms == filterBathroomsSB.selectedIndex)
			&& (!filterNonLeisureCB.checked || result2.resort_type_id == 1)
			&& (accType == 0 || accType == result2.accom_type_id)
			&& (disBeach == -1 || (eval(result2.distance_beach + "" + disBeach) && result2.distance_beach != -1))
			&& (disBar == -1 || (eval(result2.distance_bar + "" + disBar) && result2.distance_bar != -1))
			&& (disRest == -1 || (eval(result2.distance_restaurant + "" + disRest) && result2.distance_restaurant != -1))
			&& (disSprMrk == -1 || (eval(result2.distance_supermarket + "" + disSprMrk) && result2.distance_supermarket != -1))
			&& (poolType == -1 || poolType == result2.pool_type)
			&& (poolShape == -1 || poolShape == result2.pool_shape)
			&& (result2.pool_size >= poolSize)
			&& (!filterPoolHeatingCB.checked || result2.pool_heating == 1)
			&& (accomStyle == 0 || accomStyle == result2.accom_style_id || accomStyle == result2.local_style_id)
			&& (!filterPoolStepsCB.checked || result2.pool_steps == 1)
			&& (!filterPoolLadderCB.checked || result2.pool_ladder == 1)
			&& (!filterPoolGatedCB.checked || result2.pool_gated == 1)
			);
}

function resetExtraFilters(){
	if (usingExtraFilters){
		filterNonLeisureCB.checked = false;
		filterPoolHeatingCB.checked = false;
		filterDoubleBedsSB.selectedIndex = 0;
		filterTwinBedsSB.selectedIndex = 0;
		filterSingleBedsSB.selectedIndex = 0;
		filterBedroomsSB.selectedIndex = 0;
		filterBathroomsSB.selectedIndex = 0;
		filterAccomTypeSB.selectedIndex = 0;
		filterDistanceBeachSB.selectedIndex = 0;
		filterDistanceBarSB.selectedIndex = 0;
		filterDistanceRestaurantSB.selectedIndex = 0;
		filterDistanceSupermarketSB.selectedIndex = 0;
		filterPoolTypeSB.selectedIndex = 0;
		filterPoolShapeSB.selectedIndex = 0;
		filterPoolSizeSB.selectedIndex = 0;
		filterAccomStyleSB.selectedIndex = 0;
		filterPoolStepsCB.checked = false;
		filterPoolLadderCB.checked = false;
		filterPoolGatedCB.checked = false;
	}
}
