/** * Search */ var Search = new Class({ Implements: [ Events , Options ], mockdata: { use: false, results_file: '/media/json/mockdata-results.json' }, first_time: true, quick_search: '', initialize: function( options ) { $.extend( this , options.element ); this._parent = options._parent; this.registerClassEvents(); }, mount: function() { this.loading = new Loading( {holder: this, follow_mouse: false} ); this.quick_search = unescape( swfobject.getQueryParamValue('quick-search-keyword').replace('/','').replace(/\+/g,' ') ) || ''; this.bind('submit',function(e){ e.preventDefault(); }); this.fireEvent( 'formChanged' ); }, registerClassEvents: function() { var self = this; self.addEvents({ onFormChanged: function() { // keyword filter if ( !$('#filters-keyword').data( 'selected_item' ) ) { $('input:text' , '#filters-keyword' ).val(''); $('label' , '#filters-keyword' ).show(); } // pagination if(self.pagination_manager ) { $( 'input:radio' , self.pagination_manager.holder_pages ).die('change'); $( 'input:radio' , self.pagination_manager.holder_pages ).val(1); } if (self.quick_search.length) { self.filters_manager._clear(['keyword']); } // serialize form self.serialized_form = self.serializeForm('object'); self.serialized_form['search-keyword-text'] = self.quick_search || ''; self.serialized_form['select-neighborhood'] = self.serialized_form['select-neighborhood'] || $('fieldset#filters-place p.checked').attr('rel') || ''; if (self.quick_search.length) { self.serialized_form['current-page'] = "1"; self.serialized_form['opt-modality'] = ""; self.serialized_form['opt-place'] = "Rio De Janeiro"; self.serialized_form['place-near-address'] = ""; self.serialized_form['place-near-lat'] = ""; self.serialized_form['place-near-lng'] = ""; self.serialized_form['select-neighborhood'] = ""; self.serialized_form['select-specialty'] = ""; } // send self.sendForm( JSON.stringify( self.serialized_form ) ); }, onDataLoaded: function( data ) { self.data = data; if( self.filters_manager ) { self.filters_manager.fireEvent( 'filtersDataLoaded' , data ); } if( self.providers_manager ) { self.providers_manager.fireEvent( 'providersDataLoaded' , data ); } // if( self.map_manager ) { self.map_manager.fireEvent( 'mapDataLoaded' , data ); } if( self.pagination_manager ) { self.pagination_manager.fireEvent( 'dataLoaded' , data ); } // how to if( data.providers.length ) { $('#how-to').hide(); $( '.droapps-ui-customselect' ).corner( '6px' ); if( !$.browser.msie ) { $( '.pages-nav' ).corner( '6px' ); } } else { $('#how-to').show(); if( self.first_time ) { self.first_time = false; } else { $('#how-to .results-error').fadeIn().cornerz( { radius : 6, background : '#f8f8e9' } ); } } }, onProvidersAppended: function() { if( this.favorites_manager ) this.favorites_manager.updateSaveButtons(); self._parent.fireEvent('providersAppend'); }, onProvidersNil: function(){ self._parent.fireEvent('providersNil'); }, onPageChanged: function() { self.serialized_form = self.serializeForm('object'); self.sendForm( self.serializeForm('json') ); } }); }, sendForm: function( serialized_form ) { var self = this; var url_to_send = self.attr('action'); self.loading.start(); $('fieldset#filters-specialty p.checked').attr('rel') serialized_form['select-specialty'] = serialized_form['select-specialty'] || $('fieldset#filters-specialty p.checked').attr('rel') || ''; /*try { console.info(serialized_form); } catch(e){}*/ $.ajax({ global : false, type : self.mockdata.use ? 'get' : 'post', url : self.mockdata.use ? self.mockdata.results_file : url_to_send, data : self.mockdata.use ? null : serialized_form, contentType : 'application/json', beforeSend : function() { self.loading.start(); }, error : function( e ) { self.fireEvent( 'error' ); }, success : function( data ) { self.fireEvent( 'dataLoaded' , data ); self.loading.stop(); } }); }, setProvidersManager : function( options ) { this.providers_manager = new ProvidersManager( options ); }, setFiltersManager : function( options ) { this.filters_manager = new FiltersManager( options ); }, // setMapManager : function( options ) { this.map_manager = new MapManager( options ); }, setPaginationManager: function( options ) { this.pagination_manager = new PaginationManager( options ); }, setFavoritesManager : function( options ) { this.favorites_manager = new FavoritesManager( options ); }, serializeForm: function( serialization_method ) { var self = this; var serialized_form; var method = serialization_method; var querystring = window.location.search .replace('?', '') .replace('(', '') .replace(')', '') .replace('%20', ''); if (querystring.indexOf('group') !== -1) { var info = querystring.split('=')[1].split(','); return { "opt-modality":info[0], "place-near-lat":info[1], "place-near-lng":info[2], "place-near-radius":"0.00000000000001", "results-limit":"500", "current-page":"1" }; } switch( method ) { case 'querystring' : serialized_form = self.serialize(); break; case 'object' : serialized_form = self.serializeObject(); break; case 'json' : serialized_form = JSON.stringify( self.serializeObject() ); break; default : serialized_form = JSON.stringify( self.serializeObject() ); break; } return serialized_form; } });