//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, arr_air_id, flight_cache_id, breakage_id, villa_info, bedrooms, bathrooms, max_occ, ac, pool_heating, private_pool, shared_pool, boj, lux, 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, xml_on_request, 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.show_reviews = (num_reviews > 0);
	this.new_villa = new_villa;

	if (p_res_user) {
		this.jvh_reserve = jvh_reserve;
		this.xml_villa = xml_villa;
		this.xml_on_request = xml_on_request;
		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.ob_arr_air_id = arrAirs[arr_air_id].id;
	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.private_pool = private_pool;
	this.shared_pool = shared_pool;
	this.boj = boj;
	this.lux = lux;
	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
	
	if (showAlternateDays) findAlternateDays();

}

function findAlternateDays () {
	// checks to see if there are other days with availability

	var current_date_parts = document.quicksearch.dep_date.value.split("/");
	var current_day_of_week = (new Date(parseInt(current_date_parts[2]), (parseInt(current_date_parts[1])-1), parseInt(current_date_parts[0]))).getDay();
	
	
	// loop over the dates
	for (var i = 0; i < cd.length; i++) {
		// if its available, and its not on the same day as the dep_date
		if (cd[i].a == 1 && cd[i].d.getDay() != current_day_of_week) {
			// break and show the message
			document.getElementById("divAlternateDaysSuggestion").style.display = "block";
			break;
		}
	}
}

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.show_reviews) a.overall_rating = 0;
	if (!b.show_reviews) 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('chkLUX').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.arr_air_id.value = result.ob_arr_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';

	finalPriceSize = (acLuxMode) ? "105%" : "120%";
	
	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 valign="top" style="padding-bottom:5px;"><div style="padding:7px;width:368px;background-color:white;position:relative;';

			resultHTML += '"><div class="cornertl"></div><div class="cornertr"></div><div class="cornerbl"></div><div class="cornerbr"></div><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:' + finalPriceSize + '">' + 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="' + finalPriceSize + '">' + 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="' + searchResultButtonClass + '" style="display:table-cell"><img alt="" title="" src="/images/'+jvhsite+'buttons/' + searchResultButtonImg + '" style="vertical-align:middle;"/>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 chkLUX = document.getElementById('chkLUX');
	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 numLUX = 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;
	
	var include_hml_result;
	
	var chkAC_chkd = chkAC.checked;
	var chkBOJ_chkd = chkBOJ.checked;
	var chkLUX_chkd = chkLUX.checked;
	var chkLR_chkd = chkLR.checked;
	
	setupExtraFilters();
	
	for (var i=0;i<resLen;i++) {

		var result = results[i];
		
		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;
		} else {
			include_hml_result = false;
		}

		if (!result.is_alt_result) {
			
			// For dest list
			if (selDes) {
				var regsLen = regs.length;
				for (var ir=0;ir<regsLen;ir++) {
					var regs_id = regs[ir].id;
					if (result.region_id == regs_id
							&& ((chkAC_chkd && result.ac == 1) || !chkAC_chkd)
							&& ((chkBOJ_chkd && result.boj == 1) || !chkBOJ_chkd)
							&& ((chkLUX_chkd && result.lux == 1) || !chkLUX_chkd)
							&& ((chkLR_chkd && result.resort_type_id == 2) || !chkLR_chkd)
							&& (listCar == "" || listCar.indexOf("," + result.car_status + ",") > -1)
							&& (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.show_reviews))
							&& testExtraFilters(result)
					) {
							numRegs[regs_id]++;
					}
				}
			}

			// For dest list (resorts)
			if (selRes) {
				for (var ir=0;ir<resortsLen;ir++) {
					if (result.resort_id == resorts[ir].id
							&& ((chkAC_chkd && result.ac == 1) || !chkAC_chkd)
							&& ((chkBOJ_chkd && result.boj == 1) || !chkBOJ_chkd)
							&& ((chkLUX_chkd && result.lux == 1) || !chkLUX_chkd)
							&& ((chkLR_chkd && result.resort_type_id == 2) || !chkLR_chkd)
							&& (listCar == "" || listCar.indexOf("," + result.car_status + ",") > -1)
							&& (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.show_reviews))
							&& testExtraFilters(result)
					) {
							resorts[ir].count++;
					}
				}
			}
			
			if (searchMode == "low_mid_high") {
				// for bedrooms
				for (var ib=0;ib<bedrooms.length;ib++) {
					if ((bedrooms[ib].id == result.bedrooms)
							&& ((chkAC_chkd && result.ac == 1) || !chkAC_chkd)
							&& ((chkBOJ_chkd && result.boj == 1) || !chkBOJ_chkd)
							&& ((chkLUX_chkd && result.lux == 1) || !chkLUX_chkd)
							&& ((chkLR_chkd && result.resort_type_id == 2) || !chkLR_chkd)
							&& (listCar == "" || listCar.indexOf("," + result.car_status + ",") > -1)
							&& (listSelDest == "" || listSelDest.indexOf("," + result.region_id + ",") > -1)
							&& (listSelResort == "" || listSelResort.indexOf("," + result.resort_id + ",") > -1)
							&& (result.pp_price <= filterMaxPrice && result.pp_price >= filterMinPrice)
							&& include_hml_result
							&& (minRating == -1 || (result.overall_rating >= minRating && result.show_reviews))
							&& 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 passedFilter = false;

			if ((!chkAC_chkd || (chkAC_chkd && result.ac == 1))
					&& (!chkBOJ_chkd || (chkBOJ_chkd && result.boj == 1))
					&& (!chkLUX_chkd || (chkLUX_chkd && result.lux == 1))
					&& ((chkLR_chkd && result.resort_type_id == 2) || !chkLR_chkd)
					&& (listSelDest == "" || (listSelDest.indexOf("," + result.region_id + ",") != -1))
					&& (listSelResort == "" || (listSelResort.indexOf("," + result.resort_id + ",") != -1))
					&& (result.pp_price <= filterMaxPrice && result.pp_price >= filterMinPrice)
					&& (listCar == "" || (listCar.indexOf("," + result.car_status + ",") != -1))
					&& ((filterBedrooms == result.bedrooms && filterBedrooms != 0) || (filterBedrooms == 0))
					&& include_hml_result
					&& (minRating == -1 || (result.overall_rating >= minRating && result.show_reviews))
					&& testExtraFilters(result)
			) { 
				passedFilter = true;
				numPassed++;
				
				if (result.pp_price < minPrice || minPrice == 0) minPrice = result.pp_price;
				if (result.pp_price > maxPrice || maxPrice == 0) maxPrice = result.pp_price;
				
				// calculate the filter totals
				if (result.boj == 1) numBOJ++;
				if (result.lux == 1) numLUX++;
				if (result.resort_type_id == 2) numLR++;;
				if (result.ac == 1) numAC++;
				
				// Car status
				for (j=1; j<=4; j++) {
					if (result.car_status == j) {
						switch (j) {
							case 1: numCarOpt++; break;
							case 2: numCarRec++; break;
							case 3: numCarEss++; break;
							default: numNoCar++; numCarOpt++; break;
						}
					}
				}
				
			}
			
			// If passed tests, show row
			if (passedFilter && (numPassed <= curPage*perPage && numPassed > (curPage-1)*perPage)) {
				villa_position += 1;
				villasShown[villasShown.length] = result.villa_id;
				
				if (result.lux == 1) fontClass = "accomFontlux";
				else if (result.boj == 1) fontClass = "accomFontboj";
				else fontClass = "accomFontstd";
				
				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" class="' + fontClass + '" style="padding-bottom:2px; font-size:120%; font-weight:bold"><div style="float:left;padding:1px 0;">' + result.villa_name + ', ' + result.resort_name + ' - ' + result.region_name + '</div>';

				// lux/boj/lr images
				resultHTML += '<div style="float:right;">';				
				if (result.lux == 1) resultHTML += '<img src="/images/accom/luxury-' + langCode + '.jpg" alt="' + lblluxury + '" align="absmiddle" />';
				else if (result.boj == 1) resultHTML += '<img src="/images/accom/best-of-james-' + langCode + '.jpg" alt="Best of James" align="absmiddle" />';				
				if ((result.lux == 1 || result.boj == 1) && result.resort_type_id == 2) resultHTML += ' <img src="/images/accom/bar.jpg" align="absmiddle" /> ';
				if (result.resort_type_id == 2) resultHTML += '<img src="/images/accom/leisure-resort-' + langCode + '.jpg" 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" />';
				
				if (result.lux == 1) iconDir = "/images/accom/feature_icons/lux/small/";
				else if (result.boj == 1) iconDir = "/images/accom/feature_icons/boj/small/";
				else iconDir = "/images/accom/feature_icons/std/small/";		
				
				resultHTML += '<img alt="' + lblSleeps + ' ' + result.max_occ + '" src="' + iconDir + 'Sleeps' + result.max_occ + '.jpg" style="vertical-align:top" />';
				resultHTML += '<img alt="'+ result.bedrooms +' '+ lblBedrooms + '" src="' + iconDir + 'Beds' + result.bedrooms + '.jpg" style="padding-left:4px;vertical-align:top" />';
				resultHTML += '<img alt="' + result.bathrooms + ' ' + lblBathrooms + '" src="' + iconDir + 'Baths' + result.bathrooms + '.jpg" style="padding-left:4px;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:4px;vertical-align:top" />';
				}
				
				// pools icons: private, private heated, shared, shared heated
				if (result.private_pool == 1 || result.shared_pool == 1) {
					resultHTML += '<img alt="';					
					if (result.private_pool == 1) resultHTML += 'Private ';
					else if (result.shared_pool == 1) resultHTML += 'Shared ';
					if (result.pool_heating == 1) resultHTML += lblHeatedPool;
					resultHTML += '" src="' + iconDir;
					if (result.private_pool == 1) resultHTML += 'private';
					else if (result.shared_pool == 1) resultHTML += 'shared';
					if (result.pool_heating == 1) resultHTML += '_heated';
					resultHTML += 'pool-' + langCode + '.jpg" style="padding-left:4px;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);

					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 != "" && result.package_sale != 0) {						
						resultHTML += '<tr><td></td><td></td><td></td><td valign="top" class="vf">' + result.offer_flights_text + '</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">';

				// customer reviews
				if (use_customer_reviews && searchMode != "low_mid_high") {
					resultHTML += '<div style="float:left;font-size:90%;padding-right:15px">';
					if (result.overall_rating != "" && result.show_reviews) {
						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">' + ratingIconsQS(result.overall_rating, 5, lblRatingAlt.replace('[overallRating]',result.overall_rating), result.boj, result.lux) + 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 class="removeShortlist" href="#" onclick="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\'); return false;">Remove</a> | <a class="viewShortlist" href="/villa-shortlist/">View Shortlist</a></div></div>';
					} else {
						resultHTML += '<div id="bookmark'+result.villa_id+'" style="float:left;"> <a class="addShortlist" href="#" onclick="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\'); return false;">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="' + searchResultButtonClass + '" style="display:table-cell"><img alt="" title="" src="/images/'+jvhsite+'buttons/' + searchResultButtonImg + '" style="vertical-align:middle;"/>';
								
				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('numLUX').innerHTML = numLUX;
	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 = '';
		}
	}
	updatecarNumbers();
}

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 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();
}

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;
		case 28:
			return "&pound;" + price;
			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 ratingIconsQS(rating, total, alt, boj, lux) {
	var tickIcon = Math.floor(rating);
	if (rating > Math.floor(rating)) tickIcon += ".5";

	if (lux == 1) ratingImgType = "lux";
	else if (boj == 1) ratingImgType = "boj";
	else ratingImgType = "std";
	return '<img src="/images/accom/ratings/' + ratingImgType + '/tick-large-' + tickIcon + '.jpg" alt="' + alt + '" style="vertical-align: middle; margin-right:5px;" />';
}

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;
}

var accType;
var disBeach;
var disBar;
var disRest;
var disSprMrk;
var poolType;
var poolShape;
var poolSize;
var accomStyle;

function setupExtraFilters() {
	if (!usingExtraFilters)
		return;

	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;
}

function testExtraFilters(result2) {
	if (!usingExtraFilters)
		return true;
	
	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;
	}
}

