/*
 * Dealer Locator Tools
 * Requires jQuery, google maps api, innerXHTML
 */

var locator = (function(jQuery) {

     if (!jQuery) {
          alert("jQuery is not loaded yet!");
          return null;
     }

     return {
          // geocoder : null,          // google goecoder instance
          url : null,                    // search request url
          geoUrl : null,               // Yahoo geocode url
          communityUrl : null,     // community url
          mapReady : false,          // flash ready flag
          currentDealer : null,     // current dealer
          currentLat : null,          // track last lat for filter changes
          currentLng : null,          // track last lng for filter changes

          // locator initializations called from jQuery(document).ready 
          // at the end of the file
          init : function() {
               // register initializations here

               // locator.geocoder = new google.maps.Geocoder();
               
               jQuery("#locator-nav .dealer").live('click', function() {
                    jQuery("#locator-nav .dealer").removeClass('selected');
                    jQuery(this).addClass('selected');
                    
                    thisIndex = jQuery(this).index();
                    locator.currentDealer = thisIndex;
                    
                    if (locator.mapReady) {
                         locator.dealerSelected(thisIndex-1);
                    }
               });
          },

          geoCode : function(address, radius, filter) {
               //alert('addr' + address + ' ' + radius + ' ' + filter);
               if (address) {
            	    
                    jQuery.getJSON(locator.geoUrl, { location: address }, function(data) {
                         
                         if (data.results !== undefined) {
                              
                              if (data.results.length > 1) {
                                   
                                   jQuery('#dialogcontainer > ul').empty();
                                   
                                   jQuery(data.results).each(function() {
                                        jQuery('#dialogcontainer > ul').append(
                                             '<li lat="' + this.lat + '" lng="' + this.lng + '" country="' + this.countrycode + '"><span>' + this.address + '</span><em></em></li>');
                                   });

                                   jQuery('#dialogcontainer ul li').click(function() {
                                        jQuery('#dialogcontainer > ul').empty();
                                        locator.getDealers(jQuery(this).attr('lat'), jQuery(this).attr('lng'), jQuery(this).attr('countrycode'), radius, filter);
                                        locator.currentLat = jQuery(this).attr('lat');
                                        locator.currentLng = jQuery(this).attr('lng');
                                        app.dialog.close();
                                   });

                                   app.dialog.hopUp("Select Your Region","geocode-results", {outerWidth : 550, outerHeight : 300 });

                              } else {
                                   var countyCd = data.results[0].countrycode;
                                   //var countyCd = (results[0].address_components[4] !== undefined) ? results[0].address_components[4].short_name : '';
                                   //alert("x" + results[0].address_components[0]+"x" + results[0].address_components[0].short_name+"x" + results[0].address_components[2].short_name+"x" + results[0].address_components[3].short_name+"x" );
                                   locator.getDealers(data.results[0].lat, data.results[0].lng, countyCd, radius, filter);
                                   locator.currentLat = data.results[0].lat;
                                   locator.currentLng = data.results[0].lng;
                              }

                         } else {
                              // alert("Locator was not successful for the following reason: " + status);
                              jQuery('#geoaddress').val('No results found');
                         }
                    });
               } else {
                    alert('Address please');
               }
          },

          getDealers : function(lat, lng, country, radius, filter) {
               var requestUrl = locator.url;
               requestUrl = app.util.appendParamToURL(requestUrl, 'lat', lat);
               requestUrl = app.util.appendParamToURL(requestUrl, 'lng', lng);
               requestUrl = app.util.appendParamToURL(requestUrl, 'country', country);
               requestUrl = app.util.appendParamToURL(requestUrl, 'radius', radius);
               requestUrl = app.util.appendParamToURL(requestUrl, 'filter', filter);
               if ( filter == '99')
               {
            	   requestUrl = app.util.appendParamToURL(requestUrl, 'q', 'flagships');
               }
               var errorCheck = /Success: false/gi;
               var result = jQuery.get(
                    requestUrl,
                    function(data) {
                         if (!errorCheck.test(data)) {
                              jQuery("#dealers").html(data).scrollTo(0,0);
                              jQuery("#dealers").find('.dealer:first').addClass('selected');
                              locator.setDealers();
                              
                              var tooltipSettings = {
            						  	delay: 500, 
            						  	top: 20,
            						  	left: -10,
            						    bodyHandler: function() {
            						    	var thisTooltipRel = jQuery(this).attr('rel');
            								return jQuery(".tooltip-" + thisTooltipRel).html();
            						    }
            						};
                              jQuery("#dealers .services .tooltip").tooltip(tooltipSettings);
                              
                              jQuery('.adr').each(function() { 
                            
                              if (navigator.userAgent.match(/Mobile/gi))
                              {
                            	  
	                        	  var orig = jQuery(this).html(); 
	                        	  var address = jQuery(this).children('.street-address').html();
	                        	  address += jQuery(this).children('.locality').html();
	                        	  address += jQuery(this).children('.region').html();
	                        	  address += jQuery(this).children('.postal-code').html();
	
	
	                        	  orig = "<a href='http://maps.google.com?q=" + address + "'>" + orig + "</a>";
	                        	  log(orig);
	                        	  jQuery(this).html(orig);
                              }
                              });
                              
                              // set the radius
                              var sradius = parseInt( jQuery('.radius').html(), 10); 
                              
                              if (sradius < 100)
                          {
                                   sradius += 25;
                          }
                          else if (sradius < 300)
                          {
                               sradius += 50;
                          }
                          else if (sradius <= 1000)
                          {
                               sradius += 100;
                          }
                          else if (sradius >= 1000)
                          {
                               sradius += 500;
                          }
                              jQuery('#radius').val(sradius);
                              
                         }
                    }
               );
          },
          
          // begin flash data load
          setDealers: function() {
               if (locator.mapReady) {
                    jQuery('#swfContent')[0].SetDealers('locator.dealerCallback');
               }
          },
          
          // map ready, load data
          dealerCallback: function() {
               thisData = innerXHTML(jQuery('#dealers')[0]);
               return thisData; 
          },
          
          FlashReady: function() {
               locator.mapReady = true;
               locator.setDealers();
          },
          
          // select dealer from markup
          dealerSelected: function(i) {               
               if (locator.mapReady) {
               
                    jQuery('#swfContent')[0].DealerSelected(i);
               }
               _gaq.push(['_trackEvent','DealerLocator','Click', jQuery('#dealers .selected .fn').html()] );
               
          },
          
          // select dealer from flash
          selectDealerFromFlash: function(i) {
               jQuery("#locator-nav .dealer").removeClass('selected');
               jQuery('#dealers').find('.dealer').eq(i).addClass('selected');
               jQuery('#dealers').scrollTo(jQuery('#dealers').find('.dealer').eq(i), 500);
          },
          
          CommunityProfileClicked: function(username) {
               // modal window for updates
               // app.dialog.open(app.util.appendParamToURL(locator.communityUrl, 'nid', id), 'Burton Flagship Store', 'flagship-overlay', {innerHeight: 600,innerWidth: 840, outerHeight: 600, outerWidth: 840});
               if (username !== undefined) {
                    window.open("http://burton.kontain.com/" + username.replace(' ','-') + "/");
               }
          }
     };
}(jQuery));

// application initialization on dom ready
jQuery(document).ready(function() {
     locator.init();
});
