window.log=function(){log.history=log.history||[];log.history.push(arguments);if(window.console){console.log[console.firebug?'apply':'call'](console,Array.prototype.slice.call(arguments));}};
window.logargs=function(context){log(context,arguments.callee.caller.arguments);};




var hpoller = null; //### will be a handle to the poller
var immediate = false; //### will be a flag for immediate or deferred drawing of poller results

var npolls = 0;
var nmaxfirst = 15;
var nmaxall = 60;
var inpoll = false; //### awaiting a single poll response




//___ Click Tracking __________________________________________________________
function ct_observe() {
	$$('a.accomlink.untracked').each(function(i) {
		i.observe('click', ct_click).removeClassName('untracked');
	});
}
function ct_click() {
	var element = this;
	var href = element.href;
	var rel = element.rel;
	var relparts = rel.split(' ');
	var regex = /^(ANALYTICS|FILTER|BUDDY|ALTERNATE|ASBOOK|ASCAL|PLUS|FEATURED|EXTERNAL|BANNER):(\w)+$/;
	var matches = relparts.grep(regex);
	if (!matches.length) {return;}
	var match = matches[0];
	var parts = match.split(':');
	var feature = parts[0];
	var id = parts[1];
	if (feature === 'ANALYTICS') {
		//log('Recording Analytics Event... ' + rel);
		if (undefined !== window._gaq) {
			_gaq.push(['r._trackEvent', feature, id, element.href]);
			_gaq.push(['a._trackEvent', feature, id, element.href]);
		}
	}
	else {
		//log('Recording Performance Event... ' + rel);
		if (ident.feature === 'enquiry') {
			log('setting last filter :-)');
			cc('filter', ident.url);
			cc('filterq', ident.quarter);
			cc('filtera', ident.availability);
		}
		var params = Object.clone(ident);
		params.reason = 'click';
		params.clickfeature = feature;
		params.clickid = id;
		//cc('perf', Object.toJSON(params), 366); //### test to see if data in params was the source of the empty post errors
		new Ajax.Request('/cgi/uk6/handler.performance.php', {method: 'POST', asynchronous: false, parameters: params});
		if ((feature === 'EXTERNAL') || (feature === 'BANNER')) {$(element).writeAttribute({'target': '_blank'});}
	}
	return true;
}




//___ Google Maps _____________________________________________________________
gm_icons = {
	'listing_a_star': {'s':true,'is':[32,76],'ia':[16,76],'ss':[59,58],'wa':[24,6]},
	'listing_f_star': {'s':true,'is':[32,76],'ia':[16,76],'ss':[59,58],'wa':[24,6]},
	'listing_e_star': {'s':true,'is':[32,76],'ia':[16,76],'ss':[59,58],'wa':[24,6]},
	'listing_s_star': {'s':true,'is':[32,76],'ia':[16,76],'ss':[59,58],'wa':[24,6]},
	'listing_t_star': {'s':true,'is':[32,76],'ia':[16,76],'ss':[59,58],'wa':[24,6]},
	'listing_a_plus': {'s':true,'is':[32,58],'ia':[16,58],'ss':[59,58],'wa':[24,6]},
	'listing_f_plus': {'s':true,'is':[32,58],'ia':[16,58],'ss':[59,58],'wa':[24,6]},
	'listing_e_plus': {'s':true,'is':[32,58],'ia':[16,58],'ss':[59,58],'wa':[24,6]},
	'listing_s_plus': {'s':true,'is':[32,58],'ia':[16,58],'ss':[59,58],'wa':[24,6]},
	'listing_t_plus': {'s':true,'is':[32,58],'ia':[16,58],'ss':[59,58],'wa':[24,6]},
	'listing_a_platinum': {'s':true,'is':[28,51],'ia':[14,51],'ss':[50,51],'wa':[18,5]},
	'listing_f_platinum': {'s':true,'is':[28,51],'ia':[14,51],'ss':[50,51],'wa':[18,5]},
	'listing_e_platinum': {'s':true,'is':[28,51],'ia':[14,51],'ss':[50,51],'wa':[18,5]},
	'listing_s_platinum': {'s':true,'is':[28,51],'ia':[14,51],'ss':[50,51],'wa':[18,5]},
	'listing_t_platinum': {'s':true,'is':[28,51],'ia':[14,51],'ss':[50,51],'wa':[18,5]},
	'listing_a_gold': {'s':true,'is':[23,42],'ia':[11,42],'ss':[42,42],'wa':[14,4]},
	'listing_f_gold': {'s':true,'is':[23,42],'ia':[11,42],'ss':[42,42],'wa':[14,4]},
	'listing_e_gold': {'s':true,'is':[23,42],'ia':[11,42],'ss':[42,42],'wa':[14,4]},
	'listing_s_gold': {'s':true,'is':[23,42],'ia':[11,42],'ss':[42,42],'wa':[14,4]},
	'listing_t_gold': {'s':true,'is':[23,42],'ia':[11,42],'ss':[42,42],'wa':[14,4]},
	'listing_a_silver': {'s':true,'is':[19,35],'ia':[9,35],'ss':[40,35],'wa':[11,4]},
	'listing_f_silver': {'s':true,'is':[19,35],'ia':[9,35],'ss':[40,35],'wa':[11,4]},
	'listing_e_silver': {'s':true,'is':[19,35],'ia':[9,35],'ss':[40,35],'wa':[11,4]},
	'listing_s_silver': {'s':true,'is':[19,35],'ia':[9,35],'ss':[40,35],'wa':[11,4]},
	'listing_t_silver': {'s':true,'is':[19,35],'ia':[9,35],'ss':[40,35],'wa':[11,4]},
	'listing_a_bronze': {'s':true,'is':[19,35],'ia':[9,35],'ss':[40,35],'wa':[11,4]},
	'listing_f_bronze': {'s':true,'is':[19,35],'ia':[9,35],'ss':[40,35],'wa':[11,4]},
	'listing_e_bronze': {'s':true,'is':[19,35],'ia':[9,35],'ss':[40,35],'wa':[11,4]},
	'listing_s_bronze': {'s':true,'is':[19,35],'ia':[9,35],'ss':[40,35],'wa':[11,4]},
	'listing_t_bronze': {'s':true,'is':[19,35],'ia':[9,35],'ss':[40,35],'wa':[11,4]},
	'image_101': {'s':false,'is':[30,28],'ia':[12,15],'wa':[12,15]},
	'image_102': {'s':false,'is':[30,28],'ia':[12,15],'wa':[12,15]},
	'image_103': {'s':false,'is':[64,64],'ia':[31,63],'wa':[38,32]},
	'image_104': {'s':false,'is':[30,28],'ia':[12,15],'wa':[12,15]},
	'image_105': {'s':false,'is':[30,28],'ia':[12,15],'wa':[12,15]},
	'image_1001': {'s':false,'is':[64,64],'ia':[31,63],'wa':[40,38]}
};
function gm_load() {
	if (!ident.gmap) {log('Begin: Not a Map page'); return;}
	if (!GBrowserIsCompatible()) {log('Begin: Browser Not GMap Compatible'); return;}
	//log('Entered gm_load');
	Event.observe(window, 'unload', gm_unload);
	oMap = {};
	oMap.lat = ident.lat;
	oMap.lng = ident.lng;
	oMap.zoom = ident.zoom;
	switch (ident.pagetype) {
	case 'filter':
		oMap.subregion = ident.subregion;
		oMap.area = ident.area;
		oMap.quarter = ident.quarter;
		var sraq = rc('sraq');
		if (sraq !== null) {
			oMap2 = sraq.evalJSON();
			if ((oMap.subregion === oMap2.subregion) && (oMap.area === oMap2.area) && (oMap.quarter === oMap2.quarter)) {
				oMap.subregion = oMap2.subregion;
				oMap.area = oMap2.area;
				oMap.quarter = oMap2.quarter;
				oMap.lat = oMap2.lat;
				oMap.lng = oMap2.lng;
				oMap.zoom = oMap2.zoom;
			}
		}
		cc('sraq', Object.toJSON(oMap));
		gm_init('gmap_map', oMap.lat, oMap.lng, oMap.zoom);
		gm_draw();
		if (ident.automap) {gm_automap();}
		GEvent.addListener(gmap, 'zoomend', function(oldzoom, newzoom) {
			oMap.zoom = newzoom;
			cc('sraq', Object.toJSON(oMap));
		});
		GEvent.addListener(gmap, 'moveend', function() {
			mc = gmap.getCenter();
			oMap.lat = mc.lat();
			oMap.lng = mc.lng();
			cc('sraq', Object.toJSON(oMap));
		});
		break;
	case 'listing':
		if (ident.gmap) {
			gm_init('gmap_map', oMap.lat, oMap.lng, oMap.zoom);
			gm_draw();
		}
		break;
	}
}
function gm_unload() {
	GUnload();
}
function gm_init(id, lat, lng, zoom) {
	//log('in gm_init');

	var mapTypes = G_DEFAULT_MAP_TYPES;
	for(var i = 0; i < mapTypes.length; i++){
		//mapTypes[i].getMaximumResolution = function(latlng){ return 19;};
		mapTypes[i].getMinimumResolution = function(latlng){ return 4;};
	}
	gmap = new google.maps.Map2($(id), {mapTypes: mapTypes});
	gmap.enableDoubleClickZoom();
	gmap.setCenter(new GLatLng(lat, lng), zoom);
	gmap.addControl(new GLargeMapControl());
	gmap.addControl(new GMapTypeControl());
	gmarkers = [];
}
function gm_geticon(n) {
	//log('get icon (n)... '+n);
	if (gm_icons[n]) {
		var r = gm_icons[n];
		if (!r.i) {
			//log('building icon');
			var i = new GIcon();
			i.name = n;
			i.image = 'http://includes.iknow-uk.com/img/gmap/' + n + '_icon.png';
			//log('Image... ' + i.image);
			i.iconSize = new GSize(r.is[0], r.is[1]);
			i.iconAnchor = new GPoint(r.ia[0], r.ia[1]);
			if (r.s) {
				i.shadow = 'http://includes.iknow-uk.com/img/gmap/' + n + '_shadow.png';
				i.shadowSize = new GSize(r.ss[0], r.ss[1]);
			}
			i.infoWindowAnchor = new GPoint(r.wa[0], r.wa[1]);
			gm_icons[n]['i'] = i;
		}
		return gm_icons[n]['i'];
	}
	else {
		var i = new GIcon();
		return i;
	}
}
function gm_listing_image(n, starred, quarter, product) {
	//log('get icon (n)... '+n);
	if (gm_icons['image_'+n]) {return 'image_'+n;}
	if (starred) {product='0';}
	var q=String(quarter);
	var p='bronze';
	switch(product){
	case '0':p='star';break;
	case '1P+':p='plus';break;
	case '1P':p='platinum';break;
	case '2G':p='gold';break;
	case '3S':p='silver';break;
	}
	return 'listing_'+q.toLowerCase()+'_'+p;
}
function gm_drawitem(item) {
	//log('in gm_drawitem');
	if (item.telephone && item.telephone.nongeo__html) {
		var phone = "<div class=\"telephone\">"+item.telephone.nongeo__html+"</div>";
		var lastclass = 'phone_url';
	}
	else {
		var phone = '';
		var lastclass = 'only_url';
	}
	var summary = item.summary__html;
	var product = item.product;

	if (item.price && item.price.filter) {
		var price = "<div class=\"prices\"><div class=\"pricenumbers\">"+item.price.filter.numbers__html+"</div><div class=\"pricetext\">"+item.price.text__html+"</div></div>";
	}
	else {
		var price = '';
	}
	var photo = item.thumb;
	var markers = (item.gmap && item.gmap.markers) ? item.gmap.markers : [];
	var listing = parseInt(ident.listing, 10);
	var mine = (item.id === listing);
	var starred = (mine && ('listing' === ident.pagetype) && (1 < shorts.length));
	//var starred = (mine && item.features.status.recommendations);
	var attrs = mine ? "" : " rel=\""+rel+":"+item.id+"\" onclick=\"return iku_listingclickposter(this);\"";
	var rel = ('listing' === ident.pagetype) ? 'BUDDY' : 'FILTER';
	for (var i = 0, l = markers.length; i < l; ++i) {
		var marker = markers[i];
		var point = new GLatLng(parseFloat(marker.lat),parseFloat(marker.lng));
		var icon = gm_geticon(gm_listing_image(marker.image, starred, item.quarter, product));
		//log(icon);
		var gmarker = new GMarker(point, {title: item.title, icon: icon});
		gmarkers.push(gmarker);
		var html = "<div class=\"gmap_infowindow\"><img class=\"maptipimg\" src=\""+photo+"\" alt=\"\" /><div class=\"maptip2\"><div class=\"info_name\">"+item.name__html+"</div><div class=\"info_summary\">"+summary+"</div>"+price+"<div class=\""+lastclass+"\">"+phone+"<div class=\"url\"><a"+attrs+" href=\""+item.url.home+"\">More details &gt;&gt; </a></div></div></div></div>";
		GEvent.addListener(gmarker, 'click', function() {gmarker.openInfoWindowHtml(html);});
		gmap.addOverlay(gmarker);
	}
}
function gm_draw() {
	for (var i = 0, l = shorts.length; i < l; ++i) {
		var o = shorts[i];
		gm_drawitem(o);
		drawn[drawn.length] = o.id;
	}
	shorts = [];
}
function gm_automap() {
	var bounds = new GLatLngBounds();
	for (var i = 0; i < gmarkers.length; i++) {
		bounds.extend(gmarkers[i].getPoint());
	}
	gmap.setZoom(gmap.getBoundsZoomLevel(bounds));
	gmap.setCenter(bounds.getCenter());
}




//___ Availability (Search) ___________________________________________________
function as_drawold() {
	if (shorts.length) {
		var odd = (drawn.length % 2 === 0);
		for (var i = 0, l = shorts.length; i < l; ++i) {
			var classes = [];
			if (odd) {classes.push('bg_q2');}
			var short = shorts[i];
			var book = (short.availability.display_providers.length > 0);
			$('results').insert({'bottom':"\t<li class=\""+classes.join(' ')+"\">\n\t\t\t\t\t\t\t\t<h3><a href=\""+short.url.home+"\" class=\"results_text_a accomlink untracked\" rel=\""+(book ? "ASBOOK" : "ASCAL")+":"+short.id+"\" title=\""+short.title+"\"><img src=\""+short.thumb+"\" alt=\""+short.title+"\" />"+short.titlesafe__html+"</a></h3>\n\t\t\t\t\t\t\t\t<p>"+short.summary__html+"</p>\n"+"\t\t\t\t\t\t\t\t<div class=\"sh_bookopt\"><span class=\"sh_opt\">Booking Options: </span><span class=\"sh_phone"+(short.has.phone ? " sh_phone_on" : "")+"\">Phone direct</span><span class=\"sh_form"+(short.has.form ? " sh_form_on" : "")+"\">Email direct</span><span class=\"sh_link"+(short.has.link ? " sh_link_on" : "")+"\">Visit website</span>"+(book?"<span class=\"sh_book sh_book_on\">Book online from <span>\u00A3"+short.availability.display_providers[0].price_gbp+"</span></span>":"<span class=\"sh_book\">Enquire direct for prices</span>")+"</div>\n\t\t\t\t\t\t\t</li>"});
			odd = !odd;
			drawn[drawn.length] = short.id;
		}
		shorts = [];
	}
	as_stats('Drawshorts');
	ct_observe();
}
function as_draw() {
	var added = {};
	while(shorts.length) {
		var short = shorts.shift();
		var id = 'f_' + short.id;
		if (!$(id)) {continue;}
		var e = $(id);
		added[id] = true;
		var book = (short.availability.display_providers.length > 0);
		e.update("<h3><a href=\""+short.url.home+"\" class=\"results_text_a accomlink untracked\" rel=\""+(book ? "ASBOOK" : "ASCAL")+":"+short.id+"\" title=\""+short.title+"\"><img src=\""+short.thumb+"\" alt=\""+short.title+"\" />"+short.titlesafe__html+"</a></h3><p>"+short.summary__html+"</p><div class=\"sh_bookopt\"><span class=\"sh_opt\">Booking Options: </span><span class=\"sh_phone"+(short.has.phone ? " sh_phone_on" : "")+"\">Phone direct</span><span class=\"sh_form"+(short.has.form ? " sh_form_on" : "")+"\">Email direct</span><span class=\"sh_link"+(short.has.link ? " sh_link_on" : "")+"\">Visit website</span>"+(book?"<span class=\"sh_book sh_book_on\">Book online from <span>\u00A3"+short.availability.display_providers[0].price_gbp+"</span></span>":"<span class=\"sh_book\">Enquire direct for prices</span>")+"</div>");
		e.addClassName('drawn');
		drawn.push(short.id);
	}
	var k = Object.keys(added);
	if (k.length) {
		var edrawn = $$('#results li.drawn');
		var odd = true;
		for (var i = 0, l = edrawn.length; i < l; ++i) {
			e = edrawn[i];
			if (odd) {
				e.addClassName('bg_q2');
			}
			else {
				e.removeClassName('bg_q2');
			}
			if (added[e.id]) {e.show();}
			odd = !odd;
		}
		ct_observe();
	}
	as_stats('Drawshorts');
}
function as_status(message) {
	if (($('as_status') !== undefined) && ($('as_status') !== null)) {
		$('as_status').update(message);
		log('Set status message... ' + message);
	}
	else {
		log('Failed setting status message... ' + message);
	}
}
function as_stats(prefix) {
	var stats = immediate + '/' + drawn.length + '/' + shorts.length + '/' + processing.length + '/' + npolls;
	$('pollstatus') && $('pollstatus').update(stats);
	log(prefix + ': ' + stats);
}
function as_begin() {
	if (hpoller !== null) {log('Begin: Oops, poller was not null'); return;}
	if (!ident.jsfilter) {log('Begin: Not a JS filter page'); return;}
	log('Begin: initial... ' + initial);
	$$('#refine').each(function(i) {i.remove(); log('Removed Refine Box');});
	//var available = drawn.length + shorts.length;
	var startpoller = immediate ? processing.length : (processing.length && (shorts.length < initial));
	if (startpoller) {
		log('Begin: Started Poller');
		$('as_form').disable();
		$('as_status').update('<h3>Searching for availability\u2026</h3><p>Please wait while we check availability.</p>');
		hpoller = new PeriodicalExecuter(as_poll, 1);
	}
	else {
		log('Begin: Not Going To Poll');
		if (!immediate) {as_draw();}
		as_end();
	}
}
function as_end() {
	if (('filter' === ident.pagetype) && drawn.length && processing.length) {
		as_status('<h3>Search results</h3><p>'+drawn.length+' results have been found.</p><p class="as_checkall"><a href="#" onclick="as_begin(); return false;">Click here for more</a></p>');
		$('results').insert({after: '<div id="refine" class="' + ident.view + ' as_refine bg_g4"><h3>Search Results</h3><p>'+drawn.length+' results have been found so far, more may be available.</p><p class="as_checkall"><a href="#" onclick="as_begin(); return false;">Click here for more</a></p><div class="cb"></div></div>'});
	}
	else if (drawn.length || (('listing' === ident.pagetype) && ident.availability && availability.has_availability)) {
		as_status('<h3>Search results</h3><p>Your search is now complete. Results are shown below.</p>');
	}
	else if (('listing' === ident.pagetype) && !ident.availability) {
		as_status('<h3>Availability search</h3><p>Enter your requirements and click Check Availability to begin your search.</p>');
	}
	else {
		as_status('<h3>Search results</h3><p>No availability could be found. Suggestions are shown below.</p>');
		var refinehtml = '';
		if ((undefined !== refine) && ('filter' === ident.pagetype)) {
			var rc = refine.length;
			for (var i = 0; i < rc; i++) {
				if (i > 0) {refinehtml += '<br />';}
				var r = refine[i];
				refinehtml += '<h4' + ((i === 0) ? '' : ' class="as_refine_2"') + '>' + ((i === 0) ? 'You could' : 'Or') + ': ' + r.text + ((i === 0) ? ' (Recommended)' : '') + '</h4>';
				var lc = refine[i].links.length;
				refinehtml += '<ul>';
				for (var j = 0; j < lc; j++) {
					var l = refine[i].links[j];
					refinehtml += '<li><a href="' + l.url + '">' + l.text + '</a></li>';
				}
				refinehtml += '</ul>';
			}
			$('results').insert({after: '<div id="refine" class="' + ident.view + ' as_refine bg_g4"><h3>Sorry no results available</h3>' + refinehtml + '<div class="cb"></div></div>'});
		}
	}
	immediate = true;
	as_stats('End');
}
function as_poll() {
	if (hpoller === null) {log('Poll: Oops, poller was null'); return;}
	if (inpoll) {log('Poll: Waiting for previous response'); return;}
	log('Poll: Entered');
	inpoll = true;
	//filter_message();
	as_stats('Poll');
	log('Poll: Polling');
	npolls++;
	//'ident': Object.toJSON(ident),
	new Ajax.Request(
		'/cgi/uk6/handler.availability.php',
		{
			parameters: {
				'formname': 'availability_poller',
				'data': Object.toJSON(as_data),
				'more': immediate,
				'hash': ident.hash,
				'stop': npolls >= (immediate ? nmaxall : nmaxfirst),
				'detailed': (ident.pagetype === 'listing'),
				'quantity': (immediate ? processing.length : (initial - shorts.length)),
				'processing': processing.toJSON()
			},
			onSuccess: function(transport) {
				inpoll = false;
				if (hpoller === null) {log('Response: Discarded as hpoller was null'); return;}

				var res = transport.responseJSON;
				log('Response: Stop... ' + res.stop);
				processing = res.processing;
				if (res.shorts.length) {
					log('Response: Adding '+res.shorts.length+' Short' + (res.shorts.length === 1 ? '' : 's'));
					for (var i = 0; i < res.shorts.length; ++i) {
						var o = res.shorts[i];
						shorts[shorts.length] = o;
					}
				}
				if (immediate || res.stop) {
					log('Response: Drawing Shorts');
					as_draw();
				}
				as_stats('Response');
				if (res.stop) {
					log('Response: Stopping Polling');
					hpoller.stop();
					hpoller = null;
					$('as_form').enable();
					if (immediate) {processing = [];}
					as_end(res.refine);
				}
			}
		}
	);
}
function as_heights() {
	//log('Entered as_heights');
	var oldrooms = as_data.numrooms;
	var newrooms = parseInt($F('as_rooms_value'), 10);
	as_data.numrooms = newrooms;
	var occupancyelements = $$('#as_form_c3rx > div');
	var oel = occupancyelements.length;
	if ((newrooms !== oldrooms) && oel) {
		if (newrooms === 1) {$('as_form_c3rp').addClassName('as_submit_oneroom');}
		else {$('as_form_c3rp').removeClassName('as_submit_oneroom');}
		for (i = 0; i < oel; i++) {
			if (i < newrooms) {occupancyelements[i].removeClassName('hide');}
			else {occupancyelements[i].addClassName('hide');}
		}
	}
}
function as_change() {
	//log('Entered as_change');
	as_heights();
	if (ident.availability) {
		$$('#book form').each(function(i) {
			i.disable();
			i.setStyle({opacity: 0.25});
			log('Disabled Book Form');
		});
		as_status('<h3>Your requirements have changed</h3><p>Please resubmit the form to see new search results.</p>');
	}
	else {
		as_status('<h3>Availability search</h3><p>Enter your requirements and click Check Availability to begin your search.</p>');
	}
	var yv = parseInt($('as_arrive_year').options[$('as_arrive_year').selectedIndex].value, 10);
	var mv = $('as_arrive_month').selectedIndex;
	var dv = parseInt($('as_arrive_day').options[$('as_arrive_day').selectedIndex].value, 10);
	var nv = parseInt($('as_nights_value').options[$('as_nights_value').selectedIndex].value, 10);

	//### should send this out in page headers, we need time to be UK rather than local.
	var now = new Date();

	var today = new Date(); today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0);
	var arrival = new Date(yv, mv, dv);
	var arrival_valid = ((arrival.getTime() >= today.getTime()) && (arrival.getFullYear() == yv) && (arrival.getMonth() == mv) && (arrival.getDate() == dv));
	$('as_submit').disabled = !arrival_valid;

	if (arrival_valid) {
		var departure = arrival;
		departure.setDate(arrival.getDate() + nv);
		var monthname = ['January','February','March','April','May','June','July','August','September','October','November','December'];
		var dd = departure.getDate();
		var dds = ((parseInt(dd, 10) < 10) ? '0' : '') + dd;
		$('as_depart_value').update(dds + ' ' + monthname[departure.getMonth()] + ' ' + departure.getFullYear());
	}
	else {
		$('as_depart_value').update('<span class="as_dateerror">Invalid Arrival Date!</span>');
	}
}
function as_calendar() {
	//log('Entered as_calendar');
	//log($('as_form_jscal').value);
	var ymd = $('as_form_jscal').value.split('-');
	$('as_arrive_day').selectedIndex = parseInt(ymd[2], 10) - 1;
	$('as_arrive_month').selectedIndex = parseInt(ymd[1], 10) - 1;
	var e = $('as_arrive_year');
	var l = e.length;
	var y = parseInt(ymd[0], 10);
	for (var i=0; i<l; i++){
		var v = parseInt(e[i].value, 10);
		if (v === y) {
			e.selectedIndex = i;
			break;
		}
		
	}
	as_change();
}
function as_close_calendar(x) {
	x.hide();
	var newdate = x.date.print(x.dateFormat);
	if ($('as_form_jscal').value !== newdate) {
		$('as_form_jscal').value = newdate;
		as_calendar();
	}

}
function as_select_calendar() {
	//do precisely nothing
}




//___ Availability (Book) _____________________________________________________
function ab_change() {
	if (availability === undefined) {return;}
	//log('ab_change: begin1');
	var dpl = availability.display_providers.length;
	for (var i = 0; i < dpl; i++) {
		//### for each display provider...
		var s = availability.display_providers[i].id;
		//log('s... ' + s);

		var rdk = Object.keys(availability.providers[s].room_definitions);
		var rdkl = rdk.length;
		for (var j = 0; j < rdkl; j++) {
			availability.providers[s].room_definitions[rdk[j]].c = 0;
		}
		var tp = 0;
		var rooms = $$('#book_form_'+s+' ul.book_rooms li');
		//log('rooms... ' + rooms.length);
		var roomslen = rooms.length;
		for (var j = 0; j < roomslen; j++) {
			var room_li = rooms[j];
			var inputs = $$('#'+room_li.id + ' input');
			for (var k = 0; k < inputs.length; k++) {
				var input = inputs[k];
				if ((input.name === 'rooms['+j+']') && input.checked) {
					var sv = input.value;
					availability.providers[s].room_definitions[sv].c++;
					var rd = availability.providers[s].room_definitions[sv];
					var p = (rd.price_gbp === 0) ? 0 : Math.round(rd.price_gbp * 100) / 100;
					tp += p;
					break;
				}
			}
		}
		//log(availability);
		//log('tp... ' + tp);
		$('book_'+s+'_tp').update(tp.toFixed(2));
		$('book_'+s+'_tph').value=tp.toFixed(2);
		var errs = [];
		for (var j = 0; j < rdkl; j++) {
			rd = availability.providers[s].room_definitions[rdk[j]];
			//rd.num_available = 1;
			//log('Room... '+rdk[j]+', Qty Requested... '+rd.c+', Qty Available...'+rd.num_available);
			if ((rd.num_available >= 0) && (rd.c > rd.num_available)) {
				errs.push("There " + ((rd.num_available === 1) ? "is only 1 room" : "are only " + rd.num_available + " rooms") + " of type '" + rd.name + "' available");
			}
		}
		log(errs);
	}
	//log('ab_change: end');
}




//___ COOKIES _________________________________________________________________
function cc(n, v, d) {
	var  x = '';
	if (d) {
		var date = new Date();
		date.setDate(date.getDate() + d);
		x = '; expires=' + date.toGMTString();
	}
	var c = n + '=' + v + x + '; path=/';
	document.cookie = c;
	//log('created cookie... ' + c);
}
function rc(n) {
	var e = n + '=';
	var a = document.cookie.split(';');
	for (var i = 0; i < a.length; i++) {
		var c = a[i];
		while (c.charAt(0) === ' ') {c = c.substring(1, c.length);}
		if (c.indexOf(e) === 0) {return c.substring(e.length, c.length);}
	}
	return null;
}
function dc(name) {cc(name, '', -1);}




//___ OLD BACK BUTTON BEHAVIOUR _______________________________________________
// still used in tourist, info pages
function bb(){
	if (bm) {history.go(-1);}
	return (!bm);
}




//___ Enquiry Form ____________________________________________________________
function ef_setcc(id) {
	if ($(id)) {
		var chk = $(id).checked;
		var val = chk ? "yep" : "nope";
		cc('cc', val, 366);
	}
}
function ef_getcc(id) {
	if ($(id)) {
		var val = rc('cc');
		var chk = (val != "nope");
		$(id).checked = chk;
	}
}




//___ PAUL'S AWESOME 'MAILJAX' AJAX EMAIL VALIDATOR ___________________________________________________________________
var oDomainHash = new Hash();
var sEmailRegex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
var sEmailSlowDownRegex = /\.(co|ne)$/;
var oEmailRegex = new RegExp(sEmailRegex);
var oEmailSlowDownRegex = new RegExp(sEmailSlowDownRegex);
//log(typeof(sEmailSlowDownRegex));
function mailjax(id) {
	var bValid = false;

	if (id.value.length === 0) {
		//log('email ['+id.id+'] empty');
		$(id).addClassName('empty');
		$(id).removeClassName('invalid');
		$(id).removeClassName('valid');
	}
	else if (id.value.match(oEmailRegex)) {
		//log('email ['+id.id+'] valid regex');
		$(id).removeClassName('empty');
		var aEmailParts = id.value.split('@');
		var sDomain = aEmailParts[1];
		var bHash = oDomainHash.get(sDomain);
		if (bHash === undefined) {
			//log('domain ['+sDomain+'] untested mx');
			new Ajax.Request(
				'/cgi/uk6/handler.mx_lookup.php',
				{
					parameters: {'domain': sDomain},
					onSuccess: function() {
						//log('domain ['+sDomain+'] test result valid mx');
						oDomainHash.set(sDomain, true);
						mailjax(id);
					},
					onFailure: function() {
						//log('domain ['+sDomain+'] test result invalid mx');
						oDomainHash.set(sDomain, false);
						mailjax(id);
					}
				}
			);
		}
		else if (bHash === true) {
			//log('email ['+id.id+'] valid mx');
			$(id).removeClassName('invalid');
			$(id).addClassName('valid');
			bValid = true;
		}
		else {
			//log('email ['+id.id+'] invalid mx');
			$(id).addClassName('invalid');
			$(id).removeClassName('valid');
		}
	}
	else {
		//log('email ['+id.id+'] invalid regex');
		$(id).removeClassName('empty');
		$(id).addClassName('invalid');
		$(id).removeClassName('valid');
	}

	return bValid;
}




//___ LOAD, UNLOAD ____________________________________________________________________________________________________
function iku_load() {
	dc('perf'); // putting post data in the cookie was a stupid idea paul! 
	//log('Entered iku_load');
	//if (ident.availability) {as_stats('Load');}

	if (ident.gmap) {gm_load();}
	switch (ident.pagetype) {
	case 'filter':
		immediate = ident.more;
		if (ident.setfilter) {
			cc('filter', ident.url);
			cc('filterq', ident.quarter);
			cc('filtera', ident.availability);
		}
		break;
	case 'listing':
		if ($('launchsurvey')) {
			$('launchsurvey').writeAttribute({'target': '_blank'});
		}
		$$('#listing_contacts_click a', '#listing_booking a').each(function(i) {
			i.addClassName('accomlink');
			i.addClassName('untracked');
			i.writeAttribute({'rel': 'EXTERNAL:' + ident.listing});
			i.writeAttribute({'target': null});
			i.writeAttribute({'onclick': null});
		});
		$$('div.affbanner a').each(function(i) {
			i.addClassName('accomlink');
			i.addClassName('untracked');
			i.writeAttribute({'rel': 'BANNER:' + ident.listing});
			i.writeAttribute({'target': null});
			i.writeAttribute({'onclick': null});
		});
		if (ident.form) {
			if ($('bookout')) {
				$('bookout').writeAttribute({'target': '_blank'});
			}
			$$('.inputemail').each(function(i) {
				new Form.Element.Observer(i, 0.1, function(id) {mailjax(i);});
			});
			$$('.inputcc').each(function(i) {
				new Form.Element.Observer(i, 0.1, function(id) {ef_setcc(i);});
			});
			ef_getcc('c10');
		}
		$$('#book select', '#book input').each(function(i) {i.observe('change', ab_change);});
		break;
	}
	$$('a.ext').each(function(i) {i.writeAttribute({'target': '_blank'});});
	$$('a.ana').each(function(i) {i.observe('click', ct_click);});
	$$('#as_form select').each(function(i) {i.observe('change', as_change);});
	if (ident.availform) {
		var as_arrive_year_options = $('as_arrive_year').options;
		Calendar.prototype.minYear = parseInt(as_arrive_year_options[0].value, 10);
		Calendar.prototype.maxYear = parseInt(as_arrive_year_options[as_arrive_year_options.length - 1].value, 10);
		Calendar.setup({
			dateField: 'as_form_jscal',
			triggerElement: 'as_arrive_calendar',
			selectHandler: as_select_calendar,
			closeHandler: as_close_calendar
		});
	}
	if (ident.jsfilter && (ident.pagetype === 'filter') && (ident.view === 'text')) {
		as_begin();
	}
	else {
		if ((ident.pagetype === 'listing') && (ident.feature === 'booking')) {as_end();}
	}
	ct_observe();
}

var bm = (document.referrer.indexOf('iknow') >= 0); // Ye olde back button

if (ident.gmap) {
	var gmap;
	var gmarkers;
}

document.observe('dom:loaded', iku_load);
