/**************************************************
* NOTES:
*    All JS strings are sent to gettext function for translation.
*    Strings in the [strings] array can be edited as needed.  All other
*    JS strings can not be edited.
*
*    For staging and production deployment...
*    1) stylize CSS and HTML as needed
*    2) edit the following JS variables:
*    - dataURL: endpoint of full marker list XML feed
*    - dataDetailsBaseURL: base endpoint of for action details XML feed
*    - detailsBaseURL: base URL for action details page
*    - imagesBaseURL: base URL for map icon images
*    3) search for 'todo' in this file and follow relevant instructions
*
**/

jQuery(function($){
	var currentURL = 'http://'+window.location.host;
	var currentLang = Drupal.settings['i18n'];

	if ( (currentLang != 'en') && (typeof currentLang != 'undefined') ) {
		var langPrefix = '/'+ currentLang;
	}	else {
		langPrefix = '';
	}
	// var dataURL = '/sites/all/files/xml/markers.xml?' + createRandomLowerCaseLetter();
	var dataDetailsBaseURL = '/o24/map/ajax/getdetails/';
	var detailsBaseURL = '/node/';
	var imagesBaseURL = '/sites/all/modules/custom/project350_oct24/hivemap/images/';
	var mapURL = currentURL+langPrefix+'/map';
	var actionType = $('#actions_type').val()+'/';
	var embedURL = currentURL + langPrefix + '/embed/map/' + actionType;
  
  /**************************************************
   * JS strings to translate.  Strings can be modified but DO NOT reorder. */
  var strings = [
    Drupal.t('Location'),             // infoWindow tab header
    Drupal.t('Info'),                 // infoWindow tab header
    Drupal.t('zoom here'),            // infoWindow text
    Drupal.t('go to event page'),     // infowWindow text
    //Drupal.t('actions not shown'),    // marker list text
    Drupal.t('Thousands of actions not shown in this list'),    // marker list text
    //Drupal.t('Zoom in on the map'),   // marker list text
    Drupal.t('zoom in on the map and this list will change'),   // marker list text
    Drupal.t('Actions'),              // marker list text
    //Drupal.t('Search by City, Country, Continent, or Zip'),  // search bar default text
	Drupal.t('Postal Code, City, State/Region, or Country'),  // search bar default text
    Drupal.t('Loading'),
    Drupal.t('View Actions at 350.org')
  ];
  
/**************************************************
 * Additional JS strings to translate.  Can not be modified.

 [hivemap.js]
 - 'Failed loading data.',           // loading error
 - 'Unable to find this location.'   // map search error
 
 **************************************************
 * Additional strings to translate in HTML..
          
 [mapPanel]
 - Map of Actions
 - Search
 - Zoom
 - World
 - Africa
 - Asia
 - Europe
 - North America
 - South America
 - Oceania
 
 [listPanel]
 - Action Name
 - City
 - Country
 
 **/

var map = null;
var embedded = false;

var zoomRegions = {
  world: {zoom:1, lat:25.8, lon:13.359},
  africa: {zoom:2, lat:9.796, lon:23.203},
  asia: {zoom:2, lat:29.228, lon:78.398},
  europe: {zoom:3, lat:50.513, lon:13.535},
  northamerica: {zoom:2, lat:49.382, lon:-101.25},
  oceania: {zoom:2, lat:-28.921, lon:140.273},
  southamerica: {zoom:2, lat:-20.303, lon:-62.578}
};

function gettext(str) {
  return str;
}

function initMap(map){
  map.options.showLoading(map);
  map.map.setCenter(new GLatLng(map.options.defaultCenter.lat, map.options.defaultCenter.lon), map.options.defaultZoom);
  map.map.setUIToDefault();
  map.map.disableScrollWheelZoom();
  map.map.setMapType(G_NORMAL_MAP); 
}

function getDetailsURL(data) {
  var actionLangPrefix = getLangPref(data.lang);
  return actionLangPrefix+detailsBaseURL+data.id;
}

function getLinkTarget() {
  return (embedded) ? '_blank' : '_self';
}

function showInfo(map, marker) {
  if (!marker.data.address)
    marker.data.address = marker.data.desc = gettext(strings[8])+'...';
  var locTab = new GInfoWindowTab(gettext(strings[0]), getLocTabHtml(marker.data));
  var infoTab = new GInfoWindowTab(gettext(strings[1]), getInfoTabHtml(marker.data));
  setTimeout(function(){loadDetails(marker.data.id, locTab, infoTab);}, 0);
  map.map.openInfoWindowTabs(marker.getLatLng(), [locTab, infoTab]);
}

function loadDetails(id, locTab, infoTab) {
  $.ajax({url: dataDetailsBaseURL+id, type: 'GET', dataType: 'xml',
    success: function(data) {
      var data = SOCIALHIVE.utils.xml2js(data, 'xml')[0];
      if (data.id != id)
        return;
      locTab.contentElem.innerHTML = getLocTabHtml(data);
      infoTab.contentElem.innerHTML = getInfoTabHtml(data);
    }
  });
}

function mapZoom(zoom, lat, lon) {
  map.zoom(zoom, lat, lon);
  return false;
}

function getLangPref(langCode){
  if(!langCode){
 	lang_pref = '';
 	return lang_pref;
} else {
  lang_pref = '/'+ langCode;
  return lang_pref;
}
}

function getLocTabHtml(data) { 
  return '<div id="infoTabLocation"><div class="title">'+data.title+'</div><div class="address">'+data.address+'</div><div class="nav"><a href="#" onclick="return CUSTOMMAP.mapZoom(14,'+data.lat+','+data.lon+');">'+gettext(strings[2])+'</a><a target="'+getLinkTarget()+'" href="'+getDetailsURL(data)+'">'+gettext(strings[3])+'</a></div></div>';
}

function getInfoTabHtml(data) {
  return '<div id="infoTabInfo"><div class="desc">'+data.desc+'</div><div class="nav"><a target="'+getLinkTarget()+'" href="'+getDetailsURL(data)+'">'+gettext(strings[3])+'</a></div></div>';
}

var listCnt = 0;

function initList(map, list, max) {
  listCnt = 0;
$('#actionsCount')[0].innerHTML = gettext(strings[6])+'('+list.length+')';
}

function getListItemHTML(map, marker) {
  listCnt++;
  return '<div class="row row'+(listCnt%2)+'"><div class="title"><a target="'+getLinkTarget()+'" href="'+getDetailsURL(marker.data)+'">'+marker.data.title+'</a></div><div class="city">'+marker.data.city+'</div><div class="country">'+ISO3166.codes[marker.data.cntry]+'</div><div class="clear"></div></div>';
}
function getMoreListItemsHTML(map, count, list) {
  //return '<div class="footer">'+(list.length-count)+' '+gettext(strings[4])+'. <a href="#mapPanel">'+gettext(strings[5])+'.</a></div>';
  return '<div class="footer">'+gettext(strings[4])+' -- <a href="#mapPanel">'+gettext(strings[5])+'</a>.</div>';
}

function updateEmbedCode() {
  var history = ($('#mapEmbedOptionsZoom')[0].checked) ? '#'+map.getLinkQuery() : '';
  if (history.length <= 2) {
    history = '';
}
  $('#mapEmbedCode')[0].value = '<iframe width="100%" height="550" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="'+embedURL+history+'"></iframe><br /><small><a href="'+mapURL+'">'+strings[9]+'</a></small>';
}

function embedCodeClick() {
  updateEmbedCode();
  $('#mapEmbedCode')[0].select();
  $('#mapEmbedOptions').show('normal');
}
    
function init() {
	
	if (document.getElementById('mapSearch')) {  

    $('#mapSearch')[0].value = strings[7];
    $('#mapSearch').click(function(){
      if (this.value == strings[7])
        this.value = '';
    });
    $('#mapSearchForm').submit(function(){
      map.search(this.search.value);
      return false;
    });
	
	}
    $('#mapZoomPanel a').click(function(){
      var z = zoomRegions[this.rel];
      map.zoom(z.zoom, z.lat, z.lon);
    });
    var query = SOCIALHIVE.utils.queryString2Obj();
    if (query.query) {
      query.query = unescape(query.query);
      $('#mapSearch')[0].value = query.query;
      map.search(query.query);
    }
}

	
/*
  function init() {
	if (document.getElementById('mapSearch')) {  
	  $('#mapSearch')[0].value = strings[7];
		$('#mapSearch').click(function(){
		  if (this.value == strings[7])
			this.value = '';
		});
		$('#mapSearchForm').submit(function(){
		  map.search(this.search.value);
		  return false;
		});
	}
    $('#mapZoomPanel a').click(function(){
      var z = zoomRegions[this.rel];
      map.zoom(z.zoom, z.lat, z.lon);
    });
  }  */
    
	
  function createMap(mapElem) {
    map = SOCIALHIVE.map.createMap(mapElem, {
      enableHistory: true,
      historyName: 'map',
      imagesBase: imagesBaseURL,
      defaultZoom: zoomRegions['world'].zoom,
      defaultCenter: {lat:zoomRegions['world'].lat, lon:zoomRegions['world'].lon},
      dataFeed: dataURL,
      dataType: 'xml', 
      listDiv: 'markerList', 
      onMarkerClick: showInfo,
      onMapInit: initMap,
      onListInit: initList,
      listItemHTML: getListItemHTML, 
      moreListItemsHTML: getMoreListItemsHTML, 
      gettext: gettext,
      maxMarkers: 10000,
      maxListSize: 35
    });
    init();
    // updateEmbedCode();
    return map;  
  }
   
  function createEmbedMap(mapElem) {
    embedded = true;
    map = SOCIALHIVE.map.createMap(mapElem, {
      historyName: 'map',
      imagesBase: imagesBaseURL,
      defaultZoom: zoomRegions['world'].zoom,
      defaultCenter: {lat:zoomRegions['world'].lat, lon:zoomRegions['world'].lon},
      dataFeed: dataURL,
      dataType: 'xml', 
      onMarkerClick: showInfo,
      gettext: gettext,
      maxMarkers: 10000
    });
    init();
    return map;  
  }
    
  if (!window.CUSTOMMAP)
	window.CUSTOMMAP = {};
	window.CUSTOMMAP.createMap = createMap;
	window.CUSTOMMAP.createEmbedMap = createEmbedMap;
	window.CUSTOMMAP.mapZoom = mapZoom;
	window.CUSTOMMAP.embedCodeClick = embedCodeClick;
	window.CUSTOMMAP.updateEmbedCode = updateEmbedCode;
});


function createRandomLowerCaseLetter()
{
   return String.fromCharCode(97 + Math.round(Math.random() * 25));
}
