function FragID(prefix) {
  if(!prefix) prefix='map';
  var regexp={
    prefix:eval('/#'+prefix+'(\\d+)&(.*)$/')
    , kv:/^(.*)=(.*)$/
  };
  var encode=this.encode=function(data) {
    if(!data) return;
    var id='#'+prefix+new Date().getTime();
    for(var p in data) id+='&'+encodeURIComponent(p)+'='+encodeURIComponent(data[p]);
    return id;
  }
  var decode=this.decode=function(id) {
    if( !(id=id.match(regexp.prefix)) ) return;
    var data={}, id=id[2].split('&');
    while( id.length ) {
      if( !id[0].match(regexp.kv) ) continue;
      data[ decodeURIComponent(RegExp.$1) ] = decodeURIComponent(RegExp.$2);
      id.shift();
    }
    return data;
  }
}
