kaKeymap.js
Summary
No overview generated for 'kaKeymap.js'
function kaKeymap(oKaMap, szID ) {
this.kaMap = oKaMap;
this.domObj = this.kaMap.getRawObject(szID);
this.domObj.kaKeymap=this;
this.width=getObjectWidth(szID)+"px";
this.height=getObjectHeight(szID)+"px";
this.pxExtent =null;
this.domExtents = null;
this.aExtents = null;
this.domImg = null;
this.imgSrc = null;
this.imgWidth = null;
this.imgHeight = null;
this.cellWidth = null;
this.cellHeight = null;
this.initialExtents = null;
this.domObj.ondblclick= this.onclick;
if ( this.domObj.captureEvents) {
this.domObj.captureEvents(Event.DBLCLICK);
}
this.kaMap.registerForEvent( KAMAP_EXTENTS_CHANGED, this, this.update );
this.kaMap.registerForEvent( KAMAP_MAP_INITIALIZED, this, this.initialize );
};
kaKeymap.prototype.initialize = function(id) {
this.pxExtent = null;
this.initialExtents = this.kaMap.getGeoExtents();
call(this.kaMap.server+'/keymap.php?map='+this.kaMap.currentMap,this,this.draw);
};
kaKeymap.prototype.draw = function( szResult ) {
eval( szResult );
this.cellWidth = (this.aExtents[2] - this.aExtents[0]) / this.imgWidth;
this.cellHeight = (this.aExtents[3] - this.aExtents[1]) / this.imgHeight;
for(var i = this.domObj.childNodes.length - 1; i >= 0; i--)
this.domObj.removeChild (this.domObj.childNodes[i]);
this.domObj.style.width = this.imgWidth + "px";
this.domObj.style.height = this.imgHeight + "px";
this.domImg = document.createElement( 'img' );
this.domImg.src = this.imgSrc + '&map='+this.kaMap.currentMap;
this.domImg.width = this.imgWidth;
this.domImg.height = this.imgHeight;
this.domObj.appendChild( this.domImg );
this.domExtents = document.createElement( 'div' );
this.domExtents.kaKeymap = this;
this.domExtents.id="keymapDomExtents";
this.domExtents.style.position = 'absolute';
this.domExtents.style.border = '1px solid red';
this.domExtents.style.top = "1px";
this.domExtents.style.left = "1px";
this.domExtents.style.width = "1px";
this.domExtents.style.height = "1px";
this.domExtents.style.backgroundColor = 'transparent';
this.domExtents.style.visibility = 'visible';
this.domObj.appendChild(this.domExtents);
this.domEvent = document.createElement( 'div' );
this.domEvent.kaKeymap=this;
this.domEvent.onmousedown= this.mousedown;
this.domEvent.onmouseup= this.mouseup;
this.domEvent.onmousemove= this.mousemove;
this.domEvent.onmouseout= this.mouseup;
if (this.domEvent.captureEvents) {
this.domEvent.captureEvents(Event.MOUSEDOWN);
this.domEvent.captureEvents(Event.MOUSEUP);
this.domEvent.captureEvents(Event.MOUSEMOVE);
this.domEvent.captureEvents(Event.MOUSEOUT);
}
this.domEvent.style.position = 'absolute';
this.domEvent.id = 'keymapDomEvent';
this.domEvent.style.border = '1px solid red';
this.domEvent.style.top = "1px";
this.domEvent.style.left = "1px";
this.domEvent.style.width = "1px";
this.domEvent.style.height = "1px";
this.domEvent.style.backgroundColor = 'white';
this.domEvent.style.visibility = 'visible';
this.domEvent.style.opacity=0.01;
this.domEvent.style.mozOpacity=0.01;
this.domEvent.style.filter = "Alpha(opacity=0.01)";
this.domObj.appendChild(this.domEvent);
var d = document.createElement( 'img' );
d.id="keymapCrossImage";
d.src = this.kaMap.server+"images/cross.png";
d.style.position='absolute';
d.style.top = '0px';
d.style.left = '0px';
d.style.width = "19px";
d.style.height = "19px";
d.style.visibility = 'hidden';
this.domExtents.appendChild(d);
this.domCross = d;
if (this.initialExtents != null) {
this.update( null, this.initialExtents);
}
};
kaKeymap.prototype.update = function( eventID, extents ) {
if (!this.aExtents || !this.domExtents) {
this.initialExtents = extents;
return;
}
var left = (extents[0] - this.aExtents[0]) / this.cellWidth;
var width = (extents[2] - extents[0]) / this.cellWidth;
var top = -1 * (extents[3] - this.aExtents[3]) / this.cellHeight;
var height = (extents[3] - extents[1]) / this.cellHeight;
this.pxExtent = new Array(left,top,width,height);
this.domExtents.style.top = parseInt(top+0.5)+"px";
this.domExtents.style.left = parseInt(left+0.5)+"px";
this.domEvent.style.top = parseInt(top+0.5)+"px";
this.domEvent.style.left = parseInt(left+0.5)+"px";
if (parseInt(width+0.5) < parseInt(this.domCross.style.width) ||
parseInt(height+0.5) < parseInt(this.domCross.style.height) ) {
var ix = parseInt(this.domCross.style.width)/2;
var iy = parseInt(this.domCross.style.height)/2;
var ox = width/2;
var oy = height/2;
this.domExtents.style.width = this.domCross.style.width;
this.domExtents.style.height = this.domCross.style.height;
this.domEvent.style.width = this.domCross.style.width;
this.domEvent.style.height = this.domCross.style.height;
this.domExtents.style.top = (parseInt(this.domExtents.style.top) -iy + oy) + 'px';
this.domExtents.style.left = (parseInt(this.domExtents.style.left) -ix + ox) + 'px';
this.domEvent.style.top = (parseInt(this.domEvent.style.top) -iy + oy) + 'px';
this.domEvent.style.left = (parseInt(this.domEvent.style.left) -ix + ox) + 'px';
this.domCross.style.visibility = 'visible';
this.domExtents.style.border = '1px solid white';
this.domEvent.style.border = 'none';
} else {
this.domExtents.style.width = parseInt(width+0.5) + "px";
this.domExtents.style.height = parseInt(height+0.5) + "px";
this.domEvent.style.width = parseInt(width+0.5) + "px";
this.domEvent.style.height = parseInt(height+0.5) + "px";
this.domCross.style.visibility = 'hidden';
this.domExtents.style.border = '1px solid red';
this.domEvent.style.border = '1px solid red';
this.domEvent.style.visibility = 'visible';
this.domExtents.style.visibility = 'visible';
}
};
kaKeymap.prototype.onclick = function(e) {
e = (e)?e:((event)?event:null);
this.kaKeymap.centerMap(e);
};
kaKeymap.prototype.centerMap = function(e) {
var pos= this.aPixPos( e.clientX, e.clientY );
this.kaMap.zoomTo(pos[0],pos[1]);
};
kaKeymap.prototype.aPixPos = function( x, y ) {
var obj = this.domObj;
var offsetLeft = 0;
var offsetTop = 0;
while (obj) {
offsetLeft += parseFloat(obj.offsetLeft);
offsetTop += parseFloat(obj.offsetTop);
obj = obj.offsetParent;
}
var pX = x - offsetLeft ;
var pY = y - offsetTop ;
pX = parseFloat(this.aExtents[0] + (this.cellWidth *pX));
pY = parseFloat(this.aExtents[3] - (this.cellHeight *pY));
return [pX,pY];
};
kaKeymap.prototype.mousedown = function(e) {
e = (e)?e:((event)?event:null);
this.kaKeymap.domEvent.style.top= "0px";
this.kaKeymap.domEvent.style.left= "0px";
this.kaKeymap.domEvent.style.width =this.kaKeymap.domObj.style.width;
this.kaKeymap.domEvent.style.height = this.kaKeymap.domObj.style.height;
this.kaKeymap.domExtents.init=1;
this.kaKeymap.domExtents.oX=e.clientX;
this.kaKeymap.domExtents.oY=e.clientY;
var amount= 50;
this.kaKeymap.domExtents.style.backgroundColor = 'pink';
this.kaKeymap.domExtents.style.opacity=amount/100;
if (this.kaKeymap.kaMap.isIE4) {
this.kaKeymap.domExtents.style.filter = "Alpha(opacity="+amount+")";
}
e=null;
};
kaKeymap.prototype.mouseup = function(e) {
if(this.kaKeymap.domExtents.init) {
e = (e)?e:((event)?event:null);
this.kaKeymap.domExtents.style.backgroundColor = 'transparent';
this.kaKeymap.domExtents.style.opacity=1;
if (this.kaKeymap.kaMap.isIE4) {
this.kaKeymap.domExtents.style.filter = "Alpha(opacity=100)";
}
this.kaKeymap.domExtents.init=0;
var cG=this.kaKeymap.geoCentCoord();
this.kaKeymap.kaMap.zoomTo(cG[0],cG[1]);
}
};
kaKeymap.prototype.mousemove = function(e) {
e = (e)?e:((event)?event:null);
if(this.kaKeymap.domExtents.init) {
var xMov=(this.kaKeymap.domExtents.oX-e.clientX);
var yMov=(this.kaKeymap.domExtents.oY-e.clientY);
var oX=this.kaKeymap.pxExtent[0];
var oY=this.kaKeymap.pxExtent[1];
var nX = oX-xMov;
var nY = oY-yMov;
this.kaKeymap.domExtents.oX= e.clientX;
this.kaKeymap.domExtents.oY= e.clientY;
this.kaKeymap.pxExtent[0] = nX;
this.kaKeymap.pxExtent[1] = nY;
if(this.kaKeymap.domCross.style.visibility == 'visible') {
var ix = parseInt(this.kaKeymap.domCross.style.width)/2;
var iy = parseInt(this.kaKeymap.domCross.style.height)/2;
var ox = this.kaKeymap.pxExtent[2]/2;
var oy = this.kaKeymap.pxExtent[3]/2;
this.kaKeymap.domExtents.style.top = parseInt((nY+0.5)-iy+oy) + "px";
this.kaKeymap.domExtents.style.left = parseInt((nX+0.5)-ix+ox) + "px";
} else {
this.kaKeymap.domExtents.style.top = parseInt(nY+0.5) + "px";
this.kaKeymap.domExtents.style.left = parseInt(nX+0.5) + "px";
}
}
};
kaKeymap.prototype.geoCentCoord = function() {
var cpX = this.pxExtent[0] + this.pxExtent[2]/2;
var cpY = this.pxExtent[1] + this.pxExtent[3]/2;
var cX = this.aExtents[0] + (this.cellWidth *cpX);
var cY = this.aExtents[3] - (this.cellHeight *cpY);
return [cX,cY];
};
Documentation generated by
JSDoc on Mon Feb 5 08:25:15 2007