topical media & game development
mashup-gmaps-tphoto.16.js / js
// TPhoto() GMaps API extension copyright 2005 Tom Mangan (tmangan@gmail.com)
// http://gmaps.tommangan.us/tphoto.html
// free for non-commercial use
// the 'Made with TPhoto' bug must remain in place for free use
function TPhoto(){}
TPhoto.prototype.initialize=function(a){
if (a.TBugged<1||typeof(a.TBugged=='undefined')){this.addTBug(a);}
var photo=a.ownerDocument.createElement('img');
this.setAttributes(photo);
a.div.appendChild(photo);
this.setOnce(a);
this.reZoom(a);
GEvent.bind(a,"zoom",this,function(){this.reZoom(a)});
GEvent.bind(a,"moveend",this,function(){this.reZoom(a)});
}
TPhoto.prototype.setAttributes=function(a){
a.setAttribute('id',this.id);
a.setAttribute('src',this.src);
if(this.size){
var b=this.size;
a.setAttribute('width',b.width);
a.setAttribute('height',b.height);
}
}
TPhoto.prototype.setOnce=function(a){
var b=document.getElementById(this.id);
b.style.position='absolute';
b.style.zIndex=1;
if(this.percentOpacity){
this.setOpacity(this.percentOpacity);
}
}
TPhoto.prototype.reZoom=function(a){
if(this.anchorTopLeft&&this.anchorBottomRight){
this.autoScaleAndPos(a);
}else{
var z=a.getZoomLevel();
var b=(this.baseZoom?this.baseZoom:0);
var m=1/Math.pow(2,z-b);
var c=this.size;
var zw=Math.floor(c.width*m);
var zh=Math.floor(c.height*m);
var x=document.getElementById(this.id);
x.style.width=zw+'px';
x.style.height=zh+'px';
this.setPosition(a);
}
}
TPhoto.prototype.setPosition=function(a){
var d=this.anchorLatLng;
var e=this.anchorPx;
var bz=(this.baseZoom?this.baseZoom:0);
var z=a.getZoomLevel();
var m=1/Math.pow(2,z-bz);
var zx=Math.floor(e.x*m);
var zy=Math.floor(e.y*m);
var b=this.getXY(a,d,z);
var x=document.getElementById(this.id);
x.style.top=b.y-zy+'px';
x.style.left=b.x-zx+'px';
}
TPhoto.prototype.autoScaleAndPos=function(a){
var b=this.anchorTopLeft;
var c=this.anchorBottomRight;
var z=a.getZoomLevel();
var d=this.getXY(a,b,z);
var e=this.getXY(a,c,z);
var x=document.getElementById(this.id);
x.style.top=d.y+'px';
x.style.left=d.x+'px';
x.style.width=e.x-d.x+'px';
x.style.height=e.y-d.y+'px';
}
TPhoto.prototype.getXY=function(a,b,c){
var e=a.spec.getBitmapCoordinate(b.y,b.x,c);
return a.getDivCoordinate(e.x,e.y);
}
TPhoto.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;}
}
TPhoto.prototype.addTBug=function(a){
if(a.TBugged==-1){
document.getElementById('TPhotoBug').style.display='block';
}else{
var b=a.ownerDocument.createElement('div');
b.id='TPhotoBug';
b.style.position='absolute';
b.style.right='0px';
b.style.bottom='20px';
b.style.backgroundColor='#f2efe9';
b.style.zIndex=25500;
b.innerHTML='<a href="http://gmaps.tommangan.us/tphoto.html" style="font: 10px verdana; text-decoration: none; padding: 2px; color: #000;">Made with TPhoto</a>';
a.div.parentNode.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.TBugged=1;
}
}
GMap.prototype.addTPhoto=function(a){
a.initialize(this);
}
GMap.prototype.removeTPhoto=function(a){
this.div.removeChild(document.getElementById(a.id));
delete(a);
if(this.TBugged){
document.getElementById('TPhotoBug').style.display='none';
this.TBugged=-1;
}
}
(C) Æliens
20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.