// The Australian Bed & Breakfast Book Modules Javascript Code

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_validateForm() { //v4.0 Modified by Peter
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
	if (val) { nm=val.name; if ((val=val.value)!="") {
	  if (test.indexOf('isEmail')!=-1) { p=val.search(/^[^@]+@[^@]+.[a-z]{2,}$/i);
		if (p<0 || p==(val.length-1) || val.indexOf(' ')!=-1) errors+='- '+nm+' must contain an e-mail address.\n';
	  } else if (test!='R') { num = parseFloat(val);
		if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
		if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
		  min=test.substring(8,p); max=test.substring(p+1);
		  if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
	} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');
}	var timeoutID = null;
function gallery_loadLytebox(id) {
	if (typeof myLytebox != 'undefined') {
		myLytebox.start(document.getElementById(id), true);
	} else {
		if (timeoutID) { clearTimeout(timeoutID); }
		timeoutID = setTimeout('gallery_loadLytebox("'+id+'")', 100);
	}
}
function gallery_loadFloatbox(id) {
	if (typeof fb != 'undefined') {
		fb.start(document.getElementById(id));
	} else {
		if (timeoutID) { clearTimeout(timeoutID); }
		timeoutID = setTimeout('gallery_loadFloatbox("'+id+'")', 100);
	}
}
function gallery_postComment() {
	document.getElementById('photo_comments_table').style.display = 'none';
	document.getElementById('photo_comments').style.display = 'block';
}function showStatus(){
	try {
		document.getElementById("status").style.top = (window.pageYOffset + (window.innerHeight / 2) - 135) + "px";
	} catch (e) {
		document.getElementById("status").style.top = (document.body.clientHeight / 2 - document.getElementById("status").style.height.slice(0,-2) / 2);
	}
	document.getElementById("status").style.left = (document.body.clientWidth / 2 - 200) + "px";
	document.getElementById("status").style.display = "block";
	document.getElementById("overlay").style.display = "block";
	document.getElementById("overlay").style.height = document.body.clientHeight + "px";
	document.getElementById("status").style.zIndex = "101";
	document.getElementById("overlay").style.zIndex = "100";
}document.write('<div id="overlay" style="display: none;"></div><div id="status" style="width: 400px; height: 270px; background: #ffffff; padding: 10px; border: 2px solid #eee; position: absolute; top: 0px; left: 0px; display: none;"><table border="0" align="center" height="100%" width="100%"><tr><td align="center" valign="middle"><table border="0" align="center"><tr><td align="right" valign="middle"><img src="https://bbbook.com.au/admin/images/loading.gif" height="32" width="32" /> </td><td style="font-size: 24;" align="center"> Uploading Photos...</td></tr><tr><td colspan="2" align="center" valign="top">This could take 20+ minutes.<br />Do not navigate away from this page or close this window while you see this message.<p><div id="filename">&nbsp;</div><div id="fileprogress" style="font-weight: bold;">&nbsp;</div></p></tr></table></td></tr></table></div>');fc = 0;
function Gallery_uploadFiles() {
	var que_fc		= "";
	var que_file	= "";
	var que_upload	= "";
	var que_status	= "";
	
	// Gather row id details
	//que_fc		= document.getElementById("id_fc_" + fc);
	que_upload	= document.getElementById("id_gallery_que_" + fc);
	//que_status	= document.getElementById("id_status_" + fc);
	que_file	= que_upload.contentWindow.document.getElementById('que_file').value;
	que_caption	= que_upload.contentWindow.document.getElementById('id_caption').value;
	que_caption_old	= que_upload.contentWindow.document.getElementById('id_caption_old').value;
	
	if(que_file != "" || (que_caption != "" && que_caption != que_caption_old)) {
		// Show arrow to show which image is being uploaded
		//que_fc.innerHTML = "<img src='" + que_icon_dir + "row_arrow.png' border='0'>";
		//que_status.innerHTML = '<div id="fileprogress" style="font-weight: bold;">&nbsp;</div>';
		document.getElementById('filename').innerHTML = Gallery_getFilename(que_file);
		que_upload.contentWindow.document.getElementById('id_upload_form').submit();
		bUploaded.start('fileprogress');
	} else {
		Gallery_uploadFileReturn();
	}
}

function Gallery_uploadFileReturn() {
	var fc_total	= parseInt(document.getElementById("fc_total").value);

	// Loop through rest of the queue
	fc++;
	if(fc < fc_total) {
		Gallery_uploadFiles();
	} else {
		fc = 0;
		document.getElementById("fileprogress").style.display = 'none';
		document.getElementById("filename").innerHTML = 'Upload Complete';
		var thisPage = window.location.href;
		if(thisPage.indexOf('?') > 0) thisPage = thisPage.substring(0, thisPage.indexOf('?'));
		window.location.href = window.location.href;
	}
}

function Gallery_getFilename(filename) {
	var x			= 0;
	var len			= 0;
	var boolCaption = false;
	var strOrder	= '';
	var intOrder	= 0;
	var filenameOrig= '';

	if(filename != "") {
		// Strip out directories and extension
		filename = filename.substr(filename.lastIndexOf('\\') + 1);
		filenameOrig = filename;

		if(filename.lastIndexOf('.') > 0) filename = filename.substr(0, filename.lastIndexOf('.'));

		// Check to see if the first characters before a space are a number - to be used for the display order
		if(filename.indexOf(' ') > 0) strOrder = filename.substr(0, filename.indexOf(' '));
		else strOrder = filename;

		// Strip out first zero if exsits
		if(strOrder.substr(0, 1) == '0') strOrder = strOrder.substr(1);
		if(parseInt(strOrder) > 0) {
			intOrder = parseInt(strOrder);
			if(filename.indexOf(' ') > 0) filename = filename.substr(filename.indexOf(' ') + 1);
			else filename = '';
		}
	}
	if(boolCaption == true) {
		// These only exist from within side the iframe
		if(document.getElementById('id_order')) document.getElementById('id_order').value = intOrder;
		if(document.getElementById('id_caption')) document.getElementById('id_caption').value = filename;
	}
	return filenameOrig;
}
if(typeof($)=="undefined"){
	function $(elementId){
		var element = document.getElementById(elementId);
		return element;
	}
}
function moonshine_listingCountry(country) {
	var regionid = $("location_id").value;
	AjaxRequest.get(
		{
		"url" : "http://www.bbbook.com.au/modules/display.php?modulename=Moonshine&action=listingCountry&country="+country+"&regionid="+regionid
			,"onSuccess":function(req){
				$("ms_location_heading").innerHTML = req.responseText;
			}
		}
	);
}
function moonshine_drawFromText(region, zoomBound){
	var polyPoints = moonshine_parseCsv(region.getAttribute("points"));
	var polyBorder = region.getAttribute("border");
	var polyColor = region.getAttribute("color");
	if(zoomBound) {
		poly = new GPolygon(polyPoints,"red", 1);
		map.addOverlay(poly);
		var bounds = poly.getBounds();
		moonshine_fit(bounds, true);
		map.removeOverlay(poly);
		// Load every other region as well to give the impression that this region is highlighted
		moonshine_loadRegions(region.getAttribute("regionid"), true);
		// Load the markers
		moonshine_displayRegionMarkers(region.getAttribute("regionid"));
	} else {
		poly = new GPolygon(polyPoints, polyBorder, 1, 1, polyColor, 0.3, {clickable:true, mouseOutTolerance:1});
		poly.tooltip = '<div><table cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#f9f9f9" valign="middle" style="border: 1px solid #797979; padding: 2px;">' + region.getAttribute("region_name_text") + '</td></tr></table></div>';
		map.addOverlay(poly);
		poly.bgcolor = polyColor;
	}moonshine_setListener(poly, region.getAttribute("region_code"), "region");
}
function moonshine_setListener(obj, typeValue, type) {
	var pageLoad = mapPage;
	if(type == "region") {
		pageLoad = typeValue + ".html";
	} else if(type == "town") {
		pageLoad = typeValue.getAttribute("region_code") + "/results.html?town=" + typeValue.getAttribute("city_name");
	} else if(type == "city") {
		pageLoad = typeValue.getAttribute("region_code") + "/" + typeValue.getAttribute("city_name").toLowerCase() + "_city.html";
	} else if(type == "host") {
		pageLoad = "/" + typeValue.getAttribute("region_code") + "/results/listing_details.html?lid=" + typeValue.getAttribute("lid");
	}
	obj.page_url = pageLoad;
	GEvent.addListener(obj, "click", function() {
		window.location.href=pageLoad;
		
	});
	if(type == "region" || type == "city") {
		GEvent.addListener(obj, "mouseover", function() {
			if(tooltip.style.visibility != "visible") moonshine_showTooltip(obj, true);
			obj.setFillStyle({color:"#FF0000"});
			map.getDragObject().setDraggableCursor("pointer");
		});
		GEvent.addListener(obj, "mouseout", function() {
			tooltip.style.visibility="hidden";
			obj.setFillStyle({color:obj.bgcolor}); 
			map.getDragObject().setDraggableCursor("url(http://maps.google.com/mapfiles/openhand.cur)");
			map.getDragObject().setDraggingCursor("url(http://maps.google.com/mapfiles/closedhand.cur)");
		});
	} else if(type == "town" || type == "host") {
		GEvent.addListener(obj, "mouseover", function() {
			moonshine_showTooltip(obj, false);
		});
		GEvent.addListener(obj, "mouseout", function() {
			tooltip.style.visibility="hidden";
		});
	}
}
function moonshine_fit(bounds,save){
	if(!save){
		map.setZoom(map.getBoundsZoomLevel(bounds));
		map.panTo(bounds.getCenter()); 
	} else {
		map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
		map.savePosition();
	}
}


function moonshine_parseCsv(opt_options){
	var results = [];
	var opts = opt_options||{};
	var iLat = opts.lat||1;
	var iLng = opts.lng||0;
	var lines = opt_options.split("|");
	for (var i=0; i<lines.length; i++) {
		var blocks = lines[i].split('"');
		for(var j=0;j<blocks.length;j++){
		  if(j%2){
			blocks[j]=blocks[j].replace(/,/g,'::::');
		  }
		}  //@author Esa 2008, keep this note.
		lines[i] = blocks.join("");
		var lineArray = lines[i].split(",");
		var lat = lineArray[iLat]*1;
		var lng = lineArray[iLng]*1;
		var point = new GLatLng(lat,lng);
		//after splitting by commas, we put hidden ones back
		for(var cell in lineArray){
		  lineArray[cell] = lineArray[cell].replace(/::::/g,',');
		} //corrupted line step-over
		if(!isNaN(lat+lng)){
		  point.textArray = lineArray;
		  results.push(point);
		}
	}
	return results;
}
function moonshine_loadRegions(regionid, exclude) {
	var url		= "http://www.bbbook.com.au/modules/display.php?modulename=Moonshine&action=getRegionXML&";
	var request	= GXmlHttp.create();
	var zoomBound = false;
	if(exclude) {
		url += "exclude="+regionid;
	} else {
		url += "regionid="+regionid;
	}
	request.open("GET", url , true);
	request.onreadystatechange = function () {
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			polyline = xmlDoc.documentElement.getElementsByTagName("polyline");
			if(polyline.length) {
				if(polyline.length == 1) zoomBound = true;
				for(var i = 0; i < polyline.length; i++) moonshine_drawFromText(polyline[i], zoomBound);
			}
		}
	}
	request.send(null);
}
function moonshine_displayRegionMarkers(regionid) {
	var parent_cityid = cityRequest;
	var url		= "http://www.bbbook.com.au/modules/display.php?modulename=Moonshine&action=getRegionMarkersXML&regionid=" + regionid + "&parent_cityid=" + parent_cityid;
	var request	= GXmlHttp.create();
	var custIcon = new GIcon(G_DEFAULT_ICON);
	custIcon.iconSize = new GSize(32, 32); // you may change custom icon sizes
	custIcon.shadowSize = new GSize(48, 32);
	custIcon.iconAnchor = new GPoint(16, 32);

	var customIcons = [];
	customIcons["red"] = new GIcon(custIcon, "http://www.google.com/intl/en_us/mapfiles/ms/micons/red-dot.png");
	customIcons["blue"] = new GIcon(custIcon, "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png");
	customIcons["green"] = new GIcon(custIcon, "http://www.google.com/intl/en_us/mapfiles/ms/micons/green-dot.png");
	customIcons["yellow"] = new GIcon(custIcon, "http://www.google.com/intl/en_us/mapfiles/ms/micons/yellow-dot.png");

	request.open("GET", url , true);
	request.onreadystatechange = function () {
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			var city = xmlDoc.documentElement.getElementsByTagName("city");
			if(city.length) {
				if(parent_cityid != "0") {
					var polyPoints = moonshine_parseCsv(city[0].getAttribute("city_points"));
					poly = new GPolyline(polyPoints,"red", 2);
					map.addOverlay(poly);
					var bounds = poly.getBounds();
					if(bounds) moonshine_fit(bounds, true);
				}
				for(var i = 0; i < city.length; i++) {
					if(city[i].getAttribute("map_type") == "0") {
						var point = city[i].getAttribute("points").split(",");
						var marker = new GMarker(new GLatLng(point[0], point[1]));
						marker.tooltip = '<div><table cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#f9f9f9" valign="middle" style="border: 1px solid #797979; padding: 2px;">' + city[i].getAttribute("city_label") + '</td></tr></table></div>';
						map.addOverlay(marker);
						moonshine_setListener(marker, city[i], "town");
					} else if(city[i].getAttribute("map_type") == "1") {
						var polyPoints = moonshine_parseCsv(city[i].getAttribute("points"));
						var polyBorder = city[i].getAttribute("border");
						var polyColor = city[i].getAttribute("color");
						cityPoly = new GPolygon(polyPoints, polyBorder, 1, 1, polyColor, 0.3, {clickable:true, mouseOutTolerance:1});
						cityPoly.tooltip = '<div><table cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#f9f9f9" valign="middle" style="border: 1px solid #797979; padding: 2px;">' + city[i].getAttribute("city_label") + '</td></tr></table></div>';
						cityPoly.bgcolor = polyColor;
						map.addOverlay(cityPoly);
						moonshine_setListener(cityPoly, city[i], "city");
						var cityBounds = cityPoly.getBounds();
						var cityPoint = cityBounds.getCenter();
						var marker = new GMarker(cityPoint, {icon: customIcons["blue"]});
						map.addOverlay(marker);
						moonshine_setListener(marker, city[i], "city");
					}
				}
			}
		}
	}
	request.send(null);
}
function moonshine_searchType(flagName, reset) {
	var flag_type = 0;
	var i = 0;
	while($(flagName + "_" + i)) {
		if(reset) {
			$(flagName + "_" + i).checked = false;
		} else {
			if($(flagName + "_" + i).checked) flag_type = flag_type + parseInt($(flagName + "_" + i).value);
		}
		i++;
	}
	if(flag_type > 0) {
		$(flagName + "_all").checked = false;
	} else {
		$(flagName + "_all").checked = true;
	}
	$(flagName).value = flag_type;
}
function moonshine_searchCost(a) {
	var checked = false;
	var i = 0;
	while($("type_" + i)) {
		if(a == i) {
			$("cost_" + i).checked = true;
			checked = true;
		} else {
			$("cost_" + i).checked = false;
		}
		i++;
	}
}
function moonshine_listingCountry(country) {
	if(!country) country = $("location_country").value;
	var regionid = $("location_id").value;
	AjaxRequest.get(
		{
		"url" : "https://bbbook.com.au/modules/display.php?modulename=Moonshine&action=listingCountry&country="+country+"&regionid="+regionid
			,"onSuccess":function(req){
				$("ms_location_id").innerHTML = req.responseText;
				regionid = $("location_id").value;
				moonshine_listingRegion(regionid);
			}
		}
	);
}
function moonshine_listingRegion(regionid) {
	var cityid = $("location_heading_id").value;
	AjaxRequest.get(
		{
		"url" : "https://bbbook.com.au/modules/display.php?modulename=Moonshine&action=listingRegion&regionid="+regionid+"&cityid="+cityid
			,"onSuccess":function(req){
				$("ms_location_heading_id").innerHTML = req.responseText;
			}
		}
	);
}
function moonshine_listingFlagCheck(fieldName) {
	var flag_type = 0;
	var i = 0;
	while($(fieldName + "_" + i)) {
		if($(fieldName + "_" + i).checked) flag_type = flag_type + parseInt($(fieldName + "_" + i).value);
		i++;
	}
	$(fieldName).value = flag_type;
}
function moonshine_wordcount(fieldName, maxWords, maxChar) {
	var string = trim($(fieldName).value);
	var words = moonshine_totalWords(string);
	var length = string.length;
	if(length == 0) words = 0;
	var wordPlural = "";
	if(words != 1) wordPlural = "s";
	var charPlural = "";
	if(length != 1) charPlural = "s";
	if(maxWords > 0) {
		if(words > maxWords) {
			while(words > maxWords) {
				string = trim(string.substring(0, (string.length - 1)));
				length = $(fieldName).value.length;
				words = moonshine_totalWords(string);
			}
			$(fieldName).value = string;
		}
		maxWords = " (" + maxWords + ")"
	} else {
		maxWords = "";
	}
	if(maxChar > 0) {
		if(length > maxChar) {
			$(fieldName).value = string.substring(0, (string.length - 1));
			length--;
		}
		maxChar = " (" + maxChar + ")"
	} else {
		maxChar = "";
	}
	document.getElementById(fieldName + "_wordcount").innerHTML = words + maxWords + " word" + wordPlural + ", " + length + maxChar + " character" + charPlural;
}

function moonshine_totalWords(string) {
	string += " ";
	var initial_whitespace_rExp = /^[^A-Za-z0-9]+/gi;
	var left_trimmedStr = string.replace(initial_whitespace_rExp, "");
	var non_alphanumerics_rExp = rExp = /[^A-Za-z0-9]+/gi;
	var string = left_trimmedStr.replace(non_alphanumerics_rExp, " ");
	var splitString = string.split(" ");
	var words = splitString.length - 1;
	return words;
}
function moonshine_showTooltip(marker, region) {
	var bounds = map.getBounds(); 
	var sw = bounds.getSouthWest(); 
	var ne = bounds.getNorthEast(); 
	if(region) {
		var bounds = marker.getBounds();
		var point = bounds.getCenter();
	} else {
		var point = marker.getPoint();
	}
	//if((point.lng() <= ne.lng() && point.lng() >= sw.lng()) && (point.lat() <= ne.lat() && point.lat() >= sw.lat())) {
		tooltip.innerHTML = "<div style=\"cursor: pointer;\" onclick=\"window.location.href='" + marker.page_url + "';\">" + marker.tooltip + "</a>";
		var tpoint=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(),map.getZoom());
		var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(point,map.getZoom());
		if(region) {
			var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - tpoint.x,- offset.y + tpoint.y));
		} else {
			var anchor=marker.getIcon().iconAnchor;
			var width=marker.getIcon().iconSize.width + 2;
			var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - tpoint.x - anchor.x + width,- offset.y + tpoint.y +anchor.y - 20));
		}
		pos.apply(tooltip);
		tooltip.style.visibility="visible";
		tooltip.style.position="absolute";
		tooltip.style.zindex="0";
	//}
}
function moonshine_displaySearchMarkers(town, region, name, cost, flag_type, flag_facilities, flag_food, flag_pets, flag_restriction) {
	var url		= "http://www.bbbook.com.au/modules/display.php?modulename=Moonshine&action=getSearchMarkersXML&town=" + town + "&region=" + region + "&name=" + name + "&cost=" + cost + "&flag_type=" + flag_type + "&flag_facilities=" + flag_facilities + "&flag_food=" + flag_food + "&flag_pets=" + flag_pets + "&flag_restriction=" + flag_restriction;
	var request	= GXmlHttp.create();
	var bounds = new GLatLngBounds();

	request.open("GET", url , true);
	request.onreadystatechange = function () {
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			var host = xmlDoc.documentElement.getElementsByTagName("host");
			if(host.length) {
				for(var i = 0; i < host.length; i++) {
					var point = host[i].getAttribute("points").split(",");
					var marker = new GMarker(new GLatLng(point[0], point[1]));
					marker.tooltip = '<div><table cellspacing="0" cellpadding="0" border="0"><tr><td bgcolor="#f9f9f9" valign="middle" style="border: 1px solid #797979; padding: 2px;">' + host[i].getAttribute("bnb_name") + '</td></tr></table></div>';
					map.addOverlay(marker);
					moonshine_setListener(marker, host[i], "host");
					bounds.extend(new GLatLng(point[0], point[1]));
				}
			}
			map.setZoom(map.getBoundsZoomLevel(bounds));
			map.setCenter(bounds.getCenter());
		}
	}
	request.send(null);
}