/*	
 	2008.05.29, UB mapOnResize fonksiyonu eklendi
 	2008.05.28, UB RectZoom fonksiyonunda curMinx, curMinY, curMaxX ve curMaxY değerleri yeniden hesaplanmaktadır.
 	               Hesaplama sırasında imageCoordsToProjectCoords fonksiyonuna lower ve upper için 2 kez gidilir.
 	               lower koordinatlar bulunduktan hemen sonra curMinX ve Y değerleri set edildiği ve 
 	               imageCoords fonksiyonuna upper için gidildiğinde eski değerlerin korunmaması nedeniyle
 	               koordinat değerleri yanlış hesaplanıyordu. (büyütülmek istenen bölgenin imajın sol alt 
 	               köşesinde çıkması) lower ve upper için bulunan curMinX ve y değerleri temp değişkene alınıp
 	               upper hesabından sonra curMinx ve Y değişkenine atanarak sorun çözüldü.
 	               
 	2008.03.31, AA  // Creation
	Events.js, sayfa genelinde, html komponentlerin event’larının bulunduğu js dosyasıdır. 
	Burada açıklanması gereken şey body’nin “onKeyDown” fonksiyonu. Bu fonksiyon, sayfanın keydown eventini 
	dinleyip, birkaç tuşa kısayol ekler
		o	R: refresh – o an bulunan tabakalar ile harita refresh edilir. 
		o	E: zoom to extension yapılır. 
		o	Esc : eğer ölçü tagında ise, ölçümün sıfırlanmasını ve yeniden başlanmasını sağlar.
*/


// pan ve rectZoom'un kullandığı parametreler. Ekrana ilk ve son tıklanma anı.  
var	panStart = { x: 0, y: 0 };
var	panStartUB = { x: 0, y: 0 };
var panEnd = {x: 0, y:0};
var zoomRect;
var isZoomRectEvent = 0;


	
function isRightClick(e){
	var rightclick;
	
	if (e.which) 
		rightclick = (e.which == 3);
	else if (e.button) 
		rightclick = (e.button == 2);
	
	return rightclick;
}

function onKeyDown(event){
    if (event == null)  // Bazen event boş dönebiliyor!! 
    	event = window.event;

	if (event){
		if(event.keyCode){ // IE
			keynum = event.keyCode;
		}	
		else if(event.which){ // Netscape/Firefox/Opera
			keynum = event.which;
		}
		
		switch(keynum){
			//case 82 : getMap(curMinX, curMinY, curMaxX, curMaxY);  // Refresh (getMap)
			//		  break;
			//case 69 : zoomToExts();  // ZoomToExtentions
			//		  break;
			case 27 : if (operationsTabPanel.activeTab.no == 1){   // ölçüm değişkenleri sıfırlanacak.
						  coordsClicked = "";	
						  document.getElementById("TotalDistance").innerHTML = "";
						  document.getElementById("DistanceOfLastTwoPoints").innerHTML = "";
						  document.getElementById("Area").innerHTML = "";
						  measurePointsX = null;
						  measurePointsY = null;
						  measurePointsX = new Array();
						  measurePointsY = new Array();
						  jg.clear();
						  						  
					  }			
					  break;	
		}
	}
}

// ZoomRect işlemi içerisinde olduğu zaman, MouseMove ona göre davranıyor. ?
var InZoomRect = false;

function mapOnMouseDown(event){
    var ie = (document.all) ? 1 : 0; //@UB: 19.02.2008

    if (event == null)  // Bazen event boş dönebiliyor!! 
    	event = window.event;

	// pan/ZoomRect işlemi başlıyor.
	panStart = getImageCoords(event);
    panStartUB.x = event.x;	
    panStartUB.y = event.y;	
    
    
	if (isRightClick(event)){ // sağ klik her zaman pan yapar. 
	}
	else{ // zoomrect yapcak.
	
	    if (isZoomRectEvent == 1) 
	    {
			switch(operationsTabPanel.activeTab.no){
				case 0: // rectZoommmm			
				    InZoomRect = true;
					zoomRect.style.width	   = 0;
					zoomRect.style.height	   = 0;					  
					zoomRect.style.top		   = panStart.y;
					zoomRect.style.left		   = panStart.x;
				    zoomRect.style.visibility  = 'visible';
				    zoomRect.style.backgroundColor = 'maroon';
				    zoomRect.style.borderWidth = 2;
					if (ie)						
						zoomRect.style.filter = 'alpha(opacity=25)';				
					else
						zoomRect.style.opacity = 0.25;
	 
				    
				    
				    break;
				case 1:
		  			break;    
				case 2:
		  			break;
				default:;   // bu durumda sıfır ya da başka birşey ise... PAN  			  			
			}	
		}	
	}
}


function RectZoom(){

	var mapWidth  = map.getAttribute("width");
	var mapHeight = map.getAttribute("height");

 
	temp = zoomRect.style.left;
	var left = Number(temp.replace('px',''));
	
 
	temp = zoomRect.style.top;
	var  top = Number(temp.replace('px',''));
	
 
	temp = zoomRect.style.width;
	var width = Number(temp.replace('px',''));
	
	if (width>10){
 
		temp = zoomRect.style.height;
		var height = Number(temp.replace('px',''));

 
		// Lowerleft coords	
		if (isZoomRectEvent == 1) 
		{	    		

		var LastCoords = imageCoordsToProjectCoords( left, (top+height), mapWidth, mapHeight );
		
		//@UB: 28.05.2008
		tmpCurMinX = LastCoords.x;
		tmpCurMinY = LastCoords.y;		 

		var LastCoords = imageCoordsToProjectCoords( (left+width), top, mapWidth, mapHeight );
		
		//@UB: 28.05.2008
		tmpCurMaxX = LastCoords.x;
		tmpCurMaxY = LastCoords.y;

		curMinX = tmpCurMinX; 
		curMinY = tmpCurMinY; 
		curMaxX = tmpCurMaxX; 
		curMaxY = tmpCurMaxY; 
		
		}
		getMap( curMinX, curMinY, curMaxX, curMaxY );
	}
}

/*
 * Haritanın click işlemini dinleyen sadece bir event handler var. 
 * Bu event handler, "operationsTabPanel" deki aktif taba göre değişik davranışlarda bulunacak. 
 *    Aktif Tab değeri  
 *		0 : pan, zoom işlemleri  
 *		1 : getMeasure
 *		2 : getFeatureInfo
 */

function mapOnMouseUp(event){
    if (event == null)  // Bazen event boş dönüyor!??! 
    	event = window.event;
	
	InZoomRect = false;
	zoomRect.style.visibility  = 'hidden';	
	
	if (isRightClick(event)) { // sağ klik her zaman pan yapar. 
		// pan işlemi bitmiştir.

		
		//panEnd = getImageCoords(event);
	 	// PanEnd değişkenini aşağıdaki gibi almaya başladık çünkü haritanın top ve left'ini mousemove da değiştirdiğimizden,
	 	// kaydırma sonrasındaki mouse imaje koordinatları, panStart ile aynı geliyordu.
		panEnd.x = panStart.x + Number( map.style.left.replace('px','')); 
		panEnd.y = panStart.y + Number( map.style.top.replace('px','')); 
				
		
	    map.style.top=0;
		map.style.left=0;
					
		doPan( panStart, panEnd );
	   
		 
    } 
	else{ // sol klik, aktif olan taba göre - rect Zoom, seçim, ölçüm yapabilir. 
		switch(operationsTabPanel.activeTab.no){
			case 0: // rectZoommmm
   	    		RectZoom();
			    break;
			case 1:
				measurePointsX.push(panStart.x);
				measurePointsY.push(panStart.y);
				jg.clear();
				jg.setStroke(2);
				jg.setColor("#ff0000"); // red
  				jg.drawPolyline(measurePointsX,measurePointsY); // co-ordinates related to "myCanvas"
				jg.paint();        
	         	getMeasureEvent(event);
	  			break;    
			case 2:
				getFeatureInfoByCoordsEvent(event);
	  			break;
			default:;   // bu durumda sıfır ya da başka birşey ise... PAN  			  			
		}
	} 
}

function mapOnMouseMove(event){
	
    if (event == null)  // Bazen event boş dönebiliyor!! 
    	event = window.event;

	var P = getImageCoords(event); // o an bulunulan imaj pikselleri
	 
	var w = map.getAttribute("width");
	var h = map.getAttribute("height");
	
	var LastCoords = imageCoordsToProjectCoords( P.x, P.y, w, h);

	document.getElementById("AA").setAttribute("value", P.x + ", " + P.y + " -- " + map.getAttribute("width")+":"+ map.getAttribute("height"));
	
	document.getElementById("X").setAttribute("value", LastCoords.x);
	document.getElementById("Y").setAttribute("value", LastCoords.y);	
    if ( isRightClick(event) )  //@UB: 20.02.2008
    {
      map.style.top  =   (window.event.y - panStartUB.y); 
      map.style.left =   (window.event.x - panStartUB.x); 
    }
	if (InZoomRect){
		var s = panStart;  // kolaylık olsun diye start ve end diye iki değişkene attım. 
		var e = P;
		
		var dy = e.y - s.y;
		var dx = e.x - s.x;
		
		if (dy<0) dy = 0-dy;
		if (dx<0) dx = 0-dx;
		 
		
		zoomRect.style.height  = dy;
		zoomRect.style.width   = dx;	
			
		if ((s.x<=e.x) && (s.y>e.y)){		// I. bölge
			zoomRect.style.top	= e.y;
			zoomRect.style.left	= s.x;						
		} 
		else if ((s.x>e.x) && (s.y>=e.y)){	// II. bölge
			zoomRect.style.top	= e.y;
			zoomRect.style.left	= e.x;								
		}	
		else if ((s.x>=e.x) && (s.y<e.y)){	// III. bölge
			zoomRect.style.top	= s.y;
			zoomRect.style.left	= e.x;									
		}
		else if ((s.x<e.x) && (s.y<=e.y)){	// IV. bölge 
			zoomRect.style.top	= s.y;
			zoomRect.style.left	= s.x;								
		}	
		else{ // ikisi de eşitse...
			zoomRect.style.top	= s.y;
			zoomRect.style.left	= s.x;					
		}
		
		
	}
}

function mapOnMouseWheel(event){
	    if (event == null)  // Bazen event boş dönebiliyor!! 
	    	event = window.event;
	
		var delta = 0;
	    if (!event) /* For IE. */
			event = window.event;
	    if (event.wheelDelta) { /* IE/Opera. */
	        delta = event.wheelDelta/120;
	    	/** In Opera 9, delta differs in sign as compared to IE. */
			if (window.opera)
	        	delta = -delta;
		} else if (event.detail) { /** Mozilla case. */
	    	/** In Mozilla, sign of delta is different than in IE.
	         * Also, delta is multiple of 3. */
	         delta = -event.detail/3;
		}
	    var P = getImageCoords(event);
	        
	    /** If delta is nonzero, handle it.
	     * Basically, delta is now positive if wheel was scrolled up,
	     * and negative, if wheel was scrolled down. */
	     
	    if (delta)
	    	handle(delta, P.x, P.y);
		/** Prevent default actions caused by mouse wheel.
	     * That might be ugly, but we handle scrolls somehow
		 * anyway, so don't bother here.. */
	    if (event.preventDefault)
	    	event.preventDefault();
		event.returnValue = false;
}

//function resizeMap(width, height){
//	map.setAttribute("width", width);
//	map.setAttribute("height", height);
	//getMap(curMinX, curMinY, curMaxX, curMaxY); 
//}

function mapOnResize(event){
  getMap(curMinX, curMinY, curMaxX, curMaxY); 
}

function vikvik( TP, newTab){
	if ((!newTab.everLoaded) && (newTab.ds)){
		newTab.ds.load();
		newTab.everLoaded = true;
	}
}

// feature datalarını gösteren aşağıdaki tabpanel değiştiği zaman.  
function dataGridChange( TP, newTab, currentTab  ){	
	
	if ((newTab) && (newTab.no!=0) && (! newTab.everLoaded) ) {
		// server'dan veri istenecek.
		// criteria hazırlanıyor....
		store 	 = TP.getItem(0).getStore();		
		colModel = TP.getItem(0).getColumnModel();
		
		if ((colModel) && (store) && (store.getTotalCount() > 0)){		
			var rec = store.getAt(0);  // ilk kaydı alıyoruzz
			
 			var criteria = "";
 			// burada her ilişki kadar....
 			
 			for (i=0;i<newTab.relDefs.length;i=i+1){ 		
 			 
 				var relCol = newTab.relDefs[i]["relColName"];
 				var col    = colModel.getColumnById(newTab.relDefs[i]["thisColName"]);
				 
 				if (criteria != "")
 					criteria = criteria + " AND ";
 				
 				criteria = criteria + getFormattedCriteria( relCol, col["colType"], rec.get(col["dataIndex"]) ); 				
 			}
 							
			var relatedData = getColumnValues( (TP.getItem(0).realName + '.' + newTab.realName) , '', criteria );
			if (relatedData){
			   	if (! IsItException(relatedData, 'Nesne Sorgulama Hata :')){
				    // objeye ait bilgi döndü ise.
					var colStruct = getColumnStruct( relatedData );
					if ((colStruct.columnStruct != null) && (colStruct.columnStruct.length > 0)){
						var tableName = getTableName( relatedData ); 	
						var cm  = getColModel( relatedData, colStruct );	
						var ds  = getDataStore( relatedData, colStruct );
						 									
						newTab.ds = ds;
						newTab.cm = cm;

						newTab.reconfigure( ds, cm );
					}
				}
			}			
		}
	}
}






