  function loadState(){
	  document.getElementById("loadingImg").style.visibility='visible'; 
      var sqlUrl = "js/state.txt";	
      GDownloadUrl(sqlUrl,  function(doc){
    	  var state = doc.split("$");
    	  for(var i=0; i < state.length; i++){
    		  var st = state[i].split(":");
    		  var sName =  st[0], spoly = [], pnts = st[2].split(";");
    		  var cpxy =  st[1].split(",");
    		  var cp = new GLatLng(parseFloat(cpxy[1]),parseFloat(cpxy[0]));			
		     
    		  var sborder = [];
    		  for(var n = 0; n < pnts.length; n++){
				  var xy = pnts[n].split(",");
				  sborder.push(new GLatLng(parseFloat(xy[1]),parseFloat(xy[0])));			
    		  }			  
    	      statePolys.push(new StatePoly(sName,cp,sborder));
	       }
    	  addStatePoly();
      });
  }
  
  function addStatePoly(){
	  for(var i1 = 0; i1  < statePolys.length; i1++){ map.addOverlay(statePolys[i1].overlay);  }
	  updateStateInfo();
  }	 
 function updateStateInfo(){
	  for(var i1 = 0; i1  < statePolys.length; i1++){  statePolys[i1].setTip('');}
	 
	  var sqlUrl = "module/querydb.jsp?level=state" + addFilterTag();
	  GDownloadUrl(sqlUrl, function(sdoc){
		  var jDoc = eval('(' + sdoc + ')');			 
		  var maxV = 10000;
		  var scolor = ['#FFFFFF', '#D1E2FF', '#99BFFF', '#5796FF'];//00ff12
  		  for(var m = 0; m <jDoc.Results.length; m++){ 
    		 var rec = jDoc.Results[m];    			
   			 if(m==0 && rec.BUDGET > 0){maxV=rec.BUDGET;}
   			 var sti, fcolor, cpoint;  
   			 if(rec.BUDGET == 0){fcolor= scolor[0];}
   			 else if(rec.BUDGET <= maxV/3){fcolor= scolor[1];}
   			 else if(rec.BUDGET <= 2*maxV/3){fcolor= scolor[2];}
   			 else{fcolor= scolor[3];}
                                                                                 
   			 var tip = '<div class="statetooltip">' + tooltipHTML(rec.STATE_NAME, rec.STATE,rec.PNUM, rec.BUDGET, rec.VIS_PNUM) +'<\/div>';
  
   			 for(var s = 0; s < statePolys.length; s++){ 
   				 if(statePolys[s].id==rec.STATE){ 
   					statePolys[s].update(tip,fcolor);  
   					break;	   					 
   			 }}			 
   		  }  		  
  		  for(var s = 0; s < statePolys.length; s++){ 
				 if(statePolys[s].tip == ""){
					var tip = '<div class="statetooltip">' + tooltipHTML('','',0, 0, 0) +'<\/div>'; 
					statePolys[s].update(tip, scolor[0]); 				 	
		  }}  	
  	 	 mousemovehandler = GEvent.addListener(map, 'mousemove', mouseMoveCB);  	 	 
	 	 document.getElementById("loadingImg").style.visibility='hidden';
	  });    			
} 
    var highSt; 
    function mouseMoveCB(pos){ 
        if(map.getZoom() <= cutLevel){
      	      if(highSt==null){ highightSt(pos); }else  if(!highSt.overlay.checkIn(pos)){   removeHighightSt(); highightSt(pos);  }
        }
    }
    function highightSt(pos){    
    	for(var i = 0; i < statePolys.length; i++){
    		if(statePolys[i].overlay.checkIn(pos)){   		    			
    			var poly = statePolys[i]; poly.highlight(); highSt = poly;  Tip(statePolys[i].tip); break;
    } 	}  } 
    function removeHighightSt(){
     	if(highSt!=null){tt_Hide();highSt.normal();}
        highSt =  null; 
    }   	     
    // Algorithm from http://alienryderflex.com/polygon/ 
    GPolygon.prototype.checkIn = function(pos) {
      var oddNodes = false;
      if(this.getVertexCount()!= undefined ){
    	var j= this.getVertexCount()-1, x = parseFloat(pos.lng()), y = parseFloat(pos.lat());
        for (var i=0; i < this.getVertexCount(); i++) {
         var x1 = parseFloat(this.getVertex(i).lng()), x2 = parseFloat(this.getVertex(j).lng());
         var y1 = parseFloat(this.getVertex(i).lat()), y2 = parseFloat(this.getVertex(j).lat());
         var v1 = (x2-x1)*(y-y1)/(y2-y1) + x1;
         if (((y1 < y) && (y2 >= y)) || ((y2 < y) && (y1 >= y))) {    if (v1 < x ) { oddNodes = !oddNodes; }} j=i;}
       } return oddNodes;
    }
    function removeState(){
     
         GEvent.removeListener(mousemovehandler);
         for(var i = 0; i < statePolys.length; i++ ){ statePolys[i].remove(); }                 
    }
    
//*************************************************    
    function StatePoly(id,cp,borderPath)
    {this.id = id;     this.tip = "";
     this.overlay = new GPolygon(borderPath, "#174DA3", 2, 1,"#ffffff", 0);
   //  this.overlay.disableEditing();
     GEvent.addListener(this.overlay,'click',  function(){ map.setCenter(cp, cutLevel+1); browserIncompat();}); 
    }  
    StatePoly.prototype.highlight = function() { var bh = { color: "#ee9900",  weight: 3,  opacity: 1};  this.overlay.setStrokeStyle(bh); }   
    StatePoly.prototype.normal = function() {var bn = { color: "#174DA3",  weight: 2,  opacity: 1};	  	this.overlay.setStrokeStyle(bn);}      
    StatePoly.prototype.update = function(tip,fillColor){  this.tip = tip;   	var bh = { color: fillColor,  weight: 3,  opacity: 0.55};  this.overlay.setFillStyle(bh); }
    StatePoly.prototype.setTip = function(tip){ this.tip = tip; }       
    StatePoly.prototype.remove = function() {	map.removeOverlay(this.overlay);  }
		