		var im1=new Image(); var im2=new Image(); var im3=new Image(); var im4=new Image();
		im1.src="images/conserve_small_on.gif"; im2.src="images/generate_small_on.gif"; im3.src="images/offset_small_on.gif"; im4.src="images/invest_small_on.gif";
		var im11=new Image(); var im12=new Image(); var im13=new Image(); var im14=new Image();
		im11.src="images/btn_wind_view_off.gif"; im12.src="images/btn_solar_view.gif"; im13.src="images/btn_w_incent.gif"; im14.src="images/btn_s_incent.gif";

		function vmo(obj, e, name){
			var newname;
			if(!e)e=window.event;
			if(e.type=='mouseover')
				newname=name;
			else
				newname=name+'_off';
			if(obj.id=='selected'){
				newname=name;
			}
			obj.src='images/btn_'+newname+'.gif';
		}

		function vmc(obj,map){
			var par = obj.parentNode;
			var curView = obj.getAttribute('viewIndex');

			if(curView == map.activePane) return;
			if(map.activePane==map.ISOLAR || map.activePane==map.IWIND){
				document.getElementById('incentmap').style.display='none';
				document.getElementById('map').style.display='block';
			}

			//hidePaneShapes(map.pgons[map.activePane]);
			map.markers[map.activePane].hide();

			for(i=0;i<par.childNodes.length;i++){
				el = par.childNodes[i];
				if(el.src && el.src.indexOf('btn_')>0 && el.src.indexOf('_off')<0 && el.src!=obj.src){
					el.src = el.src.substring(0,el.src.indexOf('.gif'))+"_off.gif";
					el.id="";
				}
			}
			obj.id="selected";
			map.activePane = curView;
			if(curView == map.ISOLAR || curView == map.IWIND){
				initIncentMap(map);
				document.getElementById('map').style.display='none';
				document.getElementById('incentmap').style.display='block';
			}else{
				map.markers[curView].show();
				//if(map.pgons[map.activePane] != 1){
				//	if(window.DEBUG) GLog.write("Getting existing pane "+map.activePane);
				//	showPaneShapes(map.pgons[map.activePane]);
				//}else{
				//	if(window.DEBUG) GLog.write("async_site_shapes.php?lat="+map.getCenter().lat()+"&lng="+map.getCenter().lng()+"&data_source="+ map.activePane);
				//	GDownloadUrl("async_site_shapes.php?lat="+map.getCenter().lat()+"&lng="+map.getCenter().lng()+"&data_source="+ map.activePane, function(mapXML, responseCode){updateShapes(map,mapXML, responseCode);});
				//}
				toggleTileOverlay(map);
			}
			
		}

		function toggleTileOverlay(map){
			if(map.tileLayer)map.removeOverlay(map.tileLayer);
			var tilelayer = new GTileLayer(new GCopyrightCollection(''), 5, 14);
			tilelayer.getTileUrl = function(tile, zoom) {
					if(window.DEBUG)GLog.write("requesting image for datasource:" + map.tileLayerNames[map.activePane] + " zoom:"+zoom+" and x:"+tile.x+" and y:"+tile.y);
					return 'cache/'+ map.tileLayerNames[map.activePane] +'/' + zoom + '/'+ tile.x + '_' + tile.y + '.png';
			}
			tilelayer.isPng = function() { return true; }; tilelayer.getOpacity = function() { return 1; }
			map.tileLayer = new GTileLayerOverlay(tilelayer);
			map.addOverlay(map.tileLayer);
		}


		function initIncentMap(map){
			var dataURL;
			if(map.activePane==map.ISOLAR)
				dataURL = "/tools/gen_incents.php?tp=solar|"+map.ptState;//+"|"+Math.random();	
			else
				dataURL = "/tools/gen_incents.php?tp=wind|"+map.ptState;//+"|"+Math.random();	
			//dataURL = "/tools/flash_map_iwind_data.php?tp=wind&st=UT";	
			//if(map.incentMapObj){
			//	map.incentMapObj.setDataURL(dataURL);
			//}else{
				var flashMap = new PowerMap("swf/FCMap_USA.swf", "flashMap2", "740", "450", "0", "1");
				flashMap.setDataURL(dataURL); 
				flashMap.render("incentmap");
				map.incentMapObj = getMapFromId("flashMap2");
			//}
		}



		function crSetMapType(map, type){
			var i=0;
			while(i<2){
				switch(map.getCurrentMapType()){
					case G_SATELLITE_MAP:
						document.getElementById('satBtnDiv').style.backgroundColor=i==0?'#003366':'#009999';
					break;
					case G_NORMAL_MAP:
						document.getElementById('mapBtnDiv').style.backgroundColor=i==0?'#003366':'#009999';
					break;
					case G_HYBRID_MAP:
						document.getElementById('hybBtnDiv').style.backgroundColor=i==0?'#003366':'#009999';
					break;
				}
				if(i==0)
					map.setMapType(type);
				i++;
			}
		}

    function crMapControl() { }
    crMapControl.prototype = new GControl();

    crMapControl.prototype.initialize = function(map) {
      var container = document.createElement("div");
      var mapBtnDiv = document.createElement("div"); mapBtnDiv.className='mapBtn';mapBtnDiv.id='mapBtnDiv'; container.appendChild(mapBtnDiv); mapBtnDiv.appendChild(document.createTextNode("MAP"));
      GEvent.addDomListener(mapBtnDiv, "click", function() {crSetMapType(map,G_NORMAL_MAP);});
      var hybBtnDiv = document.createElement("div"); hybBtnDiv.className='mapBtn';hybBtnDiv.id='hybBtnDiv'; container.appendChild(hybBtnDiv); hybBtnDiv.appendChild(document.createTextNode("HYBRID"));
      GEvent.addDomListener(hybBtnDiv, "click", function() {crSetMapType(map,G_HYBRID_MAP); });
      var satBtnDiv = document.createElement("div"); satBtnDiv.className='mapBtn';satBtnDiv.id='satBtnDiv'; container.appendChild(satBtnDiv); satBtnDiv.appendChild(document.createTextNode("SATELLITE"));
      GEvent.addDomListener(satBtnDiv, "click", function() {crSetMapType(map,G_SATELLITE_MAP); });

      var zoomBkgDiv = document.createElement("div"); zoomBkgDiv.className='mapZoomBkg'; container.appendChild(zoomBkgDiv);
			var zoomCtrlDiv = document.createElement("div"); zoomCtrlDiv.className='mapZoomCtrl'; container.appendChild(zoomCtrlDiv);
			var zoomLevelCtrl = document.createElement("img");zoomLevelCtrl.src="images/zoom_level.gif";zoomLevelCtrl.id='zoomLevelCtrl';
			zoomLevelCtrl.style.top=((map.getZoom() * 6) + 10) + 'px';
			zoomCtrlDiv.appendChild(zoomLevelCtrl);
			GEvent.addDomListener(zoomCtrlDiv, "click", function(e){
				var e=e?e:window.event;
				var offY = (e.layerY?e.layerY:e.offsetY);
				var zlc = document.getElementById('zoomLevelCtrl');
				if(offY>80){
					if(map.getZoom() >=13) return;
					map.zoomIn();
					zlc.style.top = ((map.getZoom() * 6) + 10) + 'px';
				}else{
					if(map.getZoom() <=3) return;
					map.zoomOut();
					zlc.style.top = ((map.getZoom() * 6) + 10) + 'px';
				}
			});

			//var addressBkgDiv = document.createElement("div");addressBkgDiv.className='mapAddressBkg'; container.appendChild(addressBkgDiv);
			//var addressCtrlDiv = document.createElement("div");addressCtrlDiv.className='mapAddressCtrl'; container.appendChild(addressCtrlDiv);
			//addressCtrlDiv.appendChild(document.createTextNode("ENTER NEW LOCATION"));

      map.getContainer().appendChild(container);
			crSetMapType(map, map.getCurrentMapType());
      return container;
    }

    crMapControl.prototype.getDefaultPosition = function() {
      return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7, 7));
    }


function formatIncent(state, fed){
	var s = parseFloat(state);
	var f = parseFloat(fed);
	var incent = 1 - ((1-s) - ((1-s)*f));
	//var incent = parseFloat(state + fed);
	if(incent==0)
		return 'No Statewide Incentives';
	else if(incent<0.10)
		return 'Limited Incentives Available';
	else if(incent >= 0.10 && incent < 0.20)
		return 'Average Incentives Available';
	else if(incent >= 0.20 && incent < 0.30)
		return 'Good Incentives Available';
	else if(incent >= 0.30)
		return 'Excellent Incentives Available';
}

//showCents is optional, defaults to 'true' 
function formatCurrency(num, showCents) {
	if (typeof(showCents) == 'undefined')
		showCents = true;
	if(isNaN(num)) num = "0";
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
		for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
			num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
	return ('$' + num + (showCents ? '.' + cents : ''));
}

function formatNumber(num) {
	if(isNaN(num)) num = "0";
	num = num.toString();
	var decP = num.indexOf(".");
	var dec='';
	if(decP > 0){
		dec = num.substring(num.indexOf("."), num.length);
		num = num.substring(0,num.indexOf("."));
	}
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
	if(dec)num = num+dec;
	return (num);
}

function formatPercentage(num) {
	if(isNaN(num)) num = "0";
	num=Math.round(num*1000)/10;
	return (num + '%');
}

function crUpdateMarkerMove(map){
	for(m=0;m<4;m++){
		if(m!=map.activePane)
			map.markers[m].setPoint(map.markers[map.activePane].getPoint());
	}
	if(window.DEBUG) GLog.write("new async call to: async_site_info.php?lat="+map.markers[map.activePane].getPoint().lat()+"&lng="+map.markers[map.activePane].getPoint().lng()+"&data_source="+ map.activePane);
	GDownloadUrl("async_site_info.php?lat="+map.markers[map.activePane].getPoint().lat()+"&lng="+map.markers[map.activePane].getPoint().lng()+"&data_source="+ map.activePane, function(mapXML, responseCode){updateSite(map,mapXML, responseCode);});
}

function formatWPC(val){
	var pre;
	switch(parseInt(val)){
		case 0: case 1: pre='Minimal'; break;
		case 2: pre='Average'; break;
		case 3: pre='Better than average'; break;
		case 4: case 5: case 6: case 7: pre='Excellent'; break;
	}
	return pre + ' - Class '+ val;
}

function formatSPC(val){
	var pre;
	if(val < 4.0)
		pre = 'Minimal';
	else if(val >= 4.0 && val < 5.0)
		pre = 'Average';
	else if(val >= 5.0 && val < 6.0)
		pre = 'Better than average';
	else if(val >= 6.0)
		pre = 'Excellent';
	return pre + ' - '+ val + ' Sun Hrs/Day';
}

function updateSite(map,mapXML, responseCode){
	if(responseCode)if(window.DEBUG) GLog.write('async data recieved');
	var mapNode = GXml.parse(mapXML);

	//ANALYSIS
	//
	//potentials
	var potentialNode = mapNode.getElementsByTagName('potential')[0];
	document.getElementById('sp_wpc').innerHTML = formatWPC(potentialNode.getAttribute('wind'));
	document.getElementById('sp_spc').innerHTML = formatSPC(potentialNode.getAttribute('solar'));
	//incentives
	var wincentNode = mapNode.getElementsByTagName('windi')[0];
	var sincentNode = mapNode.getElementsByTagName('solari')[0];
		//document.getElementById('sp_wsi').innerHTML = formatPercentage(wincentNode.getAttribute('state'));
		//document.getElementById('sp_wfi').innerHTML = formatPercentage(wincentNode.getAttribute('fed'));
		//document.getElementById('sp_ssi').innerHTML = formatPercentage(sincentNode.getAttribute('state'));
		//document.getElementById('sp_sfi').innerHTML = formatPercentage(sincentNode.getAttribute('fed'));
	document.getElementById('sp_wsi').innerHTML = formatIncent(wincentNode.getAttribute('state'), wincentNode.getAttribute('fed'));
	document.getElementById('sp_ssi').innerHTML = formatIncent(sincentNode.getAttribute('state'), sincentNode.getAttribute('fed'));
	//costs
	var costsNode = mapNode.getElementsByTagName('costs')[0];
	document.getElementById('sp_cer').innerHTML = formatCurrency(costsNode.getAttribute('current')) + ' per kWh';

	//ESTIMATES
	//
	var estNode = mapNode.getElementsByTagName('estimates')[0];
	//state incentives
	var siNode = estNode.getElementsByTagName('statei')[0];
	var fiNode = estNode.getElementsByTagName('fedi')[0];
	document.getElementById('ea_ssi').innerHTML = formatCurrency(siNode.getAttribute('solar'), false);
	document.getElementById('ea_sfi').innerHTML = formatCurrency(fiNode.getAttribute('solar'), false);
	document.getElementById('ea_wsi').innerHTML = formatCurrency(siNode.getAttribute('wind'), false);
	document.getElementById('ea_wfi').innerHTML = formatCurrency(fiNode.getAttribute('wind'), false);

	//cost after installation
	var aiNode = estNode.getElementsByTagName('costsa')[0];
	document.getElementById('ea_s_after_i').innerHTML = "$"+formatNumber(aiNode.getAttribute('solar'));
	document.getElementById('ea_w_after_i').innerHTML = "$"+formatNumber(aiNode.getAttribute('wind'));

	//Resource Value
	var rvNode = estNode.getElementsByTagName('resource')[0];
	//document.getElementById('ea_spc').innerHTML = rvNode.getAttribute('solar');
	//document.getElementById('ea_wpc').innerHTML = rvNode.getAttribute('wind');

	//Energy Estimate
	var eeNode = estNode.getElementsByTagName('energy')[0];
	document.getElementById('ea_see').innerHTML = formatNumber(eeNode.getAttribute('solar')) + ' kWh/yr';
	document.getElementById('ea_wee').innerHTML = formatNumber(eeNode.getAttribute('wind')) + ' kWh/yr';

	//Costs Generated
	//var cgNode = estNode.getElementsByTagName('generated')[0];
	//document.getElementById('ea_s_generated').innerHTML = formatCurrency(cgNode.getAttribute('solar'));
	//document.getElementById('ea_w_generated').innerHTML = formatCurrency(cgNode.getAttribute('wind'));

	//Equivalent Costs
	var eqNode = estNode.getElementsByTagName('equivalent')[0];
	document.getElementById('ea_s_equivalent').innerHTML = '('+formatCurrency(eqNode.getAttribute('solar'))+')';
	document.getElementById('ea_w_equivalent').innerHTML = '('+formatCurrency(eqNode.getAttribute('wind'))+')';

	//Payback Period
	var pbNode = estNode.getElementsByTagName('payback')[0];
	document.getElementById('ea_s_payback').innerHTML = parseInt(pbNode.getAttribute('solar')) + ' years';
	document.getElementById('ea_w_payback').innerHTML = parseInt(pbNode.getAttribute('wind')) + ' years';

	//Chart
	var chartXML = "<chart yAxisName='$ per kWh' bgColor='ffffff' borderColor='ffffff' borderAlpha='100' chartLeftMargin='0' chartRightMargin='14' chartTopMargin='5' chartBottomMargin='2' bgAlpha='100' showValues='0' numberPrefix='$'>";
	var chNode = estNode.getElementsByTagName('chart')[0];
	var seriesNodes  = chNode.getElementsByTagName('series');
	chartXML += '<categories>';
	var numSets=0;
	var iter=0;
	for(yr = chNode.getAttribute('start_yr'); yr < chNode.getAttribute('end_yr'); yr++){
		numSets++;
		if(iter%4==0)
			chartXML += "<category label='" + yr +"' />";
		else
			chartXML += "<category label='" + yr +"' showLabel='0' />";
		iter++;
	}
	chartXML += '</categories>';
	for(s=0;s<seriesNodes.length;s++){
		chartXML += "<dataset color='"+ seriesNodes[s].getAttribute('color') +"' seriesName='"+ seriesNodes[s].getAttribute('label') +"'>";
		var iVal = parseFloat(seriesNodes[s].getAttribute('metric_increment'));
		iter=0;
		var val = parseFloat(seriesNodes[s].getAttribute('startmetric'));
		while(iter<numSets){
			chartXML += "<set value='" + val + "' />";
			iter++;
			val += iVal;
		}
		chartXML += '</dataset>';
	}
	chartXML += "</chart>";
	if(map.chartObj){
		map.chartObj.setDataXML(chartXML);
	}else{
		var crChart = new FusionCharts("swf/MSLine.swf?ChartNoDataText=Loading Data", "crOTChart", "320", "220", "0", "1");
		crChart.setDataXML(chartXML);
		crChart.render("linegraph");
		map.chartObj = getChartFromId("crOTChart");
	}


	map.ptState = mapNode.getElementsByTagName('location')[0].getAttribute('state');
	if(window.DEBUG) GLog.write('marker in state: '+mapNode.getElementsByTagName('location')[0].getAttribute('state'));
	if(window.DEBUG) GLog.write('aggregate query time: '+mapNode.getAttribute('querytime'));

}

/****************************************************
**  RICO LEGACY FOR GPolygon stuff (do not delete)
**

function hidePaneShapes(pane){
	for(p=0;p<pane.length;p++){
		pane[p].hide();
	}
}

function showPaneShapes(pane){
	for(p=0;p<pane.length;p++){
		pane[p].show();
	}
}

function clearAllPanes(map){
		for(z=0;z<map.pgons.length;z++){
			hidePaneShapes(map.pgons[z]);
			map.pgons[z] = 1;
		}
}

function mapZoomEnd(map){
	var zoom = map.getZoom();
	if(window.DEBUG)GLog.write("Zoom changed from: "+map.currentZoom+" to:"+zoom);
	if((map.currentZoom<=15 && zoom > 15) || (map.currentZoom>15 && zoom<=15)){
		mapPanEnd(map,1);
	}
	map.currentZoom = zoom;
}

function mapPanEnd(map, clearPanes){
	var center = map.getCenter();
	var excludeIDs='';
	if(map.currentZoom>15 || clearPanes){
		clearAllPanes(map);
	}
	if(map.pgons.length){
		for(p=0;p<map.pgons[map.activePane].length;p++){
			excludeIDs+=map.pgons[map.activePane][p].shpId+',';
		}
	}
	if(window.DEBUG) GLog.write("async_site_shapes.php?lat="+center.lat()+"&lng="+center.lng()+"&data_source="+ map.activePane +"&zoom=" + map.getZoom() +"&exclude_ids="+excludeIDs);
	GDownloadUrl("async_site_shapes.php?lat="+center.lat()+"&lng="+center.lng()+"&data_source="+ map.activePane +"&zoom=" + map.getZoom() +"&exclude_ids="+excludeIDs, function(mapXML, responseCode){updateShapes(map,mapXML, responseCode);});
}

function updateBlocks(map,mapXML, responseCode){
	if(responseCode)if(window.DEBUG)GLog.write('async data recieved');
	var mapNode = GXml.parse(mapXML).documentElement;

	var dataNodes = mapNode.getElementsByTagName('d');

	if(dataNodes){
		for(s=0;s<dataNodes.length;s++){
			var point = new GLatLng(dataNodes[s].text.split(',')[0],dataNodes[s].text.split(',')[1]);
			map.addOverlay(new GMarker(point));
		}

		if(window.DEBUG) GLog.write('num markers: '+dataNodes.length);
	}
}

function updateShapes(map,mapXML, responseCode){
	if(responseCode)if(window.DEBUG)GLog.write('async data recieved');
	var mapNode = GXml.parse(mapXML).documentElement;

	var shapesNode = mapNode.getElementsByTagName('shapes')[0];
	var shapeNodes = mapNode.getElementsByTagName('shp');

	if(!map.pgons || !map.pgons.length){
		map.pgons = Array();
		map.pgons[map.SOLAR] = 1;
		map.pgons[map.WIND] = 1;
		map.pgons[map.ISOLAR] = 1;
		map.pgons[map.IWIND] = 1;
	}

	if(shapeNodes){
		if(!map.pgons[map.activePane].length)
			map.pgons[map.activePane] = Array();
		//var drawn='';
		var shpIter=parseInt(map.pgons[map.activePane].length);
		for(s=0;s<shapeNodes.length;s++){
			if(isNewShape(shapeNodes[s].getAttribute('shpId'), map.pgons[map.activePane])){
				map.pgons[map.activePane][shpIter] = new GPolygon.fromEncoded(
					{
						polylines: [{
								 points: shapeNodes[s].getAttribute('pnts'),
								 color: "#"+shapeNodes[s].getAttribute('clr'),
								 weight: 1,
								 levels: shapeNodes[s].getAttribute('lvls'),
								 zoomFactor: 2,
								 numLevels: 9,
								 opacity: 0.5
							}],
						 color: '#'+shapeNodes[s].getAttribute('clr'),
						 opacity:  0.5,
						 outline: true,
						 fill: true
					 });
				map.pgons[map.activePane][shpIter].shpId=shapeNodes[s].getAttribute('shpId');
				map.addOverlay(map.pgons[map.activePane][shpIter]);
				shpIter++;
				//drawn += shapeNodes[s].getAttribute('shpId')+", ";
			}
		}
		//GLog.write("Drew shapes: "+drawn);

		if(window.DEBUG) GLog.write('num shapes: '+shapesNode.getAttribute('numshapes'));
		if(window.DEBUG) GLog.write('num vertices: '+shapesNode.getAttribute('numvertices'));
	}
}

function isNewShape(id, pane){
	for(p=0;p<pane.length;p++){
		if(pane[p].shpId == id){
			return false;
		}
	}
	return true;
}
*/

/**********************
**          OTHER LEGACY STUFF
**
		function nextCOGI(){
			var ctnr = document.getElementById('cogitips');
			if(!ctnr)return;
			var selNext=false;
			for(i=0;i<ctnr.childNodes.length;i = (i+1==ctnr.childNodes.length?0:i+1)){
				if(ctnr.childNodes[i].tagName=='DIV'){
					if(selNext){
						ctnr.childNodes[i].id='selected';
						break;
					}
					if(ctnr.childNodes[i].id=='selected'){
						ctnr.childNodes[i].id='';
						selNext=true;
					}
				}
			}
			window.clearTimeout(window.cogiTimeout);
			window.cogiTimeout = window.setTimeout("nextCOGI()", 8000);
		}

		//window.cogiTimeout = window.setTimeout("nextCOGI()", 8000);

*/
