// (c) 2007 KystAtlas AS (Hans Martin Mohn)

function gtUrl(url)
{this.m_map=new Object();this.m_symbols=new Object();this.m_service="";this.setFromUrl(url);}
gtUrl.prototype.setFromUrl=function(url)
{this.clearSymbols();if(url&&url.length>0)
{url=url.replace(/&amp;/g,"&");url=url.replace(/&#38;/g,"&");var params;var spliturl=url.split("?");if(spliturl.length>=2)
{params=spliturl[1].split("&");this.m_service=spliturl[0];}
else
{params=spliturl[0].split("&");if(params.length==1)
this.m_service=params[0];}
for(i=0;i<params.length;i++)
{var arg=params[i];var pos=arg.indexOf('=');if(pos>0)
{var name=arg.substring(0,pos);var value=arg.substring(pos+1);if(name=="sym")
this.setSymbol(value);else
this.m_map[name]=value;}}}};function escapeCommasInQuotedString(s)
{var frag=s.split(/"|%22/);for(var i=1;i<frag.length;i+=2)
frag[i]=frag[i].replace(/,/g,"%2c");return frag.join('"');}
gtUrl.prototype.setFromFormat=function(format)
{if(!format||format.length<=0)
return;format=escapeCommasInQuotedString(format);var pos1=format.indexOf('(');var params;if(pos1>=0)
{this.m_service=format.substring(0,pos1);var pos2=format.indexOf(')');if(pos2<0)
pos2=format.length;params=format.substring(pos1+1,pos2).split(",");}
else
{this.m_service=format;return;}
for(var i=0;i<params.length;i++)
{var arg=params[i];arg=arg.replace(/%2c/g,',');var pos=arg.indexOf('=');if(pos>0)
this.m_map[arg.substring(0,pos)]=arg.substring(pos+1);}};gtUrl.prototype.getParam=function(param)
{return(param=="sym")?this.m_symbols[0].toString():this.m_map[param];};gtUrl.prototype.getParamDef=function(param,def)
{var val=this.getParam(param);return(val)?val:def;};gtUrl.prototype.setParam=function(param,value)
{if(param=="sym")
this.setSymbol(value);else
this.m_map[param]=value;};gtUrl.prototype.delParam=function(param)
{delete this.m_map[param];};gtUrl.prototype.setService=function(service)
{this.m_service=service;};gtUrl.prototype.getService=function()
{return this.m_service;};gtUrl.prototype.toString=function()
{var result=(this.m_service.length>0)?(this.m_service+"?"):"";var first=true;for(var key in this.m_map)
{if(""+this.m_map[key]!=="")
{result+=(first?"":"&amp;")+key+"="+this.m_map[key];first=false;}}
for(key in this.m_symbols)
{if(this.m_symbols[key])
{result+=(first?"":"&amp;")+"sym="+this.m_symbols[key].toString();first=false;}}
return result;};gtUrl.prototype.getUrl=function()
{return this.toString();};gtUrl.prototype.toFormatString=function()
{var result=(this.m_service.length>0)?(this.m_service+"("):"(";var first=true;for(key in this.m_map)
{if(""+this.m_map[key]!=="")
{result+=(first?"":",")+key+"="+this.m_map[key];first=false;}}
return result+")";};gtUrl.prototype.getFormat=function()
{return this.toFormatString();};gtUrl.prototype.clearSymbols=function()
{for(var key in this.m_symbols)
delete this.m_symbols[key];};gtUrl.prototype.getSymbol=function(key)
{return this.m_symbols[key];};gtUrl.prototype.setSymbol=function(value)
{value=value.replace(/%22/g,'"');var sym=new gtSym(value);var key=(sym.m_id)?sym.m_id:"["+sym.m_symbol+"]";this.m_symbols[key]=sym;return sym;};gtUrl.prototype.delSymbol=function(id)
{if(this.getSymbol(id))
{delete this.m_symbols[id];return true;}
else
{return false;}};gtUrl.prototype.setSymbolId=function(sym,id)
{if(this.getSymbol(sym.m_id))
delete this.m_symbols[sym.m_id];sym.m_id=id;this.m_symbols[id]=sym;};function unQuote(text)
{if(!text)
return undefined;if(text.charAt(0)=="\"")
text=text.substr(1);if(text.charAt(text.length-1)=="\"")
text=text.substr(0,text.length-1);return text;}
function gtSym(sym)
{this.setFromString(sym);}
gtSym.prototype.setFromString=function(sym)
{if(sym&&sym.length>0)
{pos1=sym.indexOf('(');if(pos1>=0)
{pos2=sym.indexOf(')');if(pos2<0)
pos2=sym.length;sym=sym.substring(pos1+1,pos2);}
var values=sym.split(",");this.m_x=values[0];this.m_y=values[1];this.m_symbol=unQuote(values[2]);this.m_url=unQuote(values[3]);this.m_tooltip=unQuote(values[4]);this.m_id=unQuote(values[5]);this.m_text=unQuote(values[6]);if(!this.m_id||this.m_id.length===0)
this.m_id="["+this.m_symbol+"]";}};gtSym.prototype.toString=function()
{var ret='('+this.m_x+','+this.m_y+',"'+this.m_symbol+'",';ret+=(this.m_url)?'"'+this.m_url+'",':',';ret+=(this.m_tooltip)?'"'+this.m_tooltip+'"':'';if(this.m_id)
ret+=',"'+this.m_id+'"';if(this.m_text)
ret+=',"'+this.m_text+'"';return ret+')';};