/**************************************************************************

   観測点表示および検索 javascript (for IORGC)

   開発者： K.Horiuchi
  
   ver 0.1    06/07/07

****************************************************************************/ 


//var fXOrigin =  60.0,                  // longitude and latitude range of map          
//    fYOrigin = -10.0,                  // do not omit
//    fXSpan =   100.0,
//    fYSpan =    60.0;
var fXOrigin =  60.0,                  // longitude and latitude range of map          
    fYOrigin = -20.0,                  // do not omit
    fXSpan =   100.0,
    fYSpan =   100.0;

var dotSize = 5;                       // Half size of dot image which express station point

/*-------------------------------------------------------------------------*/

var sMapName    = "MWJ_mapHandler_controls0",    // name of map image
    sRectName   = "Rectangle";                   // rectanble for selection

var sMode = "SELECT"; 	                         // operation mode  ="MOVE" or "SELECT"


/*--------------- Set Operation Mode ------------------------*/

function MoveMode(){ 
        sMode ="MOVE";
}

function SelectMode(){ 
        sMode = "SELECT";
}

/*---------------- Define Behavior of mapHandler  -------------------*/

function moveFunction(event,layer,layPosX,layPosY,moveX,moveY,cLeft,cRght,cTop,cBttm){
	var oPix = document.childNodes ? 'px' : 0;
	var theLayer = layer.style ? layer.style : layer; 
	if(sMode == "MOVE"){			
	        theLayer.left = layPosX + oPix;
		theLayer.top  = layPosY + oPix;
	  	theLayer.clip = "rect("+(cTop+oPix)+","+(cRght+oPix)+","+(cBttm+oPix)+","+(cLeft+oPix)+")";
	}
	else if(sMode == "SELECT"){
		var pos = getLocalPos(event,"IMG");
		if(pos){
			var newX = pos[0], newY = pos[1];
			var rect = getRectDiv();
			with(rect.style){
				if (moveX >= 0) {
					left = newX - moveX;
					width = moveX;
				} else {
					left = newX;
					width = -moveX;
				}
				if (moveY >= 0) {
					top = newY - moveY;
					height = moveY;
				} else {
					top = newY;
					height = -moveY;
				}
				var x1 = Math.round(Screen2WorldX(parseInt(left))), 
				    x2 = Math.round(Screen2WorldX(parseInt(left)+parseInt(width))), 
				    y1 = Math.round(Screen2WorldY(parseInt(top))),  
				    y2 = Math.round(Screen2WorldY(parseInt(top)+parseInt(height)));
				writeDivHTML(getRefToDivNest("LON_LAT"),
			          '<span class="pt9-2">Lon:',x1,' to ',x2,', Lat:',y2,' to ',y1,'</span>');
			}
		}
	}
}

function getRectDiv() {
	var map = getRefToDivNest(sMapName),
	    rect = getRefToDivNest(sRectName);
	if(!map) {
		alert("Map Can't be found ..."); 
	        return;
	}
	if(!rect){
		rect = document.createElement("div");
		rect.id = sRectName;
		with (rect.style) {
			border = "red solid 2px";
			position = "absolute";
		}
	 	 map.appendChild(rect);
        }
	return rect;
}	


/*------------------ Transformation of Coordinates --------------------*/ 

function World2ScreenX(fX){
    return Math.round((fX-fXOrigin)*mapHandler.mapW/fXSpan);
}
function World2ScreenY(fY){
    return Math.round(mapHandler.mapH - (fY-fYOrigin)*mapHandler.mapH/fYSpan);
}

function Screen2WorldX(nX){
    return nX*fXSpan/mapHandler.mapW + fXOrigin; 
}
function Screen2WorldY(nY){
    return (mapHandler.mapH-nY)*fYSpan/mapHandler.mapH + fYOrigin; 
}

/*---------------- Add Contents into DIV -------------------------*/
 
function writeDivHTML(div){
  var s='';
  for(var i=1; i<arguments.length; i++) s+=arguments[i];
  if(document.getElementById){ // Mozilla,IE5,6,NN6 
    div.innerHTML='';
    div.innerHTML+=s;
  }
  else if(document.layers){ // NN4
    div.document.open('text/html','replace');
    div.document.write(s);
    div.document.close();
  }
  else if(document.all){ // IE4,5
    div.innerHTML='';
    div.insertAdjacentHTML('BeforeEnd',s);
  }
}

/*---------------- Get Coordinates on the Object ------------------*/

function getLocalPos(e, sTagName){
	var cy,cy,target;
	if (document.all){ // IE, opera
		target = e.srcElement;
		cx = e.offsetX;
		cy = e.offsetY;
	}else{
		target = e.target;
		cx = e.layerX;
		cy = e.layerY;
	}
	if((!sTagName)||sTagName==target.tagName){
		return [cx,cy];
	}
	else {
		return null;
	}
}


/*------------------- Load Sation Data on Map Image ----------------

 The following procedure is neccessary for loading station data.

 function Plot(mapObj){
//              Obsdata nam, lon lat
	PlotStation(mapObj,"test",110,30);
	PlotStation(mapObj,"test2",120,35);
 }	
---------------------------------------------------------------------*/

function Plot(cat){
	var oMap = getRefToDivNest(sMapName);
	EraseStation(oMap);
	if( cat == "AWS" || cat == "ALL" ) PlotAWS(oMap);
	if( cat == "GPS" || cat == "ALL" ) PlotGPS(oMap);
	if( cat == "Isotope" || cat == "ALL" ) PlotIsotope(oMap);
	if( cat == "Sonde" || cat == "ALL" ) PlotSonde(oMap);
}

function PlotStation(oMap,sName,x,y){
	var station = document.createElement("div");
	station.id = sName;
	with (station.style){
		left = World2ScreenX(x)-dotSize;  // half size of dot image (5px)
	  	top =  World2ScreenY(y)-dotSize;  // half size of dot image (5px)
		position = "absolute";
        }
	writeDivHTML(station,'<IMG src="map/images/dot.gif" alt="'+sName+'">');
	oMap.appendChild(station);
}
   

function EraseStation(map){
	for(var i=map.childNodes.length; i>0; i--){
	    if( map.childNodes[i-1].nodeName == "DIV") map.removeChild(map.childNodes[i-1]);
        }
}	    

/*------------------- Make Dataset Name List within a Box -----------*/

function MakeDSList(){
	var bDEBUG = false;
      	var map = getRefToDivNest(sMapName),
	    rect = getRefToDivNest(sRectName),
	    list = "";

	if(rect){
		with(rect.style){
    		    	x1 = parseInt(left) - dotSize;
	    		x2 = parseInt(left) + parseInt(width)  - dotSize;
	    		y1 = parseInt(top)  - dotSize;
	    		y2 = parseInt(top)  + parseInt(height) - dotSize;
        	}
		if(bDEBUG) alert("rect(x1,x2,y1.y2)="+x1+","+x2+","+y1+","+y2);
		if(bDEBUG) alert("childNodes="+map.childNodes.length);

		for(var i=0; i<map.childNodes.length; i++){
  	    		if( map.childNodes[i].nodeName == "DIV" &&  map.childNodes[i].id != sRectName ){
		   		with(map.childNodes[i].style){
					if(bDEBUG) alert("station(x,y)="+parseInt(left)+","+parseInt(top));
	    				if( parseInt(left) >= x1 && parseInt(left) <= x2 &&
		    	    	    	    parseInt(top)  >= y1 && parseInt(top)  <= y2 ){
						list += map.childNodes[i].id + "/";
                        		}
	   	   		}
			}
	    	}
        }	 
	if(bDEBUG) alert("list="+list);
	document.form2.selection.value = list;
        document.form2.cat.value = document.form1.Observation.options[document.form1.Observation.selectedIndex].value;
	return true;
} 




