var markerList = [];
var windowOpen = false;
var zoomin = false;
var openMarker,enterobject;
var holdWindow = false;
var listCfirst = false;

// create the overlay icon
var defaultIcon = new GIcon();
defaultIcon.image = "/theme/myhood/i/pins/orange_pin.png";
defaultIcon.iconSize = new GSize(19, 33);
defaultIcon.iconAnchor = new GPoint(6, 20);
defaultIcon.infoWindowAnchor = new GPoint(6, 1);

var clusterIcon = new GIcon(defaultIcon);
clusterIcon.image = "/theme/myhood/i/pins/orange_pin_cluster.png";
clusterIcon.iconSize = new GSize(31, 28);


// -----------------------------------------------------------------
function addfav(id){
  var params = 'action=addfav';
  params += '&id=' + id;
  var handlerFunc = function(t){
    var response = t.responseText;
    //GLog.write(response);

    if($('clientContent')){
      /*
      if(!$('mapErrorDiv')){
        var errorDiv = document.createElement('div');
        errorDiv.id = 'mapErrorDiv';
        $('clientContent').appendChild(errorDiv);
      }else{
        var errorDiv = $('mapErrorDiv'); 
      }
      
      errorDiv.innerHTML = response;
      */
      error_text(response);
    } // end if

  };

  var errFunc = function(t){

  };

  new Ajax.Request('/scripts/map_functions.php', {method:'post', postBody:params, onSuccess:handlerFunc, onFailure:errFunc});
  return false;
} // end addFav function


function setup_search(){
  var fieldsets = document.getElementsByTagName('div');
  var level_one,level_two,level_three,level_four,level_five,level_six;
  forEach(fieldsets,function(object) {
    if(object.className == 'options'){
      forEach(fieldsets,function(object) {
        switch(object.className){
          case "level_one":
          level_one = object;
          break;
          case "level_two":
          level_two = object;
          break;
          case "level_three":
          level_three = object;
          break;
          case "level_four":
          level_four = object;
          break;
          case "level_five":
          level_five = object;
          break;
          case "level_six":
          level_six = object;
          break;
          default:
          break;
        }
      }); // end foreach
    } // end if
  }); // end foreach

  var level_one_inputs = level_one.getElementsByTagName('input');
  var level_two_inputs = level_two.getElementsByTagName('select');
  var level_three_inputs = level_three.getElementsByTagName('select');
  var level_four_inputs = level_four.getElementsByTagName('input');
  //var level_five_inputs = $('pet_dog');
  var level_six_inputs = level_six.getElementsByTagName('select');

  // type of housing
  forEach(level_one_inputs,function(object) {
    addEvent(object,'click',display_markers);
  }); // end foreach
  // price
  forEach(level_two_inputs,function(object) {
    addEvent(object,'change',display_markers);
  }); // end foreach
  // bedrooms
  forEach(level_three_inputs,function(object) {
    addEvent(object,'change',display_markers);
  }); // end foreach
  // amenities
  forEach(level_four_inputs,function(object) {
    addEvent(object,'click',display_markers);
  }); // end foreach
  // pets
  /*forEach(level_five_inputs,function(object) {
  addEvent(object,'click',display_markers);
  });*/ // end foreach
  // search filter
  forEach(level_six_inputs,function(object) {
    addEvent(object,'change',display_markers);
  }); // end foreach

} // end function


// -----------------------------------------------------------------


function manage_data(pointData){

  // create the point with the given lat/lng
  var point = new GLatLng(pointData.lat, pointData.lng);

  // create the marker
  if(pointData.type == 'm'){
    var marker = create_cat_marker(point, pointData.icon, pointData.width, pointData.height);
  }else{ // end if
    var marker = create_marker(point, pointData.type);
  } // end else


  // setup sidebar links
  // -----------------------------------------------

  if(pointData.type != "m"){
    
    if(!listCfirst && pointData.type == 'c'){
      var listItem2 = document.createElement('li');
      listItem2.id = 'clusterbreak';
            listItem2.innerHTML = 'Remaining results are listed within pin clusters:<span id="subline">Please zoom in or refine your search to remove cluster</span>';

      //listItem2.innerHTML = 'Remaining results are listed within pin clusters:';
      
      if($('listings')) $('listings').appendChild(listItem2);
      
      listCfirst = true;
    } // end if
    

    var listItem = document.createElement('li');
    listItem.className = 'listItem';
    // add a link to the list item
    var listItemLink = listItem.appendChild(document.createElement('a'));

    var linkText;

    switch(pointData.type){
      case "s":
       if(pointData.haspic == 't'){
        var span = document.createElement('span');

        span.innerHTML = ' <img src="/theme/myhood/i/icons/camera.png" alt="camera" />';
        listItem.appendChild(span);
      }
        var thebr = "BR";
        if(pointData.bed == "Bachelor"){
          thebr = "";
        }
        if(pointData.bed == "1 + Den"){
          thebr = "";
        }
        if(pointData.bed == "2 + Den"){
          thebr = "";
        }
        if(pointData.bed == "Loft"){
          thebr = "";
        }
      
        // set the href of the listItemLink
        listItemLink.href = "/view/?id=0&type=review";
        var linkText = pointData.street;
        
        var listItemDiv = listItem.appendChild(document.createElement('div'));
        listItemDiv.className = 'wrapper';
        
        var includetext = '<span>' + pointData.rent + ", " + pointData.bed + " " + thebr + "</span>";
        
        if(pointData.hasreviews == 't'){
          includetext += '  <img src="/theme/myhood/i/ratings/small/rating_' + pointData.rev_overall + '.png" alt="' + pointData.rev_overall + '" /> ';
        }// end if
        
        if(pointData.promo == 't'){
         var newincludetext = ' <img src="/theme/myhood/i/interface/promo_small.png" class="promo_small" />';
         var spansmall = document.createElement('span');
         spansmall.innerHTML = ' <img src="/theme/myhood/i/interface/promo_small.png" />';
         spansmall.className = 'promo_small';
         listItem.appendChild(spansmall);
        }// end if
        
        listItemDiv.innerHTML = includetext;
        
        break;
      case "c":
        // set the href of the listItemLink
        listItemLink.href = "/view/?id=0&type=review";
        var linkText = pointData.street;
        break;
    } // end switch

    listItemLink.innerHTML = linkText;

  } // end if

  // -----------------------------------------------

  // by default the list item & marker are not visible
  var visible = false;

  var focusPoint = function() {
      // center marker on map
      //map.panTo(point);
      openMarker = pointData.id;
      // a window will be opened by this function, so set the windowOpen var to true
      windowOpen = true;

      if(pointData.type == 'c'){
        var vHTML = '<div class="cluster_infowindow_wrapper">This cluster has ' + pointData.num + ' apartments available.<a href="javascript:void(0);" onclick="map.setZoom(map.getZoom() + 2);">Zoom in for locations</a></div>';
        marker.openInfoWindowHtml(vHTML);
      }else{

        var bedroom = "";
        switch(pointData.bed){
          case "1":
          bedroom = '<img src="/theme/myhood/i/interface/bedroom/bedroom_1.jpg" alt="bedroom" />';
          break;
          case "2":
          bedroom = '<img src="/theme/myhood/i/interface/bedroom/bedroom_2.jpg" alt="bedroom" />';
          break;
          case "3":
          bedroom = '<img src="/theme/myhood/i/interface/bedroom/bedroom_3.jpg" alt="bedroom" />';
          break;
          case "4":
          bedroom = '<img src="/theme/myhood/i/interface/bedroom/bedroom_4.jpg" alt="bedroom" />';
          break;
          case "Jr. 1":
          bedroom = '<img src="/theme/myhood/i/interface/bedroom/bedroom_Jr.jpg" alt="bedroom" />';
          break;
          case "Bachelor":
          bedroom = '<img src="/theme/myhood/i/interface/bedroom/bedroom_B.jpg" alt="bedroom" />';
          break;
          case "Loft":
          bedroom = '<img src="/theme/myhood/i/interface/bedroom/bedroom_L.jpg" alt="bedroom" />';
          break;
          case "1 + Den":
          bedroom = '<img src="/theme/myhood/i/interface/bedroom/bedroom_1_D.jpg" alt="bedroom" />';
          break;
          case "2 + Den":
          bedroom = '<img src="/theme/myhood/i/interface/bedroom/bedroom_2_D.jpg" alt="bedroom" />';
          break;
          default:
          bedroom = '<img src="/theme/myhood/i/interface/bedroom/bedroom_NA.jpg" alt="bedroom" />';
          break;
        } // end switch

        var bathroom = "";
        switch(pointData.bath){
          case "1":
          bathroom = '<img src="/theme/myhood/i/interface/washroom/washroom_1.jpg" alt="bathroom" />';
          break;
          case "1.5":
          bathroom = '<img src="/theme/myhood/i/interface/washroom/washroom_1_5.jpg" alt="bathroom" />';
          break;
          case "2":
          bathroom = '<img src="/theme/myhood/i/interface/washroom/washroom_2.jpg" alt="bathroom" />';
          break;
          case "2.5":
          bathroom = '<img src="/theme/myhood/i/interface/washroom/washroom_2_5.jpg" alt="bathroom" />';
          break;
          case "3":
          bathroom = '<img src="/theme/myhood/i/interface/washroom/washroom_3.jpg" alt="bathroom" />';
          break;
          case "3+":
          bathroom = '<img src="/theme/myhood/i/interface/washroom/washroom_3plus.jpg" alt="bathroom" />';
          break;
          default:
          bathroom = '<img src="/theme/myhood/i/interface/washroom/NA_washroom.jpg" alt="bathroom" />';
          break;
        } // end switch

        var source = "";
        var sourceurl = "#";
        if(pointData.source_url != ""){
          sourceurl = pointData.source_url;
        }
        if(pointData.source_img != ""){
          source = '<a href="' + sourceurl + '" title="source" target="_blank"><img src="/user_files/images/Image/source/' + pointData.source_img + '" alt="img" /></a>';
        }else{
          source = pointData.source ;
        }
var returnmap = map.getCenter();

var price_flag = "";

if(pointData.price_flag == 't'){
  price_flag = 'From ';
}

        // build the window data
        var vHTML =  '<div class="infowindow_wrapper">'; // wrapper
        vHTML += '<div class="header">';
        vHTML += '<div class="price">' + price_flag + pointData.rent +'</div>';
        vHTML += '<div class="details">';
        vHTML += '<div class="bed">' + bedroom +'</div>';
        vHTML += '<div class="bath">' + bathroom +'</div>';
        vHTML += '</div>';
        vHTML += '</div>';
        vHTML += '<div class="infowin_content_wrapper">';
        vHTML += '<div class="pic">';
        vHTML += '<img src="/user_files/images/thumbs/map/' + pointData.img + '" alt="info window image" />';
        if(pointData.url == "" || Number(pointData.source_id) == 83 ){
          vHTML += '<a href="/view/?type=rent&id=' + pointData.rent_id + '&lat=' + returnmap.y + '&lng=' + returnmap.x + '&zoom=' + map.getZoom() + '&page=rents&' + Form.serialize('options_form') + '">View Details</a>';
        }else{ // end if
          vHTML += '<a href="/view/goto/?id='+ pointData.rent_id +'" target="_blank">View Details</a>';
        } // end else
        if(pointData.hasreviews != "t"){
          vHTML += '<a href="/reviews/write/?id='+ pointData.loc_id +'">Write Review</a>';
        }else{
	  var form_temp = $('options_form');
	  var house_type = form_temp['house_type'];
	  if (house_type[0].checked) {
	    house_type_string = 'apa';
	  }
	  if (house_type[1].checked) {
	    house_type_string = 'roo';
	  }
	  if (house_type[2].checked) {
	    house_type_string = 'sub';
	  }
          vHTML += '<a href="/view/review/?id=' + pointData.loc_id + '&type=reviews&house_type=' + house_type_string + '&lat=' + returnmap.y + '&lng=' + returnmap.x + '&zoom=' + map.getZoom() + '&page=rents&' + Form.serialize('options_form') + '" title="Read Review">Read Reviews</a>';
        }
        vHTML += '<a href="/admin/member/shortlist/add/?id=' + pointData.rent_id + '" onclick="addfav(' + pointData.rent_id + '); return false;">Add to shortlist</a>';
        vHTML += '</div>'; // end pic
        vHTML += '<div class="content">';
        vHTML += '<div class="level_one">';
        vHTML += '<h3>' + pointData.street + '</h3>';
        if(pointData.hasreviews == 't'){
          vHTML += '<div class="has_review"><h3>' + pointData.rev_recommend + '% recommended</h3><img src="/theme/myhood/i/ratings/small/rating_' + pointData.rev_overall + '.png" alt="' + pointData.rev_overall + '" /> ' + pointData.rev_num + ' reviews</div>';
        }// end if
        vHTML += '</div>'; // end level one
        vHTML += '<div class="level_two">';
        vHTML += '<div class="features">' + pointData.features + '</div>';
        vHTML += '</div>'; // end level two
        vHTML += '<div class="level_three">';
        vHTML += '<div class="source"><span>Source:</span> ' + source + '</div>';
        vHTML += '</div>'; // end level three
        vHTML += '</div>'; // end content
        vHTML += '</div>'; // end info win content wrapper
        vHTML += '</div>'; // end wrapper

        // open the window
        marker.openInfoWindowHtml(vHTML);
      }

      return false;
    }

  pointData.show = function() {
    if (!visible) {
      // add listItem to sidebar listing
      if($('listings')) $('listings').appendChild(listItem);
      // add marker to map
      map.addOverlay(marker);
      // marker is visible
      visible = true;
    }
  }

  pointData.hide = function() {
    if (visible) {
      // remove listItem from sidebar listing
      if($('listings')) $('listings').removeChild(listItem);
      // remove marker from map
      map.removeOverlay(marker);
      // marker is not visible
      visible = false;
    }
  }
  
  var openTool = function() {
    if(windowOpen != true){
      var tooltipInfo = pointData.street;
      marker.openToolTip(tooltipInfo);
    }
  }
  
  var closeTool = function() {
    marker.closeToolTip();
  }

  if(pointData.type != 'm'){
    
    listItemLink.onclick = focusPoint;
    
    // listen for click of marker & call focusPoint function
    GEvent.addListener(marker, 'click', focusPoint);
    
    // listen for mouseover of marker & call highLightListItem function
    GEvent.addListener(marker, 'mouseover', openTool);
    // listen for mouseout of marker & call removeHighlightListItem function
    GEvent.addListener(marker, 'mouseout', closeTool);
    // listen for mouseover of sidebar item & call openTool function
    listItemLink.onmouseover = openTool;
    // listen for mouseout of sidebar item & call closeTool function
    listItemLink.onmouseout = closeTool;
    
    pointData.show();
  }else{
    var openLocTool = function() {
      if(windowOpen != true){
        var tooltipInfo = pointData.cat_parent + ' - ' + pointData.cat_name;
        marker.openToolTip(tooltipInfo);
      }
    }
  
    var closeLocTool = function() {
      marker.closeToolTip();
    }
    
    // listen for mouseover of marker & call highLightListItem function
    GEvent.addListener(marker, 'mouseover', openLocTool);
    // listen for mouseout of marker & call removeHighlightListItem function
    GEvent.addListener(marker, 'mouseout', closeLocTool);
    map.addOverlay(marker);
  }

  markerList[pointData.id] = marker;

} // end manage_cats function

// -----------------------------------------------------------------

function display_markers(){

  var form = Form.serialize('options_form');
  
  listCfirst = false;

  map.clearOverlays();

  // get the sidebar list
  var sideList = $('listings');
  // clear the sidebar list
  while (sideList.firstChild){sideList.removeChild(sideList.firstChild);};

  // Get the current bounds of the visible area.
  var bounds = map.getBounds();

  var housetype = $('options_form').getInputs('radio', 'house_type');
  var ht = "";
  for(var t=0;t<housetype.length;t++){
    if(housetype[t].checked){
      ht = housetype[t].value;
    }
  }

  // show loading
  myhood.addLoading();

  // Expand the bounds a little, so things look smoother when scrolling
  // by small amounts.
  var sw = bounds.getSouthWest();
  var ne = bounds.getNorthEast();
  var dx = ne.lng() - sw.lng();
  var dy = ne.lat() - sw.lat();
  dx *= 0.10;
  dy *= 0.10;
  bounds = new GLatLngBounds(
  new GLatLng( sw.lat() - dy, sw.lng() - dx ),
  new GLatLng( ne.lat() + dy, ne.lng() + dx ) );
  var southWest = bounds.getSouthWest();
  var northEast = bounds.getNorthEast();
  var zoom = map.getZoom();
  var getVars = '&ne=' + northEast.toUrlValue()
  + '&sw=' + southWest.toUrlValue() + '&page=rent&house_type=' + ht; 
  
  if(gup('type') == 'single' && gup('id') != "" && !clearsingle){
    getVars += '&rent_id=' + gup('id') + '&return_zoom=' + 17;
    
    var insertDiv = document.getElementsByClassName('level_seven',$('options_form'));
    var linkitem = document.createElement('a');
    linkitem.href = '#';
    linkitem.onclick = function(){ 
      clearsingle = true; 
      display_markers();
      insertDiv[0].removeChild(linkitem);
    };
    linkitem.innerHTML = 'Clear Filters';
    linkitem.id = 'clearfilterbutton';
    
    insertDiv[0].appendChild(linkitem);
  }
  
  getVars += '&zoom=' + zoom + '&blank=1' + form;

  var params = 'action=get_points';
  params += getVars;

  function handlerFunc(t){
    var points,lat,lng,icon;
    var post = t.responseText;
    //GLog.write(post);
    eval(post);
    var thecount = 0;
    for(id in points){
      manage_data(points[id]);
      if(points[id].type == 's'){
        thecount++;
      }
      if(points[id].type == 'c'){
        thecount = thecount + Number(points[id].num);
      }
    } // end for

    if($('listings_header')){
      $('listings_header').innerHTML = '<h3>Results <span>' + thecount + '</span></h3>';
    }
    
    if($('panel1_results')){
      $('panel1_results').innerHTML = '<h3>Results <span>' + thecount + '</span></h3>';
    }

    // hide loading
    myhood.removeLoading();

  } // end handlerFunc
  function errFunc(){}
  //GLog.writeUrl('/scripts/rent/rent_func.php?' + params);
  new Ajax.Request('/scripts/rent/rent_func.php', {method:'post', postBody:params, onSuccess:handlerFunc, onFailure:errFunc});

} // end display_markers function



var reinit = function(){
  
  var panel_title_2 = $('panel2').getElementsByTagName('h5');
  var title = panel_title_2[0];
  
  accordion(title);
  
  return false;
}

// -----------------------------------------------------------------

/* init function - setup map */
function init(){
  // check if browser is compatible with google maps
  if (GBrowserIsCompatible()) {
    // browser is compatible
    // setup the map using the variables set in myhood.js
    map = new GMap2($("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GOverviewMapControl());
    map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
    if(map.enableScrollWheelZoom){
      map.enableScrollWheelZoom();
    } // available in upcoming api releases
    /*
    var ads = new GAdsManager( map , 'pub-7043911906218941', {maxAdsOnMap:10} )
    ads.enable(); 
    */
    // setup location bar effects
    myhood.initLocationSearch($('search'));

    // hide loading by default
    myhood.removeLoading();

    // needed for homepage search
    check_for_home_search('rent');

    setup_search();

    setup_search_form('rent');
    
    if($('viewresultsbutton')){
      $('viewresultsbutton').onclick = reinit;
    } // end if
    
     // setup switch link under listings
    myhood.update_search_link($('search_link'), '/reviews/');

    // add listener for info window open
    GEvent.addListener(map,'infowindowopen',function() {
      holdWindow = true;
      //GLog.write('holdwindow');
    });
    // add listener for info window close
    GEvent.addListener(map,'infowindowclose',function() {
      holdWindow = false;
      windowOpen = false;
      clear_error_text();
      //updateMarkers();
      openMarker = "";
    });
    // add listener for end of map zoom
    GEvent.addListener(map,'zoomend',function() {
      myhood.update_search_link($('search_link'), '/reviews/');
      display_markers();
      clear_error_text();
      zoomin = true;

    });
    // add listener for end of map move
    GEvent.addListener(map,'moveend',function() {
      //GLog.write(holdWindow + ' ' + zoomin);
      if(holdWindow == false && zoomin == false){
        //GLog.write('update');
        display_markers();
        myhood.update_search_link($('search_link'), '/reviews/');
      }
      zoomin = false;
      clear_error_text();
    });

  }else{ // end if
    // browser not compatible
    alert('Your browser is not compatible with google maps!');
  } // end else
} // end init function


// initiate accordian
addEvent(window, "load", function(){accordion_init('panels');});
// initiate map scripts
addEvent(window,'load',init);
//clear cache
addEvent(window,'unload',Event.unloadCache);

