/*----------------------------------------------------------
 * map_data_load.js
 *
 * This file contains all sorts of useful helper functions
 * for using Google Maps API V3 
 *--------------------------------------------------------*/

var gEditMarkerList = new Array();
var gEditFormList = new Object();
var gPlaceInfoList = new Object();
var gSuggestionInfoList = new Object();
var gPointTypeList = new Array();
var gMarkerChain = new Object();
var gSelectedPlaceNumber = 0;
var gNavPointList = new NavigablePointList();

function clickNextGlobalPoint(){
	gNavPointList.ClickNextPoint(gSelectedPlaceNumber, gMap);
}
function clickPrevGlobalPoint(){
	gNavPointList.ClickPrevPoint(gSelectedPlaceNumber, gMap);
}

function loadPointsTypesFromDatabase(){
  $.post("/trips/getPointTypes.php", { },
   function(data){
     gPointTypeList = data;
   }
   , "json");
}

function openInfoWindowWithPointNum( markerNumber ){
	var markerData = gPlaceInfoList[markerNumber];
	gSelectedPlaceNumber = markerNumber;
	var typeName = markerData.type;
	var newInfoBoxTitle = "<span><img src='"+ gPointTypeList[typeName].iconPath +"' /> " + typeName +  "</span>";
	setInfoBoxTitle(newInfoBoxTitle);
	 fillInInfoBox(markerData.point_id,
	 					markerData.name, markerData.street_address_1,
	 					markerData.city, markerData.state, markerData.country, 
	 					markerData.phoneNumber, markerData.lng, markerData.lng, 
	 					markerData.description, markerData.type);
	 $("#placeinfobox").dialog('open');
}

function loadPointsFromDatabase( mapId, map ){
//load point types, then once those have loaded, get all the points
$.post("/trips/getPointTypes.php", { },
 function(data){
   gPointTypeList = data;
   $.post("/trips/getMapPoints.php", { map_id: mapId },
    function(data){
      var markerList = data.markers;
      //Create points for all markers in the results
      for( iMarker = 0; iMarker < markerList.length; iMarker++){
        var typeName = markerList[iMarker].type;
        var marker = makeNewMarker( gMap, markerList[iMarker].lat, markerList[iMarker].lng, gPointTypeList[typeName].iconPath, markerList[iMarker].name);
        marker.set("marker_num", iMarker);
        gNavPointList.AddPoint(marker,iMarker);
        gPlaceInfoList[iMarker] =  markerList[iMarker];
        google.maps.event.addListener(marker, 'click', function() {
        	openInfoWindowWithPointNum(this.get("marker_num"));
         });
        
        var category = gPointTypeList[typeName].category;
        
        if(!gMarkerList[category]){
          gMarkerList[category] = new Array();
        }
        if(!gMarkerList[typeName]){
          gMarkerList[typeName] = new Array();
        }
        
        gMarkerList[category].push(marker);
        gMarkerList[typeName].push(marker);
      }
    }, "json");
   }
 , "json");
  
}

function loadPointsFromDatabaseForEdit( mapId, map ){
$.post("/trips/getPointTypes.php", { }, function(data){
  gPointTypeList = data;
  $.post("/trips/getMapPoints.php", { map_id: mapId },
   function(data){
     var markerList = data.markers;
     //Create points for all markers in the results
     for( iMarker = 0; iMarker < markerList.length; iMarker++){
       var typeName = markerList[iMarker].type;
       var marker = makeNewMarker( gMap, markerList[iMarker].lat, markerList[iMarker].lng, gPointTypeList[typeName].iconPath, markerList[iMarker].name);
       marker.set("marker_num", iMarker);
       gEditFormList[iMarker] =  markerList[iMarker];
       google.maps.event.addListener(marker, 'click', function() {
         var markerData = gEditFormList[this.get("marker_num")];
          fillInEditForm(markerData.point_id,
          					markerData.name, markerData.street_address_1,
          					markerData.city, markerData.state, markerData.country, 
          					markerData.phoneNumber, markerData.lng, markerData.lng, 
          					markerData.description, markerData.type);
          $("#placeinfobox").dialog('open');
          $('#placeinfobox').bind('dialogclose', function(event, ui) {
          		//clear out form
            	clearEditForm();
          });
        });
	   var category = gPointTypeList[typeName].category;
	   if(!gMarkerList[category]){
	     gMarkerList[category] = new Array();
	   }
	   if(!gMarkerList[typeName]){
	     gMarkerList[typeName] = new Array();
	   }
       gMarkerList[category].push(marker);
       gMarkerList[typeName].push(marker);
       gMarkerList['master'].push(marker);
     }
    // if(gMarkerGrouper){
    //   gMarkerGrouper.addMarkers(gMarkerList['master']);
    // }
   }, "json");
}
, "json");
  
}

//------------------------------------------------------------

function loadPhotosFromDatabase( mapId, map ){
  $.post("getFlickrMarkers.php", { map_id: mapId },
   function(data){
     var markerList = data.markers;
     //Create points for all markers in the results
     for( iMarker = 0; iMarker < markerList.length; iMarker++){
       var marker = makePhotoMarker( gMap, markerList[iMarker].lat, markerList[iMarker].lng, markerList[iMarker].title);
       var infoHtml =  makePhotoInfoWindow( markerList[iMarker].title,
						markerList[iMarker].ownername,
						markerList[iMarker].linkToImage,
						markerList[iMarker].imageUrl);
       addInfoWindow( gMap, infoHtml, marker, 'photo' );
       gMarkerList['photo'].push(marker);
     }
   }, "json");
}

//------------------------------------------------------------

function loadVideosFromDatabase( mapId, map ){
  $.post("getYoutubeMarkers.php", { map_id: mapId },
   function(data){
     var markerList = data.markers;
     //Create points for all markers in the results
     for( iMarker = 0; iMarker < markerList.length; iMarker++){
       var marker = makeVideoMarker( gMap, markerList[iMarker].lat, markerList[iMarker].lng, markerList[iMarker].title);
        marker.set("marker_num", iMarker);
       var infoHtml =  makeVideoInfoWindow( markerList[iMarker].title,
						markerList[iMarker].length,
						markerList[iMarker].video_id);
       gMarkerList['videoInfoWindow'][iMarker] = infoHtml;
      google.maps.event.addListener(marker, 'click', function() {
        gMap.setCenter(this.getPosition());
        $("#video_form_contents").html(gMarkerList['videoInfoWindow'][this.get("marker_num")]);
        var windowHeight = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
        gMap.panBy(0, (((windowHeight)/2)-435) );
        $("#video_form_container").show();
      });

     gMarkerList['video'].push(marker);
     }
   }, "json");
}

//------------------------------------------------------------

function loadSuggestionsFromDatabase( mapId, map, infoWindowType ){
  $.post("/trips/getSuggestions.php", { map_id: mapId },
   function(data){
     var markerList = data.markers;
     //Create points for all markers in the results
     for( iMarker = 0; iMarker < markerList.length; iMarker++){
       var marker = makeSuggestionMarker( gMap, markerList[iMarker].lat, markerList[iMarker].lng, markerList[iMarker].name);
       
       var infoHtml;
       if(infoWindowType == "full"){
         infoHtml =  makeFullSuggestionInfoWindow( markerList[iMarker].name,
						markerList[iMarker].description,
						markerList[iMarker].street_address_1,
						markerList[iMarker].city,
						markerList[iMarker].state,
						markerList[iMarker].phoneNumber,
						markerList[iMarker].country,
        					markerList[iMarker].suggestor_name,
        					markerList[iMarker].suggestor_twitter,
        					markerList[iMarker].suggestor_uri);
       }
       else{
         infoHtml =  makeSuggestionInfoWindow( markerList[iMarker].name,
						markerList[iMarker].description,
						markerList[iMarker].street_address_1,
						markerList[iMarker].city,
						markerList[iMarker].state,
						markerList[iMarker].phoneNumber,
						markerList[iMarker].country,
        					markerList[iMarker].suggestor_name,
        					markerList[iMarker].suggestor_twitter,
        					markerList[iMarker].suggestor_uri);

       }
       addInfoWindow( gMap, infoHtml, marker , 'suggestion');
       gMarkerList['suggestion'].push(marker);
     }
   }, "json");
}


function loadGeoRSS( mapId){
  $.post("getBlogPosts.php", { map_id: mapId },
   function(data){
     var markerList = data.blogPosts;
     //Create points for all markers in the results
     for( iMarker = 0; iMarker < markerList.length; iMarker++){
        var marker = makeBlogpostMarker( gMap, markerList[iMarker].lat, markerList[iMarker].lng, markerList[iMarker].title );
        var windowHtml = makeBlogpostInfoWindow ( markerList[iMarker].title, 
						markerList[iMarker].link, 
						markerList[iMarker].pubDate );
        addInfoWindow( gMap, windowHtml, marker , 'blogpost');
        gMarkerList['blogpost'].push(marker);
     }
   }, "json");
}
