function mog_sited_added_go_review( site )
{
	// This is a site object.
	review_after_add( site );
}

var map_browse = null;
var map_browse_mutex = 0;

function mog_load_browse_map() 
{
   if (GBrowserIsCompatible()) 
   {
      //if ( map_browse == null )
      //{
         map_browse = new GMap2(document.getElementById("addmap"));
      //}
      
      map_browse.addControl(new GSmallZoomControl());
      map_browse.addControl(new GMapTypeControl());        
      map_browse.setCenter(new GLatLng(37.4419, -122.1419), 3);

     //GEvent.addListener(map, "click", add_marker);     
   }
}

function confirm_browse_address(movemap)
{
	if ( movemap == 1 )
	{
      validateAddress(document.getElementById("requestedAddress").value, confirm_browse_address_CB);
	}
	else
	{
		validateAddress(document.getElementById("requestedAddress").value, confirm_browse_address_CB_NoMove);
	}	
}

function confirm_browse_address_CB(response)
{
   // Check returned response.
   if (!response || response.Status.code != 200)
   {
      // The address is not found, alert the user.
      alert("Address not found, please try a new one or correct this one. " + response.Status.code);
   }
   else
   {
      map_browse_mutex = 1;

      place = response.Placemark[0];
      point = new GLatLng(place.Point.coordinates[1],
                          place.Point.coordinates[0]);

      map.setCenter(point, 13);    	

      mog_populate_browse_map();
   }
}

function confirm_browse_address_CB_NoMove(response)
{
   // Check returned response.
   if (!response || response.Status.code != 200)
   {
      // The address is not found, alert the user.
      alert("Address not found, please try a new one or correct this one. " + response.Status.code);
   }
   else
   {
      place = response.Placemark[0];
      point = new GLatLng(place.Point.coordinates[1],
                          place.Point.coordinates[0]);

      map.setCenter(point, 13);     
   }
}

function mog_browse_end(marker,point)
{
	map.clearOverlays();
	
	if ( map.getZoom() > 10 )
	{
		// When the map move during a confim address,
		// don't repopulate (call the server) a second time.
		if ( map_browse_mutex == 0 )
		{
            mog_populate_browse_map();
		}
   }
   else
   {
      var site_table = document.getElementById("site_table");
         
      // Delete all table child.
      while(site_table.hasChildNodes()) site_table.removeChild(site_table.firstChild);
   }
}

var req_pop_browse_map = null;

function mog_populate_browse_map()
{
   if ( req_pop_browse_map == null )
   {
      req_pop_browse_map = create_request();
   }

   if ( req_pop_browse_map != null )
   {
      var parameters = ""; 
      
      // Get the boundaies of the map.
      var map_bound = map.getBounds();
      
      // Get south west and north east boundaries point of the map.
      var sw_point = map_bound.getSouthWest();
      var ne_point = map_bound.getNorthEast();
      
      //alert(sw_point.lat()+"|"+sw_point.lng()+"|"+ne_point.lat()+"|"+ne_point.lng()+"|");       
      
      parameters += "command=" + encodeURI( "coord" );
      parameters += "&lat1=" + encodeURI( sw_point.lat() );
      parameters += "&lng1=" + encodeURI( sw_point.lng() );
      parameters += "&lat2=" + encodeURI( ne_point.lat() );
      parameters += "&lng2=" + encodeURI( ne_point.lng() );

      // AS: http://ajaxian.com/archives/reusing-xmlhttprequest-without-abort
      // Always put the open before the onreadystatechange, this will prevent
      // reusing the same object concurently.
                    
      req_pop_browse_map.open('POST', 'getsite.php', true);
      req_pop_browse_map.onreadystatechange = mog_get_site_by_coord_callback;      
      req_pop_browse_map.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      req_pop_browse_map.setRequestHeader("Content-length", parameters.length);
      req_pop_browse_map.setRequestHeader("Connection", "close");
      req_pop_browse_map.send(parameters);
   }
   else
   {
      alert("Cannot create parameters list.");
   }
}

function mog_get_site_by_coord_callback()
{
   if (req_pop_browse_map.readyState == 4) 
   {
      if (req_pop_browse_map.status == 200)
      {
      	//alert(req_pop_browse_map.responseXML + "|" + req_pop_browse_map.responseText );
      	var browse_sites = get_sites_node_from_server_response(req_pop_browse_map.responseXML);
      	
      	var site_idx = 0;
      	var browse_site = site_get( browse_sites, site_idx );
      	var site_table = document.getElementById("site_table");
      	
      	// Delete all table child.
         while(site_table.hasChildNodes()) site_table.removeChild(site_table.firstChild);

      	while( browse_site != null )
      	{
      	   //alert(site_get_id(browse_site));
      	   point = new GLatLng(site_get_lat(browse_site), site_get_lng(browse_site));

            // Create the map marker.
	         var marker = new GMarker(point);  			   
	         map.addOverlay(marker);
            browse_create_marker(marker,browse_site);	           
      		
      		// Fill the site_map table.
			   var new_row = site_table.insertRow(site_table.rows.length);
			   var new_cell = new_row.insertCell(0);
			   
			   // TODO: Should be get through database. Retuned in the get site.
			   var review_stars = site_get_rating(browse_site);
			   
			   var cell_inner_html = "";
			   
			   cell_inner_html = '<a href="siteedit.html?id=' + site_get_id(browse_site) + '" title="Edit the site."><img src="images/edit.png" border="0"></a>'+'<a href="javascript:mog_center_map_by_coord(' 
			   + site_get_lat(browse_site) + ','
			   + site_get_lng(browse_site) + ','
			   + site_get_id(browse_site)
			   + ')" id="site_table_name_link" class="site_table_name_link">' 
            + '<b>' + site_get_name(browse_site) + '</b>' 
			   + '</a>'
 			   + '<br><br>' 
			   + site_get_address(browse_site)
			   + '<br>'
			   + '<a href="javascript:site_review_get_by_id(' 
            + site_get_id(browse_site)
            + ')">' 
            + 'See review' 
            + ' </a>'
            + '<a href="javascript:mog_site_review_add('
            + site_get_id(browse_site)
            + ','
            + '\'' + site_get_address(browse_site) + '\'' 
            + ','
            + '\'' + site_get_name(browse_site) + '\''
            + ','
            + '\'' + site_get_lat(browse_site) + '\''
            + ','
            + '\'' + site_get_lng(browse_site) + '\''                        
            + ')">' 
            + 'Add review' 
            + ' </a>'
            + '<a href="javascript:report_bad('
            + site_get_id(browse_site)
            + ','            
            + '\'' + 'site' + '\''                        
            + ')">'
            + 'Report bad'
            + ' </a>';

            if ( Math.floor(review_stars) == "-1" )
            {
            	// I think nothing is better, user can then click add review.
            	//cell_inner_html += '(No Review Yet)'
            }
            else
            {
	            var full_star_number = Math.floor(review_stars);
	            var rating_fraction  = review_stars - full_star_number;
	            var total_star = full_star_number;
	
	            for ( idx = 0 ; idx < full_star_number ; idx++ )
	            {
	               cell_inner_html += '<img src="images/full_star.gif">';                              
	            }
	            
	            if ( (rating_fraction >= 0 && rating_fraction < 0.25) && full_star_number != 5 )
	            {
	               cell_inner_html += '<img src="images/empty_star.gif">';
	               total_star++;
	            }
	            if ( rating_fraction >= 0.25 && rating_fraction < 0.75 )
	            {
	               cell_inner_html += '<img src="images/half_star.gif">';
	               total_star++;
	            }
	            if ( rating_fraction >= 0.75 )
	            {
	               cell_inner_html += '<img src="images/full_star.gif">';
	               total_star++;
	            }
	
	            for ( idx = total_star ; idx < 5 ; idx++ )
	            {            
	               cell_inner_html += '<img src="images/empty_star.gif">';
	            }
            }     		
     		   cell_inner_html += '<br><hr size="1" align="center" width="100%" color="#C5B692">'; 
      		//alert(cell_inner_htmlS);
      		new_cell.innerHTML = cell_inner_html;
      		
      		// To next site.
      		site_idx++;
      		browse_site = site_get( browse_sites, site_idx );
      	}    
      	
      	map_browse_mutex = 0;  	
      }
      else 
      {
         alert("There was a problem retrieving the XML data:\n" + review_after_add_request.statusText);
      }
   }  
}

function mog_site_review_add( site_id, site_adress, site_name, lat, lng )
{
   // Load the review page. Call mog specific script and tell it that
   // we just add a new site.
   var newurl = "sitereview.html?"
   newurl += "address=" + encodeURI(site_adress);
   newurl += "&sitename=" + encodeURI(site_name);
   newurl += "&id=" + encodeURI(site_id);
   newurl += "&lat=" + encodeURI(lat);
   newurl += "&lng=" + encodeURI(lng);
                  
   document.location = newurl; 	
}

function browse_create_marker(marker,marker_site)
{
   GEvent.addListener(marker, "click", function() {
   	
      marker.openInfoWindowHtml("<b>"+site_get_address(marker_site)+"</b><br>"+site_get_name(marker_site));
   });
}

function mog_center_map_by_coord(lat,lng,site_id)
{
	map.panTo(new GLatLng(lat, lng));
}

function site_review_get_by_id(site_id)
{
   var newurl = "reviews.html?"
   newurl += "id=" + encodeURI(site_id);
   
   window.open( newurl,'mywin',"left=20,top=20,width=800,height=500,resizable,scrollbars");   
}

var req_see_review_by_id = null;

function site_review_get(site_id)
{
   if ( req_see_review_by_id == null )
   {
      req_see_review_by_id = create_request();
   }

   if ( req_see_review_by_id != null )
   {
      var parameters = ""; 
      
      parameters += "siteId=" + encodeURI( site_id );
             
      req_see_review_by_id.open('POST', 'getreview.php', true);
      req_see_review_by_id.onreadystatechange = site_review_get_by_id_callback;
                  
      if ( req_see_review_by_id.overrideMIMEtype )
      {
         req_see_review_by_id.overrideMIMEtype('text/xml');
      }      
      
      req_see_review_by_id.setRequestHeader("Content-type", "application/x-www-form-urlencoded");     
      req_see_review_by_id.setRequestHeader("Content-length", parameters.length);
      req_see_review_by_id.setRequestHeader("Connection", "close");
      req_see_review_by_id.send(parameters);
   }
   else
   {
      alert("Cannot create parameters list.");
   }	
}

var greviews = null;

function site_review_get_by_id_callback()
{	
   if (req_see_review_by_id.readyState == 4) 
   {
      if (req_see_review_by_id.status == 200)
      {
         //alert(req_error + req_see_review_by_id.responseXML + req_see_review_by_id.responseText );

         var req_error = error_get_id(req_see_review_by_id.responseXML);        
         
         if ( req_error == 0 )
         {                 
            //alert(req_see_review_by_id.responseText);
            // Success we can continue to the review page.
            // Get the site list and get site id.
            greviews = get_reviews_node_from_server_response(req_see_review_by_id.responseXML);            

            // Load the review display page. 
            mog_display_review( greviews );                 
         }
         else
         {
            var desc = error_get_description(req_see_review_by_id.responseXML);
            
            // Fail, alert the user.
            alert("Problem getting reviews for site :" + desc + " | " + req_see_review_by_id.responstText);
         }        	

      }   
   }
}

/*function mog_display_review( reviews )
{
   var content_div = document.getElementById("content");

   if ( content_div != null && greviews != null )
   {
   	// Start with the table header.
   	var cell_inner_html = '<table class="directions"><tr><th>Site Rating</th><th>Site Review</th></tr>';
   	
   	var review_idx = 0;
   	var browse_review = review_get( greviews, review_idx );
   	
   	while( browse_review != null )
      {
      	cell_inner_html += mog_add_review_to_html_table( browse_review );      	         

         // To next review.
         review_idx++;
         browse_review = site_get( greviews, review_idx );
      }
      
      cell_inner_html += '</table>'
               
      content_div.innerHTML = cell_inner_html;
   }
   
   greviews = null;
}*/

/*function mog_add_review_to_html_table( review )
{
	  var cell_inner_html = null;
	  
	  cell_inner_html += '<tr><td>'
	  + 'Cleanliness:'
	  + review_get_cleanliness( review )
	  + '<br>'
     + 'Intimacy:'
     + review_get_intimacy( review )
     + '<br>'
     + 'Experience:'
     + review_get_experience( review )
     + '<br>'     
	  + '</td><td>'
	  + review_get_date( review )
	  + ' by '
	  + review_get_user( review )
	  + '<br>'
	  + review_get_comments( review )
	  + '</td></tr>';
	  
	  return cell_inner_html;
}*/

