1 /***************************************************************************
2 * Copyright (C) 2003-2011 Polytechnique.org *
3 * http://opensource.polytechnique.org/ *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the Free Software *
18 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
19 ***************************************************************************/
21 // {{{ Page initialization
23 var baseurl
= $.plURL('search/');
24 var address_types
= new Array('country', 'administrative_area_level_1', 'administrative_area_level_2', 'locality', 'sublocality');
25 var address_types_count
= address_types
.length
;
27 function load_advanced_search(request
)
29 $('.autocomplete_target').hide();
30 $('.autocomplete').show().each(function() {
31 $(this).autocomplete(baseurl
+ 'autocomplete/' + this.name
, {
33 formatItem
: make_format_autocomplete(this),
35 onItemSelect
: select_autocomplete(this.name
),
37 width
: $(this).width()
41 $('.autocomplete').change(function() { $(this).removeClass('hidden_valid'); });
43 if (request
['country']) {
44 $("[name='country']").parent().load(baseurl
+ 'list/country', function() {
45 $("select[name='country']").attr('value', request
['country']);
47 setAddress(0, 1, new Array(request
['country'],
48 request
['administrative_area_level_1'],
49 request
['administrative_area_level_2'],
51 request
['sublocality'])
54 for (var i
= 1; i
< address_types_count
; ++i
) {
55 $('tr#' + address_types
[i
]).hide();
59 $(".autocomplete[name='school_text']").change(function() { changeSchool('', ''); });
60 changeSchool(request
['school'], request
['diploma']);
62 $(".autocomplete_to_select").each(function() {
63 var field_name
= $(this).attr('href');
65 if ($(".autocomplete_target[name='" + field_name
+ "']").val()) {
66 display_list(field_name
);
69 $(this).attr('href', baseurl
+ 'list/' + field_name
).click(function() {
70 if ($(this).attr('title') == 'display') {
71 display_list(field_name
);
73 var value
= $("select[name='" + field_name
+ "']").val();
74 var text_value
= $("select[name='" + field_name
+ "'] option:selected").text();
75 $('#' + field_name
+ '_list').html('');
76 $(".autocomplete[name='" + field_name
+ "_text']").show();
77 $('#' + field_name
+ '_table').attr('title', 'display');
79 $(".autocomplete_target[name='" + field_name
+ "']").val(value
);
80 $(".autocomplete[name='" + field_name
+ "_text']").val(text_value
).addClass('hidden_valid');
88 $('#only_referent').change(function() { changeOnlyReferent(); });
90 $('.delete_address_component').click(function() {
91 var field_name
= $(this).attr('href');
94 for (var i
= 1; i
< address_types_count
; ++i
) {
95 if (field_name
== address_types
[i
]) {
99 delete_address_component(address_types
[i
]);
107 function display_list(field_name
)
109 var value
= $("input.autocomplete_target[name='" + field_name
+ "']").val();
111 $('#' + field_name
+ '_list').load(baseurl
+ 'list/' + field_name
, {}, function(selectBox
) {
112 $(".autocomplete_target[name='" + field_name
+ "']").val('');
113 $(".autocomplete[name='" + field_name
+ "_text']").hide().val('').removeClass('hidden_valid');
114 $("select[name='" + field_name
+ "']").val(value
);
115 $('#' + field_name
+ '_table').attr('title', 'hide');
120 // {{{ Regexps to wipe out from search queries
122 var default_form_values
= [ /&woman=0(&|$)/, /&subscriber=0(&|$)/, /&alive=0(&|$)/, /&egal[12]=[^&]*&promo[12]=(&|$)/g, /&networking_type=0(&|$)/, /&[^&=]+=(&|$)/g ];
124 /** Uses javascript to clean form from all empty fields */
125 function cleanForm(f
)
127 var query
= $(f
).formSerialize();
129 for (var i
in default_form_values
) {
130 var reg
= default_form_values
[i
];
131 if (typeof(reg
) != 'undefined') {
134 query
= query
.replace(reg
, '$1');
135 } while (old_query
!= query
);
138 query
= query
.replace(/^&*(.*)&*$/, '$1');
139 if (query
== 'rechercher=Chercher') {
140 alert("Aucun critère n'a été spécifié.");
143 document
.location
= baseurl
+ 'adv?' + query
;
148 // {{{ Autocomplete related functions.
150 // display an autocomplete row : blabla (nb of found matches)
151 function make_format_autocomplete(block
)
153 return function(row
) {
154 regexp
= new RegExp('(' + RegExp
.escape(block
.value
) + ')', 'i');
155 name
= row
[0].htmlEntities().replace(regexp
, '<strong>$1<\/strong>');
157 if (row
[1] === '-1') {
160 if (row
[1] === '-2') {
161 return '<em>aucun camarade trouvé pour '+row
[0].htmlEntities()+'<\/em>';
164 mate
= (row
[1] > 1) ? 'camarades' : 'camarade';
165 return name
+ '<em> - ' + row
[1].htmlEntities() + ' ' + mate
+ '<\/em>';
169 function cancel_autocomplete(field
, realfield
)
171 $(".autocomplete[name='" + field
+ "']").removeClass('hidden_valid').val('').focus();
172 if (typeof(realfield
) != 'undefined') {
173 $(".autocomplete_target[name='" + realfield
+ "']").val('');
178 // when choosing autocomplete from list, must validate
179 function select_autocomplete(name
)
181 var field_name
= name
.replace(/_text$/, '');
183 // just display field as valid if field is not a text field for a list
184 if (field_name
== name
) {
186 $(".autocomplete[name='" + name
+ "']").addClass('hidden_valid');
190 // When changing country, locality or school, open next address component.
191 if (field_name
== 'country' || field_name
== 'locality' || field_name
== 'school') {
193 if (i
.extra
[0] < 0) {
194 cancel_autocomplete(name
, field_name
);
198 if (field_name
== 'school') {
199 changeSchool(i
.extra
[1], '');
201 changeAddressComponents(field_name
, i
.extra
[1]);
204 $(".autocomplete_target[name='" + field_name
+ "']").attr('value', i
.extra
[1]);
205 $(".autocomplete[name='" + name
+ "']").addClass('hidden_valid');
209 // change field in list and display text field as valid
211 if (i
.extra
[0] < 0) {
212 cancel_autocomplete(this.field
, field_name
);
216 $(".autocomplete_target[name='" + field_name
+ "']").attr('value', i
.extra
[1]);
217 $(".autocomplete[name='" + name
+ "']").addClass('hidden_valid');
222 // {{{ Various search functions.
224 function setAddress(i
, j
, values
)
226 var prev_type
= address_types
[i
];
227 var next_type
= address_types
[j
];
228 var next_list
= next_type
+ '_list';
231 $('tr#locality_text').hide()
232 $("select[name='locality_text']").attr('value', '');
235 $('#' + next_list
).load(baseurl
+ 'list/' + next_type
, { previous
:prev_type
, value
:values
[i
] }, function() {
236 if ($("select[name='" + next_type
+ "']").children("option").size() > 1) {
237 $("tr#" + next_type
).show();
238 $("select[name='" + next_type
+ "']").attr('value', values
[j
]);
239 if (j
< address_types_count
) {
240 setAddress(j
, j
+ 1, values
);
243 $("tr#" + next_type
).hide();
244 $("select[name='" + next_type
+ "']").attr('value', '');
245 if (j
< address_types_count
) {
246 setAddress(i
, j
+ 1, values
);
252 function displayNextAddressComponent(i
, j
, value
)
254 var prev_type
= address_types
[i
];
255 var next_type
= address_types
[j
];
256 var next_list
= next_type
+ '_list';
258 if (next_type
== 'locality') {
259 $('tr#locality_text').hide();
260 $("select[name='locality_text']").attr('value', '');
263 $('#' + next_list
).load(baseurl
+ 'list/' + next_type
, { previous
:prev_type
, value
:value
}, function() {
264 $("select[name='" + next_type
+ "']").attr('value', '');
265 if ($("select[name='" + next_type
+ "']").children('option').size() > 1) {
266 $('tr#' + next_type
).show();
268 $('tr#' + next_type
).hide();
269 if (j
< address_types_count
) {
270 displayNextAddressComponent(i
, j
+ 1, value
);
276 function changeAddressComponents(type
, value
)
280 while (address_types
[i
] != type
&& i
< address_types_count
) {
284 for (var j
= i
+ 1; j
< address_types_count
; ++j
) {
285 delete_address_component(address_types
[j
]);
288 if (value
!= '' && i
< address_types_count
) {
289 $("select[name='" + type
+ "']").attr('value', value
);
290 displayNextAddressComponent(i
, i
+ 1, value
);
294 function delete_address_component(field_name
)
296 $('tr#' + field_name
).hide();
297 $('#' + field_name
+ '_list').html('');
298 $("input[name='" + field_name
+ "']").val('');
300 if (field_name
== 'locality') {
301 $("select[name='locality_text']").attr('value', '');
302 $('tr#locality_text').show();
306 // when changing school, open diploma choice
307 function changeSchool(schoolId
, diploma
)
309 $(".autocompleteTarget[name='school']").attr('value', schoolId
);
312 $(".autocomplete[name='school_text']").addClass('hidden_valid');
314 $(".autocomplete[name='school_text']").removeClass('hidden_valid');
317 $("[name='diploma']").parent().load(baseurl
+ 'list/diploma/', { school
:schoolId
}, function() {
318 $("select[name='diploma']").attr('value', diploma
);
322 // when checking/unchecking "only_referent", disable
/enable some fields
323 function changeOnlyReferent()
325 if ($("#only_referent").is(':checked')) {
326 $("input[name='entreprise']").attr('disabled', true);
328 $("input[name='entreprise']").removeAttr('disabled');
332 // when choosing a job term in tree, hide tree and set job term field
333 function searchForJobTerm(treeid
, jtid
, full_name
)
335 $(".term_tree").remove();
336 $("input[name='jobterm_text']").val(full_name
).addClass("hidden_valid").show();
337 $("input[name='jobterm']").val(jtid
);
341 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: