function AjaxRequest()
{var req;var method="GET";var nocache=false;var handler;this.loadXMLDoc=function(url,params)
{if(window.XMLHttpRequest){try{req=new XMLHttpRequest();}catch(e){req=false;}}else if(window.ActiveXObject){try{req=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{req=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){req=false;}}}
if(req){if(!handler)handler=processReqChange;req.onreadystatechange=handler;if(nocache){params+=(params!='')?'&'+(new Date()).getTime():(new Date()).getTime();}
if(method=="POST"){req.open("POST",url,true);req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');req.send(params);}else{if(params)url+="?"+params;req.open(method,url,true);req.send(null);}
return true;}
return false;}
this.setMethod=function(newmethod){method=newmethod.toUpperCase();}
this.nocache=function(){nocache=true;}
this.setHandler=function(fn){handler=fn;}
this.getResponse=function(){return req;}
var getNodeValue=function(parent,tagName)
{var node=parent.getElementsByTagName(tagName)[0];return(node&&node.firstChild)?node.firstChild.nodeValue:'';}
var processReqChange=function()
{if(req.readyState==4&&req.status==200){var response=req.responseXML.documentElement;var commands=response.getElementsByTagName('command');for(var i=0;i<commands.length;i++){method=commands[i].getAttribute('method');switch(method)
{case'alert':var message=getNodeValue(commands[i],'message');window.alert(message);break;case'setvalue':var target=getNodeValue(commands[i],'target');var value=getNodeValue(commands[i],'value');if(target&&value!=null){document.getElementById(target).value=value;}
break;case'setdefault':var target=getNodeValue(commands[i],'target');if(target){document.getElementById(target).value=document.getElementById(target).defaultValue;}
break;case'focus':var target=getNodeValue(commands[i],'target');if(target){document.getElementById(target).focus();}
break;case'setcontent':var target=getNodeValue(commands[i],'target');var content=getNodeValue(commands[i],'content');if(target&&content!=null){document.getElementById(target).innerHTML=content;}
break;case'setstyle':var target=getNodeValue(commands[i],'target');var property=getNodeValue(commands[i],'property');var value=getNodeValue(commands[i],'value');if(target&&property&&value){document.getElementById(target).style[property]=value;}
break;case'setproperty':var target=getNodeValue(commands[i],'target');var property=getNodeValue(commands[i],'property');var value=getNodeValue(commands[i],'value');if(value=="true")value=true;if(value=="false")value=false;if(target){document.getElementById(target)[property]=value;}
break;default:window.console.log("Error: unrecognised method '"+method+"' in processReqChange()");}}}}}
if(self!=top)top.location.href=self.location.href;window.onload=function(){add_record_event();}
var timer;function suggestTown(input)
{if(encodeURIComponent){var req=new AjaxRequest();req.loadXMLDoc("/scripts/suggestTown.php","q="+encodeURIComponent(input));}}
function record_outbound(target)
{if(encodeURIComponent){var req=new AjaxRequest();var params="src="+encodeURIComponent(location.href)+"&target="+encodeURIComponent(target);req.setMethod("POST");req.loadXMLDoc('/scripts/record_outbound.php',params);}
return true;}
function add_record_event()
{if(self.location.href.match(/\/admin\//))return;var links=document.getElementsByTagName('a');for(var i=0;i<links.length;i++){if(links[i].href.charAt(0)=='#')continue;if(!links[i].href.match(/gdaytravel\.com\.au/)){links[i].onclick=function(){return record_outbound(this.href);}}}}
var map,mapCenter,iw;var g=google.maps;g.Map.prototype.markers=[];var bounds=new g.LatLngBounds();function openInfoWindow(position,content)
{if(iw)iw.close();iw=new g.InfoWindow({content:content,position:position,maxWidth:320});iw.open(map);}
function mapZoom(latlng,zoomIn)
{if(zoomIn)map.setMapTypeId(g.MapTypeId.HYBRID);map.setCenter(latlng);if(zoomIn&&(map.getZoom()<18))map.setZoom(18);}
g.Map.prototype.zoomMarker=function(name,zoomIn)
{for(var i=0;i<this.markers.length;i++){if(this.markers[i].getTitle()==name){mapZoom(this.markers[i].getPosition(),zoomIn);g.event.trigger(this.markers[i],'click');}}}
function drawCircle(lng,lat,radius,colour)
{var circle=new g.Circle({center:new g.LatLng(lat,lng),radius:radius*1000,clickable:false,strokeColor:colour,strokeOpacity:0.8,strokeWeight:1,fillOpacity:0});circle.setMap(map);}
function addTownMarker(name,letter,latlng,html)
{var image=new g.MarkerImage("/images/marker-"+letter+".png",new g.Size(24,36),new g.Point(0,0),new g.Point(12,16));var shadow=new g.MarkerImage("/maps/shadow.png",new g.Size(44,36),new g.Point(0,0),new g.Point(12,16));var marker=new g.Marker({map:map,position:latlng,title:name,shadow:shadow,icon:image});g.event.addListener(marker,"click",function(){openInfoWindow(latlng,html);});}
g.Map.prototype.addMarker=function(propType,name,latlng,html,extend)
{var imagename;switch(propType)
{case'B & B/Guesthouses/Cottages/Lodges':imagename='hostel';break;case'Back Packers':imagename='hiking';break;case'Holiday Apartments/Homes/Villas':imagename='resort';break;case'Hotel Motel':imagename='bar';break;case'Motels/Hotels/Resorts':imagename='hotel';break;case'Tourist and Van Parks':imagename='campingsite';break;case'Houseboats':imagename='cruise';break;}
if(imagename){var image=new g.MarkerImage("/maps/"+imagename+".png",new g.Size(32,32),new g.Point(0,0),new g.Point(16,16));var marker=new g.Marker({map:map,position:latlng,title:name,icon:image});g.event.addListener(marker,"click",function(){openInfoWindow(latlng,html);});this.markers.push(marker);}
if(extend){bounds.extend(latlng);}}
var limitZoom;g.Map.prototype.clearMarkers=function()
{var zoomLevel=map.getZoom();if(zoomLevel<9)map.setZoom(9);if(limitZoom){if(zoomLevel>16){map.setZoom(16);limitZoom=false;return;}
if(zoomLevel<14){map.setCenter(mapCenter);map.setZoom(14);limitZoom=false;return;}}
var mapType=(zoomLevel<16)?g.MapTypeId.TERRAIN:g.MapTypeId.HYBRID;map.setMapTypeId(mapType);var markerDisplay=(zoomLevel<13)?null:map;for(var i=0;i<this.markers.length;i++){this.markers[i].setMap(markerDisplay);}};function showDetails(id)
{if(document.getElementById){var details=document.getElementById(id+'_details');var showhidelink=document.getElementById(id+'_link');if(showhidelink.firstChild.src.indexOf('showdetails')!=-1){details.style['display']='block';showhidelink.firstChild.src='/images/hidedetails.gif';return true;}else{details.style['display']='none';showhidelink.firstChild.src='/images/showdetails.gif';return false;}}
return false;}
function showNearestTown()
{rsp=req.getResponse();if(rsp.readyState==4&&rsp.status==200){var xml=rsp.responseXML.documentElement;var town=xml.getElementsByTagName('town')[0].firstChild.nodeValue;var state=xml.getElementsByTagName('state')[0].firstChild.nodeValue;var target=xml.getElementsByTagName('target')[0].firstChild.nodeValue;if(map.getZoom()<5){self.location.href="/"+target.split('/')[1]+"/";}else{var image=xml.getElementsByTagName('image')[0].getAttribute('src');var width=xml.getElementsByTagName('image')[0].getAttribute('width');var height=xml.getElementsByTagName('image')[0].getAttribute('height');var coords=xml.getElementsByTagName('coords')[0];var point=new g.LatLng(parseFloat(coords.getAttribute("lat")),parseFloat(coords.getAttribute("lng")));var count=xml.getElementsByTagName('count')[0].firstChild.nodeValue;var infoTxt="";if(image)infoTxt+="<p style=\"margin: 0; text-align: center;\"><img src=\""+image+"\" width=\""+width+"\" height=\""+height+"\" alt=\"\"></p>\n";infoTxt+="<p style=\"margin: 0 auto; width: "+Math.max(220,width)+"px;\">The nearest accomodation listings we have are in <b><a href=\""+target+"\">"+town+", "+state+"</a></b> with <b>"+count+"</b> propert";infoTxt+=(count==1)?"y":"ies";infoTxt+=".</p>\n";marker=new g.Marker({map:map,position:point,title:town});openInfoWindow(point,infoTxt);}}}
var req;var marker;function mapClick(e)
{if(marker)marker.setMap(null);if(e.latLng){req=new AjaxRequest();req.setHandler(showNearestTown);req.loadXMLDoc("/scripts/map-nearest.xml.php","lat="+e.latLng.lat()+"&lng="+e.latLng.lng());}}
function drawMapOutline()
{rsp=req.getResponse();if(rsp.readyState==4&&rsp.status==200){var xml=rsp.responseXML.documentElement;var countries=xml.getElementsByTagName('country');for(var j=0;j<countries.length;j++){var colour=countries[j].getAttribute('colour');var arr=countries[j].getElementsByTagName('point');var poly=[];for(var i=0;i<arr.length;i++){var point=new g.LatLng(parseFloat(arr[i].getAttribute('lat')),parseFloat(arr[i].getAttribute('lng')));poly.push(point);}
var shape=new g.Polyline({path:poly,strokeColor:colour,strokeOpacity:1.0,strokeWeight:1});shape.setMap(map);}}}
