var singleDay = 24 * 60 * 60 * 1000;
var minDaysStart = 1;
var defDateSpan = 3;
var minDateSpan = 1;
var maxDateSpan = 28;

var minPeople = 1;
var maxPeople = 30;
var minRooms = 1;
var maxRooms = 15;

var searchUrlPrefix = "accommodation/browse/";
var searchUrlData = "accommodation/data/?type={0}&region={1}&town={2}&area={3}";
var optionXml;

function Search(form)
{
	this.form = form;
	this.locations = [];
	this.location_all = null;
	this.location_select = null;
	this.arrival = null;
	this.departure = null;
	this.attribGroupCount = 0;
	this.isSetup = false;
	this.isInit = false;
	this.baseHref = "";

	this.options = new SearchOptions;
	this.initialize();
}
Search.current = null;

Search.setup = function ()
{
	var form = document.getElementById("search_form");
	if (form != null)
		Search.current = new Search(form);
}

Search.cleanup = function ()
{
	if (Search.current != null)
		Search.current.cleanup();
}

Search.prototype.cleanup = function ()
{
	this.form = null;
	this.location_all = null;
	this.location_select = null;
	this.submit = null;
	this.arrival = null;
	this.departure = null;

	for (var i = 0; i < this.locations.length; i++)
		this.locations[i] = null;
}

Search.prototype.initialize = function ()
{
	var elems = document.getElementsByTagName("base");
	var baseHref;
	for (var i = 0; i < elems.length; i++)
	{
		if ((baseHref = elems[i].getAttribute("href")))
		{
			this.baseHref = baseHref;
			break;
		}
	}
	this.initializeControls();

	var search_types = document.getElementById("search_types");
	var search_regions = document.getElementById("search_regions");

	if (search_types && search_regions)
	{
		this.options.initialize();
		this.reloadOptions();
	}
}

Search.prototype.initializeControls = function ()
{
	this.arrival = document.getElementById("da");
	this.departure = document.getElementById("dd");
	this.location_select = document.getElementById("location_select");
	this.submit = document.getElementById("search_submit");
	this.locations = [];

	var initControl = document.getElementById("init");
	if (initControl != null)
		this.isInit = initControl.value == "1";

	var np = this.form.elements.np;
	if (np != null)
		np.onchange = createCallback(this, "numpeople_onchange");
	var nr = this.form.elements.nr;
	if (nr != null)
		nr.onchange = createCallback(this, "numrooms_onchange");

	var pmin = this.form.elements.pmin;
	if (pmin != null)
		pmin.onchange = createCallback(this, "price_onchange");
	var pmax = this.form.elements.pmax;
	if (pmax != null)
		pmax.onchange = createCallback(this, "price_onchange");

	var search_locations = document.getElementById("search_locations");
	var elems = dom.getElementsByClassName(search_locations, "location", "input");
	for (var i = 0; i < elems.length; i++)
	{
		if (elems[i].type == "checkbox" && css.containsClassName(elems[i], "location"))
		{
			if (elems[i].id == "l0")
			{
				this.location_all = elems[i];
				elems[i].onclick = createCallback(this, "location_onclick_all");
			}
			else
			{
				this.locations.push(elems[i]);
				elems[i].onclick = createCallback(this, "location_onclick");
			}
		}
	}

	var search_types = document.getElementById("search_types");
	var search_regions = document.getElementById("search_regions");

	if (search_types != null)
	{
		var elems = dom.getElementsByClassName(search_types, "type", "input");
		for (var i = 0; i < elems.length; i++)
			elems[i].onclick = createCallback(this, "type_onclick", [elems[i]]);
	}
	if (search_regions != null)
	{
		var elems = dom.getElementsByClassName(search_regions, "region", "input");
		for (var i = 0; i < elems.length; i++)
			elems[i].onclick = createCallback(this, "region_onclick", [elems[i]]);
	}

	var dac = document.getElementById("da");
	var ddc = document.getElementById("dd");

	evt.addHandler(dac, "onfocus", createCallback(this, "arrival_onfocus"));
	evt.addHandler(ddc, "onfocus", createCallback(this, "departure_onfocus"));

	evt.addHandler(this.location_select, "onchange", createCallback(this, "location_onchange"));
	evt.addHandler(this.form, "onsubmit", createCallback(this, "form_submit"));

	var minDate = this.getDefaultArrivalDate();
	var maxDate = new Date();
	maxDate.setFullYear(maxDate.getFullYear() + 1);
	maxDate.setDate(maxDate.getDate() - 1);

	Calendar.current.addListener("onchange", createCallback(this, "date_onchange"));
	Calendar.current.setMinDate(minDate);
	Calendar.current.setMaxDate(maxDate);

}

Search.prototype.form_submit = function ()
{
	this.options.initialize();
	this.options.save();
}

Search.prototype.region_onclick = function (source)
{
	this.options.initialize();
	this.reloadOptions();
}

Search.prototype.type_onclick = function (source)
{
	var t0, t1, t2, g1 = [], g2 = [];

	var search_types = document.getElementById("search_types");
	var elems = dom.getElementsByClassName(search_types, "type", "input");
	for (var i = 0; i < elems.length; i++)
	{
		if (elems[i].id == "t0")
			t0 = elems[i];
		else if (elems[i].id == "t1")
			t1 = elems[i];
		else if (elems[i].id == "t2")
			t2 = elems[i];
		else if (elems[i].id.indexOf("t1") == 0)
			g1.push(elems[i]);
		else if (elems[i].id.indexOf("t2") == 0)
			g2.push(elems[i]);
	}

	function setT0Checked() /**/
	{
		t0.checked = true;
		t1.checked = false;
		t2.checked = false;
		for (var i = 0; i < g1.length; i++)
			g1[i].checked = false;
		for (var i = 0; i < g2.length; i++)
			g2[i].checked = false;
	}
	function getGChecked(g) /**/
	{
		if (g.length == 0)
			return false;

		var checked = true;
		for (var i = 0; i < g.length; i++)
			if (g[i].checked == false)
				checked = false;

		return checked;
	}
	function getGUnChecked(g) /**/
	{
		if (g.length == 0)
			return true;

		var unchecked = true;
		for (var i = 0; i < g.length; i++)
			if (g[i].checked == true)
				unchecked = false;

		return unchecked;
	}


	if (source == t0)
		setT0Checked();

	else if (source == t1)
	{
		if (t1.checked)
		{
			t0.checked = false;
			t2.checked = false;
			for (var i = 0; i < g1.length; i++)
				g1[i].checked = true;
			for (var i = 0; i < g2.length; i++)
				g2[i].checked = false;
		}
		else
			setT0Checked();
	}
	else if (source == t2)
	{
		if (t2.checked)
		{
			t0.checked = false;
			t1.checked = false;
			for (var i = 0; i < g1.length; i++)
				g1[i].checked = false;
			for (var i = 0; i < g2.length; i++)
				g2[i].checked = true;
		}
		else
			setT0Checked();
	}
	else if (g1.contains(source))
	{
		t0.checked = false;
		if (getGChecked(g1))
			t1.checked = true;
		else
		{
			t1.checked = false;
			if (getGUnChecked(g2) && getGUnChecked(g1))
				t0.checked = true;
		}
	}
	else if (g2.contains(source))
	{
		t0.checked = false;
		if (getGChecked(g2))
			t2.checked = true;
		else
		{
			t2.checked = false;
			if (getGUnChecked(g2) && getGUnChecked(g1))
				t0.checked = true;
		}
	}
	this.options.initialize();
	this.reloadOptions();
	this.updateRoomTypes();
}

Search.prototype.location_onclick = function ()
{
	var checked = false;
	for (var i = 0; i < this.locations.length; i++)
	{
		if (this.locations[i].checked)
		{
			checked = true;
			break;
		}
	}
	if (checked)
	{
		this.location_all.checked = false;
		this.location_select.selectedIndex = 0;
	}
	else
		this.location_all.checked = true;

	this.options.initialize();
	this.reloadOptions();
}

Search.prototype.location_onclick_all = function ()
{
	for (var i = 0; i < this.locations.length; i++)
		this.locations[i].checked = false;

	this.location_all.checked = true;
	this.location_select.selectedIndex = 0;
	this.options.initialize();
	this.reloadOptions();
}

Search.prototype.location_onchange = function ()
{
	var index = this.location_select.selectedIndex;
	var option = this.location_select.options[index];
	var itemClass = option.className;
	var itemValue = option.value;

	if (index == 0)
		this.location_all.checked = true;
	else
		this.location_all.checked = false;

	for (var i = 0; i < this.locations.length; i++)
	{
		if (css.containsClassName(this.locations[i], itemClass) && this.locations[i].value == itemValue)
			this.locations[i].checked = true;
		else
			this.locations[i].checked = false;
	}

	var option = this.location_select.options[this.location_select.selectedIndex];
	if (option.className == "town")
		this.location_select.name = "town";
	else if (option.className == "area")
		this.location_select.name = "area";
	else
		this.location_select.name = "";

	this.options.initialize();
	this.reloadOptions();
}

Search.prototype.reloadOptions = function ()
{
	if (this.loadTimeout != null)
		window.clearTimeout(this.loadTimeout);

	this.loadTimeout = window.setTimeout(createCallback(this, "loadOptions"), 10);
}

Search.prototype.loadOptions = function ()
{
	var callback = createCallback(this, "options_onload");

	var url = searchUrlData.format(this.options.values.type, this.options.values.region, this.options.values.town, this.options.values.area);
	optionXml = xml.createHttpRequest(null, true, callback);
	optionXml.open("GET", url, true);
	optionXml.send(null);
}

Search.prototype.options_onload = function (xmlRequest)
{
	var xmlDocument = xmlRequest.responseXML;
	var searchData = this.parseOptions(xmlDocument);

	if (this.isSetup || this.isInit)
		this.redrawForm(searchData);

	this.searchData = searchData;
	this.isSetup = true;

	var initControl = document.getElementById("init");
	if (initControl != null)
		initControl.value = "1";
}

Search.prototype.redrawForm = function (searchData)
{
	var search_types = document.getElementById("search_types");
	var search_locations = document.getElementById("search_locations");
	var search_regions = document.getElementById("search_regions");
	var search_attributes = document.getElementById("search_attributes");

	if (search_types != null)
		this.redrawTypes(searchData);

	if (search_locations != null)
		this.redrawLocations(searchData);

	if (search_regions != null)
		this.redrawRegions(searchData);

	if (search_attributes != null)
		this.redrawAttributes(searchData);
}

Search.prototype.redrawAttributes = function (searchData)
{
	this.redrawAttributeGroup(searchData, "pa");
	this.redrawAttributeGroup(searchData, "ra");
	this.redrawAttributeGroup(searchData, "ea");
	this.redrawAttributeGroup(searchData, "aa");
}

Search.prototype.redrawAttributeGroup = function (searchData, groupName)
{
	var ctrlID = "c_" + groupName;
	var attributeObj = Attributes.current[ctrlID];
	var targetArea = document.getElementById("c_" + groupName + "_area");
	var elems = dom.getElementsByClassName(targetArea, "checkbox", "div");
	var controlObj = document.getElementById(ctrlID);

	var groupValid = searchData.attributes[groupName];
	var groupValue = this.options.values[groupName];

	for (var i = 0; i < elems.length; i++)
	{
		if (elems[i].className.match(/attrib_(\d+)/))
		{
			var value = parseInt(RegExp.$1);
			if ((groupValid & value) == value)
			{
				attributeObj.attribute_enable(elems[i]);
				if (groupValue & value)
					attributeObj.attribute_setTrue(elems[i]);
			}
			else
			{
				attributeObj.attribute_setFalse(elems[i]);
				attributeObj.attribute_disable(elems[i]);
				if (groupValue & value)
					groupValue -= value;
			}
		}
	}
	controlObj.value = groupValue;
}

Search.prototype.redrawRegions = function (searchData)
{
	var search_regions = document.getElementById("search_regions");

	var inputs = dom.getElementsByClassName(search_regions, "region", "input");
	for (var i = 0; i < inputs.length; i++)
	{
		var region = parseInt(inputs[i].value);

		if (searchData.regions.contains(region))
		{
			inputs[i].disabled = false;
			css.removeClassName(inputs[i].parentNode, "disabled");
		}
		else
		{
			inputs[i].disabled = true;
			inputs[i].checked = false;
			css.addClassName(inputs[i].parentNode, "disabled");
		}
	}
}

Search.prototype.redrawLocations = function (searchData)
{
	var location_area = document.getElementById("location_area");
	var location_select = document.getElementById("location_select");

	var inputs = dom.getElementsByClassName(location_area, "location", "input");
	var countChecked = 0;
	for (var i = 0; i < inputs.length; i++)
	{
		if (css.containsClassName(inputs[i], "all"))
			continue;

		var list = css.containsClassName(inputs[i], "area") ? searchData.areas : searchData.towns;
		var location = parseInt(inputs[i].value);

		if (list.contains(location))
		{
			inputs[i].disabled = false;
			css.removeClassName(inputs[i].parentNode, "disabled");
		}
		else
		{
			inputs[i].disabled = true;
			inputs[i].checked = false;
			css.addClassName(inputs[i].parentNode, "disabled");
		}

		if (inputs[i].checked)
			countChecked++;
	}

	var index = location_select.selectedIndex;
	var option = location_select.options[index];
	var itemClass = option.className;
	var itemValue = option.value;

	while (location_select.options.length > 1)
		location_select.removeChild(location_select.options[1]);

	for (var i = 0; i < searchData.locations.length; i++)
	{
		var areaID = searchData.locations[i].area;
		var townID = searchData.locations[i].town;

		var option = location_select.appendChild(document.createElement("option"));
		option.className = areaID ? "area" : "town";
		option.value = areaID || townID;
		option.text = searchData.locations[i].name;

		if (option.className == itemClass && option.value == itemValue)
			index = i + 1;
	}

	location_select.selectedIndex = index;
	if (countChecked == 0 && index == 0)
		this.location_all.checked = true;
}

Search.prototype.redrawTypes = function (searchData)
{
	var tg1 = document.getElementById("tg1");
	var tg1_area = document.getElementById("tg1_area");
	var tg2 = document.getElementById("tg2");
	var tg2_area = document.getElementById("tg2_area");

	//tg1_area.innerHTML = "";
	//tg2_area.innerHTML = "";

	this.redrawTypeGroup(searchData, tg1_area, "1");
	this.redrawTypeGroup(searchData, tg2_area, "2");
}

Search.prototype.redrawTypeGroup = function (searchData, target, group)
{
	var inputs = dom.getElementsByClassName(target, "type", "input");
	var types = searchData.types["g" + group];
	for (var i = 0; i < inputs.length; i++)
	{
		var type = parseInt(inputs[i].value);
		if (types.contains(type))
		{
			inputs[i].disabled = false;
			css.removeClassName(inputs[i].parentNode, "disabled");
		}
		else
		{
			inputs[i].disabled = true;
			inputs[i].checked = false;
			css.addClassName(inputs[i].parentNode, "disabled");
		}
	}
}

Search.prototype.locationExists = function (townID, areaID, searchData)
{
	for (var i = 0; i < searchData.towns.length; i++)
	{
		var l = searchData.towns[i];
		if (l.area == areaID || l.town == townID)
			return true;
	}
	return false;
}

Search.prototype.parseOptions = function (xmlDocument)
{
	var searchData = { types: { g1: [], g2: [] }, regions: [], towns: [], areas: [], locations: [], attributes: { pa: 0, ra: 0, ea: 0, aa: 0 }};

	var typeNodes = xmlDocument.getElementsByTagName("types")[0].getElementsByTagName("record");
	var regionNodes = xmlDocument.getElementsByTagName("regions")[0].getElementsByTagName("record");
	var townNodes = xmlDocument.getElementsByTagName("towns")[0].getElementsByTagName("record");

	var paNode = xmlDocument.getElementsByTagName("attributes")[0].getElementsByTagName("property")[0];
	var raNode = xmlDocument.getElementsByTagName("attributes")[0].getElementsByTagName("room")[0];
	var eaNode = xmlDocument.getElementsByTagName("attributes")[0].getElementsByTagName("environment")[0];
	var aaNode = xmlDocument.getElementsByTagName("attributes")[0].getElementsByTagName("activity")[0];

	for (var i = 0; i < typeNodes.length; i++) with (typeNodes[i])
	{
		if (!getAttribute("Skip"))
		{
			var type = parseInt(getAttribute("ID"));
			if (type < 20)
				searchData.types.g1.push(type);
			else
				searchData.types.g2.push(type);
		}
	}
	for (var i = 0; i < regionNodes.length; i++) with (regionNodes[i])
	{
		if (!getAttribute("Skip"))
		{
			var region = parseInt(getAttribute("ID"));
			searchData.regions.push(region);
		}
	}
	for (var i = 0; i < townNodes.length; i++) with (townNodes[i])
	{
		if (!getAttribute("Skip"))
		{
			var town = parseInt(getAttribute("TownID"));
			var area = parseInt(getAttribute("AreaID"));
			var name = getAttribute("TownAreaName");

			if (area != null)
				searchData.areas.push(area);

			searchData.towns.push(town);
			searchData.locations.push({ town: town, area: area, name: name });
		}
	}
	searchData.attributes.pa = parseInt(paNode.getAttribute("valid"));
	searchData.attributes.ra = parseInt(raNode.getAttribute("valid"));
	searchData.attributes.ea = parseInt(eaNode.getAttribute("valid"));
	searchData.attributes.aa = parseInt(aaNode.getAttribute("valid"));

	return searchData;
}

Search.prototype.updateRoomTypes = function ()
{
	var group1 = false, group2 = false;

	if (this.options.values.type.length == 0)
		group1 = true, group2 = true;
	else
	{
		for (var i = 0; i < this.options.values.type.length; i++)
		{
			if (this.options.values.type[0] < 20)
				group1 = true;
			if (this.options.values.type[0] > 20)
				group2 = true;
		}
	}

	var np = parseInt(this.form.elements.np.value);
	var sr = this.form.elements.sr;
	var dr = this.form.elements.dr;
	var ga = this.form.elements.ga;
	var xb = this.form.elements.xb;

	if (ga && xb)
	{
		if (np && np >= 3)
		{
			ga.disabled = xb.disabled = false;
			css.removeClassName(ga.parentNode, "disabled");
			css.removeClassName(xb.parentNode, "disabled");
		}
		else
		{
			ga.disabled = xb.disabled = true;
			ga.checked = xb.checked = true;
			css.addClassName(ga.parentNode, "disabled");
			css.addClassName(xb.parentNode, "disabled");
		}
	}
	if (sr && dr)
	{
		if (!group1)
		{
			sr.disabled = dr.disabled = true;
			sr.checked = dr.checked = false;
			css.addClassName(sr.parentNode, "disabled");
			css.addClassName(dr.parentNode, "disabled");
		}
		else
		{
			sr.disabled = dr.disabled = false;
			css.removeClassName(sr.parentNode, "disabled");
			css.removeClassName(dr.parentNode, "disabled");
		}
	}
}

Search.prototype.updatePeopleRooms = function ()
{
	var np = this.form.elements.np;
	var nr = this.form.elements.nr;
	if (np != null && nr != null)
	{
		var npv = parseInt(np.value) || 2;
		var nrv = parseInt(nr.value) || 1;

		if (npv < minPeople)
			npv = minPeople;
		if (npv > maxPeople)
			npv = maxPeople;
		if (nrv < minRooms)
			nrv = minRooms;
		if (nrv > maxRooms)
			nrv = maxRooms;
		if (nrv > npv)
			nrv = npv;

		np.value = npv;
		nr.value = nrv;
	}
}

Search.prototype.numpeople_onchange = function ()
{
	this.options.initialize();

	this.updateRoomTypes();
	this.updatePeopleRooms();
}

Search.prototype.numrooms_onchange = function ()
{
	this.options.initialize();

	this.updatePeopleRooms();
}

Search.prototype.getDefaultArrivalDate = function ()
{
	var today = new Date();
	arrival = new Date(today.getFullYear(), today.getMonth(), today.getDate() + minDaysStart);

	return arrival;
}

Search.prototype.getDefaultDepartureDate = function (arrival)
{
	var departure = new Date(arrival.getFullYear(), arrival.getMonth(), arrival.getDate() + defDateSpan);
	return departure;
}

Search.prototype.setDefaultDatesIfNull = function ()
{
	var dac = document.getElementById("da");
	var ddc = document.getElementById("dd");

	var arrival = dac.getDate();
	var departure = ddc.getDate();

	if (arrival == null)
	{
		var today = new Date();
		arrival = this.getDefaultArrivalDate();
		departure = this.getDefaultDepartureDate(arrival);

		Calendar.current.setDate(dac, arrival, true);
		Calendar.current.setDate(ddc, departure, true);
	}
}

Search.prototype.price_onchange = function ()
{
	var pmin = this.form.elements.pmin;
	var pmax = this.form.elements.pmax;
	if (pmin != null && pmax != null)
	{
		var pminv = parseInt(pmin.value);
		var pmaxv = parseInt(pmax.value);

		if (!isNaN(pminv) || !isNaN(pmaxv))
		{
			this.setDefaultDatesIfNull();

			if ((pminv && pmaxv) && pmaxv < pminv)
				pmax.value = pminv;
		}
		else if (isNaN(pminv))
			pmin.value = "";
		else if (isNaN(pmaxv))
			pmax.value = "";
	}
}

Search.prototype.arrival_onfocus = function ()
{
	Calendar.current.setMaxDate(null);
}

Search.prototype.departure_onfocus = function ()
{
	var dac = document.getElementById("da");
	var arrival = Calendar.current.getDate(dac);

	if (arrival == null)
		arrival = this.getDefaultArrivalDate();

	var departure = new Date(arrival.getFullYear(), arrival.getMonth(), arrival.getDate() + maxDateSpan);

	Calendar.current.setMinDate(arrival);
	Calendar.current.setMaxDate(departure);
}

Search.prototype.date_onchange = function (eventObj)
{
	var dac = document.getElementById("da");
	var ddc = document.getElementById("dd");

	var arrival = Calendar.current.getDate(dac);
	var departure = Calendar.current.getDate(ddc);

	if (departure == null)
	{
		departure = new Date(arrival.getFullYear(), arrival.getMonth(), arrival.getDate() + minDateSpan);
		Calendar.current.setDate(ddc, departure, true);
	}
}

function SearchOptions()
{
}

SearchOptions.prototype.initialize = function ()
{
	this.values = new Object;
	this.values.type = [];
	this.values.town = [];
	this.values.area = [];
	this.values.region = [];
	this.values.np = null;
	this.values.nr = null;
	this.values.pmin = null;
	this.values.pmax = null;
	this.values.da = null;
	this.values.ds = null;
	this.values.pa = null;
	this.values.ra = null;
	this.values.ea = null;
	this.values.aa = null;
	this.values.sr = null;
	this.values.dr = null;
	this.values.ga = null;
	this.values.xb = null;
	this.values.pc = null;
	this.values.opt = null;
	this.values.view = null;

	this.updateFromForm();
}

SearchOptions.prototype.save = function ()
{
	for (var id in this.values)
	{
		if (this.values[id] != null)
		{
			if (isArray(this.values[id]) && this.values[id].length == 0)
				continue;

			var ctrl = document.getElementById("c_" + id);
			if (ctrl)
			{
				ctrl.value = isArray(this.values[id]) ? this.values[id].join(",") : this.values[id];
				ctrl.name = id;
			}
		}
	}
}


SearchOptions.prototype.updateFromForm = function ()
{
	var search_types = document.getElementById("search_types");
	var search_locations = document.getElementById("search_locations");
	var search_peoplerooms = document.getElementById("search_peoplerooms");
	var search_price = document.getElementById("search_price");
	var search_regions = document.getElementById("search_regions");
	var search_attributes_property = document.getElementById("search_attributes_property");
	var search_attributes_room = document.getElementById("search_attributes_room");
	var search_attributes_environment = document.getElementById("search_attributes_environment");
	var search_attributes_activity = document.getElementById("search_attributes_activity");
	var location_select = document.getElementById("location_select");

	if (search_types != null)
	{
		this.values.opt = 1;

		var options = dom.getElementsByClassName(search_types, "type", "input");
		for (var i = 0; i < options.length; i++)
		{
			if (options[i].checked && !css.containsClassName(options[i], "all"))
				this.values.type.push(options[i].value);
		}
	}
	if (search_regions != null)
	{
		var options = dom.getElementsByClassName(search_regions, "region", "input");
		for (var i = 0; i < options.length; i++)
		{
			if (options[i].checked && !css.containsClassName(options[i], "all"))
				this.values.region.push(options[i].value);
		}
	}
	if (search_locations != null)
	{
		var areas = dom.getElementsByClassName(search_locations, "area", "input");
		var towns = dom.getElementsByClassName(search_locations, "town", "input");
		for (var i = 0; i < areas.length; i++)
			if (areas[i].offsetHeight && areas[i].checked)
				this.values.area.push(areas[i].value);
		for (var i = 0; i < towns.length; i++)
			if (towns[i].offsetHeight && towns[i].checked)
				this.values.town.push(towns[i].value);
	}
	if (this.values.town.length == 0 && this.values.area.length == 0 && location_select != null)
	{
		if (location_select.selectedIndex != 0)
		{
			var option = location_select.options[location_select.selectedIndex];
			if (css.containsClassName(option, "town"))
				this.values.town.push(option.value);
			else
				this.values.area.push(option.value);
		}
	}
	if (search_peoplerooms != null)
	{
		var sr = document.getElementById("sr");
		var dr = document.getElementById("dr");
		var ga = document.getElementById("ga");
		var xb = document.getElementById("xb");

		var np = parseInt(document.getElementById("np").value);
		var nr = parseInt(document.getElementById("nr").value);
		if (np) this.values.np = np;
		if (nr) this.values.nr = nr;

		if (sr && sr.checked)
			this.values.sr = 1;
		if (dr && dr.checked)
			this.values.dr = 1;
		if (ga && ga.checked)
			this.values.ga = 1;
		if (xb && xb.checked)
			this.values.xb = 1;
	}
	if (search_price != null)
	{
		var dac = document.getElementById("da");
		var ddc = document.getElementById("dd");
		var pc1 = document.getElementById("pc1");
		var pc2 = document.getElementById("pc2");
		var pc3 = document.getElementById("pc3");
		var pc4 = document.getElementById("pc4");

		var da = dac.getDate();
		var dd = ddc.getDate();

		var pminc = document.getElementById("pmin");
		var pmaxc = document.getElementById("pmax");

		var pmin = parseInt(pminc.value) || null;
		var pmax = parseInt(pmaxc.value) || null;

		if (da && dd)
		{
			var ds = Math.round((dd.getTime() - da.getTime()) / singleDay);

			var yy = da.toString("yyyy");
			var mm = da.toString("mm");
			var dd = da.toString("dd");
			this.values.da = da ? [yy, mm, dd].join("") : "";
			this.values.ds = ds;
		}
		if (pmin || pmax)
		{
			this.values.pmin = pmin;
			this.values.pmax = pmax;
		}
		if (pc1 && pc1.checked)
			this.values.pc = pc1.value;
		if (pc2 && pc2.checked)
			this.values.pc = pc2.value;
		if (pc3 && pc3.checked)
			this.values.pc = pc3.value;
		if (pc4 && pc4.checked)
			this.values.pc = pc4.value;
	}
	if (search_attributes_property != null)
	{
		var pattrib = document.getElementById("c_pa");
		var pavalue = pattrib ? parseInt(pattrib.value) : 0;
		this.values.pa = pavalue;
	}
	if (search_attributes_room != null)
	{
		var rattrib = document.getElementById("c_ra");
		var ravalue = rattrib ? parseInt(rattrib.value) : 0;
		this.values.ra = ravalue;
	}
	if (search_attributes_environment != null)
	{
		var eattrib = document.getElementById("c_ea");
		var eavalue = eattrib ? parseInt(eattrib.value) : 0;
		this.values.ea = eavalue;
	}
	if (search_attributes_activity != null)
	{
		var aattrib = document.getElementById("c_aa");
		var aavalue = aattrib ? parseInt(aattrib.value) : 0;
		this.values.aa = aavalue;
	}
	var query = new util.querystring();
	if (query.param.view != null)
		this.values.view = query.param.view;
}

SearchOptions.prototype.toString = function ()
{
	var values = new Array;
	for (var id in this.values)
	{
		if (this.values[id] != null)
		{
			if (isArray(this.values[id]) && this.values[id].length == 0)
				continue;

			var value = isArray(this.values[id]) ? this.values[id].join(",") : this.values[id];
			values.push(id + "=" + value);
		}
	}
	return (values.length ? "?" + values.join("&") : "");
}

function Results()
{
}

Results.setup = function ()
{
	var toggleSearchPreferences = document.getElementById("toggleSearchPreferences");
	var toggleDisplayPreferences = document.getElementById("toggleDisplayPreferences");

	if (toggleSearchPreferences != null)
		evt.addHandler(toggleSearchPreferences, "onclick", Results.toggleSearchPreferences);
	if (toggleDisplayPreferences != null)
		evt.addHandler(toggleDisplayPreferences, "onclick", Results.toggleDisplayPreferences);
}

Results.toggleSearchPreferences = function ()
{
	ui.showDialog(this.href, 810, 370);
	return false;
}

Results.toggleDisplayPreferences = function ()
{
	var display_prefs = document.getElementById("display_prefs");
	var targetLeft = dom.getLeft(display_prefs) + display_prefs.offsetWidth + 5;
	var targetTop = (dom.getTop(display_prefs) + display_prefs.offsetHeight) - 320;
	ui.showDialog(this.href, 410, 320, targetTop, targetLeft);
	return false;
}


evt.addHandler(window, "onready", Search.setup);
evt.addHandler(window, "onready", Results.setup);
evt.addHandler(window, "onunload", Search.cleanup);

