var neighborhood_opacity = 0.45;
var neighborhoods=new Object();
var hood_page_cur = 1;
var hood_page_total = 0;
var hood_page_limit = 20;

var working_polygon_hood_id=null;
var editing_polygon_index=null;
var polyline_working_remove = function() {};

var active_hood_id=null;


function HoodsUnselect(hid) {

  var hood = neighborhoods[hid];

  if (hood) hood.unselect();
  map_close_info();
}


var Hood = new Class({

  initialize: function(id, idx, name, heat, rating, comment_image, comment_body, city, hoodlink, rentals, points, parent, pro, con){

    this.id = id;
    this.idx = idx;
    this.heat =  heat;
    this.rentals = parseInt(rentals);
    this.points = points;
    this.polygon = null;
    this.busy_drawing = false;
    this.neigh = document.createElement('li');
    this.neigh.className = idx % 2 ? 'odd' : 'even';
	
		  
	var content ='';
	
    content='<div class="hood_lst_name" ><a id="hid'+idx+'"  href="'+hoodlink+'">'+idx+'. '+name+'</a></div>';
   // Code Changed on 2008-11-18(Raja). To change the dynamic thum up / down image
	
	if(rating > 0 ){
		content+='<div class="thumbsup_diggs">'+rating+'</div>';
	}else{
		content+='<div class="thumbsdown_diggs">'+rating+'</div>';
	}
	if(comment_body!=''){
		content+='<div class="hood_lst_comment_pic" >'+comment_image+'</div>';
	}
	if(comment_body!=''){
		content+='<div class="city_lst_comment_body" >'+comment_body+'</div>';
	} else {
		content+='<div class="city_lst_comment_body" >'+'<div style="float:left;">No reviews yet. <a href="/wiki/'+city+'/'+name+'/review" style="text-decoration:none"><span style="color:#f7941d">Be the first. >></span></a></div><br><br>'+'</div>';
	}
   
	if(pro!='' || con!=''){
		content+='<div style="float:left:100%;clear:both;line-height:19px; padding-left:5px;"><div style="float:left;width:35%; line-height:19px; padding:0;">';
		if(pro!=''){
			content+= '<b>Pros: </b>'+pro;
		}
		content+='</div>';
		content+= '<div style="float:left;width:35%;">';
		if(con!=''){
			content+= '<b>Cons:</b> '+con;
		}
		content+= '</div>';
		
	} else{
		content+='<div style="float:left:100%;clear:both;line-height:19px; padding-left:5px;"><div style="float:left;width:35%; line-height:19px; padding:0;">';
		content+='&nbsp;</div>';
	}
	
	content+='<div style="float:right;color:#DD9745;" ><a style="color:#DD9745;" href="/wiki/'+city+'/'+name+'/Apartments">'+rentals+' Available Rentals &raquo;</div></div>';	
		
    this.neigh.innerHTML = content;

    this.neigh.style.display='none';

    parent.appendChild(this.neigh);

    this.namelink = document.getElementById('hid'+idx);
/*
    if ( !$('mapShowAllHoods').checked && idx < hood_page_limit) {
      this.draw();
    }
*/
  },

  remove: function() {
    if(this.polygon) {
      map.removeOverlay(this.polygon);
      this.polygon=null;
    }
  },


  unselect: function() {

    if(this.polygon) {

      var color = heatToColor(this.heat);
	    this.polygon.setFillStyle( { color:color,opacity:neighborhood_opacity } );
    }
  },


  redraw: function() {

    if(this.polygon) {

      var color = heatToColor(this.heat);
      this.polygon.setFillStyle( { color:color, opacity:neighborhood_opacity } );

    }
  },

  show: function() {

    this.neigh.style.display='';

    if(this.polygon) {

      if (this.polygon.isHidden() )
        this.polygon.show();

    } else {

      this.draw();
    }
  },

  hide: function(showPoly) {

    this.neigh.style.display='none';

    if (showPoly) {

      if(this.polygon) {

// show the poly if it's hidden
        if (this.polygon.isHidden() )
          this.polygon.show();

      } else {

// else create it
        this.draw();
      }


    } else {

      if(this.polygon) {
        this.polygon.hide();
      }
    }
  },

  draw: function() {	  

    var the_list = '<div id="hood-info-window" style="height:100%">' + this.neigh.innerHTML + '</div>';

    var polylines = new Array();

	  for (var i = 0; i < this.points.length; i++ ) {

	    var vertices = new Array();

	    for (var j = 0; j < this.points[i].length; j++ ) {

	      lat = parseFloat(this.points[i][j].lat);
	      lng = parseFloat(this.points[i][j].lng);

	      vertices.push( new GLatLng(lat, lng) );
	    }

	    if (vertices.length > 0) {

		    vertices.push(vertices[0]);
		    polylines.push(vertices);
	    }
	  }
	  
	  if (polylines.length > 0) {

      polylineEncoder = new PolylineEncoder();
      var color = heatToColor(this.heat);

//		      var polygon = new GPolygon(polylines[0],"#FFFFFF", 1, 1.0, color, neighborhood_opacity);
      var polygon = polylineEncoder.dpEncodeToGPolygon(polylines,"#FFFFFF", 1, 1.0, color, neighborhood_opacity);

      polygon.hid = this.id;
      polygon.heat = this.heat;


      GEvent.addListener(polygon, 'click', function(point) {

        HoodsUnselect(active_hood_id);
        active_hood_id = polygon.hid;
  		  polygon.setFillStyle( { color:'#2948e4',opacity:'0.50' } );

        if (point) {

          map.openInfoWindowHtml(point, the_list);  // open info window where user clicked

        } else {

          map.openInfoWindowHtml(polygon.getBounds().getCenter(), the_list);  // open info window at the center of polygon
        }
      });


			GEvent.addListener(polygon, 'mouseover', function() {		polygon.setFillStyle( { color:'#2948e4',opacity:'0.50' } );		});

			GEvent.addListener(polygon, 'mouseout', function() {

// revert to normal color only if not selected
			  if (polygon.hid != active_hood_id) {
          var color = heatToColor(polygon.heat);
			    polygon.setFillStyle( { color:color,opacity:neighborhood_opacity } );
			  }
			});

      map.addOverlay(polygon);

      this.namelink.onmouseover = function() {

         if (active_hood_id != this.id) {
           GEvent.trigger(polygon, "click");
         }
      }

      this.polygon = polygon;

   		neighborhood_update_lightbox();
	  }
  }
});




/* search for neighborhoods in this city
----------------------------------------------------------------*/
function neighborhood_search_by_city(city, sortBy) {

  var defined = false;
  for(var id in neighborhoods) {
    defined = true;
    break;
  }

  if (defined) {

    neighborhood_update_pagination();

  } else {

    if (!sortBy)  sortBy = '';

    hood_page_total=0;
    $('hood_pagination_top').innerHTML='';
    $('hood_pagination_bot').innerHTML='';
	
    var myXHR = new Request( { url:'/include/poly_map/php/controller_neighborhood.php?action=search_by_city',onSuccess:function(resp){

      var return_obj = JSON.decode(resp);

    	if (return_obj["success"]==true){

    	  hood_page_total = return_obj["total"];
				
        neighborhood_setup_pagination();

        var output = document.getElementById('hood-list');

        output.innerHTML = '';

        var bounds = new GLatLngBounds();
        var topHoods = '';
        var otherHoods = '';

        if (return_obj["results"].length == 0) {

          hideLightBox();
        }

  		  for (var i = 0; i < return_obj["results"].length; i++ ) {

  		    var hood = return_obj["results"][i];
  		    neighborhoods[hood.id] = new Hood(
  		      hood.id,
  		      i + 1,
    		    hood.name,
    		    hood.relrating,
    		    hood.rating,
    		    hood.comment_image ,
    		    hood.comment_body ,
				hood.city,
				hood.hoodlink,
    		    hood.rentals,
    		    hood.shape,
				output,
				hood.pro,
				hood.con,
				hood.type
          );

	  		    if (i < 3) {

            topHoods += '<input onclick="updateRentalsList()" type="checkbox" name="fltHood[]" value="' + hood.id + '" checked>' + hood.name;
  		    } else {

  		      otherHoods += '<a href="#"><input onclick="updateRentalsList()" type="checkbox" id="idFltHood'+ hood.id +'" name="fltHood[]" value="' + hood.id + '"><label for="idFltHood'+hood.id+'" >' + hood.name + '</label></a>';
  		    }

  		    if (hood.ymin > 0 && hood.ymax > 0 && hood.xmin < 0 && hood.xmax < 0) {

            bounds.extend(new GLatLng(hood.ymin, hood.xmin) );
            bounds.extend(new GLatLng(hood.ymax, hood.xmax) );
  		    }
  		  }

  		  neighborhood_update_pagination();

  		  if (return_obj["results"].length > 0) {
          map_zoom_to_bounds(bounds);

          if(city.toLowerCase() == 'atlanta')
            map.setZoom(map.getZoom() + 2);
          else
            map.setZoom(map.getZoom() + 1);
  		  }

  		} else{

  		  alert(return_obj["message"]);
  		}

  	}}).send('&city=' + city + '&sort=' + sortBy);
  }

}

function filter_reset()
{
/*
  $('fltSortBy').selectedIndex = 0;
  $('fltPriceLo').selectedIndex = 0;
  $('fltPriceHi').selectedIndex = 0;
  $('fltBedLo').selectedIndex = 0;
  $('fltBedHi').selectedIndex = 0;
  $('fltBathLo').selectedIndex = 0;
  $('fltBathHi').selectedIndex = 0;
*/
}

function neighborhood_sort(sortBy)
{
// blow out the

  for(var id in neighborhoods) {
    neighborhoods[id].remove();
    delete neighborhoods[id];
  }

  neighborhoods=new Object();
  $('hood_pagination_top').innerHTML='';
  $('hood_pagination_bot').innerHTML='';
  $('hood-list').innerHTML='';


  neighborhood_search_by_city(search, sortBy);
}


function neighborhood_redraw()
{

  for(var id in neighborhoods) {
    neighborhoods[id].redraw();
  }
}

function heatToColor(heat) {

  if (heat < 1/16)
    color = '#8ce7f8';
  else if (heat < 2/16)
    color = '#5acce9';
  else if (heat < 3/16)
    color = '#3ca2cd';
  else if (heat < 4/16)
    color = '#50c546';
  else if (heat < 5/16)
    color = '#68d85e';
  else if (heat < 6/16)
    color = '#8bd984';
  else if (heat < 7/16)
    color = '#c1f17c';
  else if (heat < 8/16)
    color = '#f8f241';
  else if (heat < 9/16)
    color = '#d7c033';
  else if (heat < 10/16)
    color = '#c79127';
  else if (heat < 11/16)
    color = '#bd711b';
  else if (heat < 12/16)
    color = '#fa7600';
  else if (heat < 13/16)
    color = '#f78c2d';
  else if (heat < 14/16)
    color = '#e3583a';
  else if (heat < 15/16)
    color = '#ce3a2c';
  else
    color = '#aa1918';

  return color;
}



function neighborhood_update_pagination() {


  map.closeInfoWindow();

  var from = (hood_page_cur - 1) * hood_page_limit;
  var to = (from + hood_page_limit);
  var pages = Math.round( (hood_page_total / hood_page_limit) + 0.5);

  var i = 0;

  var all = $('mapShowAllHoods').checked;


// show a lightbox if any hoods missing

  var missing = false;

  i = 0;
  for(var id in neighborhoods) {

    if (all || (i >= from && i < to) ) {

      if (!neighborhoods[id].polygon) {
        missing = true;
        break;
      }
    }
    ++i;
  }
  if(missing)  showLightBox('srch_map');


  i = 0;

  for(var id in neighborhoods) {

    if (i >= from && i < to) {

      neighborhoods[id].show();

    } else {

      neighborhoods[id].hide(all);
    }
    ++i;
  }

  from += 1;

  if (hood_page_cur == pages) {

    to = hood_page_total;
  }
  
  
if($('pagenumber')){
   if(hood_page_cur >= 5){
	   $('pagenumber').innerHTML ='';
	  for(var j=6;j<=pages;j++){
		  if(j <= 10)
		   $('pagenumber').innerHTML += '<a href="javascript:neighborhood_goto_page('+j+')" title="Page '+j+'" class="pager-number">'+j+'</a>&nbsp;&nbsp;';
	  }
   }
   
    if(hood_page_cur >= 10){
	   $('pagenumber').innerHTML ='';
	  for(var j=11;j<=pages;j++){
		   if(j <=15)
		   $('pagenumber').innerHTML += '<a href="javascript:neighborhood_goto_page('+j+')" title="Page '+j+'" class="pager-number">'+j+'</a>&nbsp;&nbsp;';
	  }
   }
   
    if(hood_page_cur >= 15){
	   $('pagenumber').innerHTML ='';
	  for(var j=15;j<=pages;j++){
		    if(j <= 20){
		   $('pagenumber').innerHTML += '<a href="javascript:neighborhood_goto_page('+j+')" title="Page '+j+'" class="pager-number">'+j+'</a>&nbsp;&nbsp;';
			}
	  }
   }
   
	if(hood_page_cur <= 5){
		$('pagenumber').innerHTML ='';
		for(var j=1;j<=pages;j++){
			if(j <= 5)
				$('pagenumber').innerHTML += '<a href="javascript:neighborhood_goto_page('+j+')" title="Page '+j+'" class="pager-number">'+j+'</a>&nbsp;&nbsp;';
		}
	}
   
   if(hood_page_cur <= 10 && hood_page_cur >= 6){
	   $('pagenumber').innerHTML ='';
	  for(var j=6;j<=pages;j++){
		   if(j <=10)
		   $('pagenumber').innerHTML += '<a href="javascript:neighborhood_goto_page('+j+')" title="Page '+j+'" class="pager-number">'+j+'</a>&nbsp;&nbsp;';
	  }
   }
   
    if(hood_page_cur <= 15 && hood_page_cur >= 10){
	   $('pagenumber').innerHTML ='';
	  for(var j=10;j<=pages;j++){
		    if(j <= 11){
		   $('pagenumber').innerHTML += '<a href="javascript:neighborhood_goto_page('+j+')" title="Page '+j+'" class="pager-number">'+j+'</a>&nbsp;&nbsp;';
			}
	  }
   }
}
   
  if(hood_page_total!=0){
  if($('hood_pages_top')) $('hood_pages_top').innerHTML = '<font color="#000000">Displaying ' + from + ' to ' + to + ' of ' + hood_page_total + '</font>';
  if($('hood_pages_bot')) $('hood_pages_bot').innerHTML = '<font color="#000000">Displaying ' + from + ' to ' + to + ' of ' + hood_page_total + '</font>';
  } 

  var links = $$('a');

  for (var i = 0; i < links.length; i++) {

    if (links[i].className == 'pager-number-on')
      links[i].className = 'pager-number';
  }

  var links = $$('a');

  for (var i = 0; i < links.length; i++) {

    if (links[i].innerHTML == hood_page_cur) {

      links[i].className = 'pager-number-on';
    }
  }

  scroll(0,0);
}

function neighborhood_prev_page() {

  if (hood_page_cur > 1) {
    --hood_page_cur;
    neighborhood_update_pagination();
  }
}

function neighborhood_next_page() {

  var pages = Math.round( (hood_page_total / hood_page_limit) + 0.5);

  if (hood_page_cur < pages) {
    ++hood_page_cur;
    neighborhood_update_pagination();
  }
}

function neighborhood_goto_page(page) {

  hood_page_cur = page;
  neighborhood_update_pagination();
}


function neighborhood_setup_pagination() {

  hood_page_cur = 1;
  var content 	= '';
  
  var pages = Math.round( (hood_page_total / hood_page_limit) + 0.5);

  
   if ( pages > 1 ) {
    var content ='<a href="javascript:neighborhood_prev_page()" title="Previous Results" class="previous">&laquo;</a>';
		
	content += '<span id="pagenumber">';
    for (var i = 1; i <= pages; ++i) {
		if(i <= 5){
	  		content += '<a href="javascript:neighborhood_goto_page('+i+')" title="Page '+i+'" class="pager-number">'+i+'</a>&nbsp;&nbsp;';
		}
	 // offset = metro_page_limit * (i-1); 
	
	  
    }
	content +='</span>';
    content +='<a href="javascript:neighborhood_next_page()" title="Next Results" class="next">&raquo;</a>';
  }
  

  var content_hdr = '<div id="hood_pages_top" class="count"></div>';

  $('hood_pagination_top').innerHTML = content_hdr + '<div class="pages" style="float:right">' + content + '</div>';

  var content_hdr = '<div id="hood_pages_bot" class="count"></div>';

  $('hood_pagination_bot').innerHTML = content_hdr + '<div class="pages" style="float:right">' + content + '</div>';
}


function neighborhoods_show_all() {
  neighborhood_update_pagination();
}

function neighborhood_update_lightbox() {

  var busy = false;

  for(var id in neighborhoods) {
    if (neighborhoods[id].busy_drawing) {
      busy = true;
      break;
    }
  }

  if (!busy) {

    hideLightBox();
  }
}
