function GSUtil(){}GSUtil.extend=function(c,a){function b(){}b.prototype=a.prototype;c.prototype=new b();c.prototype.constructor=c;c.baseConstructor=a;c.superClass=a.prototype};GSUtil.getPropertyArray=function(c,b){var f=[];for(var d=0,a=c.length;d<a;d++){var g=c[d];if(g[b]!=undefined){f.push(g[b])}}return f};GSUtil.getMinimum=function(b){var d=Infinity;for(var c=0,a=b.length;c<a;c++){d=Math.min(d,b[c])}return d};GSUtil.getMaximum=function(c){var a=-Infinity;for(var d=0,b=c.length;d<b;d++){a=Math.max(a,c[d])}return a};GSUtil.findPosX=function(a){var b=0;if(a.offsetParent){while(a.offsetParent){b+=a.offsetLeft;a=a.offsetParent}}else{if(a.x){b+=a.x}}return b};GSUtil.findPosY=function(c){var a=c;var b=0;if(c.offsetParent){while(c.offsetParent){b+=c.offsetTop;c=c.offsetParent}}else{if(c.y){b+=c.y}}if(_browser.isOpera||((_browser.isSafari&&a.style.position=="absolute")||(_browser.isSafari&&a.style.position=="relative"))){b-=document.body.offsetTop}return b};GSUtil.getClickPixelCoordinate=function(b,a){if(typeof b.pageX!="undefined"){var f=GSUtil.getElementPosition(a);return new GSPoint(b.pageX-f.x,b.pageY-f.y)}else{if(typeof b.offsetX!="undefined"){var d=b.target||b.srcElement;var c=GSUtil.getOffsetFromAncestor(d,a);return new GSPoint(b.offsetX+c.x,b.offsetY+c.y)}else{return new GSPoint(0,0)}}};GSUtil.getElementPosition=function(a){var b=new GSPoint(0,0);while(a){b.x+=a.offsetLeft;b.y+=a.offsetTop;a=a.offsetParent}return b};GSUtil.getWindowSize=function(){var a={};if(self.innerHeight){a.width=self.innerWidth;a.height=self.innerHeight}else{if(document.documentElement&&document.documentElement.clientHeight){a.width=document.documentElement.clientWidth;a.height=document.documentElement.clientHeight}else{if(document.body){a.width=document.body.clientWidth;a.height=document.body.clientHeight}}}return a};GSUtil.getOffsetFromAncestor=function(c,a){var b=new GSPoint(0,0);while(c&&c!=a){b.x+=c.offsetLeft;b.y+=c.offsetTop;c=c.offsetParent}return b};GSUtil.getMousePos=function(b){var a=b?b:window.event;if(typeof a.pageX!="undefined"){return new GSPoint(a.pageX,a.pageY)}else{if(typeof a.clientX!="undefined"){return new GSPoint(a.clientX+document.body.scrollLeft,a.clientY+document.body.scrollTop)}else{return new GSPoint(0,0)}}};GSUtil.cancelEvent=function(a){a=a?a:window.event;GSUtil.eventStopPropagation(a);GSUtil.eventPreventDefault(a);return false};GSUtil.eventStopPropagation=function(a){if(a.stopPropagation){a.stopPropagation()}else{a.cancelBubble=true}};GSUtil.eventPreventDefault=function(a){if(a.stopPropagation){a.preventDefault()}else{a.returnValue=false}};GSUtil.positionElement=function(d,f,e,c,b){var a=GSUtil.getComputedStyle(d,"position");if(a!="absolute"&&a!="relative"){d.style.position="absolute"}if(f||f==0){d.style.left=f+"px"}if(e||e==0){d.style.top=e+"px"}if(b||b==0){d.style.bottom=b+"px"}if(c||c==0){d.style.right=c+"px"}};GSUtil.createElement=function(a){if(document.createElementNS){return document.createElementNS(_globals.xmlns,a)}else{return document.createElement(a)}};GSUtil.createContainer=function(h,e,c,i,d,g,b,f){var a=document.createElement("div");h.appendChild(a);a.className=e;if(c){a.style.width=c=="auto"?"auto":c+"px"}if(i){a.style.height=i=="auto"?"auto":i+"px"}if(d||g||d==0||g==0){a.style.position="absolute";a.style.left=d+"px";a.style.top=g+"px"}if(b){a.style.visibility=b}if(f){a.style.zIndex=f}return a};GSUtil.createImage=function(b,a,c,k,e,j,i,h,g,d){var f=null;var l=a.substring(a.lastIndexOf(".")+1);if(l.toLowerCase()=="png"&&_browser.pngAlpha){d=d?d:"scale";f=document.createElement("div");f.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+a+"',sizingMethod='"+d+"')"}else{f=document.createElement("img");f.src=a;f.border=0;f.margin=0;f.padding=0}f.id=b;if(c||k){f.width=c;f.height=k;f.style.width=c+"px";f.style.height=k+"px"}if(e||j||e==0||j==0){f.style.position="absolute";f.style.left=e+"px";f.style.top=j+"px"}if(h!=undefined){f.className=h}if(i!=null){f.style.zIndex=i}if(g!=undefined){f.title=g}if(_browser.isIE){f.setAttribute("galleryimg","no");f.unselectable="on";f.onselectstart=GSUtil.cancelEvent}else{f.style.MozUserSelect="none"}return f};GSUtil.setImageSrc=function(b,c){var a=c.substring(c.lastIndexOf(".")+1);if(a.toLowerCase()=="png"&&_browser.pngAlpha){b.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+c+"',sizingMethod='scale')"}else{b.src=c}};GSUtil.getImageSrc=function(c){var d="";if(c.src!=undefined){d=c.src}if(c.style.filter){var b=/src='([^']+)'/;var a=c.style.filter.match(b);d=a[1]}return d};GSUtil.createImageMap=function(b,h,j,c,g,e,f,i){var a=document.createElement("map");a.id=b;a.setAttribute("name",b);var d=document.createElement("area");d.setAttribute("shape",h);d.setAttribute("coords",j.toString());d.setAttribute("href",c);d.setAttribute("title",g);if(i!=undefined){d.peer=i}if(f!=undefined){GSEventManager.addEventListener(d,e,f)}a.appendChild(d);return a};GSUtil.getTransparentBackgroundImageStyleRule=function(a,b){if(_browser.pngAlpha){return'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+a+'", sizingMethod="scale"); background-repeat: '+b}else{return"background: url("+a+") "+b}};GSUtil.setOpacity=function(b,a){a=(a==100)?99.999:a;b.style.filter="alpha(opacity:"+a+")";b.style.KHTMLOpacity=a/100;b.style.MozOpacity=a/100;b.style.opacity=a/100};GSUtil.getComputedStyle=function(a,c){if(typeof a=="string"){a=document.getElementById(a)}if(a.style[c]){return a.style[c]}else{if(a.currentStyle){return a.currentStyle[c]}else{if(document.defaultView&&document.defaultView.getComputedStyle){c=c.replace(/([A-Z])/g,"-$1");c=c.toLowerCase();var b=document.defaultView.getComputedStyle(a,"");if(b){return b.getPropertyValue(c)}return null}else{return null}}}};GSUtil.getFeatureById=function(c,e){for(var d=0,b=c.length;d<b;d++){if(c[d].id==e){return c[d]}}return undefined};GSUtil.roundNumber=function(a,b){return Math.round(a*Math.pow(10,b))/Math.pow(10,b)};GSUtil.getBaseName=function(a){return a.substring(a.lastIndexOf("/")+1)};GSUtil.getBaseNameWithoutExtension=function(b){var a=GSUtil.getBaseName(b);return a.substring(0,a.indexOf("."))};GSUtil.getDirName=function(a){return a.substring(0,a.lastIndexOf("/"))};GSUtil.clone=function(f,a){try{var b=new f.constructor();for(var c in f){if(!a){if(c!="eventListeners"){b[c]=f[c]}}else{if(c!="eventListeners"){if(typeof f[c]=="object"){b[c]=GSUtil.clone(f[c],a)}else{b[c]=f[c]}}}}return b}catch(d){return undefined}};GSUtil.toXML=function(c){try{if(typeof ActiveXObject!="undefined"&&typeof GetObject!="undefined"){var b=new ActiveXObject("Microsoft.XMLDOM");b.loadXML(c);return b}else{if(typeof DOMParser!="undefined"){return(new DOMParser()).parseFromString(c,"text/xml")}else{return undefined}}}catch(a){alert("parse error: "+a.message);return undefined}};GSUtil.stringToBoolean=function(a){if(!a){return false}if(a=="true"){return true}if(a=="false"){return false}if(a=="yes"){return true}if(a=="no"){return false}return a==true};GSUtil.getCaseInsensitiveProperty=function(d,b,a){if(!d||!(d instanceof Object)){return undefined}var c=undefined;if(d[b]!=undefined){c=d[b]}else{if(d[b.toLowerCase()]){c=d[b.toLowerCase()]}}if(c!=undefined&&(typeof c).toLowerCase()=="string"&&c!="null"){return c}else{return c!=undefined?c:(a!=undefined?a:undefined)}};GSUtil.populateTemplate=function(d,a,c){for(var b in a){var e=new RegExp("{"+b+"}","g");d=d.replace(e,a[b]?a[b]:"")}if(c){for(var b in c){var e=new RegExp("{"+b+"}","g");d=d.replace(e,c[b]?c[b]:"")}}return d};GSUtil.joinAssociativeArray=function(e,d,c){var b=[];for(var a in e){b.push(a+c+(e[a]!=undefined?e[a]:""))}return b.join(d)};GSUtil.getParameter=function(c,b,a){if(c[b]==undefined){if(arguments.length<3){throw new Error("Missing parameter: "+b)}else{return a}}else{return c[b]}};GSUtil.makeUnselectable=function(a){if(typeof a.style.MozUserSelect=="string"){a.style.MozUserSelect="none"}else{if(typeof a.style.KhtmlUserSelect){a.style.KhtmlUserSelect="none"}else{if(typeof a.onselectstart!="undefined"){a.onselectstart=function(){return false}}}}};_globals={xmlns:"http://www.w3.org/1999/xhtml",svgns:"http://www.w3.org/2000/svg",vmlns:"urn:schemas-microsoft-com:vml",vmlnsPrefix:"v",nzCenterX:2530000,nzCenterY:5990000,nzTopY:6748000,resourceURL:"http://api.geosmart.co.nz/images/sfapi-v2/",tilePxWidth:256,tilePxHeight:256,tilesURL:(document.location.protocol.indexOf("http")==-1?"http:":document.location.protocol)+"//tiles.geosmart.co.nz/nz/v13/carto",loggingBaseURL:"http://logs.geosmart.co.nz/",loggingSessionTimeout:20*(1000*60),DEBUG:false};function Console(){win=null}Console.prototype={debug:function(a){if((this.win==null)||(this.win.closed)){this.win=window.open("","console","width=600,height=300,screenX=400,resizable,scrollbars=yes");this.win.document.open("text/html")}this.win.focus();a=new Date().toLocaleTimeString()+" "+a+"<br/>";this.win.document.writeln(a)}};var _console=new Console();function GSAnimator(g,f,b,e,a,c,d){this.from=g;this.to=f;this.framerate=b;this.duration=e;this.setvalue=a;this.onstart=c;this.onfinish=d;this.currentValue=g;this.startTime=0;this.timer=undefined}GSAnimator.prototype.animate=function(){if(!this.timer){this.startTime=new Date().getTime()-this.framerate}var a=this;this.timer=setInterval(function(){a.frame()},this.framerate);if(this.onstart){this.onstart(this)}};GSAnimator.prototype.frame=function(){var c=new Date().getTime()-this.startTime;if(c>=this.duration){this.stopAnimate();this.currentValue=this.to;this.setvalue(this,this.currentValue);if(this.onfinish){var b=this;setTimeout(function(){b.onfinish(b)},0)}}else{var d=0.5-(0.5*Math.cos(Math.PI*Math.max(c,0)/this.duration));var a=this.interpolate(this.from.x,this.to.x,d);var e=this.interpolate(this.from.y,this.to.y,d);this.currentValue=new GSPoint(a,e);this.setvalue(this,this.currentValue)}};GSAnimator.prototype.stopAnimate=function(){if(this.timer){clearInterval(this.timer);this.timer=null}};GSAnimator.prototype.interpolate=function(c,b,a){return c+(b-c)*a};function GSBounds(a,d,c,b){this.minX=parseFloat(a);this.minY=parseFloat(d);this.maxX=parseFloat(c);this.maxY=parseFloat(b)}GSBounds.prototype.contains=function(a){return(a.x>=this.minX&&a.x<=this.maxX)&&(a.y>=this.minY&&a.y<=this.maxY)};GSBounds.prototype.toString=function(){return"Bounds: minX=["+this.minX+"], minY=["+this.minY+"], maxX=["+this.maxX+"], maxY=["+this.maxY+"]"};function GSBrowser(){var a=navigator.userAgent.toLowerCase();this.isFirefox=a.indexOf("firefox")!=-1;this.firefoxVersion=parseFloat(a.substring(a.indexOf("firefox")+8));this.isSafari=a.indexOf("applewebkit")!=-1;this.isGecko=!this.isSafari&&a.indexOf("gecko")!=-1;this.isCamino=a.indexOf("camino")!=-1;this.caminoVersion=parseFloat(a.substring(a.indexOf("camino")+7));this.isIE=((a.indexOf("msie")!=-1)&&(a.indexOf("opera")==-1));this.isOpera=a.indexOf("opera")!=-1;this.versionMinor=parseFloat(navigator.appVersion);if(this.isIE&&this.versionMinor>=4){this.versionMinor=parseFloat(a.substring(a.indexOf("msie ")+5))}this.versionMajor=parseInt(this.versionMinor);this.isIE55=(this.isIE&&this.versionMinor==5.5);this.isIE6x=(this.isIE&&this.versionMajor==6);this.isIE7x=(this.isIE&&this.versionMajor==7);this.isIE6up=(this.isIE&&this.versionMajor>=6);this.isWin=(a.indexOf("win")!=-1);this.isWin32=(this.isWin&&(a.indexOf("95")!=-1||a.indexOf("98")!=-1||a.indexOf("nt")!=-1||a.indexOf("win32")!=-1||a.indexOf("32bit")!=-1));this.pngAlpha=((this.isIE55||this.isIE6x)&&this.isWin32);this.svg=((this.isFirefox&&this.firefoxVersion>=1.5)||(this.isCamino&&this.caminoVersion>=1)||(this.isOpera&&this.versionMajor>=8))}GSBrowser.prototype.isSmartfindCompatible=function(){return(this.isIE6up||this.isGecko||this.isSafari)};GSBrowser.prototype.isVectorGraphicsCapable=function(){return(this.isIE6up||this.svg)};_browser=new GSBrowser();function GSControl(a){this.name=a;this.element;this.map=null}GSControl.prototype.setElement=function(a){this.element=a;this.element.style.zIndex=10};GSControl.prototype.setPosition=function(a){switch(a.anchor){case GSControl.ANCHOR_TOP_LEFT:GSUtil.positionElement(this.element,a.offset.x,a.offset.y);break;case GSControl.ANCHOR_TOP_RIGHT:GSUtil.positionElement(this.element,null,a.offset.x,a.offset.y);break;case GSControl.ANCHOR_BOTTOM_LEFT:GSUtil.positionElement(this.element,a.offset.x,null,null,a.offset.y);break;case GSControl.ANCHOR_BOTTOM_RIGHT:GSUtil.positionElement(this.element,null,null,a.offset.x,a.offset.y);break}};GSControl.prototype.render=function(a){};GSControl.prototype.getDefaultPosition=function(){return{anchor:GSControl.ANCHOR_TOP_LEFT,offset:new GSPoint(7,7)}};GSControl.prototype.remove=function(a){a.container.removeChild(this.element)};GSControl.ANCHOR_TOP_LEFT=0;GSControl.ANCHOR_TOP_RIGHT=1;GSControl.ANCHOR_BOTTOM_LEFT=2;GSControl.ANCHOR_BOTTOM_RIGHT=3;GSUtil.extend(GSTextZoomControl,GSControl);function GSTextZoomControl(a){GSTextZoomControl.baseConstructor.call(this,GSMap.TEXT_ZOOM_CONTROL);this.labels=a;if(!this.labels){this.labels=[{level:9,value:"Region"},{level:7,value:"District"},{level:3,value:"Suburb"},{level:1,value:"Street"}]}}GSTextZoomControl.prototype.render=function(e){var c=document.createElement("div");for(var b=0,a=this.labels.length;b<a;b++){var d=document.createElement("a");d.href="#";GSEventManager.bind(d,"click",this,function(f,g){e.zoom(g);GSUtil.cancelEvent(f)},this.labels[b].level);d.className="GSTextZoomControl";d.innerHTML=this.labels[b].value;c.appendChild(d);if(b<a-1){c.appendChild(document.createTextNode(" | "))}}return c};GSUtil.extend(GSCompactZoomControl,GSControl);function GSCompactZoomControl(){GSCompactZoomControl.baseConstructor.call(this,GSMap.COMPACT_ZOOM_CONTROL)}GSCompactZoomControl.prototype.render=function(c){var b=document.createElement("div");b.style.width="22px";b.style.height="43px";var e=GSUtil.createImage("gscompactzoomcontrol-shadow",_globals.resourceURL+"smallZoomBG.png",22,43,0,0,0,"noprint",undefined,"image");b.appendChild(e);var d=GSUtil.createImage("gscompactzoomcontrol_zoomin",_globals.resourceURL+"zoomIn.png",14,13,2,3,10,"noprint","Zoom in","image");d.style.cursor="pointer";b.appendChild(d);GSEventManager.bind(d,"click",this,function(f){GSUtil.cancelEvent(f);if(c.getZoomLevel()-1<0){return}c.zoom(c.getZoomLevel()-1)});GSEventManager.addEventListener(d,"dblclick",GSUtil.cancelEvent);GSEventManager.addEventListener(d,"contextmenu",GSUtil.cancelEvent);var a=GSUtil.createImage("gscompactzoomcontrol_zoomout",_globals.resourceURL+"zoomOut.png",14,13,2,22,10,"noprint","Zoom out","image");a.style.cursor="pointer";b.appendChild(a);GSEventManager.bind(a,"click",this,function(f){GSUtil.cancelEvent(f);if(c.getZoomLevel()+1>=c.scaleRange.length){return}c.zoom(c.getZoomLevel()+1)});GSEventManager.addEventListener(a,"dblclick",GSUtil.cancelEvent);GSEventManager.addEventListener(a,"contextmenu",GSUtil.cancelEvent);return b};GSUtil.extend(GSMapControl,GSControl);function GSMapControl(a){GSMapControl.baseConstructor.call(this,GSMap.MAP_CONTROL);this.zoomControl=new GSZoomControl(a)}GSMapControl.prototype.render=function(e){var c=document.createElement("div");c.style.width="54px";c.style.height="55px";var h=GSUtil.createImage("gsmapcontrol-shadow",_globals.resourceURL+"compassBG.png",54,55,0,0,100,"noprint",undefined,"image");c.appendChild(h);var a=GSUtil.createImage("gsmapcontrol_up",_globals.resourceURL+"arrowUp.png",14,13,18,3,100,"noprint","Move up","image");a.style.cursor="pointer";GSEventManager.bind(a,"click",this,this.pan,"up",e);GSEventManager.addEventListener(a,"dblclick",GSUtil.cancelEvent);GSEventManager.addEventListener(a,"contextmenu",GSUtil.cancelEvent);c.appendChild(a);var d=GSUtil.createImage("gsmapcontrol_left",_globals.resourceURL+"arrowLeft.png",14,13,3,19,100,"noprint","Move left","image");d.style.cursor="pointer";d.direction="left";GSEventManager.bind(d,"click",this,this.pan,"left",e);GSEventManager.addEventListener(d,"dblclick",GSUtil.cancelEvent);GSEventManager.addEventListener(d,"contextmenu",GSUtil.cancelEvent);c.appendChild(d);var b=GSUtil.createImage("gsmapcontrol_right",_globals.resourceURL+"arrowRight.png",14,13,33,19,100,"noprint","Move right","image");b.style.cursor="pointer";b.direction="right";GSEventManager.bind(b,"click",this,this.pan,"right",e);GSEventManager.addEventListener(b,"dblclick",GSUtil.cancelEvent);GSEventManager.addEventListener(b,"contextmenu",GSUtil.cancelEvent);c.appendChild(b);var g=GSUtil.createImage("gsmapcontrol_down",_globals.resourceURL+"arrowDown.png",14,13,18,35,100,"noprint","Move down","image");g.style.cursor="pointer";g.direction="down";GSEventManager.bind(g,"click",this,this.pan,"down",e);GSEventManager.addEventListener(g,"dblclick",GSUtil.cancelEvent);GSEventManager.addEventListener(g,"contextmenu",GSUtil.cancelEvent);c.appendChild(g);var f=this.zoomControl.render(e);e.container.appendChild(f);this.zoomControl.setElement(f);return c};GSMapControl.prototype.setPosition=function(a){if(a.anchor==GSControl.ANCHOR_TOP_LEFT||a.anchor==GSControl.ANCHOR_BOTTOM_LEFT){this.zoomControl.setPosition({anchor:a.anchor,offset:new GSPoint(21,65)})}else{this.zoomControl.setPosition({anchor:a.anchor,offset:new GSPoint(25,65)})}GSMapControl.superClass.setPosition.call(this,a)};GSMapControl.prototype.pan=function(g,i,b){var j=0.25;var a=b.getBounds();var h=b.getMapCenter();var c=a.maxX-a.minX;var m=a.maxY-a.minY;var f=h.x;var d=h.y;switch(i){case"up":var k=j*m;d+=k;break;case"left":var k=j*c;f-=k;break;case"right":var k=j*c;f+=k;break;case"down":var k=j*m;d-=k;break}var l=new GSPoint(f,d);b.centerAtCoordinate(l);GSUtil.cancelEvent(g)};GSMapControl.prototype.remove=function(a){this.zoomControl.remove(a);GSMapControl.superClass.remove.call(this,a)};GSUtil.extend(GSZoomControl,GSControl);function GSZoomControl(a){GSZoomControl.baseConstructor.call(this,GSMap.ZOOM_CONTROL);this.sliderBar=null;this.sliderThumb=null;this.labelContainer=null;this.zooming=false;this.labels=a}GSZoomControl.prototype.render=function(a){this.map=a;var e=document.createElement("div");e.style.width="22px";e.style.height="135px";this.map.addListener(this);var h=document.createElement("div");h.style.position="absolute";h.style.left="2px";h.style.top="0px";e.appendChild(h);var j=GSUtil.createImage("gszoomcontrol_zoomin",_globals.resourceURL+"zoomIn.png",14,13,2,3,110,"noprint","Zoom in","image");j.style.cursor="pointer";h.appendChild(j);GSEventManager.bind(j,"click",this,function(i){GSUtil.cancelEvent(i);if(a.getZoomLevel()-1<0){return}a.zoom(a.getZoomLevel()-1)});GSEventManager.addEventListener(j,"dblclick",GSUtil.cancelEvent);GSEventManager.addEventListener(j,"contextmenu",GSUtil.cancelEvent);var b=GSUtil.createImage("gszoomcontrol_zoomout",_globals.resourceURL+"zoomOut.png",14,13,2,115,110,"noprint","Zoom out","image");b.style.cursor="pointer";h.appendChild(b);GSEventManager.bind(b,"click",this,function(i){GSUtil.cancelEvent(i);if(a.getZoomLevel()+1>=a.scaleRange.length){return}a.zoom(a.getZoomLevel()+1)});GSEventManager.addEventListener(b,"dblclick",GSUtil.cancelEvent);GSEventManager.addEventListener(b,"contextmenu",GSUtil.cancelEvent);this.sliderBar=GSUtil.createImage("gszoomcontrol_sliderbar",_globals.resourceURL+"sliderBG.png",22,135,0,0,100,"noprint","Click to set zoom level","image");this.sliderBar.style.cursor="pointer";h.appendChild(this.sliderBar);this.sliderThumb=GSUtil.createImage("gszoomcontrol_sliderthumb",_globals.resourceURL+"sliderThumb.png",15,12,1,GSZoomControl.SLIDER_MAX-4,115,"noprint","Drag to zoom","image");this.sliderThumb.style.cursor="pointer";if(this.labels){this.labelContainer=document.createElement("div");this.labelContainer.style.position="absolute";this.labelContainer.style.display="none";h.appendChild(this.labelContainer);for(var f=0,c=this.labels.length;f<c;f++){var k=this.labels[f];var g=document.createElement("div");g.style.cursor="pointer";g.style.position="absolute";g.style.left="14px";g.style.top=(GSZoomControl.SLIDER_OFFSET+(k.level*GSZoomControl.SLIDER_INCREMENT))+"px";g.style.zIndex=115;var d=GSUtil.createImage(null,_globals.resourceURL+"zoomLabel.png",70,14,0,0,0,"noprint",undefined,"image");g.img=d;g.appendChild(d);var m=document.createElement("div");m.style.width="66px";m.style.paddingRight="4px";m.style.textAlign="right";m.style.fontFamily="Arial, Helvetica, Sans-serif";m.style.fontWeight="bold";m.style.fontSize="10px";m.style.position="relative";m.innerHTML=k.value;g.appendChild(m);GSEventManager.bind(g,"click",this,function(i,l){a.zoom(l);GSUtil.cancelEvent(i)},k.level);GSEventManager.bind(g,"mouseover",g,function(){GSUtil.setImageSrc(this.img,_globals.resourceURL+"zoomLabelOver.png")});GSEventManager.bind(g,"mouseout",g,function(){GSUtil.setImageSrc(this.img,_globals.resourceURL+"zoomLabel.png")});this.labelContainer.appendChild(g)}}Drag.init(this.sliderThumb,null,1,1,GSZoomControl.SLIDER_MIN,GSZoomControl.SLIDER_MAX);this.sliderThumb.onDragEnd=this.getDragEndHandler(this);GSEventManager.bind(this.sliderBar,"click",this,this.sliderClicked);GSEventManager.addEventListener(this.sliderBar,"dblclick",GSUtil.cancelEvent);GSEventManager.addEventListener(this.sliderBar,"contextmenu",GSUtil.cancelEvent);h.appendChild(this.sliderThumb);if(this.labels){GSEventManager.bind(this.sliderBar,"mouseover",this,function(){this.labelContainer.style.display="block"});GSEventManager.bind(this.sliderBar,"mouseout",this,function(){var i=this.labelContainer;if(!i.timeout){i.timeout=setInterval(function(){clearInterval(i.timeout);i.timeout=null;i.style.display="none"},3000)}})}this.mapBoundsChanged(this.map);return e};GSZoomControl.prototype.getDragEndHandler=function(a){return function(b,c){a.sliderMoved(b,c)}};GSZoomControl.prototype.sliderClicked=function(c){GSUtil.cancelEvent(c);var b,a;if(_browser.isIE){b=c.offsetX;a=c.offsetY}else{b=(window.pageXOffset+c.clientX-GSUtil.findPosX(this.sliderBar));a=(window.pageYOffset+c.clientY-GSUtil.findPosY(this.sliderBar))}if(a<GSZoomControl.SLIDER_MIN||a>GSZoomControl.SLIDER_MAX){return}this.sliderThumb.style.top=a+"px";this.sliderMoved(b,a)};GSZoomControl.prototype.sliderMoved=function(a,c){this.zooming=true;var b=Math.round((c-GSZoomControl.SLIDER_OFFSET)/GSZoomControl.SLIDER_INCREMENT);this.map.zoom(b)};GSZoomControl.prototype.mapBoundsChanged=function(d,b,c){var a=this.map.scaleIdx;this.mapZoomed(this.map,null,a)};GSZoomControl.prototype.mapZoomed=function(c,b,a){var d=Math.round(a*GSZoomControl.SLIDER_INCREMENT);d+=GSZoomControl.SLIDER_OFFSET;d=d<GSZoomControl.SLIDER_MIN?GSZoomControl.SLIDER_MIN:d>GSZoomControl.SLIDER_MAX?GSZoomControl.SLIDER_MAX:d;this.sliderThumb.style.top=d+"px"};GSZoomControl.prototype.remove=function(a){this.map.removeListener(this);GSZoomControl.superClass.remove.call(this,a)};GSZoomControl.SLIDER_OFFSET=22;GSZoomControl.SLIDER_INCREMENT=7;GSZoomControl.SLIDER_MIN=22;GSZoomControl.SLIDER_MAX=102;GSUtil.extend(GSSnapbackControl,GSControl);function GSSnapbackControl(){GSSnapbackControl.baseConstructor.call(this,GSMap.SNAPBACK_CONTROL)}GSSnapbackControl.prototype.getDefaultPosition=function(){return{anchor:GSControl.ANCHOR_TOP_RIGHT,offset:new GSPoint(7,7)}};GSSnapbackControl.prototype.render=function(b){this.map=b;var a=GSUtil.createImage("snapback-control",_globals.resourceURL+"snapback.png",13,13,undefined,undefined,10,"noprint","Snapback to saved map position","image");a.style.cursor="pointer";GSEventManager.bind(a,"click",this,this.snapback);return a};GSSnapbackControl.prototype.snapback=function(a){GSUtil.cancelEvent(a);this.map.snapback()};function GSDimension(b,a){this.width=parseInt(b);this.height=parseInt(a)}GSDimension.prototype.toString=function(){return"Dimension: width=["+this.width+"], h=["+this.height+"]"};function GSEventBroadcaster(){}GSEventBroadcaster.initialize=function(a){a.listeners=[];a.broadcastMessage=this.broadcastMessage;a.addListener=this.addListener;a.removeListener=this.removeListener};GSEventBroadcaster.broadcastMessage=function(){var b=arguments[0];var c=[];for(var d=1,a=arguments.length;d<a;d++){c.push(arguments[d])}for(var d=0;d<this.listeners.length;d++){if(this.listeners[d][b]){this.listeners[d][b].apply(this.listeners[d],c)}}};GSEventBroadcaster.addListener=function(a){this.removeListener(a);this.listeners.push(a);return true};GSEventBroadcaster.removeListener=function(c){for(var b=0,a=this.listeners.length;b<a;b++){if(this.listeners[b]==c){this.listeners.splice(b,1);return true}}return false};function GSEventManager(){}GSEventManager.bind=function(g,f,c,h){var d=[];for(var e=4,b=arguments.length;e<b;e++){d.push(arguments[e])}var a=GSEventManager.createAdapter(c,h,d);return GSEventManager.addEventListener(g,f,a)};GSEventManager.createAdapter=function(a,c,b){if(!b){b=[]}else{b.unshift(undefined)}return function(d){d=!d?window.event:d;b[0]=d;c.apply(a,b)}};GSEventManager.release=function(a){GSEventManager.removeEventListener(a)};GSEventManager.addEventListener=function(c,a,b){if(_browser.isSafari&&a=="dblclick"){c["on"+a]=b;return GSEventCache.add(c,a,b)}if(c.attachEvent){c.attachEvent("on"+a,b)}else{c.addEventListener(a,b,false)}return GSEventCache.add(c,a,b)};GSEventManager.removeEventListener=function(a){GSEventCache.remove(a)};var GSEventCache=function(){var c=0;var b={};var a={handlerId:c,handlers:b,nextHandlerId:function(){return"h"+this.handlerId++},add:function(f,d,e){var g=this.nextHandlerId();this.handlers[g]=arguments;return g},flush:function(){for(var d in this.handlers){this.remove(d)}},remove:function(g){try{var d=this.handlers[g];if(d[0].removeEventListener){d[0].removeEventListener(d[1],d[2],d[3])}if(d[1].substring(0,2)!="on"){d[1]="on"+d[1]}if(d[0].detachEvent){d[0].detachEvent(d[1],d[2])}d[0][d[1]]=null;this.handlers[g]=undefined;delete this.handlers[g]}catch(f){}}};return a}();function GSMouseWheel(){}GSMouseWheel.bind=function(d,a,f,b){b=(b!==undefined)?b:true;var c=(window.addEventListener&&!_browser.isSafari)?"DOMMouseScroll":"mousewheel";var e=GSMouseWheel.getWheelHandler(a,f,b);return GSEventManager.addEventListener(d,c,e)};GSMouseWheel.getWheelHandler=function(a,c,b){return function(d){var e=0;d=d?d:window.event;if(d.wheelDelta){e=d.wheelDelta/120;if(window.opera){e=-e}}else{if(d.detail){e=-d.detail/3}}if(e){c.call(a,e)}if(b){GSUtil.cancelEvent(d)}}};function GSIcon(a){this.imageSrc=undefined;if(a){this.imageSrc=a.imageSrc}this.imageSize=undefined;if(a){this.imageSize=a.imageSize}this.printSrc=undefined;if(a){this.printSrc=a.printSrc}this.printSize=undefined;if(a){this.printSize=a.printSize}this.shadowSrc=undefined;if(a){this.shadowSrc=a.shadowSrc}this.shadowSize=undefined;if(a){this.shadowSize=a.shadowSize}this.alt=undefined;this.iconOffset=new GSPoint(0,0);if(a){this.iconOffset=new GSPoint(a.iconOffset.x,a.iconOffset.y)}this.iconInfoWindowOffset=new GSPoint(0,0);if(a){this.iconInfoWindowOffset=new GSPoint(a.iconInfoWindowOffset.x,a.iconInfoWindowOffset.y)}this.imageMap=undefined;if(a){this.imageMap=a.imageMap}this.imageMapShape="poly";if(a){this.imageMapShape=a.imageMapShape}this.visible=true;this.rendered=false;this.arcHeight=0;this.arcRatio=1.2}GSIcon.iconId=0;GSIcon.nextId=function(){return GSIcon.iconId++};GSIcon.prototype.prerender=function(){this.image=GSUtil.createImage("",this.imageSrc,this.imageSize.width,this.imageSize.height,0,0,10,"noprint gsicon_image",this.alt,"image");this.image.style.cursor="pointer";this.dragCrosshair=GSUtil.createImage("",_globals.resourceURL+"dragCross.png",16,16,0,0,0,"noprint",null,"image");this.dragCrosshair.style.display="none";if(_globals.DEBUG){this.image.style.border="1px solid #FF0000"}if(this.printSrc!=null){this.printImage=GSUtil.createImage("",this.printSrc,this.printSize.width,this.printSize.height,0,0,0,"noscreen gsicon_printImage",null,"image")}if(this.shadowSrc!=null){this.shadow=GSUtil.createImage("",this.shadowSrc,this.shadowSize.width,this.shadowSize.height,0,0,0,"noprint gsicon_shadowImage",null,"image")}if(_browser.isGecko&&this.imageMap!=null){var a="map_"+GSIcon.nextId();this.image.setAttribute("usemap",a);this.htmlImageMap=GSUtil.createImageMap(a,this.imageMapShape,this.imageMap,"#",this.alt)}};GSIcon.prototype.setVisible=function(a){this.visible=a};GSIcon.prototype.render=function(e,g,b){if(this.canRender(e,g)){if(!this.rendered){e.iconContainer.appendChild(this.image);e.iconContainer.appendChild(this.dragCrosshair);if(this.printImage){e.iconContainer.appendChild(this.printImage)}if(this.shadow){e.iconShadowContainer.appendChild(this.shadow)}if(this.htmlImageMap){e.iconContainer.appendChild(this.htmlImageMap)}this.rendered=true}var f=e.translateToMapCoordinate(g);var d=(f.x+this.iconOffset.x);var c=!b?(f.y+this.iconOffset.y):(f.y+this.iconOffset.y)-(this.arcHeight<(Math.floor(this.imageSize.height*this.arcRatio))?++this.arcHeight:(Math.floor(this.imageSize.height*this.arcRatio)));if(_browser.isGecko||!b){GSUtil.positionElement(this.image,d,c)}if(b){this.repositionDragCrosshair(f.x,f.y)}if(this.printImage){GSUtil.positionElement(this.printImage,d,c)}if(this.shadow){GSUtil.positionElement(this.shadow,d,c)}var a=this.visible?"visible":"hidden";if(this.printImage){this.printImage.style.visibility=a}if(this.shadow){this.shadow.style.visibility=a}this.image.style.visibility=a;if(_globals.DEBUG){_console.debug("GSIcon: left: "+this.image.style.left+", top: "+this.image.style.top)}return true}else{this.image.style.visibility="hidden";if(this.printImage){this.printImage.style.visibility="hidden"}if(this.shadow){this.shadow.style.visibility="hidden"}return false}};GSIcon.prototype.canRender=function(b,d){var a=this.iconOffset.x*b.mpx;var c=this.iconOffset.y*b.mpx;return(d.x>b.minX&&d.x<b.maxX&&d.y>b.minY&&d.y<b.maxY)};GSIcon.prototype.repositionDragCrosshair=function(a,b){GSUtil.positionElement(this.dragCrosshair,a-8,b-8)};GSIcon.prototype.dragStart=function(b){document.body.style.cursor="move";var a=b.map.translateToMapCoordinate(b.coordinate);this.repositionDragCrosshair(a.x,a.y);this.dragCrosshair.style.display="block"};GSIcon.prototype.dragEnd=function(a,h,e){var f=this;var d=function(j,i){f.render(e.map,e.map.translateToRealWorldCoordinate(i),false)};var g=new GSPoint(a-this.iconOffset.x,h-this.iconOffset.y-this.arcHeight);var c=e.map.translateToMapCoordinate(e.coordinate);var b=new GSAnimator(g,c,24,200,d,null,function(){f.dragCrosshair.style.display="none";e.broadcastMessage("featureDragEnd",e)});b.animate();this.arcHeight=0;document.body.style.cursor="default"};GSIcon.prototype.getEventTarget=function(){return this.image};GSIcon.prototype.finalize=function(a){if(this.rendered){a.iconContainer.removeChild(this.image);if(this.htmlImageMap!=null){a.iconContainer.removeChild(this.htmlImageMap)}if(this.printImage!=null){a.iconContainer.removeChild(this.printImage)}if(this.shadow!=null){a.iconShadowContainer.removeChild(this.shadow)}this.rendered=false}};GSIcon.prototype.toString=function(){var a="";a+=("image src: "+this.imageSrc+"<br/>");a+=("print image src: "+this.printSrc+"<br/>");a+=("shadow image src: "+this.shadowSrc+"<br/>");a+=("icon offset: "+this.iconOffset+"<br/>");a+=("icon info window offset: "+this.iconInfoWindowOffset+"<br/>");if(_browser.isGecko&&this.imageMap){a+=("image map: "+this.imageMap.name)}return a};GSIcon.defaultIcon=new GSIcon();GSIcon.defaultIcon.imageSrc=_globals.resourceURL+"defaultIcon.png";GSIcon.defaultIcon.printSrc=_globals.resourceURL+"defaultIcon.gif";GSIcon.defaultIcon.shadowSrc=_globals.resourceURL+"defaultIconShadow.png";GSIcon.defaultIcon.imageSize=new GSDimension(22,16);GSIcon.defaultIcon.printSize=new GSDimension(22,16);GSIcon.defaultIcon.shadowSize=new GSDimension(25,19);if(_browser.isGecko){GSIcon.defaultIcon.imageMap=[0,0,0,14,16,14,18,15,21,15,21,12,19,10,19,0]}GSIcon.defaultIcon.iconOffset=new GSPoint(-22,-16);GSIcon.defaultIcon.iconInfoWindowOffset=new GSPoint(10,0);function GSLayer(a){this.name=a;this.visible=true;this.data=[];this.map}GSLayer.prototype.setVisible=function(c){this.visible=c;for(var b=0,a=this.data.length;b<a;b++){this.data[b].setVisible(c);if(c){this.data[b].render(this.map)}}};GSLayer.prototype.isVisible=function(){return this.visible};GSLayer.prototype.addFeatures=function(c){for(var b=0,a=c.length;b<a;b++){this.addFeature(c[b])}};GSLayer.prototype.addFeaturesJson=function(g,f){var b;if(arguments.length>2){b=[];for(var d=2,a=arguments.length;d<a;d++){b.push(arguments[d])}}for(var d=0,a=g.length;d<a;d++){var e=g[d].jsclass;if(e){if(window[e]){var c=new window[e](g[d]);if(f){f(c,g[d],b)}this.addFeature(c)}else{throw {name:"NoSuchClassException",message:"Trying to instantiate a non-existent class: "+e,toString:function(){return this.message}}}}}};GSLayer.prototype.addFeature=function(a){this.data.push(a);a.setVisible(this.visible);a.addToMap(this.map)};GSLayer.prototype.removeFeature=function(c){for(var b=0,a=this.data.length;b<a;b++){if(c==this.data[b]){c.finalize();this.data.splice(b,1)}}};GSLayer.prototype.clear=function(){for(var b=0,a=this.data.length;b<a;b++){this.data[b].finalize()}this.data.length=0};GSLayer.prototype.getBounds=function(){var e=[];for(var d=0,b=this.data.length;d<b;d++){var c=this.data[d];e.push(c.getBounds())}var a=GSUtil.getMinimum(GSUtil.getPropertyArray(e,"minX"));var h=GSUtil.getMinimum(GSUtil.getPropertyArray(e,"minY"));var g=GSUtil.getMaximum(GSUtil.getPropertyArray(e,"maxX"));var f=GSUtil.getMaximum(GSUtil.getPropertyArray(e,"maxY"));return new GSBounds(a,h,g,f)};GSLayer.prototype.toString=function(){var c="";for(var b=0,a=this.data.length;b<a;b++){c+=this.data[b].toString()}return c};function GSMap(b,c){if(!c){c={}}this.container=b;if(this.container){if((typeof this.container).toLowerCase()=="string"){this.container=document.getElementById(this.container)}}else{throw"Cannot create map, no container argument provided."}this.eventListeners={};this.isChildMap=GSUtil.stringToBoolean(GSUtil.getCaseInsensitiveProperty(c,"isChildMap",false));GSEventBroadcaster.initialize(this);this.centerOnDblClick=GSUtil.stringToBoolean(GSUtil.getCaseInsensitiveProperty(c,"centerOnDblClick",true));this.dragToPan=GSUtil.stringToBoolean(GSUtil.getCaseInsensitiveProperty(c,"dragToPan",true));this.panning=false;this.useMouseWheelZooming=GSUtil.stringToBoolean(GSUtil.getCaseInsensitiveProperty(c,"useMouseWheelZooming",true));this.useInfoWindow=GSUtil.stringToBoolean(GSUtil.getCaseInsensitiveProperty(c,"useInfoWindow",true));this.scaleRange=[2,4,8,16,32,64,128,256,512,1024,2048,4096];this.scaleRange.indexOf=function(g){for(var f=0,e=this.length;f<e;f++){if(g==this[f]){return f}}return -1};this.scaleIdx=Number(GSUtil.getCaseInsensitiveProperty(c,"zoomLevel",this.scaleRange.length-1));this.useScalebar=GSUtil.stringToBoolean(GSUtil.getCaseInsensitiveProperty(c,"useScalebar",true));this.mpx=this.scaleRange[this.scaleIdx];this.centerX=GSUtil.getCaseInsensitiveProperty(c,"centerX")?parseFloat(GSUtil.getCaseInsensitiveProperty(c,"centerX")):2530000;this.centerY=GSUtil.getCaseInsensitiveProperty(c,"centerY")?parseFloat(GSUtil.getCaseInsensitiveProperty(c,"centerY")):5990000;this.minX=1500000;this.minY=5700000;this.maxX=3500000;this.maxY=7300000;this.pxWidth=GSUtil.getCaseInsensitiveProperty(c,"width")?Number(GSUtil.getCaseInsensitiveProperty(c,"width")):500;this.pxHeight=GSUtil.getCaseInsensitiveProperty(c,"height")?Number(GSUtil.getCaseInsensitiveProperty(c,"height")):400;this.resizeable=GSUtil.stringToBoolean(GSUtil.getCaseInsensitiveProperty(c,"resizeable",true));if(!this.resizeable){this.container.style.width=this.pxWidth+"px";this.container.style.height=this.pxHeight+"px"}if(GSUtil.getComputedStyle(this.container,"position")!="absolute"){this.container.style.position="relative"}this.container.style.overflow="hidden";this.controls=new Array();this.layers=new Array();var a=new GSLayer("base");a.map=this;this.layers.push(a);if(!this.isChildMap){this.addLogo()}this.scalebar=undefined;if(this.useScalebar){this.enableScalebar()}if(this.resizeable){this.sizeToContainerDimensions()}this.createOverlayContainers();this.infoWindow=undefined;if(this.useInfoWindow){this.infoWindow=new GSInfoWindow(this)}this.addMapEventListeners();var d=GSUtil.getCaseInsensitiveProperty(c,"mapControls");if(d&&d!="none"){this.addControl(d)}this.recalculateMapExtents();if(GSUtil.getCaseInsensitiveProperty(c,"centerX")&&GSUtil.getCaseInsensitiveProperty(c,"centerY")&&GSUtil.getCaseInsensitiveProperty(c,"zoomLevel")!=undefined){this.update(function(){this.broadcastMessage("mapZoomed",this,0,this.scaleIdx)})}if(this.useMouseWheelZooming){this.enableMouseWheelZooming()}this.logger=new GSLogger(this)}GSMap.SUPPRESS_MESSAGING=1;GSMap.ZOOM_CONTROL="zoom";GSMap.COMPACT_ZOOM_CONTROL="compact-zoom";GSMap.TEXT_ZOOM_CONTROL="text-zoom";GSMap.MAP_CONTROL="map";GSMap.SNAPBACK_CONTROL="snapback";GSMap.prototype.addLogo=function(){var a=GSUtil.createImage("geosmartLogo",_globals.resourceURL+"smartfindLogo.png",120,19,undefined,undefined,40,undefined,"GeoSmart Web Site");a.style.position="absolute";a.style.cursor="pointer";GSUtil.positionElement(a,undefined,undefined,0,0);this.container.appendChild(a);GSEventManager.addEventListener(a,"click",function(b){window.open("http://www.geosmart.co.nz","geosmart");GSUtil.cancelEvent(b)})};GSMap.prototype.setMapOptions=function(a){for(var b in a){switch(b){case"centerOnDblClick":this.centerOnDblClick=a[b];break;case"dragToPan":this.dragToPan=a[b];break;case"useMouseWheelZooming":this.useMouseWheelZooming=a[b];if(this.useMouseWheelZooming){this.enableMouseWheelZooming()}else{this.disableMouseWheelZooming()}break;case"useInfoWindow":this.useInfoWindow=a[b];break;case"useScalebar":this.useScalebar=a[b];if(this.useScalebar){this.enableScalebar()}else{this.disableScalebar()}break;case"resizeable":this.resizeable=a[b];if(this.resizeable){this.enableResizing()}else{this.disableResizing()}break;default:throw'Property "'+b+'" not supported by GSMap';break}}};GSMap.prototype.enableScalebar=function(){this.scalebarPreloads=[];var b;for(var c=0,a=this.scaleRange.length;c<a;c++){b=new Image();b.src=_globals.resourceURL+"scalebar/"+c+".png";this.scalebarPreloads.push(b)}var d=_globals.resourceURL+"scalebar/"+this.scaleIdx+".png";this.scalebar=GSUtil.createImage("scalebar",d,220,30,null,null,20,"noprint");GSUtil.positionElement(this.scalebar,7,undefined,undefined,7);this.container.appendChild(this.scalebar)};GSMap.prototype.disableScalebar=function(){this.container.removeChild(this.scalebar)};GSMap.prototype.enableMouseWheelZooming=function(){var a=function(b){if(b<0){if(this.scaleIdx+1<=(this.scaleRange.length-1)){this.zoom(this.scaleIdx+1)}}else{if(this.scaleIdx-1>=0){this.zoom(this.scaleIdx-1)}}};this.eventListeners.mousewheel_zooming=GSMouseWheel.bind(this.container,this,a,true)};GSMap.prototype.disableMouseWheelZooming=function(){GSEventManager.release(this.eventListeners.mousewheel_zooming)};GSMap.prototype.enableResizing=function(){this.eventListeners.resize=GSEventManager.bind(window,"resize",this,this.updateSize);this.resizeable=true};GSMap.prototype.disableResizing=function(){if(this.eventListeners.resize){GSEventManager.release(this.eventListeners.resize)}this.resizeable=false};GSMap.prototype.sizeToContainerDimensions=function(){this.pxWidth=this.container.offsetWidth;this.pxHeight=this.container.offsetHeight};GSMap.prototype.remove=function(){this.finalize()};GSMap.prototype.finalize=function(){if(this.infoWindow){this.infoWindow.finalize()}this.clearLayers();while(this.container.hasChildNodes()){this.container.removeChild(this.container.firstChild)}if(!this.isChildMap){GSEventCache.flush()}};GSMap.prototype.updateScalebar=function(){var a=_globals.resourceURL+"scalebar/"+this.scaleIdx+".png";GSUtil.setImageSrc(this.scalebar,a)};GSMap.prototype.updateSize=function(){var a=new GSDimension(this.pxWidth,this.pxHeight);this.sizeToContainerDimensions();this.recalculateMapExtents();this.broadcastMessage("mapResized",this,a,new GSDimension(this.pxWidth,this.pxHeight));var b=this;setTimeout(function(){b.update()},10)};GSMap.prototype.getMapCenter=function(){return new GSPoint(this.centerX,this.centerY)};GSMap.prototype.getZoomLevel=function(){return this.scaleIdx};GSMap.prototype.getSize=function(){return new GSDimension(this.pxWidth,this.pxHeight)};GSMap.prototype.setSize=function(a){if(this.resizeable){this.pxWidth=a.width;this.pxHeight=a.height}else{throw"Map is not configured as resizeable. Use GSMap.setMapOptions() to set map as resizeable before calling GSMap.setSize()"}};GSMap.prototype.setBounds=function(b,n){var f=this.mpx;var c=new GSBounds(this.minX,this.minY,this.maxX,this.maxY);var j=b.minX;var i=b.minY;var d=b.maxX;var a=b.maxY;var e=d-j;var q=a-i;var l=e/2;var k=q/2;this.centerX=j+l;this.centerY=i+k;this.mpx=Math.ceil(Math.max(e/this.pxWidth,q/this.pxHeight));this.mpx=this.fitToScaleRange(this.mpx);this.scaleIdx=this.scaleRange.indexOf(this.mpx);var o=(this.pxWidth*this.mpx);var h=(this.pxHeight*this.mpx);this.minX=this.centerX-(o/2);this.minY=this.centerY-(h/2);this.maxX=this.centerX+(o/2);this.maxY=this.centerY+(h/2);this.centerX=this.minX+((this.maxX-this.minX)/2);this.centerY=this.minY+((this.maxY-this.minY)/2);var g=new GSBounds(this.minX,this.minY,this.maxX,this.maxY);var m=this.mpx;this.update(function(){if(this.scalebar&&f!=m){this.updateScalebar()}this.broadcastMessage("mapBoundsChanged",this,c,g);if(n){n()}})};GSMap.prototype.createOverlayContainers=function(){this.tileContainer=GSUtil.createContainer(this.container,null,null,null,0,0,null,5);this.mapContentContainer=GSUtil.createContainer(this.container,"mapContent",null,null,0,0,null,10);this.mapContentContainer.style.width="21600px";this.mapContentContainer.style.height="21600px";this.lineContainer=GSUtil.createContainer(this.mapContentContainer,null,null,null,0,0,null,15);if(_browser.isVectorGraphicsCapable()){this.vectorContainer=this.createVectorContainer(this.mapContentContainer,17)}this.iconShadowContainer=GSUtil.createContainer(this.mapContentContainer,null,null,null,0,0,null,20);this.iconContainer=GSUtil.createContainer(this.mapContentContainer,null,null,null,0,0,null,30)};GSMap.prototype.createVectorContainer=function(b,d){var a=null;var c=this;if(_browser.svg){a=document.createElementNS(_globals.svgns,"svg");b.appendChild(a);a.style.zIndex=d;GSUtil.positionElement(a,0,0);a.setAttribute("width",this.pxWidth+"px");a.setAttribute("height",this.pxHeight+"px");a.mapResized=function(){this.setAttribute("width",c.pxWidth+"px");this.setAttribute("height",c.pxHeight+"px")}}else{if(_browser.isIE6up){a=document.createElement(_globals.vmlnsPrefix+":group");b.appendChild(a);a.style.zIndex=d;GSUtil.positionElement(a,0,0);a.style.width=this.pxWidth+"px";a.style.height=this.pxHeight+"px";a.setAttribute("coordsize",this.pxWidth+" "+this.pxHeight);a.mapResized=function(){this.style.width=c.pxWidth+"px";this.style.height=c.pxHeight+"px";this.setAttribute("coordsize",c.pxWidth+" "+c.pxHeight)}}}this.addListener(a);return a};GSMap.prototype.dragStart=function(b){if(this.panning){return}if(this.dragToPan){b=b?b:window.event;this.startPixel=new GSPoint(b.clientX,b.clientY);var a=this;this.dragTimer=setInterval(function(){clearInterval(a.dragTimer);a.initDrag(b)},150);GSUtil.cancelEvent(b)}};GSMap.prototype.initDrag=function(){this.panning=true;this.startTilePixel=new GSPoint(parseInt(this.tileContainer.style.left),parseInt(this.tileContainer.style.top));this.startNzmg=new GSPoint(this.centerX,this.centerY);this.eventListeners.drag_mousemove=GSEventManager.bind(document,"mousemove",this,this.dragMove);this.eventListeners.drag_mouseup=GSEventManager.bind(document,"mouseup",this,this.dragStop)};GSMap.prototype.dragMove=function(a){if(!a){a=window.event}GSUtil.positionElement(this.mapContentContainer,(a.clientX-this.startPixel.x),(a.clientY-this.startPixel.y));GSUtil.positionElement(this.tileContainer,(this.startTilePixel.x+(a.clientX-this.startPixel.x)),(this.startTilePixel.y+(a.clientY-this.startPixel.y)));GSUtil.cancelEvent(a)};GSMap.prototype.cancelDrag=function(a){if(this.dragTimer){clearInterval(this.dragTimer)}};GSMap.prototype.dragStop=function(c){c=c?c:window.event;var b=(c.clientX-this.startPixel.x)*this.mpx;var a=(c.clientY-this.startPixel.y)*this.mpx;if(b!=0||a!=0){this.centerAtCoordinate({x:this.startNzmg.x-(c.clientX-this.startPixel.x)*this.mpx,y:this.startNzmg.y+(c.clientY-this.startPixel.y)*this.mpx},null,GSMap.SUPPRESS_MESSAGING)}this.panning=false;GSEventManager.release(this.eventListeners.drag_mousemove);GSEventManager.release(this.eventListeners.drag_mouseup);this.broadcastMessage("mapBoundsChanged",this);GSUtil.positionElement(this.mapContentContainer,0,0);this.startPixel=undefined;this.startTilePixel=undefined;this.startNzmg=undefined;this.dragMoveToken=undefined;this.dragStopToken=undefined;GSUtil.cancelEvent(c);this.logger.log("map",{map_op:"drag",tile_count:this.tileCount})};GSMap.prototype.click=function(a){if(!this.panning){if(!a){a=window.event}var b=this.getClickCoordinate(a);this.broadcastMessage("mapClicked",this,b,a)}else{self.panning=false}GSUtil.cancelEvent(a)};GSMap.prototype.dblclick=function(a){var b=this.getClickCoordinate(a);if(this.centerOnDblClick){this.panTo(b)}this.broadcastMessage("mapDblClicked",this,b,a);GSUtil.cancelEvent(a)};GSMap.prototype.addMapEventListeners=function(){this.eventListeners.mousedown=GSEventManager.bind(this.container,"mousedown",this,this.dragStart);this.eventListeners.mouseup=GSEventManager.bind(this.container,"mouseup",this,this.cancelDrag);this.eventListeners.click=GSEventManager.bind(this.container,"click",this,this.click);this.eventListeners.dblclick=GSEventManager.bind(this.container,"dblclick",this,this.dblclick);if(this.resizeable){this.enableResizing()}this.eventListeners.unload=GSEventManager.bind(window,"unload",this,this.finalize)};GSMap.prototype.getClickPixelCoordinate=function(a){if(a.offsetX){return{x:a.offsetX,y:a.offsetY}}else{if(a.layerX){return{x:a.layerX,y:a.layerY}}else{return{x:(window.pageXOffset+a.clientX-GSUtil.findPosX(this)),y:(window.pageYOffset+a.clientY-GSUtil.findPosY(this))}}}};GSMap.prototype.getClickCoordinate=function(a){return this.translateToRealWorldCoordinate(GSUtil.getClickPixelCoordinate(a,this.container))};GSMap.prototype.zoom=function(c,a){var b=this.scaleIdx;if(c<0||c>=this.scaleRange.length){alert("Zoom level out of range: "+c);return}this.mpx=this.scaleRange[c];this.scaleIdx=c;this.recalculateMapExtents(true);if(b!=this.scaleIdx){this.broadcastMessage("preMapZoom",this)}this.update(function(){if(this.scalebar){this.updateScalebar()}this.broadcastMessage("mapZoomed",this,b,this.scaleIdx);if(a){a()}this.logger.log("map",{map_op:"zoom",tile_count:this.tileCount})})};GSMap.prototype.panTo=function(h,a){this.panning=true;var e=this.getBounds();if(!e.contains(h)){return this.centerAtCoordinate(h,a)}var g=this.translateToMapCoordinate(new GSPoint(this.centerX,this.centerY));var f=this.translateToMapCoordinate(h);var d=this;var c=function(j,i){i.x=Math.floor(i.x);i.y=Math.floor(i.y);GSUtil.positionElement(d.mapContentContainer,(g.x-i.x),(g.y-i.y));d.centerAtCoordinate(d.translateToRealWorldCoordinate(i,e),null,GSMap.SUPPRESS_MESSAGING)};var b=new GSAnimator(g,f,16,500,c,null,function(){d.panning=false;d.broadcastMessage("mapBoundsChanged",d,e,d.getBounds());GSUtil.positionElement(d.mapContentContainer,0,0);if(a){a()}d.logger.log("map",{map_op:"panTo",tile_count:this.tileCount})});b.animate()};GSMap.prototype.centerAtCoordinate=function(e,a,d){var b=new GSBounds(this.minX,this.minY,this.maxX,this.maxY);this.centerX=e.x;this.centerY=e.y;this.recalculateMapExtents();var c=new GSBounds(this.minX,this.minY,this.maxX,this.maxY);this.update(function(){if(!d){this.broadcastMessage("mapBoundsChanged",this,b,c);this.logger.log("map",{map_op:"centerAtCoordinate",tile_count:this.tileCount})}if(a){a()}})};GSMap.prototype.centerAndZoom=function(d,c,a){this.broadcastMessage("mapZoom",this);var b=this.scaleIdx;this.centerX=d.x;this.centerY=d.y;if(c!=undefined){if(c<0||c>=this.scaleRange.length){alert("Zoom level out of range: "+c);return}this.mpx=this.scaleRange[c];this.scaleIdx=c}this.recalculateMapExtents();this.update(function(){if(this.scalebar){this.updateScalebar()}this.broadcastMessage("mapZoomed",this,b,this.scaleIdx);if(a){a()}this.logger.log("map",{map_op:"centerAndZoom",tile_count:this.tileCount})})};GSMap.prototype.centerOnNewZealand=function(b){var d=this.scaleIdx;this.centerX=_globals.nzCenterX;this.centerY=_globals.nzCenterY;for(var c=0,a=this.scaleRange.length;c<a;c++){if(_globals.nzCenterY+((this.scaleRange[c]*this.pxHeight)/2)>_globals.nzTopY){this.mpx=this.scaleRange[c];this.scaleIdx=c;break}}this.recalculateMapExtents();if(d!=this.scaleIdx){this.broadcastMessage("preMapZoom",this)}this.update(function(){if(this.scalebar){this.updateScalebar()}this.broadcastMessage("mapZoomed",this,d,this.scaleIdx);if(b){b()}this.logger.log("map",{map_op:"centerOnNewZealand",tile_count:this.tileCount})})};GSMap.prototype.fitToScaleRange=function(d){var e=this.scaleRange[0];for(var b=0,a=this.scaleRange.length;b<a;b++){if((typeof this.scaleRange[b]).toString().toLowerCase()!="function"){var c=this.scaleRange[b];if(c==d){return d}else{if(c>d){e=c;break}}}}return e};GSMap.prototype.addControl=function(e,a){var d=null;var c=false;if(GSControl.prototype.isPrototypeOf){c=GSControl.prototype.isPrototypeOf(e)}else{if(e.__proto__){c=(typeof e).toLowerCase()=="object"}}if(c){d=e}else{d=this.instantiateControl(e)}if(d!=null){this.controls.push(d);var b=d.render(this);this.container.appendChild(b);d.setElement(b);d.setPosition(a?a:d.getDefaultPosition())}return d};GSMap.prototype.removeControl=function(e){var c="";var b=false;if(GSControl.prototype.isPrototypeOf){b=GSControl.prototype.isPrototypeOf(e)}else{if(e.__proto__){b=(typeof e).toLowerCase()=="object"}}if(b){c=e.name}else{c=e}for(var d=0,a=this.controls.length;d<a;d++){if(this.controls[d].name==c){this.controls[d].remove(this);this.controls.splice(d,1);return true}}return false};GSMap.prototype.instantiateControl=function(a){var b;switch(a){case GSMap.ZOOM_CONTROL:b=new GSZoomControl();break;case GSMap.COMPACT_ZOOM_CONTROL:b=new GSCompactZoomControl();break;case GSMap.MAP_CONTROL:b=new GSMapControl();break;case GSMap.TEXT_ZOOM_CONTROL:b=new GSTextZoomControl();break;case GSMap.SNAPBACK_CONTROL:b=new GSSnapbackControl();break}return b};GSMap.prototype.centerOnLayer=function(c,b){var e=this.getLayer(c);if(e==undefined){return}e.mapBoundsChanged=function(k,i,j){this.setVisible(true);k.removeListener(this)};this.addListener(e);var g=e.getBounds();var f=g.maxX-g.minX;var a=g.maxY-g.minY;var d=f*0.05;var h=a*0.05;g.minX-=d;g.maxX+=d;g.minY-=h;g.maxY+=h;this.setBounds(g,b)};GSMap.prototype.createLayer=function(a){var b=this.getLayer(a);if(b!=undefined){this.removeLayer(a)}b=new GSLayer(a);b.map=this;this.layers.push(b);return b};GSMap.prototype.removeLayer=function(b){if(b=="base"){return}for(var d=0,a=this.layers.length;d<a;d++){var c=this.layers[d];if(c.name==b){c.clear();this.layers.splice(d,1);return}}};GSMap.prototype.clearLayers=function(){for(var b=0,a=this.layers.length;b<a;b++){this.layers[b].clear()}};GSMap.prototype.getLayer=function(b){for(var d=0,a=this.layers.length;d<a;d++){var c=this.layers[d];if(c.name==b){return c}}return null};GSMap.prototype.addFeature=function(b){var a=this.getLayer("base");a.addFeature(b)};GSMap.prototype.removeFeature=function(b){var a=this.getLayer("base");a.removeFeature(b)};GSMap.prototype.recalculateMapExtents=function(a){var g=this.pxWidth*this.mpx;var b=this.pxHeight*this.mpx;if(a&&this.infoWindow&&this.infoWindow.isOpen){var j=this.infoWindow.coordinate;var d=j.x-this.minX;var c=j.y-this.minY;var e=this.maxX-this.minX;var h=this.maxY-this.minY;var f=d/e;var i=c/h;this.minX=j.x-(f*g);this.maxX=j.x+((1-f)*g);this.minY=j.y-(i*b);this.maxY=j.y+((1-i)*b);this.centerX=this.minX+(g/2);this.centerY=this.minY+(b/2)}else{this.minX=this.centerX-(g/2);this.minY=this.centerY-(b/2);this.maxX=this.centerX+(g/2);this.maxY=this.centerY+(b/2)}};GSMap.prototype.translateToMapCoordinate=function(e){var b=e.x;var d=e.y;var c=(b-this.minX);var a=(this.maxY-d);return new GSPoint((c/this.mpx),(a/this.mpx))};GSMap.prototype.translateToRealWorldCoordinate=function(f,c){if(!c){c=new GSBounds(this.minX,this.minY,this.maxX,this.maxY)}var b=this.pxWidth*this.mpx;var d=this.pxHeight*this.mpx;var a=c.minX+(b*(f.x/this.pxWidth));var e=c.maxY-(d*(f.y/this.pxHeight));return new GSPoint(Math.round(a),Math.round(e))};GSMap.prototype.getBounds=function(){return new GSBounds(this.minX,this.minY,this.maxX,this.maxY)};GSMap.prototype.featureClicked=function(a){this.broadcastMessage("mapClicked",this,"click",a)};GSMap.prototype.update=function(l){var k=_globals.tilePxWidth*this.mpx;var j=_globals.tilePxHeight*this.mpx;var i=Math.floor(this.minX/k)*k;var d=Math.floor(this.maxX/k)*k;var h=Math.floor(this.minY/j)*j;var b=Math.ceil(this.maxY/j)*j;while(this.tileContainer.firstChild){this.tileContainer.removeChild(this.tileContainer.firstChild)}GSUtil.positionElement(this.tileContainer,Math.floor((i-this.minX)/this.mpx),Math.ceil((this.maxY-b)/this.mpx));var c=xIdx=0;for(var e=b;e>=h;e-=j){xIdx=0;for(var g=i;g<=d;g+=k){var a=this.buildTileUrl(g,e,this.mpx);var f=this.createTileImage(a,xIdx*_globals.tilePxWidth,c*_globals.tilePxHeight);this.tileContainer.appendChild(f);xIdx++}c++}this.tileCount=c*xIdx;if(l){l.call(this)}};GSMap.prototype.createTileImage=function(d,c,b){var a=document.createElement("img");a.border=0;a.style.position="absolute";a.style.left=c+"px";a.style.top=b+"px";if(_browser.isIE){a.setAttribute("galleryimg","no");a.unselectable="on";a.onselectstart=GSUtil.cancelEvent}else{a.style.MozUserSelect="none"}a.src=d;return a};GSMap.prototype.openMapBlowup=function(e,b){b=b?b:{};if(b.offset==undefined){b.offset=new GSPoint(0,0)}if(b.zoomLevel==undefined){b.zoomLevel=0}if(b.size==undefined){b.size=new GSDimension(180,180)}var c=document.createElement("div");c.style.backgroundColor="#c5c5c5";c.style.border="1px solid #a0a0a4";var a={width:b.size.width+15,height:b.size.height,isChildMap:true,resizeable:false,useScalebar:false,centerOnDblClick:true,dragToPan:true,useInfoWindow:false,useMouseWheelZooming:false};var d=new GSMap(c,a);d.addControl(GSMap.COMPACT_ZOOM_CONTROL);d.addControl(GSMap.SNAPBACK_CONTROL);this.infoWindow.open(e,c,{offset:b.offset,onopen:function(){d.centerAndZoom(e,b.zoomLevel,function(){d.markForSnapback();if(b.onopen){b.onopen(d)}})},onclose:function(){if(b.onclose){b.onclose(d)}d.finalize()}})};GSMap.prototype.openInfoWindow=function(c,b,a){this.infoWindow.open(c,b,a)};GSMap.prototype.closeInfoWindow=function(){this.infoWindow.close()};GSMap.prototype.getInfoWindow=function(){if(this.infoWindow){return this.infoWindow}else{return undefined}};GSMap.prototype.buildTileUrl=function(a,c,b){return _globals.tilesURL+"/"+b+"/"+a+"/"+a+"_"+c+".png"};GSMap.prototype.markForSnapback=function(){this.snapbackState={coordinate:this.getMapCenter(),zoomLevel:this.scaleIdx}};GSMap.prototype.snapback=function(){this.centerAndZoom(this.snapbackState.coordinate,this.snapbackState.zoomLevel)};function GSPoint(a,b){this.x=Number(a);this.y=Number(b)}GSPoint.prototype.toString=function(){return"Point: x=["+this.x+"], y=["+this.y+"]"};function GSPointFeature(b){GSEventBroadcaster.initialize(this);this.id=GSUtil.getCaseInsensitiveProperty(b,"id");this.coordinate=GSUtil.getCaseInsensitiveProperty(b,"coordinate");if(this.coordinate==undefined){var a=GSUtil.getCaseInsensitiveProperty(b,"x");var c=GSUtil.getCaseInsensitiveProperty(b,"y");this.coordinate=(a&&c)?new GSPoint(a,c):new GSPoint(0,0)}this.name=GSUtil.getCaseInsensitiveProperty(b,"name");this.suburb=GSUtil.getCaseInsensitiveProperty(b,"suburb");this.district=GSUtil.getCaseInsensitiveProperty(b,"district");this.region=GSUtil.getCaseInsensitiveProperty(b,"region");this.iconType=undefined;this.infoHtml=GSUtil.getCaseInsensitiveProperty(b,"infoHtml");this.map=undefined;this.draggable=GSUtil.stringToBoolean(GSUtil.getCaseInsensitiveProperty(b,"draggable",false));this.onmap=false;this.isShowingInfo=false;this.visible=true;this.eventListeners={};this.icon=GSUtil.getCaseInsensitiveProperty(b,"icon");if(!this.icon){this.icon=new GSIcon(GSIcon.defaultIcon)}this.icon.alt=this.name;this.icon.prerender();if(this.draggable){this.enableDragging()}this.icon.setVisible(this.visible)}GSPointFeature.prototype.enableDragging=function(){var c=this.icon.getEventTarget();Drag.init(c);var a=this;var b=a.icon;c.onDragStart=function(d,e){if(a.isShowingInfo){a.map.infoWindow.close()}b.dragStart(a);a.broadcastMessage("featureDragStart",a)};c.onDrag=function(d,e){e+=b.arcHeight;a.coordinate=a.map.translateToRealWorldCoordinate(new GSPoint(d-b.iconOffset.x,e-b.iconOffset.y));b.render(a.map,a.coordinate,true);a.hasDragged=true;a.broadcastMessage("featureDrag",a)};c.onDragEnd=function(d,e){if(a.hasDragged){b.dragEnd(d,e,a);setTimeout(function(){a.hasDragged=false},250)}}};GSPointFeature.prototype.clone=function(){var b=this.map;var a=this.icon;this.map=undefined;this.icon=undefined;var c=GSUtil.clone(this);c.icon=new GSIcon(a);c.icon.alt=this.name;c.icon.prerender();c.onmap=false;c.isShowingInfo=false;this.map=b;this.icon=a;return c};GSPointFeature.prototype.setVisible=function(a){this.visible=a;if(this.icon){this.icon.setVisible(a);if(this.onmap){this.icon.render(this.map,this.coordinate)}}};GSPointFeature.prototype.isVisible=function(){return this.visible};GSPointFeature.prototype.isDraggable=function(){return this.draggable};GSPointFeature.prototype.setIcon=function(e){this.icon.finalize(this.map);this.icon=e;this.icon.prerender();if(this.draggable){this.enableDragging()}for(var c in this.eventListeners){if((typeof this.eventListeners[c]).toLowerCase()=="array"){for(var a=this.eventListeners[c].length,b=null;b=this.eventListeners[c][a];a--){var d=GSEventCache.handlers[b];var f=this.icon.getEventTarget();if(f){GSEventManager.bind(f,d[1],this,d[2])}}}else{var d=GSEventCache.handlers[this.eventListeners[c]];var f=e.getEventTarget();if(f){GSEventManager.bind(f,d[1],this,d[2])}}}if(this.onmap){this.icon.render(this.map,this.coordinate)}};GSPointFeature.prototype.addEventHandler=function(b,c){var d=this.icon.getEventTarget();if(d){var a=GSEventManager.bind(d,b,this,function(){if(!this.hasDragged){c.apply(this,arguments)}});this.addListenerToken(b,a);return a}};GSPointFeature.prototype.addListenerToken=function(a,b){if(this.eventListeners[a]){if((typeof this.eventListeners[a]).toLowerCase()!="array"){this.eventListeners[a]=[this.eventListeners[a]]}this.eventListeners[a].push(b)}else{this.eventListeners[a]=b}};GSPointFeature.prototype.removeEventHandler=function(a){GSEventManager.release(a)};GSPointFeature.prototype.openMapBlowup=function(b){b=b?b:0;if(this.onmap){this.isShowingInfo=true;var a=this.icon.iconOffset.x+this.icon.iconInfoWindowOffset.x;var d=this.icon.iconOffset.y+this.icon.iconInfoWindowOffset.y;var c=this.clone();this.map.openMapBlowup(this.coordinate,{zoomLevel:0,offset:new GSPoint(a,d),onopen:function(e){e.addFeature(c)}})}};GSPointFeature.prototype.showInfoWindow=function(b){if(this.onmap){this.isShowingInfo=true;this.map.featureClicked(this);if(this.map.infoWindow){b=b!=undefined?b:this.infoHtml;var a=this.icon.iconOffset.x+this.icon.iconInfoWindowOffset.x;var c=this.icon.iconOffset.y+this.icon.iconInfoWindowOffset.y;this.map.openInfoWindow(this.coordinate,b,{offset:new GSPoint(a,c)})}else{throw"Info window is not enabled for the map this feature has been added to"}}};GSPointFeature.prototype.addToMap=function(a){this.map=a;a.addListener(this);this.onmap=true;this.render(a)};GSPointFeature.prototype.mapClicked=function(b,a){if(_globals.DEBUG){_console.debug("mapClicked: "+a)}};GSPointFeature.prototype.mapResized=function(c,b,a){if(_globals.DEBUG){_console.debug("mapResized: "+b+"\n"+a)}this.render(c)};GSPointFeature.prototype.mapZoomed=function(c,b,a){if(_globals.DEBUG){_console.debug("mapZoomed: "+b+"\n"+a)}this.render(c)};GSPointFeature.prototype.mapBoundsChanged=function(c,a,b){if(_globals.DEBUG){_console.debug("mapBoundsChanged: "+a+"\n"+b)}this.render(c)};GSPointFeature.prototype.infoWindowOpened=function(){};GSPointFeature.prototype.infoWindowClosed=function(a){if(this.isShowingInfo){this.isShowingInfo=false}};GSPointFeature.prototype.getBounds=function(){return new GSBounds(this.coordinate.x,this.coordinate.y,this.coordinate.x,this.coordinate.y)};GSPointFeature.prototype.render=function(a){this.icon.render(a,this.coordinate)};GSPointFeature.prototype.finalize=function(d){for(var c in this.eventListeners){if((typeof this.eventListeners[c]).toLowerCase()=="array"){for(var a=this.eventListeners[c].length,b=null;b=this.eventListeners[c][a];a--){GSEventManager.release(b)}}else{GSEventManager.release(this.eventListeners[c])}}if(this.onmap){this.icon.finalize(this.map);if(this.isShowingInfo){this.map.infoWindow.close()}this.map.removeListener(this)}};GSPointFeature.prototype.toString=function(){var a="Feature:<br/>";for(p in this){if(this[p] instanceof Function){a+=(p+" : [Function]<br/>")}else{a+=(p+" : "+this[p]+"<br/>")}}return a};var Drag={obj:null,init:function(d,h,f,b,e,a,i,g,j,c){d.onmousedown=Drag.start;if(d.addEventListener){d.addEventListener("click",Drag.stopPropagation,false);d.addEventListener("dblclick",Drag.stopPropagation,false);d.addEventListener("contextmenu",Drag.stopPropagation,false)}else{if(d.attachEvent){d.attachEvent("onclick",Drag.stopPropagation);d.attachEvent("ondblclick",Drag.stopPropagation);d.attachEvent("oncontextmenu",Drag.stopPropagation)}else{d["on"+eventType]=Drag.stopPropagation}}d.hmode=i?false:true;d.vmode=g?false:true;d.root=h&&h!=null?h:d;if(d.hmode&&isNaN(parseInt(d.root.style.left))){d.root.style.left="0px"}if(d.vmode&&isNaN(parseInt(d.root.style.top))){d.root.style.top="0px"}if(!d.hmode&&isNaN(parseInt(d.root.style.right))){d.root.style.right="0px"}if(!d.vmode&&isNaN(parseInt(d.root.style.bottom))){d.root.style.bottom="0px"}d.minX=typeof f!="undefined"?f:null;d.minY=typeof e!="undefined"?e:null;d.maxX=typeof b!="undefined"?b:null;d.maxY=typeof a!="undefined"?a:null;d.xMapper=j?j:null;d.yMapper=c?c:null;d.root.onDragStart=new Function();d.root.onDragEnd=new Function();d.root.onDrag=new Function()},start:function(b){Drag.stopPropagation(b);var c=Drag.obj=this;b=Drag.fixE(b);var d=parseInt(c.vmode?c.root.style.top:c.root.style.bottom);var a=parseInt(c.hmode?c.root.style.left:c.root.style.right);c.root.onDragStart(a,d);c.lastMouseX=b.clientX;c.lastMouseY=b.clientY;if(c.hmode){if(c.minX!=null){c.minMouseX=b.clientX-a+c.minX}if(c.maxX!=null){c.maxMouseX=c.minMouseX+c.maxX-c.minX}}else{if(c.minX!=null){c.maxMouseX=-c.minX+b.clientX+a}if(c.maxX!=null){c.minMouseX=-c.maxX+b.clientX+a}}if(c.vmode){if(c.minY!=null){c.minMouseY=b.clientY-d+c.minY}if(c.maxY!=null){c.maxMouseY=c.minMouseY+c.maxY-c.minY}}else{if(c.minY!=null){c.maxMouseY=-c.minY+b.clientY+d}if(c.maxY!=null){c.minMouseY=-c.maxY+b.clientY+d}}document.onmousemove=Drag.drag;document.onmouseup=Drag.end;return false},drag:function(f){Drag.stopPropagation(f);f=Drag.fixE(f);var g=Drag.obj;var c=f.clientY;var d=f.clientX;var i=parseInt(g.vmode?g.root.style.top:g.root.style.bottom);var b=parseInt(g.hmode?g.root.style.left:g.root.style.right);var a,h;if(g.minX!=null){d=g.hmode?Math.max(d,g.minMouseX):Math.min(d,g.maxMouseX)}if(g.maxX!=null){d=g.hmode?Math.min(d,g.maxMouseX):Math.max(d,g.minMouseX)}if(g.minY!=null){c=g.vmode?Math.max(c,g.minMouseY):Math.min(c,g.maxMouseY)}if(g.maxY!=null){c=g.vmode?Math.min(c,g.maxMouseY):Math.max(c,g.minMouseY)}a=b+((d-g.lastMouseX)*(g.hmode?1:-1));h=i+((c-g.lastMouseY)*(g.vmode?1:-1));if(g.xMapper){a=g.xMapper(i)}else{if(g.yMapper){h=g.yMapper(b)}}Drag.obj.root.style[g.hmode?"left":"right"]=a+"px";Drag.obj.root.style[g.vmode?"top":"bottom"]=h+"px";Drag.obj.lastMouseX=d;Drag.obj.lastMouseY=c;Drag.obj.root.onDrag(a,h);return false},end:function(a){Drag.stopPropagation(a);document.onmousemove=null;document.onmouseup=null;Drag.obj.root.onDragEnd(parseInt(Drag.obj.root.style[Drag.obj.hmode?"left":"right"]),parseInt(Drag.obj.root.style[Drag.obj.vmode?"top":"bottom"]));Drag.obj=null},fixE:function(a){if(typeof a=="undefined"){a=window.event}if(typeof a.layerX=="undefined"){a.layerX=a.offsetX}if(typeof a.layerY=="undefined"){a.layerY=a.offsetY}return a},stopPropagation:function(a){a=a?a:window.event;if(a.stopPropagation){a.preventDefault();a.stopPropagation()}else{a.cancelBubble=true;a.returnValue=false}}};function GSRasterImageFeature(a){GSEventBroadcaster.initialize(this);this.callback=a;this.map=null;this.image=null}GSRasterImageFeature.prototype.setVisible=function(a){this.visible=a;if(this.image){this.image.style.visibility=a?"visible":"hidden"}};GSRasterImageFeature.prototype.addToMap=function(a){this.map=a;this.map.addListener(this);this.render(a)};GSRasterImageFeature.prototype.render=function(){if(!this.map){throw new Error("GSRasterImageFeature has not been added to a map")}if(this.image){this.map.lineContainer.removeChild(this.image)}this.image=window.document.createElement("img");this.image.className="gsimagefeature";if(_browser.isIE){this.image.setAttribute("galleryimg","no");this.image.unselectable="on";this.image.onselectstart=GSUtil.cancelEvent}else{this.image.style.MozUserSelect="none"}this.image.src=this.callback(this.map.scaleIdx,this.map.getBounds(),this.map.getSize());this.map.lineContainer.appendChild(this.image)};GSRasterImageFeature.prototype.finalize=function(){if(this.image){this.map.lineContainer.removeChild(this.image)}this.image=null;if(this.map){this.map.removeListener(this)}this.map=null};GSRasterImageFeature.prototype.mapZoomed=GSRasterImageFeature.prototype.render;GSRasterImageFeature.prototype.mapBoundsChanged=GSRasterImageFeature.prototype.render;GSRasterImageFeature.prototype.mapResized=GSRasterImageFeature.prototype.render;function GSInfoWindow(a){this.map=a;this.map.addListener(this);this.coordinate;this.offset=new GSPoint(0,0);this.isOpen=false;this.hidden=true;this.element=undefined;this.createWindow();GSEventManager.bind(this.element,"click",this,this.processMouseEvent);GSEventManager.bind(this.element,"mousedown",this,this.processMouseEvent);GSEventManager.bind(this.element,"dblclick",this,this.processMouseEvent)}GSInfoWindow.prototype.processMouseEvent=function(a){GSUtil.eventStopPropagation(a)};GSInfoWindow.prototype.open=function(e,b,a){if(!a){a={}}if(this.isOpen){this.close()}this.isOpen=true;this.onclose=a.onclose;if((typeof b).toLowerCase()=="string"){var d=document.createElement("div");d.innerHTML=b;b=d}this.setContent(b);this.coordinate=e;if(a.offset){this.offset=a.offset}var c=this.map;this.updatePosition(function(){if(a.onopen){a.onopen()}c.broadcastMessage("infoWindowOpened")})};GSInfoWindow.prototype.updatePosition=function(f){var d=5;var c=5;var r=this.element.offsetWidth;var q=this.element.offsetHeight;var o=this.offset.x;var n=this.offset.y-(q-7);var k=new GSPoint(o,n);var j,h;var m=this.map.translateToMapCoordinate(this.coordinate);if(this.coordinate.x>this.map.minX&&this.coordinate.x<this.map.maxX&&this.coordinate.y>this.map.minY&&this.coordinate.y<this.map.maxY){var e=m.x+k.x;var l=m.y+k.y;var i=0;var g=0;if((e+r+d)>this.map.pxWidth){i=this.map.pxWidth-(e+r+d)}if((l-c)<0){g=0-(l-c)}if(i==0&&g==0){this.reposition();if(f){f()}return}if(k.x+r>this.map.pxWidth){var b=this.coordinate.x+(k.x+r*this.map.mpx);j=b-(this.map.pxWidth*this.map.mpx)/2;h=this.coordinate.y}j=this.map.centerX-(i*this.map.mpx);h=this.map.centerY+(g*this.map.mpx)}else{var i=(this.map.pxWidth/2)>(k.x+r+d)?0:(k.x+r+d)-(this.map.pxWidth/2);var g=(this.map.pxHeight/2)>(Math.abs(k.y)+c)?0:(Math.abs(k.y)+c)-(this.map.pxHeight/2);j=this.coordinate.x+(i*this.map.mpx);h=this.coordinate.y+(g*this.map.mpx)}var a=this.map;this.map.panTo(new GSPoint(j,h),f)};GSInfoWindow.prototype.updateContent=function(a){if(!this.isOpen){return}if((typeof a).toLowerCase()=="string"){var b=document.createElement("div");b.innerHTML=a;a=b}this.setContent(a);this.updatePosition()};GSInfoWindow.prototype.close=function(){if(this.onclose){this.onclose()}this.element.style.visibility="hidden";this.isOpen=false;this.map.broadcastMessage("infoWindowClosed",this)};GSInfoWindow.prototype.hide=function(){this.element.style.display="none";this.hidden=true};GSInfoWindow.prototype.show=function(){this.element.style.display="block";this.hidden=false};GSInfoWindow.prototype.isHidden=function(){return this.hidden};GSInfoWindow.prototype.getCoordinate=function(){return this.coordinate};GSInfoWindow.prototype.getPixelOffset=function(){return this.offset};GSInfoWindow.prototype.finalize=function(){this.map.mapContentContainer.removeChild(this.element)};GSInfoWindow.prototype.mapResized=function(){this.reposition()};GSInfoWindow.prototype.mapZoomed=function(){this.reposition()};GSInfoWindow.prototype.mapBoundsChanged=function(){this.reposition()};GSInfoWindow.prototype.reposition=function(){if(!this.isOpen){return}var b=this.element.offsetHeight;var d=this.map.translateToMapCoordinate(this.coordinate);var a=d.x+this.offset.x;var c=d.y+(this.offset.y-(b-7));GSUtil.positionElement(this.element,a,c);this.element.style.visibility="visible"};GSInfoWindow.prototype.setContent=function(a){a.className="info-window";while(this.contentOuter.firstChild){this.contentOuter.removeChild(this.contentOuter.firstChild)}this.contentOuter.appendChild(a)};GSInfoWindow.prototype.createWindow=function(){var b=document.createElement("table");b.cellSpacing=0;b.cellPadding=0;b.style.position="absolute";b.style.visibility="hidden";b.style.zIndex=60;b.className="noprint";var a=document.createElement("tbody");b.appendChild(a);var d=this.createIWRow(a);this.createIWCell(d,"iw_tl",_globals.resourceURL+"iw/tl.png","no-repeat",12,9);this.createIWCell(d,"iw_t",_globals.resourceURL+"iw/t.png","repeat-x",null,9);var e=this.createIWCell(d,"iw_tr",_globals.resourceURL+"iw/tr.png","no-repeat",28,9);div=document.createElement("div");div.style.position="relative";e.appendChild(div);var c=document.createElement("img");c.src=_globals.resourceURL+"iw/close.png";c.title="Close";c.style.marginLeft="3px";c.style.position="absolute";if(_browser.isIE){c.style.top="5px"}else{c.style.top="1px"}c.style.cursor="pointer";GSUtil.makeUnselectable(c);div.appendChild(c);e.appendChild(div);d=this.createIWRow(a);this.createIWCell(d,"iw_cl",_globals.resourceURL+"iw/cl.png","repeat-y",12);this.contentOuter=this.createIWCell(d,"iw_c");this.contentOuter.style.backgroundColor="#fff";this.createIWCell(d,"iw_cr",_globals.resourceURL+"iw/cr.png","repeat-y",28);d=this.createIWRow(a);this.createIWCell(d,"iw_bl",_globals.resourceURL+"iw/bl.png","no-repeat",12,21);this.createIWCell(d,"iw_b",_globals.resourceURL+"iw/b.png","repeat-x",null,21);this.createIWCell(d,"iw_br",_globals.resourceURL+"iw/br.png","no-repeat",28,21);this.map.mapContentContainer.appendChild(b);this.element=b;GSEventManager.bind(c,"click",this,this.close)};GSInfoWindow.prototype.createIWRow=function(a){var b=document.createElement("tr");a.appendChild(b);return b};GSInfoWindow.prototype.createIWCell=function(c,g,e,d,b,a){var f=document.createElement("td");if(g){f.id=g}if(e){if(_browser.pngAlpha){f.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+e+"',sizingMethod='scale')"}else{f.style.backgroundImage="url("+e+")";f.style.backgroundRepeat=d}}if(b){f.style.width=b+"px"}if(a){f.style.height=a+"px"}c.appendChild(f);return f};function GSLogger(a){this.map=a;this.sessionid;this.user=this.getAPIUser();this.lastlogtime;this.transport=new Image();if(!this.user){throw"Cannot log, user parameter not provided in API query"}this.startSession()}GSLogger.prototype.startSession=function(){var a=this.getSessionIdFromCookie();if(a){this.sessionid=a}else{this.sessionid=this.uuid();document.cookie="gssessionid="+this.sessionid}};GSLogger.prototype.stopSession=function(){document.cookie="gssessionid=";this.sessionid=undefined};GSLogger.prototype.getAPIUser=function(){var c=this.getAPIScriptTag();if(!c){throw"Cannot log, API loaded from a non-Geosmart domain"}var b=/user=([^&]+)(&|$)/;var a=c.src.match(b)[1];return a};GSLogger.prototype.getAPIScriptTag=function(){var a=document.getElementsByTagName("script");var d=/api\.geosmart\.co\.nz/;for(var e=0,b=a.length;e<b;e++){var c=a[e];if(d.test(c.src)){return c}}return undefined};GSLogger.prototype.log=function(d,a){if(arguments.length==1&&(typeof arguments[0]).toLowerCase()!="string"){throw"Cannot log, must name a log file to log to"}return false;if(this.lastlogtime&&(new Date()-this.lastlogtime>_globals.loggingSessionTimeout)){this.stopSession();this.startSession()}var e=this.map.getMapCenter();a.center_x=e.x;a.center_y=e.y;a.zoom_level=this.map.scaleIdx;a.user=this.user;a.session_id=this.sessionid;var f="";for(var c in a){if((typeof a[c]).toLowerCase()=="function"){continue}f+=(c+"="+encodeURIComponent(a[c])+"&")}var b=_globals.loggingBaseURL+d+".log?"+f;this.transport.src=b;this.lastlogtime=new Date()};GSLogger.prototype.getSessionIdFromCookie=function(){var b=document.cookie;var d=b.indexOf("gssessionid=");if(d!=-1){var c=d+12;var a=b.indexOf(";",c);if(a==-1){a=b.length}return b.substring(c,a)}else{return undefined}};GSLogger.prototype.uuid=function(){var a,c,b;a="";for(b=0;b<32;b++){if(b==8||b==12||b==16||b==20){a=a+"-"}c=Math.floor(Math.random()*16).toString(16).toUpperCase();a=a+c}return a};