// TLabel() GMaps API extension copyright 2005-2006 Tom Mangan (tmangan@gmail.com)
// http://gmaps.tommangan.us/tlabel.html
// free for non-commercial use
// the 'Made with TLabel' bug must remain in place for free use
function normSin(a){
 if(a>0.9999){a=0.9999;}
 if(a<-0.9999){a=-0.9999;}
 return a;
}
function TLabel(){}
TLabel.prototype.initialize=function(a){
 if (typeof(a.TLabelBugged=='undefined')){this.addTBug(a);}
 this.parentMap=a;
 var b=document.createElement('span');
 b.setAttribute('id',this.id);
 b.innerHTML=this.content;
 document.body.appendChild(b);
 b.style.position='absolute';
 b.style.zIndex=1;
 if(this.percentOpacity){this.setOpacity(this.percentOpacity);}
 this.w = document.getElementById(this.id).offsetWidth;
 this.h = document.getElementById(this.id).offsetHeight;
 this.mapTray=document.getElementById(a.getContainer().id).firstChild;
 this.mapTray.appendChild(b);
 if(!this.markerOffset){this.markerOffset=new GSize(0,0);}
 this.setPosition();
 GEvent.bind(a,"zoomend",this,function(){this.setPosition()});
 GEvent.bind(a,"moveend",this,function(){this.setPosition()});
}
TLabel.prototype.setPosition=function(a){
 if(a){this.anchorLatLng=a;}
 var b=this.getXY(this.parentMap,this.anchorLatLng);
 var x=parseInt(b.x);
 var y=parseInt(b.y);
 with(Math){switch(this.anchorPoint){
  case 'topLeft':break;
  case 'topCenter':x-=floor(this.w/2);break;
  case 'topRight':x-=this.w;break;
  case 'midRight':x-=this.w;y-=floor(this.h/2);break;
  case 'bottomRight':x-=this.w;y-=this.h;break;
  case 'bottomCenter':x-=floor(this.w/2);y-=this.h;break;
  case 'bottomLeft':y-=this.h;break;
  case 'midLeft':y-=floor(this.h/2);break;
  case 'center':x-=floor(this.w/2);y-=floor(this.h/2);break;
  default:break;
 }}
 var d=document.getElementById(this.id);
 d.style.left=x-this.markerOffset.width+'px';
 d.style.top=y-this.markerOffset.height+'px';
}
TLabel.prototype.getXY=function(a,b){
 var c=a.getZoom();
 var d=a.getSize();
 var e=a.getCenter();
 with(Math){
  var pxLng=128*pow(2,c)/180;
  var pxLat=128*pow(2,c)/PI;
  var xDif=-(e.x-b.x)*pxLng;
  var g=normSin(sin(b.y*PI/180));
  var h=normSin(sin(e.y*PI/180));
  var yDif=(0.5*log((1+h)/(1-h))-0.5*log((1+g)/(1-g)))*pxLat;
  var x=round((d.width/2)+xDif)-parseInt(this.mapTray.style.left);
  var y=round((d.height/2)+yDif)-parseInt(this.mapTray.style.top);
 }
 return(new GPoint(x,y));
}
TLabel.prototype.setOpacity=function(b){
 if(b<0){b=0;} if(b>100){b=100;}
 var c=b/100;
 var d=document.getElementById(this.id);
 if(typeof(d.style.filter)=='string'){d.style.filter='alpha(opacity:'+b+')';}
 if(typeof(d.style.KHTMLOpacity)=='string'){d.style.KHTMLOpacity=c;}
 if(typeof(d.style.MozOpacity)=='string'){d.style.MozOpacity=c;}
 if(typeof(d.style.opacity)=='string'){d.style.opacity=c;}
}
TLabel.prototype.addTBug=function(a){
 if(typeof(a.TLabelBugged)=='undefined'){
  var b=document.createElement('div');
  b.id='TLabelBug';
  b.style.position='absolute';
  b.style.right='4px';
  if(a.TBugged>0){b.style.bottom='32px';}else{b.style.bottom='20px';}
  /*b.style.backgroundColor='#f2efe9';*/
  b.style.zIndex=25500;
  /*b.innerHTML='<a href="http://gmaps.tommangan.us/tlabel.html" style="font:10px verdana;text-decoration:none;margin:0px;padding:2px;color:#000;">Made by Mediawest</a>';
*/  document.getElementById(a.getContainer().id).appendChild(b);
  var c=0.7;
  var d=document.getElementById(b.id);
  if(typeof(d.style.filter)=='string'){d.style.filter='alpha(opacity:'+c*100+')';}
  if(typeof(d.style.KHTMLOpacity)=='string'){d.style.KHTMLOpacity=c;}
  if(typeof(d.style.MozOpacity)=='string'){d.style.MozOpacity=c;}
  if(typeof(d.style.opacity)=='string'){d.style.opacity=c;}
  a.TLabelBugged=1;
 }
}
GMap.prototype.addTLabel=function(a){
 a.initialize(this);
}
GMap.prototype.removeTLabel=function(a){
 var b=document.getElementById(a.id);
 document.getElementById(this.getContainer().id).firstChild.removeChild(b);
 delete(b);
}
GMap2.prototype.addTLabel=function(a){
 a.initialize(this);
}
GMap2.prototype.removeTLabel=function(a){
 var b=document.getElementById(a.id);
 document.getElementById(this.getContainer().id).firstChild.removeChild(b);
 delete(b);
}

