Adds subscriber position to groups (Closes #1511).
[platal.git] / htdocs / javascript / search.js
index 8078a93..2c3c1c3 100644 (file)
 // {{{ Page initialization
 
 var baseurl = $.plURL('search/');
-var address_types = new Array('country', 'administrative_area_level_1', 'administrative_area_level_2', 'administrative_area_level_3', 'locality', 'sublocality');
+var address_types = new Array('country', 'administrative_area_level_1', 'administrative_area_level_2', 'locality', 'postal_code');
+var address_types_count = address_types.length;
 
 function load_advanced_search(request)
 {
-    $('.autocompleteTarget').hide();
+    $('.autocomplete_target').hide();
     $('.autocomplete').show().each(function() {
-        targeted = $('../.autocompleteTarget', this)[0];
-
-        if (targeted && targeted.value) {
-            me = $(this);
-
-            $.get(baseurl + 'list/' + targeted.name + '/' + targeted.value, {}, function(textValue) {
-                me.attr('value', textValue);
-                me.addClass('hidden_valid');
-            });
-        }
-
         $(this).autocomplete(baseurl + 'autocomplete/' + this.name, {
             selectOnly: 1,
             formatItem: make_format_autocomplete(this),
             field: this.name,
             onItemSelect: select_autocomplete(this.name),
             matchSubset: 0,
-            width: $(this).width()}
-        );
+            width: $(this).width()
+        });
     });
 
     $('.autocomplete').change(function() { $(this).removeClass('hidden_valid'); });
 
     if (request['country']) {
-        $("[name='country']").parent().load(baseurl + 'list/country', function() {
-            $("select[name='country']").attr('value', request['country']);
-        });
         setAddress(0, 1, new Array(request['country'],
                                    request['administrative_area_level_1'],
                                    request['administrative_area_level_2'],
-                                   request['administrative_area_level_3'],
                                    request['locality'],
-                                   request['sublocality'])
+                                   request['postal_code'])
         );
     } else {
-        for (var i = 1; i < 6; ++i) {
-            $('tr#' + address_types[i] + '_list').hide();
+        for (var i = 1; i < address_types_count; ++i) {
+            $('tr#' + address_types[i]).hide();
         }
     }
 
-    $(".autocomplete[name='schoolTxt']").change(function() { changeSchool('', ''); });
+    $(".autocomplete[name='school_text']").change(function() { changeSchool('', ''); });
     changeSchool(request['school'], request['diploma']);
 
-    $(".autocompleteToSelect").each(function() {
-        var fieldName = $(this).attr('href');
+    $(".autocomplete_to_select").each(function() {
+        var field_name = $(this).attr('href');
 
-        $(this).attr('href', baseurl + 'list/' + fieldName).click(function() {
-            var oldval = $("input.autocompleteTarget[name='" + fieldName + "']")[0].value;
+        if ($(".autocomplete_target[name='" + field_name + "']").val()) {
+            display_list(field_name);
+        }
 
-            $(".autocompleteTarget[name='" + fieldName + "']").parent().load(baseurl + 'list/' + fieldName, {}, function(selectBox) {
-                $(".autocompleteTarget[name='" + fieldName + "']").remove();
-                $(".autocomplete[name='" + fieldName + "Txt']").remove();
-                $("select[name='" + fieldName + "']").attr('value', oldval);
-            });
+        $(this).attr('href', baseurl + 'list/' + field_name).click(function() {
+            if ($(this).attr('title') == 'display') {
+                display_list(field_name);
+            } else {
+                var value = $("select[name='" + field_name + "']").val();
+                var text_value = $("select[name='" + field_name + "'] option:selected").text();
+                $('#' + field_name + '_list').html('');
+                $(".autocomplete[name='" + field_name + "_text']").show();
+                $('#' + field_name + '_table').attr('title', 'display');
+                if (value) {
+                    $(".autocomplete_target[name='" + field_name + "']").val(value);
+                    $(".autocomplete[name='" + field_name + "_text']").val(text_value).addClass('hidden_valid');
+                }
+            }
 
             return false;
         });
-    }).parent().find('.autocomplete').change(function() {
-        // If we change the value in the type="text" field, then the value in the 'integer id' field must not be used,
-        // to ensure that, we unset it
-        $(this).parent().find('.autocompleteTarget').val('');
     });
 
     $('#only_referent').change(function() { changeOnlyReferent(); });
+
+    $('.delete_address_component').click(function() {
+        var field_name = $(this).attr('href');
+        var hide = false;
+        var remove = false;
+
+        for (var i = 1; i < address_types_count; ++i) {
+            if (field_name == address_types[i]) {
+                hide = true;
+            }
+            if (hide) {
+                if (field_name != address_types[i]) {
+                    remove = true;
+                }
+                delete_address_component(address_types[i], remove);
+            }
+        }
+
+        return false;
+    });
+}
+
+function display_list(field_name)
+{
+    var value = $("input.autocomplete_target[name='" + field_name + "']").val();
+
+    $('#' + field_name + '_list').load(baseurl + 'list/' + field_name, {}, function(selectBox) {
+        $(".autocomplete_target[name='" + field_name + "']").val('');
+        $(".autocomplete[name='" + field_name + "_text']").hide().val('').removeClass('hidden_valid');
+        $("select[name='" + field_name + "']").val(value);
+        $('#' + field_name + '_table').attr('title', 'hide');
+    });
 }
 
 // }}}
@@ -147,7 +171,7 @@ function cancel_autocomplete(field, realfield)
 {
     $(".autocomplete[name='" + field + "']").removeClass('hidden_valid').val('').focus();
     if (typeof(realfield) != 'undefined') {
-        $(".autocompleteTarget[name='" + realfield + "']").val('');
+        $(".autocomplete_target[name='" + realfield + "']").val('');
     }
     return;
 }
@@ -155,47 +179,43 @@ function cancel_autocomplete(field, realfield)
 // when choosing autocomplete from list, must validate
 function select_autocomplete(name)
 {
-    nameRealField = name.replace(/Txt$/, '');
-
-    // nothing to do if field is not a text field for a list
-    if (nameRealField == name) {
-        return null;
-    }
+    var field_name = name.replace(/_text$/, '');
 
-    // When changing country or locality, open next address component.
-    if (nameRealField == 'country' || nameRealField == 'locality') {
+    // just display field as valid if field is not a text field for a list
+    if (field_name == name) {
         return function(i) {
-            nameRealField = name.replace(/Txt$/, '');
-            if (i.extra[0] < 0) {
-                cancel_autocomplete(name, nameRealField);
-                i.extra[1] = '';
-            }
-            $("[name='" + nameRealField + "']").parent().load(baseurl + 'list/' + nameRealField, function() {
-                $("select[name='" + nameRealField + "']").attr('value', i.extra[1]);
-            });
-            changeAddressComponents(nameRealField, i.extra[1]);
+            $(".autocomplete[name='" + name + "']").addClass('hidden_valid');
         }
     }
 
-    if (nameRealField == 'school')
+    // When changing country, locality or school, open next address component.
+    if (field_name == 'country' || field_name == 'locality' || field_name == 'school') {
         return function(i) {
             if (i.extra[0] < 0) {
-                cancel_autocomplete('schoolTxt', 'school');
+                cancel_autocomplete(name, field_name);
                 i.extra[1] = '';
             }
-            changeSchool(i.extra[1], '');
+
+            if (field_name == 'school') {
+                changeSchool(i.extra[1], '');
+            } else {
+                changeAddressComponents(field_name, i.extra[1]);
+            }
+
+            $(".autocomplete_target[name='" + field_name + "']").attr('value', i.extra[1]);
+            $(".autocomplete[name='" + name + "']").addClass('hidden_valid');
         }
+    }
 
     // change field in list and display text field as valid
     return function(i) {
-        nameRealField = this.field.replace(/Txt$/, '');
         if (i.extra[0] < 0) {
-            cancel_autocomplete(this.field, nameRealField);
+            cancel_autocomplete(this.field, field_name);
             return;
         }
 
-        $(".autocompleteTarget[name='"+nameRealField+"']").attr('value',i.extra[1]);
-        $(".autocomplete[name='"+this.field+"']").addClass('hidden_valid');
+        $(".autocomplete_target[name='" + field_name + "']").attr('value', i.extra[1]);
+        $(".autocomplete[name='" + name + "']").addClass('hidden_valid');
     }
 }
 
@@ -208,22 +228,21 @@ function setAddress(i, j, values)
     var next_type = address_types[j];
     var next_list = next_type + '_list';
 
-    if (j == 3) {
-        $('tr#locality_text').hide()
-            $("select[name='localityTxt']").attr('value', '');
-    }
-
-    $("[name='" + next_type + "']").parent().load(baseurl + 'list/' + next_type, { previous:prev_type, value:values[i] }, function() {
+    $('#' + next_list).load(baseurl + 'list/' + next_type, { previous:prev_type, value:values[i] }, function() {
         if ($("select[name='" + next_type + "']").children("option").size() > 1) {
-            $("tr#" + next_list).show();
+            $("tr#" + next_type).show();
             $("select[name='" + next_type + "']").attr('value', values[j]);
-            if (j < 6) {
+            if (next_type == 'locality') {
+                $('tr#locality_text').hide();
+                $("select[name='locality_text']").attr('value', '');
+            }
+            if (j < address_types_count) {
                 setAddress(j, j + 1, values);
             }
         } else {
-            $("tr#" + next_list).hide();
+            $("tr#" + next_type).hide();
             $("select[name='" + next_type + "']").attr('value', '');
-            if (j < 6) {
+            if (j < address_types_count) {
                 setAddress(i, j + 1, values);
             }
         }
@@ -236,18 +255,18 @@ function displayNextAddressComponent(i, j, value)
     var next_type = address_types[j];
     var next_list = next_type + '_list';
 
-    if (j == 3) {
+    if (next_type == 'locality') {
         $('tr#locality_text').hide();
-        $("select[name='localityTxt']").attr('value', '');
+        $("select[name='locality_text']").attr('value', '');
     }
 
-    $("[name='" + next_type + "']").parent().load(baseurl + 'list/' + next_type, { previous:prev_type, value:value }, function() {
+    $('#' + next_list).load(baseurl + 'list/' + next_type, { previous:prev_type, value:value }, function() {
         $("select[name='" + next_type + "']").attr('value', '');
         if ($("select[name='" + next_type + "']").children('option').size() > 1) {
-            $('tr#' + next_list).show();
+            $('tr#' + next_type).show();
         } else {
-            $('tr#' + next_list).hide();
-            if (j < 6) {
+            $('tr#' + next_type).hide();
+            if (j < address_types_count) {
                 displayNextAddressComponent(i, j + 1, value);
             }
         }
@@ -256,34 +275,47 @@ function displayNextAddressComponent(i, j, value)
 
 function changeAddressComponents(type, value)
 {
-    var i = 0, j = 0;
+    var i = 0;
 
-    while (address_types[i] != type && i < 6) {
+    while (address_types[i] != type && i < address_types_count) {
         ++i;
     }
 
-    j = i + 1;
-    while (j < 6) {
-        $("select[name='" + address_types[j] + "']").attr('value', '');
-        $('tr#' + address_types[j] + '_list').hide();
-        ++j;
+    for (var j = i + 1; j < address_types_count; ++j) {
+        delete_address_component(address_types[j], true);
     }
 
-    if (value != '' && i < 5) {
+    if (value != '' && i < address_types_count) {
         $("select[name='" + type + "']").attr('value', value);
         displayNextAddressComponent(i, i + 1, value);
     }
 }
 
+function delete_address_component(field_name, remove)
+{
+    if (remove || field_name == 'locality') {
+        $('tr#' + field_name).hide();
+        $('#' + field_name + '_list').html('');
+
+        if (field_name == 'locality') {
+            $("input[name='locality_text']").val('');
+            $('tr#locality_text').show();
+        }
+    } else {
+        $("select[name='" + field_name + "']").val('');
+        $("input[name='" + field_name + "']").val('');
+    }
+}
+
 // when changing school, open diploma choice
 function changeSchool(schoolId, diploma)
 {
     $(".autocompleteTarget[name='school']").attr('value', schoolId);
 
     if (schoolId) {
-        $(".autocomplete[name='schoolTxt']").addClass('hidden_valid');
+        $(".autocomplete[name='school_text']").addClass('hidden_valid');
     } else {
-        $(".autocomplete[name='schoolTxt']").removeClass('hidden_valid');
+        $(".autocomplete[name='school_text']").removeClass('hidden_valid');
     }
 
     $("[name='diploma']").parent().load(baseurl + 'list/diploma/', { school:schoolId }, function() {
@@ -305,7 +337,7 @@ function changeOnlyReferent()
 function searchForJobTerm(treeid, jtid, full_name)
 {
     $(".term_tree").remove();
-    $("input[name='jobtermTxt']").val(full_name).addClass("hidden_valid").show();
+    $("input[name='jobterm_text']").val(full_name).addClass("hidden_valid").show();
     $("input[name='jobterm']").val(jtid);
 }