//___ COOKIES _________________________________________________________________

function cc(n, v, d) {
	var x = '';
	if (d) {
		var date = new Date();
		date.setDate(date.getDate() + d);
		x = '; expires=' + date.toGMTString();
	}
	document.cookie = n+'='+v+x+'; path=/';
}

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 _______________________________________________
// may still be used in tourist, info pages
function bb(){
	if (bm) {history.go(-1);}
	return (!bm);
}




//___ NEW BACK BUTTON BEHAVIOUR _______________________________________________________________________________________
//### Oops, why on earth am I doing this after page load??? Surely it's better done server side. PHM 2009-12-15
function iku_back() {
	if (!ident.quarter) {return;}
	var fc = rc('filter');
	if (fc == null) {return;}
	var fqc = rc('filterq');
	if (fqc == null) {return;}
	var bl = $('backlink');
	if (bl == null) {return;}
	if (ident.quarter == fqc) {
		bl.setAttribute('href', fc);
	}
}







//___ GOOGLE MAPS _____________________________________________________________________________________________________
function iku_initmap(id, lat, lng, zoom) {
	//console.log('in iku_initmap');

	var success = false;
	if (GBrowserIsCompatible()) {
		gmap = new GMap2($(id));
		gmap.enableDoubleClickZoom();
		gmap.setCenter(new GLatLng(lat, lng), zoom);
		gmap.addControl(new GLargeMapControl());
		gmap.addControl(new GMapTypeControl());
		gmarkers = new Array();

		Icon0 = new GIcon();
		Icon0.shadow = '/includes/img/quarter/icon-58-shadow.png';
		Icon0.iconSize = new GSize(32, 76);
		Icon0.shadowSize = new GSize(59, 58);
		Icon0.iconAnchor = new GPoint(16, 76);
		Icon0.infoWindowAnchor = new GPoint(24, 6); 

		Icon1PX = new GIcon();
		Icon1PX.shadow = '/includes/img/quarter/icon-58-shadow.png';
		Icon1PX.iconSize = new GSize(32, 58);
		Icon1PX.shadowSize = new GSize(59, 58);
		Icon1PX.iconAnchor = new GPoint(16, 58);
		Icon1PX.infoWindowAnchor = new GPoint(24, 6); 

		Icon1P = new GIcon();
		Icon1P.shadow = '/includes/img/quarter/icon-51-shadow.png';
		Icon1P.iconSize = new GSize(28, 51);
		Icon1P.shadowSize = new GSize(50, 51);
		Icon1P.iconAnchor = new GPoint(14, 51);
		Icon1P.infoWindowAnchor = new GPoint(18, 5); 

		Icon2G = new GIcon();
		Icon2G.shadow = '/includes/img/quarter/icon-42-shadow.png';
		Icon2G.iconSize = new GSize(23, 42);
		Icon2G.shadowSize = new GSize(42, 42);
		Icon2G.iconAnchor = new GPoint(11, 42);
		Icon2G.infoWindowAnchor = new GPoint(14, 4);

		Icon3S = new GIcon();
		Icon3S.shadow = '/includes/img/quarter/icon-35-shadow.png';
		Icon3S.iconSize = new GSize(19, 35);
		Icon3S.shadowSize = new GSize(40, 35);
		Icon3S.iconAnchor = new GPoint(9, 35);
		Icon3S.infoWindowAnchor = new GPoint(11, 4);

		Icon4B = new GIcon();
		Icon4B.shadow = '/includes/img/quarter/icon-35-shadow.png';
		Icon4B.iconSize = new GSize(19, 35);
		Icon4B.shadowSize = new GSize(40, 35);
		Icon4B.iconAnchor = new GPoint(9, 35);
		Icon4B.infoWindowAnchor = new GPoint(11, 4);

		success = true;
	}
	return success;
}

function iku_selecticon(starred, quarter, product) {
	//console.log('in iku_selecticon');



	//var randomnumber=Math.floor(Math.random()*5)
	//var xquarters = new Array('a','f','e','s','t');
	//var quarter = xquarters[randomnumber];


	var folder = '/includes/img/quarter/' + quarter.toLowerCase();
	if (starred) {
		product = '0';
	}
	switch (product) {
	case '0':
		var displayIcon = new GIcon(Icon0);
		displayIcon.image = folder + '/icon-58-star.png';
		break;
	case '1P+':
		var displayIcon = new GIcon(Icon1PX);
		displayIcon.image = folder + '/icon-58.png';
		break;
	case '1P':
		var displayIcon = new GIcon(Icon1P);
		displayIcon.image = folder + '/icon-51.png';
		break;
	case '2G':
		var displayIcon = new GIcon(Icon2G);
		displayIcon.image = folder + '/icon-42.png';
		break;
	case '3S':
		var displayIcon = new GIcon(Icon3S);
		displayIcon.image = folder + '/icon-35.png';
		break;
	default:
		var displayIcon = new GIcon(Icon4B);
		displayIcon.image = folder + '/icon-35-grey.png';
		break;
	}
	return displayIcon;
}

function iku_addmarker(item) {
	//console.log('in iku_addmarker');

	var id = item['id'];
	//console.log(id);
	var quarter = item['quarter'];
	var name = item['name__html'];
	var alt = item['title'];
	var title = item['title__html'];
	var url = item['url']['home'];
	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']['pricenumbers__html']+"</div><div class=\"pricetext\">"+item['price']['filter']['pricetext__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);
	var mine = (id == listing);
	var starred = (mine && item['features']['status']['recommendations']);
	var attrs = mine ? "" : " rel=\""+rel+":"+id+"\" onclick=\"return iku_listingclickposter(this);\"";
	var rel = (ident.pagetype == 'listing') ? 'BUDDY' : 'FILTER';
	var icon = iku_selecticon(starred, quarter, product);

	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 gmarker = new GMarker(point, {title: alt, icon: icon});
		gmarkers.push(gmarker);
		var html = "<div class=\"gmap_infowindow\"><img class=\"maptipimg\" src=\""+photo+"\" alt=\"\" /><div class=\"maptip2\"><div class=\"info_name\">"+name+"</div><div class=\"info_summary\">"+summary+"</div>"+price+"<div class=\""+lastclass+"\">"+phone+"<div class=\"url\"><a"+attrs+" href=\""+url+"\">More details &gt;&gt; </a></div></div></div></div>";
		GEvent.addListener(gmarker, 'click', function() {gmarker.openInfoWindowHtml(html);});
		gmap.addOverlay(gmarker);
	}
}

function iku_loadmarkers() {
	//console.log('in iku_loadmarkers');

	/*
	var loadmarkers = !ident.shorts; 

	if (loadmarkers) {
		var params = new Object();
		if (ident.listing) {
			params.listing = ident.listing;
		}
		if (ident.listing_ids) {
			params.listing_ids = ident.listing_ids;
		}
 		new Ajax.Request(
 			'/cgi/uk6/handler.googlemap.php',
 			{
 				method: 'POST',
 				parameters: {
 					data: Object.toJSON(params)
 				},
 				onSuccess: function(transport) {
					shorts = transport.responseJSON;
				}
			}
		);
	}
	*/

	for (var i = 0, l = shorts.listings.length; i < l; ++i) {
		//console.log('Shorts Listings... ' + i);
		iku_addmarker(shorts.listings[i]);
	}
}

function iku_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());
}










//cc('test','this is my test cookie');
//alert(rc('test'));

function setccme(id) {
	if ($(id)) {
		var chk = $(id).checked;
		var val = chk ? "yep" : "nope";
		cc('cc', val, 366);
	}
}
function getccme(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);

//console.log(typeof(sEmailSlowDownRegex));

function mailjax(id) {
	var bValid = false;

	if (id.value.length == 0) {
		//console.log('email ['+id.id+'] empty');
		$(id).addClassName('empty');
		$(id).removeClassName('invalid');
		$(id).removeClassName('valid');
	}
	else if (id.value.match(oEmailRegex)) {
		//console.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) {
			//console.log('domain ['+sDomain+'] untested mx');
			new Ajax.Request(
				'/cgi/uk6/handler.mx_lookup.php',
				{
					parameters: {'domain': sDomain},
					onSuccess: function() {
						//console.log('domain ['+sDomain+'] test result valid mx');
						oDomainHash.set(sDomain, true);
						mailjax(id);
					},
					onFailure: function() {
						//console.log('domain ['+sDomain+'] test result invalid mx');
						oDomainHash.set(sDomain, false);
						mailjax(id);
					}
				}
			);
		}
		else if (bHash == true) {
			//console.log('email ['+id.id+'] valid mx');
			$(id).removeClassName('invalid');
			$(id).addClassName('valid');
			bValid = true;
		}
		else {
			//console.log('email ['+id.id+'] invalid mx');
			$(id).addClassName('invalid');
			$(id).removeClassName('valid');
		}
	}
	else {
		//console.log('email ['+id.id+'] invalid regex');
		$(id).removeClassName('empty');
		$(id).addClassName('invalid');
		$(id).removeClassName('valid');
	}

	return bValid;
}















//___ LOAD, UNLOAD ____________________________________________________________________________________________________


function iku_unload() {
	if (ident.gmap) {
		GUnload();
	}
}

function iku_load() {
	switch (ident.pagetype) {
		case 'home': break;    
		case 'filter':
			if (ident.list && ident.quarter) {
				cc('filter', ident.list);
				cc('filterq', ident.quarter);
			}
			oMap = new Object;
			oMap.subregion = ident.subregion;
			oMap.area = ident.area;
			oMap.quarter = ident.quarter;
			oMap.lat = ident.lat;
			oMap.lng = ident.lng;
			oMap.zoom = ident.zoom;
			if (ident.gmap) {
				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));
				iku_initmap('gmap_map', oMap.lat, oMap.lng, oMap.zoom);
				iku_loadmarkers();
				if (ident.automap) {iku_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 'search': break;
		case 'tourist': break;
		case 'information': break;
		case 'listing':
			//$$('p.afflink1 a', 'div.bookingbox ul li a', 'p.globelink a').each(function(id) {
			$$('p.afflink1 a', 'div.bookingbox ul li a').each(function(id) {
				//alert($(id).innerHTML);
				$(id).writeAttribute({'target':null});
				$(id).writeAttribute({'onclick':null});
				$(id).addClassName('accomlink');
				$(id).writeAttribute({'rel':'EXTERNAL:'+ident.listing});
			});
			$$('div.affbanner a').each(function(id) {
				//alert($(id).innerHTML);
				$(id).writeAttribute({'target':null});
				$(id).writeAttribute({'onclick':null});
				$(id).addClassName('accomlink');
				$(id).writeAttribute({'rel':'BANNER:'+ident.listing});
			});
			oMap = new Object;
			oMap.lat = ident.lat;
			oMap.lng = ident.lng;
			oMap.zoom = ident.zoom;
			if (ident.feature == 'property') {
				iku_back();
			}
			if (ident.form) {
				if ($('bookout')) {
					$('bookout').writeAttribute({'target':'_blank'});
				}
				$$('.inputemail').each(function(id) {
					//new Form.Element.Observer(id, 0.1, mailjax);
					new Form.Element.Observer(id, 0.1, function(id) {mailjax(id);});
				});
				$$('.inputcc').each(function(id) {
					//alert('id...' +id);
					//new Form.Element.Observer(id, 0.1, setccme);
					new Form.Element.Observer(id, 0.1, function(id) {setccme(id);});
				});
				getccme('c10');
			}

			if (ident.gmap) {
				iku_initmap('gmap_map', oMap.lat, oMap.lng, oMap.zoom);
				iku_loadmarkers();

			}
			break;
		default:
			alert('oops! unknown ident.pagetype... '+ident.pagetype);
	}


	$$('a.ext').each(function(id) {
		$(id).writeAttribute({'target':'_blank'});
	});

	$$('a.ana').each(function(i) {
		Event.observe(i, 'click', iku_anaclicker);
		Event.observe(i, 'keypress', iku_anaclicker);
	});



	var params = new Object();
	var key;
	for (key in ident) {
		params[key] = ident[key];
	}
	//params['reason'] = 'view';
	//new Ajax.Request('/cgi/uk6/handler.performance.php', {method: 'POST', parameters: params});


	$$('a.accomlink').each(function(i) {
		//alert(i.rel);
		Event.observe(i, 'click', iku_listingclicker);
		Event.observe(i, 'keypress', iku_listingclicker);
	});
}




function iku_anaclicker() {
	return iku_anaclickposter(this);
}

function iku_anaclickposter(element) {
	//alert('zero');
	if (undefined === window.pageTracker) {return;}
	//alert('one');
	var href = element.href;
	var rel = element.rel;
	var relparts = rel.split(' ');
	var regex = /^(ANALYTICS):(\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 (undefined !== window.pageTracker) {
		pageTracker._trackEvent(feature, id, element.href);
	}
	if (undefined !== window._gaq) {
		_gaq.push(['r._trackEvent', feature, id, element.href]);
		_gaq.push(['a._trackEvent', feature, id, element.href]);
	}
	//alert('two');
}




function iku_listingclicker() {
	return iku_listingclickposter(this);
}

function iku_listingclickposter(element) {
	var href = element.href;
	//alert('href... '+href);
	var rel = element.rel;
	//alert('Rel... ' + rel); //#####################################################################################
	var relparts = rel.split(' ');
	var regex = /^(FILTER|PLUS|FEATURED|BUDDY|ALTERNATE|EXTERNAL|BANNER):(\d)+$/;
	var matches = relparts.grep(regex);
	if (!matches.length) {return;}
	var match = matches[0];
	var parts = match.split(':');
	var feature = parts[0];
	//alert('feature... '+feature);
	var id = parts[1];
	var params = new Object();
	var key;
	for (key in ident) {
		params[key] = ident[key];
	}
	params['reason'] = 'click';
	params['clickfeature'] = feature;
	params['clickid'] = id;

	if ((ident.feature == 'enquiry') && (ident.list)) {
		//alert('setting last filter :-)');
		cc('filter', ident.list);
	}

	cc('perf', Object.toJSON(params), 366);

	new Ajax.Request('/cgi/uk6/handler.performance.php', {method: 'POST', asynchronous: false, parameters: params});

	if ((feature == 'EXTERNAL') || (feature == 'BANNER')) {
		$(element).writeAttribute({'target': '_blank'});
		//window.console && console.log('writing ext link target attribute');
	}
	return true;
}



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

if (ident.gmap) {
	var gmap;
	var gmarkers;
}
//alert('readying onload');

document.observe("dom:loaded", iku_load);
//Event.observe(window, 'load', iku_load);
Event.observe(window, 'unload', iku_unload);
