// JavaScript Document

 function doAjaxReturn(inurl,inparams,func) {
	 //alert('help');
		Ext.Ajax.request({
			url :  inurl, 
			params : inparams,
			method: 'GET',
			scriptTag: true,
			success: function (result, request) {  		
				doJSONReturn(result.responseText, inurl, func);
			},
			failure: function (result, request) { 
				Ext.MessageBox.alert('Resquest to Server Failed', "Server is likely at capacity." + "<br><br>The failed request was sent to:<br>" + request.url );
			} 
		});
	}
	
	
	function doJSONReturn(stringData, inurl, func) {
		//try {
			var jsonData = Ext.util.JSON.decode(stringData);
			func(jsonData, inurl);
		//}
		//catch (err) {
		//	Ext.MessageBox.alert('ERROR', 'Could not decode ' + stringData);
		//}
	}

function addissues(mapservices, rurl) {

var msRecord = Ext.data.Record.create([
       						{name: 'Folder'},
       						{name: 'Name'},
       						{name: 'url'},
							//{name: 'Scenarios'},
							{name: 'Desc'},
							{name: 'Layers'}
	]);
	
	for (x=0;x<=mapservices.services.length-1;x++) {
		ms = mapservices.services[x];
		if (ms.type == "MapServer"){
		msn = ms.name.split("/");
		if (msn.length == 2) {
		 mapservicename = msn[1];
		 mapservicefolder = msn[0];
		} else {
		 mapservicename = ms;
		 mapservicefolder = "";	
		}
	    furl = rurl + "/" + mapservicename + "/MapServer";
			 	var myNewRecord = new msRecord({
				  Folder: mapservicefolder,
    			  Name: mapservicename.replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," "),
				  //Fullname: mapservicefolder + " " + mapservicename.replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," "),
				  url: furl			
				});
				
			 Issuesstore.addSorted(myNewRecord);
			 ps = { f : 'json' }
			 doAjaxReturn(furl,ps,updateissues);
	  	}}
	
	//alert(Issuesstore.getCount());
	for (x=0;x<=mapservices.folders.length-1;x++) {
		inurl = rurl + "/" + mapservices.folders[x];
		ps = { f : 'json' }
		//doAjaxReturn(inurl,ps,createmapservicestore);
	}
	
}

function updateissues(mapservice, rurl) {
	x = Issuesstore.find('url',rurl);
	rec = Issuesstore.getAt(x);
	rec.beginEdit();
	rec.set('Layers',mapservice.layers);
	rec.set('Desc',mapservice.documentInfo.Comments);
	//rec.set('Desc',mapservice.description);
	rec.endEdit();
	//Ext.MessageBox.alert('Map Service', x);
}

function changeissue(combo, rec, reci) {
	//alert(rec.data.Layers[0].name)
	
	Scenariostore.removeAll();
	
	var layRecord = Ext.data.Record.create([
       						{name: 'Name'},
       						{name: 'layid'},
							{name: 'Group'},
							{name: 'url'},
							{name: 'furl'},
							{name: 'Extent'},
							{name: 'Fields'},
							{name: 'DisField'},
							{name: 'Desc'}
	]);
	
	for (x=0;x<=rec.data.Layers.length-1;x++) {
		
		infurl = rec.data.url + "/" + rec.data.Layers[x].id
		
		var myNewRecord = new layRecord({
				  Name: rec.data.Layers[x].name,
				  url: rec.data.url,
				  furl: infurl,
				  layid: rec.data.Layers[x].id,
				  Group: rec.data.Name
				});
		
	mc = Ext.getCmp('isscombo');
	mc.disable();
	mc = Ext.getCmp('sencombo');
	mc.disable();
	mc = Ext.getCmp('geocombo');
	mc.disable();
	
		    Scenariostore.addSorted(myNewRecord);
			ps = { f : 'json' }
			doAjaxReturn(infurl,ps,updataelayerrecord);
	}
}

function updataelayerrecord(layrec, rurl) {
	
		mc = Ext.getCmp('isscombo');
	mc.disable();
	mc = Ext.getCmp('sencombo');
	mc.disable();
	mc = Ext.getCmp('geocombo');
	mc.disable();
	
	surl = rurl.split("/");
	cnt = surl.length;
	cid = surl[cnt-1];
	cname = surl[cnt-3];
	cfolder = surl[cnt-4];
	cservice = cfolder + " " + cname.replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," ");
	//alert(cservice);
	
	//alert(cid);
	
	x = Scenariostore.find('layid',cid);
	rec = Scenariostore.getAt(x);

	rec.beginEdit();
	rec.set('Extent',layrec.extent);
	rec.set('Desc',layrec.description);
	rec.set('DisField',layrec.displayField);
	rec.set('Fields',layrec.fields);
	rec.endEdit();
	//Ext.MessageBox.alert('Map Service', x);
	
		mc = Ext.getCmp('isscombo');
	mc.enable();
	mc = Ext.getCmp('sencombo');
	mc.enable();
	mc = Ext.getCmp('geocombo');
	mc.enable();
	
}


function getoutputtable (outputtable, rurl) {
		//alert(outputtable.features[300].attributes.Results);
		
	mc = Ext.getCmp('isscombo');
	mc.disable();
	mc = Ext.getCmp('sencombo');
	mc.disable();
	mc = Ext.getCmp('geocombo');
	mc.disable();
		
			Geographystore.removeAll();
			
			var GeoRecord = Ext.data.Record.create([
		       				{name: 'Name'},
							{name: 'Sum'},
							{name: 'Total'},
							{name: 'Value'},
							{name: 'Field'}
			]);
			overallTotal = 0;
			overallSum = 0;
			for (x=0;x<=outputtable.features.length-1;x++) {
				Town = outputtable.features[x].attributes.Town;
				Village = outputtable.features[x].attributes.Village;
				Results = parseFloat(outputtable.features[x].attributes.Results);
				Total = parseFloat(outputtable.features[x].attributes.Total);
				overallTotal = Total + overallTotal;
				overallSum = Results + overallSum;
				ValueTown = "Town: " + Town;
				ValueVillage = "Villiage: " + Village
				
				r = Geographystore.find('Name',ValueTown);
				
				if (r == -1) {
				var myNewRecord = new GeoRecord({
				  Name: ValueTown,
				  Sum: 0,
				  Total: 0,
				  Value: Town,
				  Field: "Town"
				});
				if (Town != "") {
				Geographystore.addSorted(myNewRecord);
				}
				
				} else {
				rec = Geographystore.getAt(r);
				cval = parseFloat(rec.data.Sum);
				nval = cval + Results
				ctot = parseFloat(rec.data.Total);
				ntot = ctot + Total
				//alert(cval + " " + nval);
				rec.beginEdit();
				rec.set('Sum',nval);
				rec.set('Total',ntot);
				rec.endEdit();
				}
				
				r = Geographystore.find('Name',ValueVillage);
				
				if (r == -1) {
					
				var myNewRecord = new GeoRecord({
				  Name: ValueVillage,
				  Sum: 0,
				  Total: 0,
				  Value: Village,
				  Field: "Village"
				});
				if (Village != "") {
				Geographystore.addSorted(myNewRecord);
				}
				
				} else {
				rec = Geographystore.getAt(r);
				cval = parseFloat(rec.data.Sum);
				nval = cval + Results
				ctot = parseFloat(rec.data.Total);
				ntot = ctot + Total
				//alert(cval + " " + nval);
				rec.beginEdit();
				rec.set('Sum',nval);
				rec.set('Total',ntot);
				rec.endEdit();
				
			}
			}
			
			var myNewRecord = new GeoRecord({
				  Name: "Entire Study Area",
				  Sum: overallSum,
				  Total: overallTotal,
				  Value: "All",
				  Field: "All"
				});
				
			Geographystore.addSorted(myNewRecord);
			
							mc = Ext.getCmp('isscombo');
	mc.enable();
	mc = Ext.getCmp('sencombo');
	mc.enable();
	mc = Ext.getCmp('geocombo');
	mc.enable();
				
}

function changescenario(combo, rec, reci) {
	
		mc = Ext.getCmp('isscombo');
	mc.disable();
	mc = Ext.getCmp('sencombo');
	mc.disable();
	mc = Ext.getCmp('geocombo');
	mc.disable();
	
	exout = rec.data.Extent.xmin + "," + rec.data.Extent.ymin + "," + rec.data.Extent.xmax + "," + rec.data.Extent.ymax;
	//alert(exout);
	ps = { geometry: exout, f : 'json', returnGeometry: false, outFields: "Town,Village,Results,Total"}
	doAjaxReturn(rec.data.furl + "/query" ,ps,getoutputtable );
	
}

function addtomapclick (but, evt) {
	
	mc = Ext.getCmp('isscombo');
	mcv = mc.getValue();
	rowi = Issuesstore.find('Name',mcv);
	if (rowi == -1) {
	  Ext.MessageBox.alert('Specify Issue', "You must specify a valid issue.");	
	} else {
	recIssue = Issuesstore.getAt(rowi);
	
	mc = Ext.getCmp('sencombo');
	mcv = mc.getValue();
	rowi = Scenariostore.find('Name',mcv);
	if (rowi == -1) {
	  Ext.MessageBox.alert('Specify Scenario', "You must specify a valid scenario.");	
	} else {
	recScenario = Scenariostore.getAt(rowi);
	
	mc = Ext.getCmp('geocombo');
	mcv = mc.getValue();
	rowi = Geographystore.find('Name',mcv);
	if (rowi == -1) {
	  Ext.MessageBox.alert('Specify Geography', "You must specify a valid Geography.");	
	} else {
	recGeography = Geographystore.getAt(rowi);
	
		inurl = recScenario.data.url;
		sortnum = 0;
				var layerRecord = Ext.data.Record.create([
       						{name: 'Layer'},
       						{name: 'Group'},
	   						{name: 'URL'},
							{name: 'sorter'},
       						{name: 'desc'},
							{name: 'Scenario'},
							{name: 'Qfield'},
							{name: 'Qvalue'},
							{name: 'Total'},
							{name: 'Sum'}
				]);
				comments = recScenario.data.Desc;
				inname = recScenario.data.Name + " in " + recGeography.data.Name;
				inname = inname.replace(/_/g, " ");
				grp = recScenario.data.Group;
				grp = grp.replace(/_/g, " ");
				legurl = inurl.replace("ArcGIS/rest/services/", "legends/");
				legurl = legurl.replace("/MapServer", ".png");
				legurl = legurl.replace(/_/g, "%20");
				legurl = legurl.replace("results%20", "results_");
				legurl = "http://geo.usm.edu/pf/legendexport.py?mslist=" + inurl + "@" + recScenario.data.layid;
				//http://maps4.msi.ucsb.edu/ArcGIS/rest/services/ecological/Benthic_Habitats/MapServer
				if (recGeography.data.Total == 0) {
					reportval = (recGeography.data.Sum).toFixed(1);
				} else {
					
					reportval = ((parseFloat(recGeography.data.Sum) / parseFloat(recGeography.data.Total)) * 100).toFixed(1);
				}
	
				lgthsplit = reportval.split(".");	
				outstr = ""
				 var Length = lgthsplit[0].length;
				 for (i=0; i<Length; i++) {
					num = (Length - i - 1)
					outstr = outstr + lgthsplit[0].charAt(num)
					if (i != Length-1) {
					if (((i+1) % 3) == 0) { 
					   outstr = outstr + ","
					 }}
					}
					
				 fstring = "";
				 var Length = outstr.length;
				 for (i=0; i<Length; i++) {
					num = (Length - i - 1)
					fstring = fstring + outstr.charAt(num) 
					}
					
				reportval = fstring + "." + lgthsplit[1];
				//alert(recGeography.data.Total);
				var myNewRecord = new layerRecord({
    			Layer: inname,
				Group: grp,
				URL: inurl,
				sorter: recScenario.data.layid, 
				Qfield: recGeography.data.Field,
				Qvalue: recGeography.data.Value,
				Sum: recGeography.data.Sum,
				Total: recGeography.data.Total,
				Scenario: recScenario.data.Name,
				desc: "<b>Result:</b> The " + recIssue.data.Name + " for the " + recScenario.data.Name + " scenario in the " + recGeography.data.Name + " is: " + reportval + " " + recIssue.data.Desc + "<br><br><b>Description:</b> " + comments + "<br/><br/><center><img src='" + legurl + "' alt='Legend' /></center>"
				});
				if (inurl.match("backgrounds") == "backgrounds") {
					if (incurstore.getCount() == 0) {
						setupgoogle(incurstore);
					}	
				}
				
				if (recIssue.data.Folder == "results_ecology") {
				 acp = 0;
				 oacp = 1;
				} 
				
				if (recIssue.data.Folder == "results_socioeconomics") {
				 acp = 1;
				 oacp = 0;
				} 
				
				laystore2[acp].add(myNewRecord);
				//findlayertype(inurl,myNewRecord,inparams);
				laystore2[acp].sort("sorter", "ASC");
				laystore2[acp].sort("Group", "ASC");
				layselwin.show();
				tpan = Ext.getCmp('tabpan');
				tpan.activate('resultst');
				gp2ob = Ext.getCmp('gp2' + acp);
				gp2ob.expand(true);
				
				//Issuesstore.removeAll();
				Scenariostore.removeAll();
				Geographystore.removeAll();
				//sm2[oacp].clearSelections();
				//sm2[acp].selectRecords([myNewRecord], false);
	//alert(recIssue.data.Name + " " +recScenario.data.Name + " " + recGeography.data.Name);
			
	//		if (recGeography.data.Value == 'All') {
	//			map[0].setCenter(new OpenLayers.LonLat(cm_x, cm_y), zoom);
	//		} else {
	//			furl = 'http://gg.usm.edu/ArcGIS/rest/services/management/Country_Boundaries/MapServer/1/query';
	//		 ps = { f : 'json', outFields: 'xmin,xmax,ymin,ymax', where: "COUNTRY LIKE '" + recGeography.data.Value + "'"};
	//		 doAjaxReturn(furl,ps,zoomtoajax);
	//		}
			 	
	}}}
}



function windowmove(win,x,y) {
	if (y < 0) {win.setPagePosition(x,0);}
	if (x < 0) {win.setPagePosition(0,y);}
}