/*
	Fixed and customized by Mutado,
	apr '11
*/
var debug = false;
var zoomMarkerInfo = 18;
var map;
var geocoder;
var storeNamePlaceMark = 'Choose stores by name';

var theIcon = new GIcon(G_DEFAULT_ICON);
theIcon.image = sl_map_end_icon;
theIcon.printImage = sl_map_end_icon;
theIcon.mozPrintImage = sl_map_end_icon;

theIcon.shadow = "/icons/google_shadow.png";
theIcon.shadowSize = new GSize(0, 0);
theIcon.printShadow = "/icons/google_shadow.png";

theIcon.iconSize = new GSize(45, 33);

function log(string){
	if(debug){
		console.info(string);
	}
}


/**************************************
*/
function sl_load() {
	log('sl_load');
	if (GBrowserIsCompatible()) {
        geocoder = new GClientGeocoder();
        map = new GMap2(document.getElementById('map'));


        if (sl_map_overview_control==1) {
            map.addControl(new GOverviewMapControl());
        }
        map.addMapType(G_PHYSICAL_MAP);
        geocoder.getLatLng(sl_google_map_country, 
            function(latlng) {
                map.setCenter(latlng, sl_zoom_level, sl_map_type);
                map.setUIToDefault();
            }
        );
       
       
	}
  
    if (sl_load_locations_default=="1") {
    	log( 'sl_load_locations_default = 1' );
        var bounds = new GLatLngBounds();
        markerOpts = { icon:theIcon };
        GDownloadUrl(add_base + "/data-xml.php",
            function(data, responseCode) {
                var xml = GXml.parse(data);
                var markers = xml.documentElement.getElementsByTagName("marker");
                for (var i = 0; i < markers.length; i++) {
                	var count = i + 1;
                    var name = markers[i].getAttribute('name');
                    var address = markers[i].getAttribute('address');
                    var distance = parseFloat(markers[i].getAttribute('distance'));
                    var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                    parseFloat(markers[i].getAttribute('lng')));
                    var description = markers[i].getAttribute('description');
                    var url = markers[i].getAttribute('url');
                    var hours = markers[i].getAttribute('hours');
                    var phone = markers[i].getAttribute('phone');
                    var image = markers[i].getAttribute('image');
                    var marker = createMarker(point, name, address, "", description, url, hours, phone, image, count);
                    map.addOverlay(marker);
                    bounds.extend(point);
                }
                map.setCenter(bounds.getCenter(), (map.getBoundsZoomLevel(bounds)-1));
                //map.setUIToDefault();
                
                //submit search form
                $('#radiusSelect option').each(function(){
//                	console.log( $(this).val() );
                	$(this).val('25');
                	
                });
                $('#addressSubmit').click();
                
            }
        );
     }
     
     if (document.getElementById('storeName') != null) {
     	document.getElementById('storeName').value = storeNamePlaceMark;
     	jQuery(document).ready(function() {
	     	jQuery('input#storeName').click(function() {
	     		if (document.getElementById('storeName').value == storeNamePlaceMark) {
	     			document.getElementById('storeName').value = '';
	     		}
	     	});
	     	jQuery('input#storeName').blur(function() {
	     		if (document.getElementById('storeName').value == '') {
	     			document.getElementById('storeName').value = storeNamePlaceMark;
	     		}
	     	});
     	});     	
     }
}


/**************************************
 */
function searchLocations() {
	log('searchLocations()');
    var address = document.getElementById('addressInput').value;
    
    geocoder.getLatLng(address, 
        function(latlng) {
            if (!latlng) {
                //alert(address + ' not found');
            } else {
                searchLocationsNear(latlng, address); 
            }
        }
    );
    
    jQuery('#map_box_image').hide();
    jQuery('#map_box_map').show();
    map.checkResize();
}


/**************************************
 */
function searchLocationsNear(center, homeAddress) {
    var radius  = document.getElementById('radiusSelect').value;
    var taglist = '';
    var storeName = '';
    var storeType = '';
    if (document.getElementById('tag_to_search_for') != null) {     
    	taglist = document.getElementById('tag_to_search_for').value;
    }
    if (document.getElementById('storeName') != null && document.getElementById('storeName').value != storeNamePlaceMark) {
    	storeName = document.getElementById('storeName').value;
    }
    if (document.getElementById('storeType') != null && document.getElementById('storeType').value != '') {
    	storeType = document.getElementById('storeType').value;
    }
    
    var searchUrl = add_base + '/generate-xml.php?' + 
    	'lat='     		+ center.lat() + 
    	'&lng='    		+ center.lng() + 
    	'&radius=' 		+ radius +
    	'&tags='   		+ taglist +
    	'&storeName='	+ storeName +
    	'&storeType='	+ storeType
    	;
    	
    GDownloadUrl(searchUrl, 
        function(data) {
            var xml = GXml.parse(data);
            var markers = xml.documentElement.getElementsByTagName('marker');
            map.clearOverlays();
   
    /*
        var theIcon = new GIcon(G_DEFAULT_ICON);
            theIcon.image = sl_map_home_icon;
            if (sl_map_home_icon.indexOf('flag')!='-1') {
                theIcon.shadow = add_base + "/icons/flag_shadow.png";
            } else if (sl_map_home_icon.indexOf('arrow')!='-1') {
                theIcon.shadow = add_base + "/icons/arrow_shadow.png";
            } else if (sl_map_home_icon.indexOf('bubble')!='-1') {
                theIcon.shadow = add_base + "/icons/bubble_shadow.png";
            } else if (sl_map_home_icon.indexOf('marker')!='-1') {
                theIcon.shadow = add_base + "/icons/marker_shadow.png";
            } else if (sl_map_home_icon.indexOf('sign')!='-1') {
                theIcon.shadow = add_base + "/icons/sign_shadow.png";
            } else {
                theIcon.shadow = add_base + "/icons/blank.png";
            }
            theIcon.iconSize = new GSize(sl_map_home_icon_width, sl_map_home_icon_height);
*/

            var bounds = new GLatLngBounds(); 
            markerOpts = { icon:theIcon };
            point = new GLatLng (center.lat(), center.lng());
            bounds.extend(point); 
/*
            var homeMarker = new LabeledMarker(point, markerOpts);
            var html = '<div id="sl_info_bubble"><span class="your_location_label">Your Location:</span> <br/>' + homeAddress + '</div>';
            GEvent.addListener(homeMarker, 'click', function() {
                homeMarker.openInfoWindowHtml(html);
                }
            );
            map.addOverlay(homeMarker);
*/

            var sidebar = document.getElementById('map_sidebar_content');
            sidebar.innerHTML = '';
            
            if (markers.length == 0) {
                sidebar.innerHTML = '<h2>No results found.</h2>';
                geocoder = new GClientGeocoder();
                geocoder.getLatLng(sl_google_map_country, 
                    function(latlng) {
                        map.setCenter(point, sl_zoom_level);
                    }
                );
                return;
            }
   
            for (var i = 0; i < markers.length; i++) {
            	var count = i+1;
                var name = markers[i].getAttribute('name');
                var address = markers[i].getAttribute('address');
                var distance = parseFloat(markers[i].getAttribute('distance'));
                var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                        parseFloat(markers[i].getAttribute('lng')));
                var description = markers[i].getAttribute('description');
                var url = markers[i].getAttribute('url');
                var hours = markers[i].getAttribute('hours');
                var phone = markers[i].getAttribute('phone');
                var image = markers[i].getAttribute('image');                
                var marker = createMarker(point, name, address, homeAddress, description, url, hours, phone, image, count); 
                        map.addOverlay(marker);
                var sidebarEntry = createSidebarEntry(marker, name, address, distance, homeAddress, url, phone, description, hours, count); 
                sidebar.appendChild(sidebarEntry);
                bounds.extend(point);
                
            }
          map.setCenter(bounds.getCenter(), (map.getBoundsZoomLevel(bounds)-1) ); 
          log('map.setCenter in searchLocationsNear() with zoom ' + (map.getBoundsZoomLevel(bounds)-1));
          
          createDragBar();
          customizeMyMap(map);
        }
    );  
}

function customizeMyMap(map){
  var customUI = map.getDefaultUI();
  customUI.maptypes.normal = false;
  customUI.maptypes.satellite  = false;
  customUI.maptypes.hybrid  = true;
  customUI.maptypes.physical   = false;
  map.setUI(customUI);
  map.disableScrollWheelZoom();
}
/**************************************
 */
function createMarker(point, name, address, homeAddress, description, url, hours, phone, image, count) { 

  markerOpts = { 
  	icon:theIcon, 
  	labelText:count,
  	labelClass: 'countstore',
  	labelOffset: new GSize(-6, -29) 
  };
  var marker = new LabeledMarker(point, markerOpts);
  
  var more_html="";
  if(url.indexOf("http://")==-1) {url="http://"+url;} 
  if (url.indexOf("http://")!=-1 && url.indexOf(".")!=-1) {more_html+="| <a href='"+url+"' target='_blank' class='storelocatorlink'><nobr>" + sl_website_label +"</nobr></a>"} else {url=""}
  if (image.indexOf(".")!=-1) {more_html+="<br/><img src='"+image+"' class='sl_info_bubble_main_image'>"} else {image=""}
  if (description!="") {more_html+="<br/>"+description+"";} else {description=""}
  if (hours!="") {more_html+="<br/><span class='location_detail_label'>Hours:</span> "+hours;} else {hours=""}
  if (phone!="") {more_html+="<br/><span class='location_detail_label'>Phone:</span> "+phone;} else {phone=""}
  
    var street    = address.split(',')[0]; 
        if (street.split(' ').join('')!=""){
            street+='<br/>';
        }else{
            street="";
        }
    var street2   = address.split(',')[1]; 
        if (street2.split(' ').join('')!=""){
            street2+='<br/>';
        }else{
            street2="";
        }
    var city      = address.split(',')[2]; 
        if (city.split(' ').join('')!=""){
            city+=', ';
        }else{
            city="";
        }
    var state_zip = address.split(',')[3]; 	  
  
  if (homeAddress.split(" ").join("")!="") {
    var html = '<div id="sl_info_bubble"><!--tr><td--><strong>' + name + '</strong><br>' + street + street2 + city + state_zip + '<br/> <a href="http://' + sl_google_map_domain + '/maps?saddr=' + encodeURIComponent(homeAddress) + '&daddr=' + encodeURIComponent(address) + '" target="_blank" class="storelocatorlink">Directions</a> ' + more_html + '<br/><!--/td></tr--></div>'; 
  } else {
    var html = '<div id="sl_info_bubble"><!--tr><td--><strong>' + name + '</strong><br>' + street + street2 + city + state_zip + '<br/> <a href="http://' + sl_google_map_domain + '/maps?q=' + encodeURIComponent(address) + '" target="_blank" class="storelocatorlink">Map</a> ' + more_html + '<!--/td></tr--></div>';
  }
  
  GEvent.addListener(marker, 'click', function() {
  	clickMarker( marker, html );
  });
  return marker;
}

var resultsDisplayed=0;
var bgcol="white";


function clickMarker( marker, html ){
	//marker.openInfoWindowHtml(html);    
    log('click marker');
    map.setCenter( marker.getLatLng() , zoomMarkerInfo );
}


/**************************************
 */
function createSidebarEntry(marker, name, address, distance, homeAddress, url,phone, mail, tags, count) { 
//    document.getElementById('map_sidebar').style.display='block';
      var div = document.createElement('div');
      var street = address.split(',')[0]; 
      var street2 = address.split(',')[1]; 
      var city = address.split(',')[2]; 
        if (city.split(' ').join('')!=""){
            city+='';
        }else{
            city="";
        }
      var state_zip = address.split(',')[3];
      
      linkHtml = ( url.length > 0 ) ? "<p class='linkstore'><a href='http://"+url+"' target='_blank'>" + url +"</a></p>" : '';
      contactHtml = '';
      if( mail.length > 0 || phone.length > 0){
      	mailHtml = ( mail.length > 0 ) ? '<a href="mailto:'+ mail +'" class="mailstore"><img src="/wp-content/themes/default/images/mail_store.png" alt="'+ mail +'"/></a>' : '';
      phoneHtml = ( phone.length > 0 ) ? '<span class="tel">' + phone +'</span>' : '';
      
      	contactHtml += '<p class="contact_row">' + mailHtml + phoneHtml + '</p>';
      }
      
      tagsHtml = ( tags.length > 0 ) ? '<p class="tags">' + tags + '</p>' : '';
      
      var html =    '<div class="searchResultsTable">' +
	   			        '<span class="countstore">' + count + '</span>';
	  if( name.indexOf("iesel") != -1){
	  	html +=       '<img src="/wp-content/themes/default/images/dieselstores/diesel_icon.jpg" class="store_diesel_icon" />';
	  }
	   	  
		  html +=     '<h4>' + name + '</h4>' + linkHtml +
	                    '<p><span class="streetstore">' + street + '</span>, ' + state_zip + ' ' + city +'</p>' +
	                    contactHtml + 
	                    tagsHtml +
                    '</div>';
      
      div.innerHTML = html;
      div.className='results_entry';
      resultsDisplayed++;
      GEvent.addDomListener(div, 'click', function() {
        GEvent.trigger(marker, 'click');
      }); 
    return div;
}

