1 (function($){
  2 	'use strict';		
  3 	
  4 	/** 
  5 	* autocomplete control
  6 	* @type {Object} 
  7 	* @name Autocomplete
  8     * @class autocomplete Control
  9     * @memberOf jQuery.fn.jplist.controls
 10 	*/
 11 	jQuery.fn.jplist.controls.Autocomplete = {};
 12 	
 13 	/**
 14 	* render control html
 15 	* @param {jQuery.fn.jplist.view.PanelControl} control
 16 	* @memberOf jQuery.fn.jplist.controls.Autocomplete
 17 	*/
 18 	jQuery.fn.jplist.controls.Autocomplete.render = function(control){
 19 		
 20 		var autocomplete
 21 			,zoom
 22 			,options = {};
 23 			
 24 		if(control.controlTypeOptions){
 25 			options = control.controlTypeOptions;
 26 		}
 27 		
 28 		//init autocomplete
 29 		autocomplete = new google.maps.places.Autocomplete(control.$control.get(0), options);
 30 		
 31 		//init zoom
 32 		zoom = Number(control.$control.attr('data-zoom'));
 33 		
 34 		if(isNaN(zoom)){
 35 			zoom = 17;
 36 		}
 37 				
 38 		//add data
 39 		control.$control.data('jplist-autocomplete', autocomplete);
 40 		control.$control.data('jplist-autocomplete-zoom', zoom);
 41 	};
 42 	
 43 	/**
 44 	* init events
 45 	* @param {jQuery.fn.jplist.view.PanelControl} control
 46 	* @memberOf jQuery.fn.jplist.controls.Autocomplete
 47 	*/
 48 	jQuery.fn.jplist.controls.Autocomplete.initEvents = function(control){
 49 	
 50 		var autocomplete
 51 			,listenerHandle = control.$control.data('jplist-handle');
 52 				
 53 		//get autocomplete
 54 		autocomplete = control.$control.data('jplist-autocomplete');
 55 				
 56 		//remove listener
 57 		if(listenerHandle){
 58 			google.maps.event.removeListener(listenerHandle);
 59 		}
 60 		
 61 		//add listener
 62 		listenerHandle = google.maps.event.addListener(autocomplete, 'place_changed', function(){
 63 			
 64 			var place
 65 				,lat
 66 				,lng;
 67 			
 68 			//get choosen place
 69 			place = autocomplete.getPlace();
 70 						
 71 			//set latitude and longitude
 72 			if(place.geometry){
 73 			
 74 				lat = place.geometry.location['lat']();
 75 				lng = place.geometry.location['lng']();
 76 				
 77 				control.$control.attr('data-latitude', lat);
 78 				control.$control.attr('data-longitude', lng);
 79 				control.$control.attr('data-name', place.name);
 80 									
 81 				//trigger jump to map event
 82 				control.$jplistBox.trigger('jumpEvent', [lat, lng, control.$control.data('jplist-autocomplete-zoom')]);
 83 			}
 84 			
 85 			//send panel redraw event
 86 			control.$jplistBox.trigger(control.options.force_ask_event, [false]);
 87 			
 88 		});
 89 		
 90 		control.$control.off('keyup').on('keyup', function(e){	
 91 
 92 			var val;
 93 			
 94 			//get val
 95 			val = $.trim($(this).val());
 96 			
 97 			if(val === ''){
 98 				
 99 				control.$control.attr('data-latitude', '');
100 				control.$control.attr('data-longitude', '');
101 							
102 				//send panel redraw event
103 				control.$jplistBox.trigger(control.options.force_ask_event, [false]);
104 			}
105 		});
106 		
107 		//save handler
108 		control.$control.data('jplist-handle', listenerHandle);
109 	};
110 
111     /**
112 	* Set control status
113 	* @param {jQuery.fn.jplist.models.Status} status
114 	* @param {jQuery.fn.jplist.view.PanelControl} control
115 	* @param {boolean} isCookie - is status restored from cookies
116 	* @memberOf jQuery.fn.jplist.controls.Autocomplete
117 	*/
118 	jQuery.fn.jplist.controls.Autocomplete.setStatus = function(status, control, isCookie){
119 
120         //console.log(status.data);
121 	};
122 
123 	/**
124 	* get current control status
125 	* @param {boolean} isDefault - if true, get default (initial) control status; else - get current control status
126 	* @param {jQuery.fn.jplist.view.PanelControl} control
127 	* @return {jQuery.fn.jplist.models.Status}
128 	* @memberOf jQuery.fn.jplist.controls.Autocomplete
129 	*/
130 	jQuery.fn.jplist.controls.Autocomplete.getStatus = function(isDefault, control){
131 		
132 		var status = null
133 			,latitude
134 			,longitude
135 			,data;
136 
137         //get attributes
138 		latitude = control.$control.attr('data-latitude');
139 		longitude = control.$control.attr('data-longitude');
140 
141         data = {
142             name: control.$control.attr('data-name')
143 			,radius: control.$control.attr('data-radius')
144             ,filterType: 'autocomplete'
145         };
146 
147         if(isDefault){
148 
149             data.latitude = '';
150             data.longitude = '';
151 
152             status = new jQuery.fn.jplist.models.Status(control.name, control.action, control.type, data, true);
153         }
154         else{
155             if($.isNumeric(latitude) && $.isNumeric(longitude)){
156 
157                 data.latitude = latitude;
158                 data.longitude = longitude;
159                 status = new jQuery.fn.jplist.models.Status(control.name, control.action, control.type, data, true);
160             }
161         }
162 
163 		return status;		
164 	};
165 	
166 	
167 })(jQuery);
168 
169