1 /***************************************************************************
2 * Copyright (C) 2003-2013 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', 'postal_code');
25 var address_types_count
= address_types
.length
;
26 var autocomplete_sub
= {'country': 'locality_text'};
28 function load_advanced_search(request
)
30 $('.autocomplete_target').hide();
31 $('.autocomplete').show().each(function() {
32 $(this).autocomplete({
33 source
: baseurl
+ 'autocomplete/' + this.name
,
34 select
: function(event
, ui
) {
35 select_autocomplete(this.name
, ui
.item
.id
);
37 change
: function(event
, ui
) {
38 if (ui
.item
!= null && ui
.item
.field
!= null) {
39 $(this).val(ui
.item
.field
);
45 $('.autocomplete').change(function() { $(this).removeClass('hidden_valid'); });
47 if (request
['country']) {
48 setAddress(0, 1, new Array(request
['country'],
49 request
['administrative_area_level_1'],
50 request
['administrative_area_level_2'],
52 request
['postal_code'])
55 for (var i
= 1; i
< address_types_count
; ++i
) {
56 $('tr#' + address_types
[i
]).hide();
60 $(".autocomplete[name='school_text']").change(function() { changeSchool('', ''); });
61 changeSchool(request
['school'], request
['diploma']);
63 $(".autocomplete_to_select").each(function() {
64 var field_name
= $(this).attr('href');
66 if ($(".autocomplete_target[name='" + field_name
+ "']").val()) {
67 display_list(field_name
);
70 $(this).attr('href', baseurl
+ 'list/' + field_name
).click(function() {
71 if ($(this).attr('title') == 'display') {
72 display_list(field_name
);
74 var value
= $("select[name='" + field_name
+ "']").val();
75 var text_value
= $("select[name='" + field_name
+ "'] option:selected").text();
76 $('#' + field_name
+ '_list').html('');
77 $(".autocomplete[name='" + field_name
+ "_text']").show();
78 $('#' + field_name
+ '_table').attr('title', 'display');
80 $(".autocomplete_target[name='" + field_name
+ "']").val(value
);
81 $(".autocomplete[name='" + field_name
+ "_text']").val(text_value
).addClass('hidden_valid');
89 $('#only_referent').change(function() { changeOnlyReferent(); });
91 $('.delete_address_component').click(function() {
92 var field_name
= $(this).attr('href');
96 for (var i
= 1; i
< address_types_count
; ++i
) {
97 if (field_name
== address_types
[i
]) {
101 if (field_name
!= address_types
[i
]) {
104 delete_address_component(address_types
[i
], remove
);
112 function display_list(field_name
)
114 var value
= $("input.autocomplete_target[name='" + field_name
+ "']").val();
116 $('#' + field_name
+ '_list').load(baseurl
+ 'list/' + field_name
, {}, function(selectBox
) {
117 $(".autocomplete_target[name='" + field_name
+ "']").val('');
118 $(".autocomplete[name='" + field_name
+ "_text']").hide().val('').removeClass('hidden_valid');
119 $("select[name='" + field_name
+ "']").val(value
);
120 $('#' + field_name
+ '_table').attr('title', 'hide');
125 // {{{ Regexps to wipe out from search queries
127 var default_form_values
= [ /&woman=0(&|$)/, /&subscriber=0(&|$)/, /&alive=0(&|$)/, /&egal2=[^&]*&promo2=(&|$)/,
128 /&egal1=[^&]*&promo1=&edu_type=(?:Ing[^n]+nieur|Master|Doctorat)(&|$)/, /&networking_type=0(&|$)/,
129 /&origin_corps=0(&|$)/, /¤t_corps=0(&|$)/,
130 /corps_rank=0(&|$)/, /&has_email_redirect=0(&|$)/, /&[^&=]+=(&|$)/g ];
132 /** Uses javascript to clean form from all empty fields */
133 function cleanForm(f
, targeturl
)
135 var query
= $(f
).formSerialize();
137 for (var i
in default_form_values
) {
138 var reg
= default_form_values
[i
];
139 if (typeof(reg
) != 'undefined') {
142 query
= query
.replace(reg
, '$1');
143 } while (old_query
!= query
);
146 query
= query
.replace(/^(.*)&+$/, '$1');
147 query
= query
.replace(/^&+(.*)$/, '$1');
149 // Removes "(n camarades)" if any of them are remaining.
150 query
= query
.replace(/\+\(\d+\+camarade(?:s)?\)/, '');
151 if (query
== 'rechercher=Chercher') {
152 alert("Aucun critère n'a été spécifié.");
155 document
.location
= $.plURL(targeturl
+ '?' + query
);
160 // {{{ Autocomplete related functions.
162 function cancel_autocomplete(field
, realfield
)
164 $(".autocomplete[name='" + field
+ "']").removeClass('hidden_valid').val('').focus();
165 if (typeof(realfield
) != 'undefined') {
166 $(".autocomplete_target[name='" + realfield
+ "']").val('');
171 // when choosing autocomplete from list, must validate
172 function select_autocomplete(name
, id
)
174 var field_name
= name
.replace(/_text$/, '');
175 if (autocomplete_sub
[field_name
] != null) {
176 $(".autocomplete[name='" + autocomplete_sub
[field_name
] + "']").autocomplete('option', 'source', baseurl
+ 'autocomplete/' + autocomplete_sub[field_name] + '/' + id
);
179 // just display field as valid if field is not a text field for a list
180 if (field_name
== name
) {
181 $(".autocomplete[name='" + name
+ "']").addClass('hidden_valid');
185 // When changing country, locality or school, open next address component.
186 if (field_name
== 'country' || field_name
== 'locality' || field_name
== 'school') {
188 cancel_autocomplete(name
, field_name
);
192 if (field_name
== 'school') {
193 changeSchool(id
, '');
195 changeAddressComponents(field_name
, id
);
198 $(".autocomplete_target[name='" + field_name
+ "']").attr('value', id
);
199 $(".autocomplete[name='" + name
+ "']").addClass('hidden_valid');
203 // change field in list and display text field as valid
205 cancel_autocomplete(this.field
, field_name
);
209 $(".autocomplete_target[name='" + field_name
+ "']").attr('value', id
);
210 $(".autocomplete[name='" + name
+ "']").addClass('hidden_valid');
214 // {{{ Various search functions.
216 function setAddress(i
, j
, values
)
218 var prev_type
= address_types
[i
];
219 var next_type
= address_types
[j
];
220 var next_list
= next_type
+ '_list';
222 $('#' + next_list
).load(baseurl
+ 'list/' + next_type
, { previous
:prev_type
, value
:values
[i
] }, function() {
223 if ($("select[name='" + next_type
+ "']").children("option").size() > 1) {
224 $("tr#" + next_type
).show();
225 $("select[name='" + next_type
+ "']").attr('value', values
[j
]);
226 if (next_type
== 'locality') {
227 $('tr#locality_text').hide();
228 $("select[name='locality_text']").attr('value', '');
230 if (j
< address_types_count
) {
231 setAddress(j
, j
+ 1, values
);
234 $("tr#" + next_type
).hide();
235 $("select[name='" + next_type
+ "']").attr('value', '');
236 if (j
< address_types_count
) {
237 setAddress(i
, j
+ 1, values
);
243 function displayNextAddressComponent(i
, j
, value
)
245 var prev_type
= address_types
[i
];
246 var next_type
= address_types
[j
];
247 var next_list
= next_type
+ '_list';
249 if (next_type
== 'locality') {
250 $('tr#locality_text').hide();
251 $("select[name='locality_text']").attr('value', '');
254 if (autocomplete_sub
[prev_type
] != null) {
255 $(".autocomplete[name='" + autocomplete_sub
[prev_type
] + "']").autocomplete('option', 'source', baseurl
+ 'autocomplete/' + autocomplete_sub[prev_type] + '/' + value
);
258 $('#' + next_list
).load(baseurl
+ 'list/' + next_type
, { previous
:prev_type
, value
:value
}, function() {
259 $("select[name='" + next_type
+ "']").attr('value', '');
260 if ($("select[name='" + next_type
+ "']").children('option').size() > 1) {
261 $('tr#' + next_type
).show();
263 $('tr#' + next_type
).hide();
264 if (j
< address_types_count
) {
265 displayNextAddressComponent(i
, j
+ 1, value
);
271 function changeAddressComponents(type
, value
)
275 while (address_types
[i
] != type
&& i
< address_types_count
) {
279 for (var j
= i
+ 1; j
< address_types_count
; ++j
) {
280 delete_address_component(address_types
[j
], true);
283 if (value
!= '' && i
< address_types_count
) {
284 $("select[name='" + type
+ "']").attr('value', value
);
285 displayNextAddressComponent(i
, i
+ 1, value
);
289 function delete_address_component(field_name
, remove
)
291 if (remove
|| field_name
== 'locality') {
292 $('tr#' + field_name
).hide();
293 $('#' + field_name
+ '_list').html('');
295 if (field_name
== 'locality') {
296 $("input[name='locality_text']").val('');
297 $('tr#locality_text').show();
300 $("select[name='" + field_name
+ "']").val('');
301 $("input[name='" + field_name
+ "']").val('');
305 // when changing school, open diploma choice
306 function changeSchool(schoolId
, diploma
)
308 $(".autocompleteTarget[name='school']").attr('value', schoolId
);
311 $(".autocomplete[name='school_text']").addClass('hidden_valid');
313 $(".autocomplete[name='school_text']").removeClass('hidden_valid');
316 $("[name='diploma']").parent().load(baseurl
+ 'list/diploma/', { school
:schoolId
}, function() {
317 $("select[name='diploma']").attr('value', diploma
);
321 // when choosing a job term in tree, hide tree and set job term field
322 function searchForJobTerm(treeid
, jtid
, full_name
)
324 $(".term_tree").remove();
325 $("input[name='jobterm_text']").val(full_name
).addClass("hidden_valid").show();
326 $("input[name='jobterm']").val(jtid
);
329 function addressesDump()
331 if ($('#addresses_dump:checked').length
> 0) {
332 $('#recherche').attr('action', 'search/adv/addresses').attr('method', 'post').removeAttr('onsubmit');
334 $('#recherche').attr('action', 'search/adv').attr('method', 'get');
339 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: