var wObj ;
var lyList = "";  // CSV WMS Layer List
var extList = ""; // WMS BBox
var epsg = ""; // WMS EPSG Projection Code
//var wmsURL = "http://192.168.1.236/cgi-bin/mapserv?map=/opt/fgs/www/htdocs/yr/ifas.map&version=1.0.0&service=WMS&request=GetCapabilities";
//var mWidth = width;
//var mHeight = height;
var mapURL="empty";
var wminx, wminy, wmaxx, wmaxy; 
 
var http;
function getHTTPObject() {
    var xmlhttp;
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    return xmlhttp;
}

function wmsObject(lyrs, bndbox, espgc,gcURL)
{
  var bbxa = bndbox.split(',');
  var lya = lyrs.split(',');
  this.layers = lyrs;
  this.layersVisible = lyrs;
  this.lyrCount = lya.length;
  this.bbox = bndbox;
  this.minx = parseFloat(bbxa[0]);
  this.miny = parseFloat(bbxa[1]);
  this.maxx = parseFloat(bbxa[2]);
  this.maxy = parseFloat(bbxa[3]);
  
  minx = parseFloat(bbxa[0]);
  miny = parseFloat(bbxa[1]);
  maxx = parseFloat(bbxa[2]);
  maxy = parseFloat(bbxa[3]);  
  wminx = parseFloat(bbxa[0]);
  wminy = parseFloat(bbxa[1]);
  wmaxx = parseFloat(bbxa[2]);
  wmaxy = parseFloat(bbxa[3]);    
  
  this.espg = espgc;
  this.getCapabilitiesURL = gcURL;
  
  var urlt = gcURL.split("?");
  this.baseURL = urlt[0];
 
  var getUrl = gcURL.split("?")[1].split("&")
  var mapVal = "";
  for(i=0;i<getUrl.length;i++)
  {
	if(getUrl[i].split("=")[0] == "map")
	{
		 mapVal = getUrl[i].split("=")[1];
	}
  }
  
  this.map = mapVal;
  this.mapURL = "";
  
 
 
  
}



function GetInitWMSMap() {
    if (wObj)
    {
        showLayer('loading');

        
        mapURL = wObj.baseURL + "?map=" + wObj.map + "&version=1.0.0&service=WMS&request=GetMap&" + "srs=EPSG:" + wObj.espg + "&bbox=" + wObj.bbox + "&format=image/jpeg&layers=" + wObj.layersVisible + "&styles=,&transparent=false&width=" + width + "&height=" + height;
        wObj.mapURL = mapURL;
 
        //document.getElementById('theImage').style.width = "400px";
        document.getElementById('theImage').src = mapURL;
        //minx = wObj.bbox.minx;
        //miny = wObj.bbox.miny;
        //maxx = wObj.bbox.maxx;
        //maxy = wObj.bbox.maxy;  
  	    hideLayer('loading');
    }
}

function GetWMSMap() {
    if (wObj)
    {
        //ulPt = convertPixelToMap(minx, maxy);
        //lrPt = convertPixelToMap(maxx, miny);
        //var cbbox = ulPt[0] + "," +  lrPt[1] + "," + lrPt[0] + "," +  ulPt[1];
        
        //var cbbox = minx + "," +  miny + "," + maxx + "," +  maxy;

        //var cbbox = (Math.round(minx*1000)/1000) + "," +  (Math.round(miny*1000)/1000) + "," + (Math.round(maxx*1000)/1000) + "," +  (Math.round(maxy*1000)/1000);
         var cbbox =  Math.round(minx) + "," +  Math.round(miny) + "," + Math.round(maxx) + "," +  Math.round(maxy);
 
        
        
        
        mapURL = wObj.baseURL + "?map=" + wObj.map + "&version=1.0.0&service=WMS&request=GetMap&" + "srs=EPSG:" + wObj.espg + "&bbox=" + cbbox + "&format=image/jpeg&layers=" +  wObj.layersVisible + "&styles=,&transparent=false&width=" + mwidth + "&height=" + mheight;
        wObj.mapURL = mapURL;
        
        
        //document.getElementById('theImage').src = mapURL;
        document.getElementById('theImage').src = mapURL;
  	    hideLayer('loading');
    }
}

function AdjustMapBBoxAspecRatio()
{

	// 1 - Get longest side of map image
	 var xLen = wObj.maxx - wObj.minx;
	 var yLen = wObj.maxy - wObj.miny;
	 var aspectRat = xLen/yLen;

	// 2 - Get longest side of web image
	 var xwLen = document.getElementById('theImage').offsetWidth;
	 var ywLen = document.getElementById('theImage').offsetHeight;
	 var waspectRat = xwLen/ywLen;   
	 
	 //var bbox = wObj.bbox;

	 if (xLen > yLen)
	 {
	     var fpp = xLen/xwLen;
	     var newyLen =  fpp * ywLen;
	     var ydif = newyLen - yLen;
	     //alert("fpp:" + fpp + " newyLen:" + newyLen + "   ydif: " + ydif); 
	     var nwYmin = wObj.miny - (ydif/2);
	     var nwYmax = wObj.maxy + (ydif/2);
	     //var nBBx = wObj.minx + "," + nwYmin + "," + wObj.maxx + "," + nwYmax;
	     var nBBx =  parseFloat(wObj.minx) + "," + parseFloat(nwYmin) + "," + parseFloat(wObj.maxx) + "," + parseFloat(nwYmax);
	     //alert(wObj.bbox + "\n" + nBBx);
	     //bbox = nBBx;
	     wObj.bbox = nBBx;
	     var bbxn = nBBx.split(',');
	     wObj.minx = parseFloat(bbxn[0]);
	     wObj.miny = parseFloat(bbxn[1]);
	     wObj.maxx = parseFloat(bbxn[2]);
             wObj.maxy = parseFloat(bbxn[3]);
             wObj.wminx = parseFloat(bbxn[0]);
	     wObj.wminy = parseFloat(bbxn[1]);
	     wObj.wmaxx = parseFloat(bbxn[2]);
             wObj.wmaxy = parseFloat(bbxn[3]);
	 } else if(yLen > xLen)
	 {
	     var fpp = yLen/ywLen;
	     var newxLen =  fpp * xwLen;
	     var xdif = newxLen - xLen;

	     var nwXmin = wObj.minx - (xdif/2);
	     var nwXmax = wObj.maxx + (xdif/2);
	     var nBBx = parseFloat(nwXmin) + "," + parseFloat(wObj.miny) + "," + parseFloat(nwXmax) + "," + parseFloat(wObj.maxy);
	     //bbox = nBBx;
	     wObj.bbox = nBBx;
	     var bbxn = nBBx.split(',');
	     wObj.minx = parseFloat(bbxn[0]);
	     wObj.miny = parseFloat(bbxn[1]);
	     wObj.maxx = parseFloat(bbxn[2]);
             wObj.maxy = parseFloat(bbxn[3]);
	     wObj.wminx = parseFloat(bbxn[0]);
	     wObj.wminy = parseFloat(bbxn[1]);
	     wObj.wmaxx = parseFloat(bbxn[2]);
             wObj.wmaxy = parseFloat(bbxn[3]);
	 }
 
}
 
function GetWMSLayers() {
    isWorking = true;
	showLayer('loading');
	
    http = getHTTPObject();
    if ((http != null)) {
       http.open("POST", wmsURL);
        http.onreadystatechange=function() {
          if(http.readyState == 4) {
             var resp=http.responseText
     
             var xmlDoc;
             if(document.implementation && document.implementation.createDocument) { 
      	        // MOZILLA 
       	         xmlDoc = document.implementation.createDocument("", "", null);
      	         xmlDoc.async="false";
                 xmlDoc.loadXML(resp);
             } else if (window.ActiveXObject){
      	         //IE
      	         xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	             xmlDoc.async="false";
	             xmlDoc.loadXML(resp);
             }
                 var rlyr = xmlDoc.getElementsByTagName("Layer")[0];
	   	         var mnx = rlyr.getElementsByTagName("BoundingBox")[0].getAttribute("minx");
	   	         var mny = rlyr.getElementsByTagName("BoundingBox")[0].getAttribute("miny");
	   	         var mxx = rlyr.getElementsByTagName("BoundingBox")[0].getAttribute("maxx");
	   	         var mxy = rlyr.getElementsByTagName("BoundingBox")[0].getAttribute("maxy");
	   	         var bbox = parseFloat(mnx) + "," + parseFloat(mny) + "," + parseFloat(mxx) + "," + parseFloat(mxy);
	   	         //alert(bbox);
	   	         // minx = mnx;
			  //miny = mny;
			 // maxx = mxx;
			  //maxy = mxy; 
                  
	   	         var epsgs = rlyr.getElementsByTagName("SRS")[0].childNodes[0].nodeValue;
	   	         var epsg = epsgs.replace("EPSG:","");
	   	         //alert(epsg);
 
               //var theURL = xmlDoc.getElementsByTagName("Layer").item(0).getAttribute("url");
                 var lyCnt =  xmlDoc.getElementsByTagName("Layer").length;
                 layerCount=lyCnt-1;
                 for (var i = 1; i < lyCnt; i++) {
	                  var lyr = xmlDoc.getElementsByTagName("Layer")[i];
	   	              var lyName = lyr.getElementsByTagName("Name")[0].childNodes[0].nodeValue;
	   	              if (lyName === "undefined")
	   	              {
	   	              } else {
	   	                LayerName[i-1] = lyName;
	   	                LayerID[i-1] = lyName;
	   	                LayerVisible[i-1] = 1;
	   	              
	   	                if (i==1) {
                          lyList = lyName;
                        } else {
                          lyList = lyList + "," + lyName;
                        }
                      }
	   	         }
	   	          wObj = new wmsObject(lyList,bbox, epsg, wmsURL);
	   	          AdjustMapBBoxAspecRatio();
	   	          //alert(wObj.layers + " \n" + wObj.bbox + "\n" + wObj.map);
 
	              setActiveLayer(0);
	   	          displayToc();
	   	          GetInitWMSMap();
               }
         }
         http.send(null);
    } else {
        hideLayer('loading');
    }
}


function GetWMSLayersNoMap() {
    isWorking = true;
 
    http = getHTTPObject();
    if ((http != null)) {
       
       http.open("POST", wmsURL, true);
        http.onreadystatechange=function() {
          if(http.readyState == 4) {
             var resp=http.responseText
 
             var xmlDoc;
             if(document.implementation && document.implementation.createDocument) { 
      	        // MOZILLA 
       	         xmlDoc = document.implementation.createDocument("", "", null);
      	         xmlDoc.async="false";
                 xmlDoc.loadXML(resp);
             } else if (window.ActiveXObject){
      	         //IE
      	         xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	             xmlDoc.async="false";
	             xmlDoc.loadXML(resp);
             }
                 var rlyr = xmlDoc.getElementsByTagName("Layer")[0];
	   	         var mnx = rlyr.getElementsByTagName("BoundingBox")[0].getAttribute("minx");
	   	         var mny = rlyr.getElementsByTagName("BoundingBox")[0].getAttribute("miny");
	   	         var mxx = rlyr.getElementsByTagName("BoundingBox")[0].getAttribute("maxx");
	   	         var mxy = rlyr.getElementsByTagName("BoundingBox")[0].getAttribute("maxy");
	   	         var bbox = parseFloat(mnx) + "," + parseFloat(mny) + "," + parseFloat(mxx) + "," + parseFloat(mxy);
	   	         //alert(bbox);
	   	         // minx = mnx;
			  //miny = mny;
			 // maxx = mxx;
			  //maxy = mxy; 
                  
	   	         var epsgs = rlyr.getElementsByTagName("SRS")[0].childNodes[0].nodeValue;
	   	         var epsg = epsgs.replace("EPSG:","");
	   	         //alert(epsg);
 
               //var theURL = xmlDoc.getElementsByTagName("Layer").item(0).getAttribute("url");
                 var lyCnt =  xmlDoc.getElementsByTagName("Layer").length;
                 layerCount=lyCnt-1;
                 for (var i = 1; i < lyCnt; i++) {
	                  var lyr = xmlDoc.getElementsByTagName("Layer")[i];
	   	              var lyName = lyr.getElementsByTagName("Name")[0].childNodes[0].nodeValue;
	   	              if (lyName === "undefined")
	   	              {
	   	              } else {
	   	                LayerName[i-1] = lyName;
	   	                LayerID[i-1] = lyName;
	   	                LayerVisible[i-1] = 1;
	   	              
	   	                if (i==1) {
                          lyList = lyName;
                        } else {
                          lyList = lyList + "," + lyName;
                        }
                      }
	   	         }
	   	        
	   	          wObj = new wmsObject(lyList,bbox, epsg, wmsURL);
                  
               }
         }
         http.send(null);
    } else {
        
    }
    
    return wObj;
}

function GetFeatureInfoRequest(pX, pY)
{
  showLayer('loading');
  var wmsURLStr = "http://simwright.org:81/cgi-bin/mapserv?map=/opt/fgs/www/htdocs/yr/ifas.map&SERVICE=wms&VERSION=1.0.0&REQUEST=getfeatureinfo&LAYERS=IFAS_Veg_Outline&QUERY_LAYERS=IFAS_Veg_Outline&srs=EPSG:2236&x=604011&y=1016738&INFO_FORMAT=text/plain&bbox=604012,1016438,604919,1016948&format=image/png&width=500&height=300";
  var cbbox =  Math.round(minx) + "," +  Math.round(miny) + "," + Math.round(maxx) + "," +  Math.round(maxy);
  //var gfURL = wObj.baseURL + "?map=" + wObj.map + "&version=1.0.0&service=WMS&request=getfeatureinfo&" + "srs=EPSG:" + wObj.espg + "&bbox=" + cbbox + "&format=image/jpeg&layers=IFAS_Veg_Outline&QUERY_LAYERS=IFAS_Veg_Outline&x=" + pX + "&y=" + pY + "&INFO_FORMAT=text/plain&bbox=" + cbbox + "&format=image/jpeg&styles=,&transparent=false&width=" + mwidth + "&height=" + mheight;
  var gfURL = wObj.baseURL + "?map=" + wObj.map + "&version=1.0.0&service=WMS&request=getfeatureinfo&" + "srs=EPSG:" + wObj.espg + "&bbox=" + cbbox + "&format=image/jpeg&layers=" +  wObj.layersVisible + "&QUERY_LAYERS=" + ActiveLayer + "&x=" + pX + "&y=" + pY + "&INFO_FORMAT=text/plain&bbox=" + cbbox + "&format=image/jpeg&styles=,&transparent=false&width=" + mwidth + "&height=" + mheight;
  
 
  displayGetFeatureInfoResults(gfURL);
  
}



function displayGetFeatureInfoResults(gfURL)
{
 var idContent =  "";
/*
 var idContent =  "<table class='idTitleBarClass'  style='width:" + lWidth + "px'>";
 idContent += "<tr onmousedown='startMove(event, \"divLegend\")'>";
 idContent += "<td style='width:95%'><font class='idTitleClass'>Legend</font></td>";
 idContent += "<td align='right'  style='width:5%'> <img onmousedown='hideLayer(\"divLegend\");' src='images/close.gif'></td>";
 idContent += "</tr>";
 idContent += "</table>";
 */
 
 idContent += "<table style=width:98%' >";
  idContent += "<tr>";
 idContent += "<td class='idNonTitleClass'>";
 
 idContent =  "<table class='idTitleBarClass'  style='width:100%'>";
 idContent += "<tr onmousedown='startMove(event, \"IdResult\")'>";
 idContent += "<td style='width:95%'><font class='idTitleClass'>WMS GetFeatureInfo Results</font></td>";
 idContent += "<td align='right'  style='width:5%'> <img onmousedown='hideLayer(\"IdResult\");' src='images/close.gif'></td>";
 idContent += "</tr>";
 
 idContent += "</table>";
 
 idContent += "</td>";
 idContent += "</tr>";
 idContent += "<tr>";
 idContent += "<td class='idNonTitleClass'>";
 
 idContent += "<div style='overflow:auto;height:100%;width:100%;border-width:1px;'>";
 
 idContent += '<iframe src="' + gfURL + '" width=415px height=350px bordercolor=gray scrolling=auto style="position:relative;top:0px; left:0px;">';
 idContent += '</iframe>';

 idContent += "</div>";
 
 idContent += "</td>";
 idContent += "</tr>";
 //idContent += "<div style='overflow:auto;height:'" + lHeight + "px';width:'" + lWidth + "px';border-width:1px;'>";
 //idContent += '<img src="' + lURL + '" style="width:' + lWidth + 'px; height: ' + lHeight + 'px" />';
 idContent += "</table>";
 updateContent('IdResult', idContent);
 
 document.getElementById('IdResult').style.overflow = "hidden";
 showLayer('IdResult');
 hideLayer('loading');
  
}

 
 


function ParseFields()
{

  //pX = 832626;
  //pY = 287813;
    pX = 300;
  pY = 300;
  var cbbox =  Math.round(minx) + "," +  Math.round(miny) + "," + Math.round(maxx) + "," +  Math.round(maxy);
  ActiveLayer = "Basins";
   mwidth = 400;
   mheight = 400;
  var gfURL = wObj.baseURL + "?map=" + wObj.map + "&version=1.0.0&service=WMS&request=getfeatureinfo&" + "srs=EPSG:" + wObj.espg + "&bbox=" + cbbox + "&format=image/jpeg&layers=" +  wObj.layersVisible + "&QUERY_LAYERS=" + ActiveLayer + "&x=" + pX + "&y=" + pY + "&INFO_FORMAT=application/vnd.ogc.gml&bbox=" + cbbox + "&format=image/jpeg&styles=,&transparent=false&width=" + mwidth + "&height=" + mheight;
 
    alert(gfURL);
    http = getHTTPObject();
    if ((http != null)) {
       http.open("POST", gfURL, true);
        http.onreadystatechange=function() {
          if(http.readyState == 4) {
             var resp=http.responseText
             alert(resp);
             var xmlDoc;
             if(document.implementation && document.implementation.createDocument) { 
      	        // MOZILLA 
       	         xmlDoc = document.implementation.createDocument("", "", null);
      	         xmlDoc.async="false";
                 xmlDoc.loadXML(resp);
             } else if (window.ActiveXObject){
      	         //IE
      	         xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	             xmlDoc.async="false";
	             xmlDoc.loadXML(resp);
             }
                  var rlyr = xmlDoc.getElementsByTagName(ActiveLayer + "_layer")[0];
	   	        // var mnx = rlyr.getElementsByTagName("BoundingBox")[0].getAttribute("minx");
	   	         
	   	         //var epsgs = rlyr.getElementsByTagName("SRS")[0].childNodes[0].nodeValue;
	   	         //var epsg = epsgs.replace("EPSG:","");
	   	           
               }
         }
         http.send(null);
    } else {
        hideLayer('loading');
    }




}

 
 
 
