function GSDOMParser(){this.output;this.aaTotalCount;}
GSDOMParser.prototype.parse=function(document){var featureElements=document.getElementsByTagName("poi");var totalCount=document.documentElement.getAttribute("totalCount");if(totalCount){this.aaTotalCount=parseInt(totalCount);}
var len=featureElements.length;for(var i=0;i<len;i++){var el=featureElements[i];var params={};params["id"]=this.getElementValue(el,"id");params["coordinate"]=new GSPoint(this.getElementValueAsFloat(el,"x"),this.getElementValueAsFloat(el,"y"));params["name"]=this.getElementValue(el,"name");params["suburb"]=this.getElementValue(el,"suburb");params["district"]=this.getElementValue(el,"district");params["region"]=this.getElementValue(el,"region");var iconEl=this.selectSingleNode("icon",el);if(iconEl)
params["icon"]=this.parseIcon(iconEl,params["id"],i);var infoEl=this.selectSingleNode("info",el);if(infoEl){params["infoHtml"]=this.parseInfo(infoEl);}
var feature=new GSPointFeature(params);var events=this.selectSingleNode("events",infoEl);if(events)
this.addFeatureEventListeners(feature,events,this.getShowInfoFunction(feature));this.output.push(feature);}};GSDOMParser.prototype.parseIcon=function(el,featureId,index){var xpath=_browser.isSafari?"img":"image";var imageEl=this.selectSingleNode(xpath,el);if(imageEl==null)return;var imageSrc=this.getElementValue(imageEl,"src");var imageSize=new GSDimension(this.getElementValueAsInt(imageEl,"width"),this.getElementValueAsInt(imageEl,"height"));var printEl=this.selectSingleNode("printImage",el);if(printEl!=null){var printSrc=this.getElementValue(printEl,"src");var printSize=new GSDimension(this.getElementValueAsInt(printEl,"width"),this.getElementValueAsInt(printEl,"height"));}
var shadowEl=this.selectSingleNode("shadow",el);if(shadowEl!=null){var shadowSrc=this.getElementValue(shadowEl,"src");var shadowSize=new GSDimension(this.getElementValueAsInt(shadowEl,"width"),this.getElementValueAsInt(shadowEl,"height"));}
var alt=this.getElementValue(imageEl,"text");var icon=new GSIcon();icon.imageSrc=imageSrc;icon.printSrc=printSrc;icon.shadowSrc=shadowSrc;icon.imageSize=imageSize;icon.printSize=printSize;icon.shadowSize=shadowSize;icon.alt=alt;var iconOffsetEl=this.selectSingleNode("iconOffset",el);if(iconOffsetEl){var x=this.getElementValueAsInt(iconOffsetEl,"x");var y=this.getElementValueAsInt(iconOffsetEl,"y");icon.iconOffset=new GSPoint(x,y);}
var iconIWOffsetEl=this.selectSingleNode("iconInfoWindowOffset",el);if(iconIWOffsetEl){var x=this.getElementValueAsInt(iconIWOffsetEl,"x");var y=this.getElementValueAsInt(iconIWOffsetEl,"y");icon.iconInfoWindowOffset=new GSPoint(x,y);}
var iconImageMap=this.selectSingleNode("imageMap",el);if(iconImageMap&&_browser.isGecko){icon.imageMap=GSUtil.createImageMap("map_"+featureId,"poly",iconImageMap.firstChild.nodeValue.split(","),"#",this.getElementValue(imageEl,"text"));icon.image.setAttribute("usemap","map_"+featureId);}
return icon;};GSDOMParser.prototype.parseInfo=function(el){var infoHtml=this.selectSingleNode("html",el);if(infoHtml!=undefined){var xml="";if(_browser.isSafari){xml=this.xmlText(infoHtml);}else if(_browser.isIE){xml=infoHtml.xml;}else{var serializer=new XMLSerializer();xml=serializer.serializeToString(infoHtml);}
xml=this.stripHtmlTags(xml);return xml;}else{return undefined;}};GSDOMParser.prototype.selectSingleNode=function(xpath,el){if(el!=null){var nodes=el.getElementsByTagName(xpath);return nodes!=null?nodes[0]:null;}
return null;};GSDOMParser.prototype.hasChildNamed=function(name,el){return this.selectSingleNode(name,el)!=null;};GSDOMParser.prototype.getElementValue=function(el,name){var node=this.selectSingleNode(name,el);if(node&&node.firstChild)
return node.firstChild.nodeValue;else
return null;};GSDOMParser.prototype.getElementValueAsInt=function(el,name){return parseInt(this.getElementValue(el,name));};GSDOMParser.prototype.getElementValueAsFloat=function(el,name){return parseFloat(this.getElementValue(el,name));};GSDOMParser.prototype.getShowInfoFunction=function(feature){return function(e){feature.showInfoWindow();feature.map.featureClicked(feature);GSUtil.cancelEvent(e);};};GSDOMParser.prototype.addFeatureEventListeners=function(feature,eventsEl,func){var listener=feature.icon.image;if(feature.icon&&feature.icon.imageMap)
listener=feature.icon.htmlImageMap.firstChild;if(listener!=undefined){var events=eventsEl.firstChild.nodeValue.split(",");for(var i in events){if((typeof events[i]).toLowerCase()=='function')continue;switch(events[i]){case"click":GSEventManager.addEventListener(listener,"click",func);break;case"mousedown":GSEventManager.addEventListener(listener,"mousedown",func);break;case"mouseup":GSEventManager.addEventListener(listener,"mouseup",func);break;case"mouseover":GSEventManager.addEventListener(listener,"mouseover",func);break;case"mouseout":GSEventManager.addEventListener(listener,"mouseout",func);break;}}}};var DOM_ELEMENT_NODE=1;var DOM_ATTRIBUTE_NODE=2;var DOM_TEXT_NODE=3;GSDOMParser.prototype.xmlText=function(node){var ret='';if(node.nodeType==DOM_TEXT_NODE){ret+=node.nodeValue;}else if(node.nodeType==DOM_ELEMENT_NODE){ret+='<'+node.nodeName;for(var i=0;i<node.attributes.length;++i){var a=node.attributes[i];if(a&&a.nodeName&&a.nodeValue){ret+=' '+a.nodeName;ret+='="'+a.nodeValue+'"';}}
if(node.childNodes.length==0){ret+='/>';}else{ret+='>';for(var i=0;i<node.childNodes.length;++i){ret+=arguments.callee(node.childNodes[i]);}
ret+='</'+node.nodeName+'>';}}
return ret;};GSDOMParser.prototype.stripHtmlTags=function(s){return s.replace(/<html>|<\/html>/gi,"");};function GSLoader(){this.data=[];this.url;this.req;this.async=true;this.aaTotalCount;}
GSLoader.prototype.loaded=false;GSLoader.prototype.onload=function(){};GSLoader.prototype.load=function(url,async){async=async!=undefined?async:this.async;if(url==undefined)
alert("Cannot load data");this.url=url;this.data.length=0;var loader=this;var params={"method":"get","url":this.url,"async":async,"load":function(data){loader.parseXML(data);},"error":function(){alert("There was a problem loading the data");}};this.req=new GSHttpRequest();var output=this.req.sendAndLoad(params);if(!async){this.parseXML(output);}};GSLoader.prototype.unload=function(){delete this.req._req.onreadystatechange;this.req=null;};GSLoader.prototype.parseXML=function(document){this.loaded=true;var parser=new GSDOMParser();parser.output=this.data;parser.parse(document);this.aaTotalCount=parser.aaTotalCount;parser=null;if(this.onload)
this.onload();document=null;this.unload();};function GSJsonServiceRequest(){};GSJsonServiceRequest.counter=0;GSJsonServiceRequest.requests={};GSJsonServiceRequest.send=function(url,parameters,obj,callback){var jsrId=new String(GSJsonServiceRequest.counter++);parameters["jsrId"]=jsrId;var scriptNode=document.createElement("script");scriptNode.type="text/javascript";scriptNode.src=url+"?"+GSUtil.joinAssociativeArray(parameters,"&","=");GSJsonServiceRequest.requests[jsrId]={scriptNode:scriptNode,obj:obj,callback:callback};GSJsonServiceRequest.getHeadNode().appendChild(scriptNode);};GSJsonServiceRequest.handleResponse=function(jsrId,data){var obj=GSJsonServiceRequest.requests[jsrId].obj;var callback=GSJsonServiceRequest.requests[jsrId].callback;callback.apply(obj,[data]);setTimeout(function(){var scriptNode=GSJsonServiceRequest.requests[jsrId].scriptNode;scriptNode.parentNode.removeChild(scriptNode);delete GSJsonServiceRequest.requests[jsrId];},5000);};GSJsonServiceRequest.getHeadNode=function(create){return document.getElementsByTagName("head")[0];};GSHttpRequest=function(){if(window.XMLHttpRequest){this._req=new XMLHttpRequest();}else{try{this._req=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{this._req=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){this._req=false;}}}};GSHttpRequest.prototype={_req:null,init:function(params){this.method=params["method"];this.url=params["url"];this.mimetype=params["mimetype"];this.accept=params["accept"];this.content=params["content"];this.headers=params["headers"];this.contentType=params["content-type"];this.load=params["load"];this.postData=encodeURIComponent(params["post-data"]);this.error=params["error"];this.handle=params["handle"];this.async=params["async"]!=undefined?params["async"]:true;this.username=params["username"];this.password=params["password"];this.postData=undefined;var requestParams=this.buildParameterString(this.content);if(requestParams&&this.method.toLowerCase()=="get"){this.url+="?"+requestParams;}else if(!this.postData&&this.method.toLowerCase()=="post"&&requestParams){this.postData=requestParams;}
if(this.async){var self=this;this._req.onreadystatechange=function(){self.processResponse();};}
if(this.username&&this.password){this._req.open(this.method,this.url,this.async,this.username,this.password);}else{this._req.open(this.method,this.url,this.async);}},send:function(){if(this.accept){this._req.setRequestHeader("Accept",this.accept);}
if(this.method.toLowerCase()=="post"){if(this.contentType){this._req.setRequestHeader("Content-Type",this.contentType);}else{this._req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");}}
if(this.headers){for(var i in this.headers){this.setRequestHeader(i,this.headers[i]);}}
try{this._req.send(this.postData?this.postData:"");if(!this.async){return this.interpretData();}}catch(e){if(this.error){this.error(e.message);}else if(this.handle){this.handle("error",e.message);}}},sendAndLoad:function(params){this.init(params);return this.send();},setRequestHeader:function(name,value){this._req.setRequestHeader(name,value);},getResponseHeader:function(name){return this._req.getResponseHeader(name);},processResponse:function(){if(this._req.readyState==4){var status=this._req.status?this._req.status:200;if(status>=200&&status<300){var data=this.interpretData();if(this.load){this.load(data);}else if(this.handle){this.handle("load",data);}}else{var data=this._req.responseText;if(this.error){this.error(data);}else if(this.handle){this.handle("error",data);}}}},interpretData:function(){var data=undefined;var mimetype="text/plain";var contentType=this._req.getResponseHeader("Content-Type");if(contentType){var numChars=contentType.indexOf(';')>0?contentType.indexOf(';'):contentType.length;mimetype=contentType.substr(0,numChars);}
switch(mimetype){case"text/javascript":data=eval('('+this._req.responseText+')');break;case"text/plain":data=this._req.responseText;break;case"text/html":data=this._req.responseText;break;case"text/xml":case"application/xml":data=this._req.responseXML;break;}
return data;},getStatus:function(){return Number(this._req.status);},buildParameterString:function(content){var requestParams=undefined;if(content){var a=[];for(var i in content){var val=content[i]?content[i]:"";a.push(i+"="+encodeURIComponent(val));}
requestParams=a.join("&");}
return requestParams;}};
