/*  
	2008.04.20, UB - eklenti
	createXMLDOM fonksiyonunda  code for Mozilla, Firefox, Opera için xmlDoc yaratilirken 
	xmlDoc.async ozelligi "false" olarak ayarlandi. 	

	2008.04.07, UB - eklenti
	getShortPath1 fonksiyonuna layers(görüntülenecek tabakalar) ,
        queryLayerName(sorgu tabakası),searchLayerName(network analizinde kullanılacak kapı tabakası),
        networkName(network analizi için kullanılacak network adı) parametre olarak geçiliyor.

	2008.04.07, AA - eklenti
	"getXMLHTTPRequest" fonksiyonuna, tarayicinin destekledigi ajax versiyonunu son surumden ilkine dogru arayan bir mekanizma eklendi. 
	
	2008.03.31, AA - eklenti
	Default olarak hepsi baslangicta getCaps, getMap ve getFeature.. ayni url'yi kullanacaklar. 
	Ama sayfa yuklenir yuklenmez yapilacak getCapabilities istemi sonucunda bunlar degisecek.

	2007.12.12, AA - yaratildi
	Serverdan istem yapan temel fonksiyonlarin bulundugu js
		 
*/

var CapabilitiesUrl = InternetAddress + "/WebGISServer/servlet/WebServer?";
var MapUrl 			= InternetAddress + "/WebGISServer/servlet/WebServer?";
var FeatureInfoUrl 	= InternetAddress + "/WebGISServer/servlet/WebServer?";

var map;

// bir request işlemde iken client'ın bir diğer request göndermesini engeller. 
var stillInRequest		 = false;

// getMeasure için kullanılan değişken. 
var coordsClicked 		 = "";
var pen 				 = null;
var initialized 		 = false;

var lastPointClicked = {x: 0, y: 0};

// comboboxda son seçilmiş olan tabaka ve kolonu tutar. 
var selectedColumn = "";

var lastRelatedTableList = null;

/* <<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>>
 * GUI işlemlerinden bağımsız olarak, SALT SUNUCUDAN ISTEM YAPAN FONKSIYONLAR. 
 * <<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>> */

function getCapabilities(){
	var requestStr = CapabilitiesUrl + "request=GetCapabilities&version=1.3.0&service=WFS" + "&project=" + projectType;
	return requestStr; 
}

/*
function getMap( minX, minY, maxX, maxY ){
	if ((initialized) && (!stillInRequest)) {
		stillInRequest = true;
		
		// CC clearCanvas();
		var layers     = getCheckedLayers();
		var requestStr = MapUrl + "request=GetMap&version=1.3.0" +
								  "&project=" + projectType +
							  	  "&layers=" + layers + 
							  	  "&styles=" + 
							  	  "&crs=" +
							  	  "&bbox=" + minX + "," + minY + "," + maxX + "," + maxY +
							  	  "&width=" + map.getAttribute("width") +
							  	  "&height=" + map.getAttribute("height") +
							  	  "&format=image/png"; 							  	  
		forDebug();	
		map.src = requestStr;
	}
}	 
*/

function assignImagePath( xml ){
	var imagePath = xml.getElementsByTagName("ImagePath");
	if (imagePath){
		imagePath = imagePath[0];
		if (imagePath){
			map.src = imagePath.childNodes[0].nodeValue;	
			return true;		
		}
	} else
	{return false;}
}


function getMap( minX, minY, maxX, maxY ){

	if ((initialized) && (!stillInRequest)) {

		stillInRequest = true;
		
		// CC clearCanvas();
		var layers     = getCheckedLayers();

		var requestStr = MapUrl + "request=GetImage&version=1.3.0" +
								  "&project=" + projectType +
							  	  "&layers=" + layers + 
							  	  "&styles=" + 
							  	  "&crs=" +
							  	  "&bbox=" + minX + "," + minY + "," + maxX + "," + maxY +
							  	  "&width=" + map.getAttribute("width") +
							  	  "&height=" + map.getAttribute("height") +
							  	  "&format=image/png";				
							  	  			  	  
	 	var myRequest = getXMLHTTPRequest(); 
		myRequest.open("GET", requestStr, false);
		 
		myRequest.send(null);
		

		forDebug();
				
		stillInRequest = false;
				
		var xmlDoc = myRequest.responseXML;
		
		if (xmlDoc){
			BBox = xmlDoc.getElementsByTagName("BoundingBox");
			
			if (BBox){
			
				BBox = BBox[0];
				if (BBox){	
					curMinX = Number(BBox.attributes.getNamedItem("minx").value);
					curMinY = Number(BBox.attributes.getNamedItem("miny").value);
					curMaxX = Number(BBox.attributes.getNamedItem("maxx").value);
					curMaxY = Number(BBox.attributes.getNamedItem("maxy").value);
				}
			}
			assignImagePath(xmlDoc);
		}
	}
}	 

// P : imaj koordinatları
function getFeatureInfoByCoords( P ){
	var requestStr = FeatureInfoUrl + "request=GetFeatureInfo&version=1.3.0" +
									  "&project=" + projectType +
	   				  		  	  	  "&layers=" + getCheckedLayers() + 
					  		  	  	  "&styles=" + 
					  		      	  "&crs=" +
					  		      	  "&bbox=" + curMinX + "," + curMinY + "," + curMaxX + "," + curMaxY +
					  		      	  "&width=" + map.getAttribute("width") +
					  		      	  "&height=" + map.getAttribute("height") +
					  		      	  "&format=image/png" +					  		      
								  	  "&query_layers=" + getCheckedLayers() +
								  	  "&info_format=text/xml" +
								  	  // "&feature_count=" + // Opsiyonel parametre; default degeri 1
								  	  "&i=" + P.x +
								  	  "&j=" + P.y;
								  	  // "&exceptions=" // opsiyonel parametre; default degeri "xml"
	 	
 	var myRequest = getXMLHTTPRequest(); 
	myRequest.open("GET", requestStr, false); 
	// getFeatureInfo sonucu donuyor!
	myRequest.send(null);
	if (ge) {
        var container = ge.getGlobe().getFeatures();   
        var objectList = container.getChildNodes();   
        for (var i = 0; i < objectList.getLength(); ++i) 
        {     container.removeChild(objectList.item(i)); }	
		
		var  kmlXML = myRequest.responseText;
		var lookat = kmlXML.substring(kmlXML.indexOf('<lookat>'),kmlXML.indexOf('</lookat>')+9);
		var latValue = lookat.substring(lookat.indexOf('<lookat>')+8,lookat.indexOf(',')-1);
		var lonValue = lookat.substring(lookat.indexOf(',')+1,lookat.indexOf('</lookat>')-1);
	
		kmlXML = '<?xml version="1.0" encoding="ISO-8859-9"?>' + kmlXML.substring(kmlXML.indexOf('<kml '),kmlXML.indexOf('</kml>')+6);
			
		var marker = ge.parseKml(kmlXML);
		ge.getFeatures().appendChild(marker);
	    var la = ge.createLookAt('');
	    la.set( parseFloat(lonValue), parseFloat(latValue), 80, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 45, 900);
	    ge.getView().setAbstractView(la);
	}
	return myRequest.responseXML;
}
function getShortPath1(layers,criteria,queryLayerName,searchLayerName,networkName){
    
   
	var requestStr = CapabilitiesUrl + "request=GetShortPath&version=1.3.0" +
									  "&project=" + projectType +
	   				  		  	  	  "&layers=" + layers + 
					  		  	  	  "&styles=" + 
					  		      	  "&crs=" +
					  		      	  "&bbox=" + curMinX + "," + curMinY + "," + curMaxX + "," + curMaxY +
					  		      	  "&width=" + map.getAttribute("mapWidth") +
					  		      	  "&height=" + map.getAttribute("mapHeight") +
					  		      	  "&format=image/png" +				
					  		      	  "&zoomFactor=2" + 
					  		      	  "&criteria=" + criteria +	  		      									  	   				  		  	  	  		  		     
					  		      	  "&query_layer_name=" + queryLayerName +	  		      									  	   				  		  	  	  		  		     
									  "&search_layername=" + searchLayerName +
									  "&stop_coord_X=" +curMinX+
									  "&stop_coord_Y=" +curMinY+
									  "&network_name=" + networkName;

 	var myRequest = getXMLHTTPRequest();
	myRequest.open("GET", requestStr, false); 
	
	myRequest.send(null);
	return myRequest.responseXML;
}




//@UB: 08.03.2008
function getFeatureInfoByColumnValue2( querylayers, criteria, layers ){
    
    
	var requestStr = FeatureInfoUrl + "request=GetFeatureInfo&version=1.3.0" +
									  "&project=" + projectType +
	   				  		  	  	  "&layers=" + layers + 
					  		  	  	  "&styles=" + 
						  		      "&crs=" +
						  		      "&bbox=" + curMinX + "," + curMinY + "," + curMaxX + "," + curMaxY +
						  		      "&width=" +  map.getAttribute("mapWidth")  +
						  		      "&height=" + map.getAttribute("mapHeight") +
						  		      "&format=image/png" +					  		      
									  "&query_layers=" + querylayers +
									  "&info_format=text/xml" +
									  "&selection_type=3" +
									  "&criteria=" + criteria +
									  "&zoom_factor=1" ;
	

 	var myRequest = getXMLHTTPRequest();
	myRequest.open("GET", requestStr, false); 
	// getFeatureInfo sonucu donuyor!
	myRequest.send(null);
	if (ge) {
		var  kmlXML = myRequest.responseText;
		var lookat = kmlXML.substring(kmlXML.indexOf('<lookat>'),kmlXML.indexOf('</lookat>')+9);
		var latValue = lookat.substring(lookat.indexOf('<lookat>')+8,lookat.indexOf(',')-1);
		var lonValue = lookat.substring(lookat.indexOf(',')+1,lookat.indexOf('</lookat>')-1);
	
        var container = ge.getGlobe().getFeatures();   
        var objectList = container.getChildNodes();   
        for (var i = 0; i < objectList.getLength(); ++i) 
        {     container.removeChild(objectList.item(i)); }	
	
		kmlXML = '<?xml version="1.0" encoding="ISO-8859-9"?>' + kmlXML.substring(kmlXML.indexOf('<kml '),kmlXML.indexOf('</kml>')+6);		
		var marker = ge.parseKml(kmlXML);
		ge.getFeatures().appendChild(marker);
	    var la = ge.createLookAt('');
	    la.set( parseFloat(lonValue), parseFloat(latValue), 80, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 45, 900);
	    ge.getView().setAbstractView(la);
	}
	
	return myRequest.responseXML;
}


function getFeatureInfoByColumnValue( querylayers, criteria ){
 var wValue = "";
 var hValue = "";
 wValue = map.getAttribute("width");
 if (wValue == "0") {
  wValue = map.getAttribute("mapwidth");
 }
 hValue = map.getAttribute("height");
 if (hValue == "0") {
  hValue = map.getAttribute("mapheight");
 }
 var requestStr = FeatureInfoUrl + "request=GetFeatureInfo&version=1.3.0" +
           "&project=" + projectType +
                    "&layers=" + getCheckedLayers() + 
                 "&styles=" + 
                "&crs=" +
                "&bbox=" + curMinX + "," + curMinY + "," + curMaxX + "," + curMaxY +
                "&width=" + wValue +
                "&height=" + hValue +
                "&format=image/png" +               
           "&query_layers=" + querylayers +
           "&info_format=text/xml" +
           "&selection_type=3" +
           "&criteria=" + criteria +
           "&feature_count=99999999" + 
           "&zoom_factor=2" ;
 
  var myRequest = getXMLHTTPRequest();
 myRequest.open("GET", requestStr, false); 
 myRequest.send(null);
 // getFeatureInfo sonucu donuyor!
	if (ge) {
		var  kmlXML = myRequest.responseText;
		
		var lookat = kmlXML.substring(kmlXML.indexOf('<lookat>'),kmlXML.indexOf('</lookat>')+9);
		var latValue = lookat.substring(lookat.indexOf('<lookat>')+8,lookat.indexOf(',')-1);
		var lonValue = lookat.substring(lookat.indexOf(',')+1,lookat.indexOf('</lookat>')-1);
	
        var container = ge.getGlobe().getFeatures();   
        var objectList = container.getChildNodes();   
        for (var i = 0; i < objectList.getLength(); ++i) 
        {     container.removeChild(objectList.item(i)); }	
	
		kmlXML = '<?xml version="1.0" encoding="windows-1254"?>' + kmlXML.substring(kmlXML.indexOf('<kml '),kmlXML.indexOf('</kml>')+6);		
		var marker = ge.parseKml(kmlXML);
		ge.getFeatures().appendChild(marker);
	    var la = ge.createLookAt('');
	    la.set( parseFloat(lonValue), parseFloat(latValue), 80, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 45, 900);
	    ge.getView().setAbstractView(la);
	}
 
 
 return myRequest.responseXML;
}

//@UB: 07.08.2008 zoom factor eklendi
function getFeatureInfoByColumnValueByZoomFactor( querylayers, criteria,zoomFactor ){
 var wValue = "";
 var hValue = "";
 wValue = map.getAttribute("width");
 if (wValue == "0") {
  wValue = map.getAttribute("mapwidth");
 }
 hValue = map.getAttribute("height");
 if (hValue == "0") {
  hValue = map.getAttribute("mapheight");
 }
 
 var requestStr = FeatureInfoUrl + "request=GetFeatureInfo&version=1.3.0" +
           "&project=" + projectType +
                    "&layers=" + getCheckedLayers() + 
                 "&styles=" + 
                "&crs=" +
                "&bbox=" + curMinX + "," + curMinY + "," + curMaxX + "," + curMaxY +
                "&width=" + wValue +
                "&height=" + hValue +
                "&format=image/png" +               
           "&query_layers=" + querylayers +
           "&info_format=text/xml" +
           "&selection_type=3" +
           "&criteria=" + criteria +
           "&feature_count=99999999" + 
           "&zoom_factor=" + zoomFactor ;
  var myRequest = getXMLHTTPRequest();
  
 myRequest.open("GET", requestStr, false); 

 myRequest.send(null);
 // getFeatureInfo sonucu donuyor!
 	if (ge) {
		var  kmlXML = myRequest.responseText;
		var lookat = kmlXML.substring(kmlXML.indexOf('<lookat>'),kmlXML.indexOf('</lookat>')+9);
		var latValue = lookat.substring(lookat.indexOf('<lookat>')+8,lookat.indexOf(',')-1);
		var lonValue = lookat.substring(lookat.indexOf(',')+1,lookat.indexOf('</lookat>')-1);
        var container = ge.getGlobe().getFeatures();   
        var objectList = container.getChildNodes();   
        for (var i = 0; i < objectList.getLength(); ++i) 
        {     container.removeChild(objectList.item(i)); }	
	
		kmlXML = '<?xml version="1.0" encoding="windows-1254"?>' + kmlXML.substring(kmlXML.indexOf('<kml '),kmlXML.indexOf('</kml>')+6);		
		var marker = ge.parseKml(kmlXML);
		ge.getFeatures().appendChild(marker);
	    var la = ge.createLookAt('');
	    la.set( parseFloat(lonValue), parseFloat(latValue), 80, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 45, 900);
	    ge.getView().setAbstractView(la);
	}
 
 
 
 return myRequest.responseXML;
}


//@UB: 27.04.2008 ECAP icin eklendi. (ada / parsel  genelde nesnenin name alanindadir)
function getFeatureInfoByEntityName( querylayers, entityName,zoomFactor ){
	
	if (zoomFactor == "") {
		zoomFactor = 2;
	}
	var requestStr = FeatureInfoUrl + "request=GetFeatureInfo&version=1.3.0" +
									  "&project=" + projectType +
	   				  		  	  	  "&layers=" + getCheckedLayers() + 
					  		  	  	  "&styles=" + 
						  		      "&crs=" +
						  		      "&bbox=" + curMinX + "," + curMinY + "," + curMaxX + "," + curMaxY +
						  		      "&width=" + map.getAttribute("mapwidth") +
						  		      "&height=" + map.getAttribute("mapheight") +
						  		      "&format=image/png" +					  		      
									  "&query_layers=" + querylayers +
									  "&info_format=text/xml" +
									  "&entity_name=" +entityName +
									  "&selection_type=1" +									  									 								  
									  "&zoom_factor=" + zoomFactor;
								  
									  
	

 	var myRequest = getXMLHTTPRequest();
	myRequest.open("GET", requestStr, false); 
	myRequest.send(null);
	
	// getFeatureInfo sonucu donuyor!
	if (ge) {
		var  kmlXML = myRequest.responseText;
		var lookat = kmlXML.substring(kmlXML.indexOf('<lookat>'),kmlXML.indexOf('</lookat>')+9);
		var latValue = lookat.substring(lookat.indexOf('<lookat>')+8,lookat.indexOf(',')-1);
		var lonValue = lookat.substring(lookat.indexOf(',')+1,lookat.indexOf('</lookat>')-1);
        var container = ge.getGlobe().getFeatures();   
        var objectList = container.getChildNodes();   
        for (var i = 0; i < objectList.getLength(); ++i) 
        {     container.removeChild(objectList.item(i)); }	
	
		kmlXML = '<?xml version="1.0" encoding="windows-1254"?>' +kmlXML.substring(kmlXML.indexOf('<kml '),kmlXML.indexOf('</kml>')+6);
			
		var marker = ge.parseKml(kmlXML);
		ge.getFeatures().appendChild(marker);
	    var la = ge.createLookAt('');
	    la.set( parseFloat(lonValue), parseFloat(latValue), 80, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 45, 900);
	    ge.getView().setAbstractView(la);
	}
	
	
	return myRequest.responseXML;
}


// CoordsClicked: <P1.x>,<P1.y>;<P2.x>,<P2.y>.. formatında, tıklanan değerler.
function getMeasure( _CoordsClicked ){
	var requestStr = CapabilitiesUrl + "request=GetMeasure&version=1.3.0" +
									   "&project=" + projectType +	
									   "&layers=" + getCheckedLayers() + 
									   "&styles=" + 
									   "&crs=" +
									   "&bbox=" + curMinX + "," + curMinY + "," + curMaxX + "," + curMaxY +
									   "&width=" + map.getAttribute("width") +
									   "&height=" + map.getAttribute("height") +
									   "&format=image/png" + 
									   "&coords=" + _CoordsClicked;
	
	var myRequest = getXMLHTTPRequest();
	myRequest.open("GET", requestStr, false); 		
	myRequest.send(null);	
	
	return myRequest.responseXML; 
}

function getMetadata( whatToReturn, param ){
	var requestStr = CapabilitiesUrl + "request=GetMetadata&version=1.3.0" +
									   "&project=" + projectType +	
							 	   	   "&whatToReturn=" + whatToReturn + 
							 	   	   "&param=" + param;
									
	var myRequest = getXMLHTTPRequest();
	myRequest.open("GET", requestStr, false); 		
	myRequest.send(null);
	return myRequest.responseXML; 
}



function getColumnValues( layerName, columnNames, criteria ){
	
	var requestStr = CapabilitiesUrl + "request=GetColumnValues&version=1.3.0" +
									   "&project=" + projectType +
							 	   	   "&layerName=" + layerName + 
							 	   	   "&columnsToFetch=" + columnNames + 
							 	   	   "&criteria=" + criteria;
	var myRequest = getXMLHTTPRequest();
	
	myRequest.open("GET", requestStr, false);	
	 		
	myRequest.send(null);
	return myRequest.responseXML; 		
}



/* <<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>>
 * ----- SON ----- SALT SUNUCUDAN ISTEM YAPAN FONKSIYONLAR. 
 * <<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>> */



/* <<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>>
 * İstem EVENTleri...  
 * <<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>> */


function getFeatureInfoByCoordsEvent(event){
	if ((initialized)&&(!stillInRequest)) {
		stillInRequest = true;
			
 		var P = getImageCoords(event);	
		var responseXML = getFeatureInfoByCoords(P);
		stillInRequest = false;

		if(!IsItException(responseXML, 'GetFeatureInfo : ')){			
			fillGrids( responseXML );	
			getLastBoundingBOX( responseXML );	
			// getInfo sonucunda highlight olmus imaj okunuyor.	
			assignImagePath(responseXML); 
		}	
	}
}

// bu event, listelenmiş kolon değerlerinden birisi seçildiğinde tetiklenir. 
function getFeatureInfoByColumnValueEvent(event){
	if ((initialized)&&(!stillInRequest)) {
		stillInRequest = true;
		
		var index = dataStoreLayerColumns.find( "colName", comboLayerColumns.getValue() );
 		
 		var criteria = getFormattedCriteria( comboLayerColumns.getValue(), dataStoreLayerColumns.getAt(index).get("colType"), event.getValue()); 

 		var responseXML = getFeatureInfoByColumnValue( comboLayer.getValue(), criteria );
		stillInRequest = false;

		if(!IsItException(responseXML, 'GetFeatureInfo : ')){	
			fillGrids( responseXML );
			getLastBoundingBOX( responseXML );	
			// getInfo sonucunda highlight olmus imaj okunuyor.	
			assignImagePath(responseXML); 
		}	
	}
}

function getRelatedTables(event){
	if ((initialized)&&(!stillInRequest)) {
		stillInRequest = true;

		stillInRequest = false;

	}
}

function getMeasureEvent( event ){
	if (initialized){
		var P = getImageCoords(event);
			
		if (coordsClicked!=""){			
			if (!stillInRequest) {
				stillInRequest = true;
	
				coordsClicked = coordsClicked + ";" + P.x + "," + P.y;

				var responseXML = getMeasure(coordsClicked);				
				stillInRequest = false;
				
				if(!IsItException(responseXML, 'GetMeasure : ')){						
					// şimdi sonuç web sayfasına yansımalı. 		
					fillMeasureDisplay( responseXML );
				
					// CC drawLine( lastPointClicked.x, lastPointClicked.y, P.x, P.y ); // çizgi çizilecek.
					
					lastPointClicked.x = P.x;
					lastPointClicked.y = P.y;
				}		 	
			}
		}
		else { // eğer coords un içi boş ise yapılacak birşey yok. 
			coordsClicked = P.x + "," + P.y;
			lastPointClicked.x = P.x;
			lastPointClicked.y = P.y;		 	
		}
	}  	
}

// event : combobox change eventi
// bu event, combobox'un select eventi olduğundan getValue, tıklanan tabaka ismini gönderecektir. 

function getColumnValuesEvent(event){
	if (initialized){
		if (!stillInRequest) {
			stillInRequest = true;
        		
        	// AA, 29.01.2008, şimdilik critteriasız, tüm kolonlar getiriliyor.... çeşitlenmeli.. 	
    		var responseXML = getColumnValues( comboLayer.getValue(), event.getValue(), "" );
    		
			stillInRequest = false;
			    		
			if(!IsItException(responseXML, 'getColumnValues : ')){
				fillComboColumnValues(event.getValue(), responseXML);
			}
		}
	} 
}

function getMetadataEvent( event ){
	comboLayerColumns.setVisible(false);
	comboColumnValues.setVisible(false);
		
	if (initialized){
		if (!stillInRequest) {
			stillInRequest = true;
			// bu event, combobox'un select eventi olduğundan getValue, tıklanan tabaka ismini gönderecektir. 
       
    		var responseXML = getMetadata( "columns", event.getValue() );
			stillInRequest = false;
			    		
			if(!IsItException(responseXML, 'getMetadata')){				
				fillComboLayerColumns(responseXML);					    		
			}
		}
	} 
}



/* <<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>>
 * ------ SON ------- İstem EVENTleri...  
 * <<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>> */


function initialize(){ 
	// CC pen = new jsGraphics("Canvas"); 
	// CC pen.setColor("blue");		
}

function mapOnLoad(){
	stillInRequest     = false;
}

function IsItException(FeatureXmlDoc, ErrorTitle){
	var IsIt = false;
	
	if ( FeatureXmlDoc == null) { 
		Ext.MessageBox.show({ title: 'Nesne Sorgulama Hata :',
							  msg: 'Sunucu\'dan veri alınamadı ya da tarayıcınız "responseXML"i desteklemiyor.',
			           		  buttons: Ext.MessageBox.OK });
		IsIt = true;			           		  			           		  	 
    }
    else {
		var pNodes = FeatureXmlDoc.getElementsByTagName("ServiceException");
	    if ((pNodes != null) && (pNodes.length > 0)){  // exception döndü ise. 
			Ext.MessageBox.show({ title: ErrorTitle,
			           			  msg: pNodes[0].childNodes[0].nodeValue,
			           			  buttons: Ext.MessageBox.OK });
			IsIt = true;

		}  
    }    
	return IsIt;
}

function createXMLDOM(){
	// code for IE
	if (window.ActiveXObject){
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = false;
	}
	// code for Mozilla, Firefox, Opera, etc.
	else if (document.implementation && document.implementation.createDocument){
		var xmlDoc = document.implementation.createDocument("","",null);
		xmlDoc.async = false;	//@UB: 20.04.2008	
	}
	else{
		alert('Tarayıcınız xml\'i desteklemiyor! ');
	}
	return xmlDoc;
}

function loadCapabilitiesXML( XmlName, layers ){
	var xmlDoc = createXMLDOM();

	xmlDoc.load(XmlName);		
     
	
	if (! IsItException(xmlDoc, 'Sunucu bağlantısında hata : ')) {		
		// getMap ve getFeatureInfo icin url ler okunuyor. 
		var pNodes = xmlDoc.getElementsByTagName("OnlineResource");
	
		for (i = 0; i < pNodes.length; i=i+1) {	
			if ((pNodes[i].parentNode.nodeName == "Get")){
				if ( (pNodes[i].parentNode.parentNode.parentNode.parentNode.nodeName) == "GetMap" ) {
					MapUrl = pNodes[i].attributes.getNamedItem("xlink:href").value;
				}
				if ( (pNodes[i].parentNode.parentNode.parentNode.parentNode.nodeName) == "GetFeatureInfo" ) {
					FeatureInfoUrl = pNodes[i].attributes.getNamedItem("xlink:href").value;
				}
			}
		}
		
		// Her Layer bilgileri okunuyor ve bir record'a dolduruluyor.
		// "name","title","queryable","opaque","crs","minX","minY","maxX","maxY" bilgileri layerArray dizisine dolduruluyor.    
		// Layer extensionlarından okunuyor, projenin extensionu hesaplaniyor.    
		
		var tmpMinX;
		var tmpMinY;
		var tmpMaxX;
		var tmpMaxY;
		var BBox;
		var LName = "";
		var layerIndis = 0;
		var layerVisible = 1;
		pNodes = xmlDoc.getElementsByTagName("Layer");
 	
		if (pNodes){
			BBox   = pNodes[0].getElementsByTagName("BoundingBox")[0];    
			pNodes = pNodes[0].getElementsByTagName("Layer");
			
		}

		layerCount = pNodes.length;
	    layerIndis = 0;
	    layerVisible = 1;
		if ((pNodes != null) && (pNodes.length > 0)){
			for (i=0; i < pNodes.length; i=i+1) {
									

				var layer = pNodes[i];
			 
			 //aşağıdaki kodlar sadece istenen tabakaların kullanımı için eklendi.
			 //layers parametresi her client uygulama sayfasından (KRH, WEBGIS vb..) 
			 //gönderilir, boş geçildiğinde tüm tabakalar kullanılacak anlamına gelir.
			 
				LName = layer.getElementsByTagName("Name")[0].childNodes[0].nodeValue;//UB: 29.12.2008
				if (typeof layers == "undefined") { //UB: 29.12.2008 layers optional bir parametredir.
				  layers = "";
				}
		        if (layers != ""){
					if ( layers.indexOf(LName+";") !=-1) {//UB: 29.12.2008 
					  layerVisible = 1;
					}
					else
					{layerVisible = 0;}
				}
				
				if (layerVisible == 1){//UB: 29.12.2008
				    layerIndis = layerIndis + 1;
				    
					var newRecData = {};	
	    			newRecData["name"]      = layer.getElementsByTagName("Name")[0].childNodes[0].nodeValue;    			
	    			newRecData["title"]     = layer.getElementsByTagName("Title")[0].childNodes[0].nodeValue;
	    			newRecData["queryable"] = layer.attributes.getNamedItem("queryable").value;
	    			newRecData["opaque"]	= layer.attributes.getNamedItem("opaque").value;  						
	    			newRecData["CRS"]		= BBox.attributes.getNamedItem("CRS").value;    			
	    			newRecData["minX"]		= BBox.attributes.getNamedItem("minx").value;
	    			newRecData["minY"]		= BBox.attributes.getNamedItem("miny").value;
	    			newRecData["maxX"]		= BBox.attributes.getNamedItem("maxx").value;
	    			newRecData["maxY"]		= BBox.attributes.getNamedItem("maxy").value;
	    					
					layerArray[layerIndis-1] = newRecData;   
	
					tmpMinX = BBox.attributes.getNamedItem("minx").value;
					tmpMinY = BBox.attributes.getNamedItem("miny").value;
					tmpMaxX = BBox.attributes.getNamedItem("maxx").value;
					tmpMaxY = BBox.attributes.getNamedItem("maxy").value;
								
	//UB: 29.12.2008 if (i==0){ 
					if (layerIndis==1){
						projMinX = Number(tmpMinX);
				    	projMinY = Number(tmpMinY);
						projMaxX = Number(tmpMaxX);
						projMaxY = Number(tmpMaxY);
					} else {
						projMinX = Math.min( projMinX, Number(tmpMinX) );
				    	projMinY = Math.min( projMinY, Number(tmpMinY) );
						projMaxX = Math.max( projMaxX, Number(tmpMaxX) );
						projMaxY = Math.max( projMaxY, Number(tmpMaxY) );	
					}
	
				}							
			}		
		}
		 
		fillLayers(); // layerArray kullanılacağı malum, parametre geçirmiyorum.
		initialized = true;
		xmlDoc = null;
	}
}

// getting layernames
function getCheckedLayers(){
	var layers = "";
    if (layerGrid != null) {
        var sm = layerGrid.getSelectionModel(); 
        
        if (sm.getCount() > 0){
    	    var selected = sm.getSelections();
    	    for (i=0;i<selected.length;i=i+1){
			    if (layers != ""){
				    layers = layers + ",";
			    }
			    layers = layers + selected[i].data["name"];    	
    	    } 
        }
        //ÜB: 02.01.2009 Tüm tabakalar isteniyorsa, url string'i büyütmemek için layers'a boş atanıyor yani hepsi görüntülensin isteniyor.
        if (layerArray.length == selected.length){
          layers = "";
        }
    }
	return layers;
}

function getXMLHTTPRequest(){
	var req = false;
	try{
		req = new XMLHttpRequest(); // e.g. Firefox 	
		//req.overrideMimeType('text/xml;charset=windows-1254');		
		//req.setRequestHeader("Content-Type", "text/plain;charset=windows-1254");			
	}
	catch(err1){
		try{
			req = new ActiveXObject("MSXML2.XMLHTTP.5.0"); // some versions IE 
		}
		catch(err2){
			try{
				req = new ActiveXObject("MSXML2.XMLHTTP.4.0"); // some versions IE
			}
			catch(err3){
				try{
					req = new ActiveXObject("MSXML2.XMLHTTP.3.0"); // some versions IE
				}
				catch(err4){
					try{
						req = new ActiveXObject("MSXML2.XMLHTTP"); // some versions IE
					}
					catch(err5){
						try{
							req = new ActiveXObject("Microsoft.XMLHTTP"); // some versions IE 
						}
						catch(err3){
							req = null;
						}
					}		
				}
			}			
		}
	}		
	
	
	return req;
}



function forDebug(){
    if (document.getElementById("MaxX") != null) //@UB: 08.03.2008
    {
		document.getElementById("MaxX").setAttribute("value", curMaxX);
		document.getElementById("MaxY").setAttribute("value", curMaxY);
		document.getElementById("MinX").setAttribute("value", curMinX);
		document.getElementById("MinY").setAttribute("value", curMinY);
	}
}




