X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=htdocs%2Fjavascript%2Fprofile.js;h=f0ca309b4487c23c9c9bbdabb4f389b93e3fe95e;hb=63c891790bd2fe0fd5319908cbeafee7e06a5a3b;hp=bfac32ee119257b87362becd3a1e6504bf798cd6;hpb=9f5bd98e936d8cef7ca9f774eeef64dbb8a1b079;p=platal.git diff --git a/htdocs/javascript/profile.js b/htdocs/javascript/profile.js index bfac32e..f0ca309 100644 --- a/htdocs/javascript/profile.js +++ b/htdocs/javascript/profile.js @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2003-2010 Polytechnique.org * + * Copyright (C) 2003-2011 Polytechnique.org * * http://opensource.polytechnique.org/ * * * * This program is free software; you can redistribute it and/or modify * @@ -18,254 +18,438 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ -// Page initialization +// Page initialization {{{1 function wizPage_onLoad(id) { switch (id) { case 'general': - fillType(document.forms.prof_annu['appli1[type]'], document.forms.prof_annu['appli1[id]'].selectedIndex-1); - selectType(document.forms.prof_annu['appli1[type]'], document.forms.prof_annu['appli1_tmp'].value); - fillType(document.forms.prof_annu['appli2[type]'], document.forms.prof_annu['appli2[id]'].selectedIndex-1); - selectType(document.forms.prof_annu['appli2[type]'], document.forms.prof_annu['appli2_tmp'].value); + var i = 1; + while ($('.edu_' + i).length != 0) { + prepareType(i - 1); + ++i; + } + break; + case 'adresses': + checkCurrentAddress(); break; case 'poly': - updateGroupSubLink(document.forms.prof_annu.groupesx_sub); + updateGroupSubLink(); break; case 'deco': for (var i in names) { - if (typeof names[i] != 'function') { - if (document.getElementById("medal_" + i) != null) { - getMedalName(i); - buildGrade(i, document.forms.prof_annu["medal_" + i + "_grade"].value); - } + if ($('#medal_' + i).length != 0) { + getMedalName(i); + buildGrade(i, $('#medal_' + i).find('[name*=medal_' + i + '_grade]').val()); } } break; case 'emploi': - for (var i = 0 ; document.getElementById('job_' + i) != null ; ++i) { - updateJobSecteur(i, 'job_' + i, 'jobs[' + i + ']', - document.forms.prof_annu["jobs[" + i + "][ss_secteur]"].value); + if ($('#jobs_0').find("[name='jobs[0][name]']").val() == '') { + registerEnterpriseAutocomplete(0); } - setTimeout('registerEnterpriseAutocomplete(-1)', 100); break; } } -var applisType; -var applisTypeAll; - -// General - +var educationDegree; +var educationDegreeAll; +var educationDegreeName; var subgrades; var names; -function fillType(selectCtrl, appli, fill) + +// Publicity follows the following ordering: private < ax < public. +var publicity = []; +publicity['private'] = 0; +publicity['ax'] = 1; +publicity['public'] = 2; + +// Names {{{1 + +function toggleNamesAdvanced() { - var i; - var i0=0; + $('.names_advanced').toggle(); +} - for (i = selectCtrl.options.length; i >=0; i--) { - selectCtrl.options[i] = null; +function addSearchName(isFemale) +{ + var i = 0; + while ($('#search_name_' + i).length != 0) { + i++; } + $('#search_name_' + i) + .updateHtml('profile/ajax/searchname/' + i + '/' + isFemale, + function(data) { + $('#searchname').before(data); + changeNameFlag(i); + }); +} - if (fill || appli <0) { - selectCtrl.options[0] = new Option(' '); - i0=1; +function removeSearchName(i, isFemale) +{ + $('#search_name_' + i).remove(); + updateNameDisplay(isFemale); +} + +function changeNameFlag(i) +{ + $('#flag_' + i).remove(); + var typeid = $('#search_name_' + i).find('select').val(); + var type = $('#search_name_' + i).find('select :selected').text(); + if ($('[name=sn_type_' + typeid + '_' + i + ']').val() > 0) { + $('#flag_cb_' + i).after(' ' + + 'site public' + + '' + + '' + + ''); + } else { + $('#flag_cb_' + i).after(' ' + + 'site privé' + + '' + + ''); } - if (appli>=0) - for (i=0; i < applisType[appli].length; i++) - selectCtrl.options[i0+i] = new Option(applisType[appli][i]); - else if (fill) - for (i=0; i < applisTypeAll.length; i++) - selectCtrl.options[i0+i] = new Option(applisTypeAll[i]); } +function updateNameDisplay(isFemale) +{ + var searchnames = ''; + for (var i = 0; i < 10; i++) { + if ($('#search_name_' + i).find(':text').val()) { + searchnames += $('#search_name_' + i).find('[name*=typeid]').val() + ';'; + searchnames += $('#search_name_' + i).find(':text').val() + ';;'; + } + } + $.xget('profile/ajax/buildnames/' + searchnames + '/' + isFemale, + function(data){ + var name = data.split(';'); + $('#public_name').html(name[0]); + $('#private_name').html(name[0] + name[1]); + }); +} -function selectType(selectCtrl, type) +function toggleParticle(id) { - for (i = 0; i < selectCtrl.options.length; i++) { - if (selectCtrl.options[i].text == type) - selectCtrl.selectedIndex=i; + if ($('#search_name_' + id).find("[name*='[particle]']").val() == '') { + $('#search_name_' + id).find("[name*='[particle]']").val(1); + } else { + $('#search_name_' + id).find("[name*='[particle]']").val(''); } } +// Promotions {{{1 +function togglePromotionEdition() +{ + $(".promotion_edition").toggle(); +} -// Addresses +// Nationalities {{{1 -function removeObject(id, pref) +function delNationality(i) { - document.getElementById(id).style.display = "none"; - document.forms.prof_annu[pref + "[removed]"].value = "1"; + $('#nationality' + i).hide().find('select').val(''); } -function restoreObject(id, pref) +function addNationality() { - document.getElementById(id).style.display = ''; - document.forms.prof_annu[pref + "[removed]"].value = "0"; + var i = 0; + if ($('#nationality2').find('select').val() == "") { + i = 2; + } else if ($('#nationality3').find('select').val() == "") { + i = 3; + } + if ((i == 2) || (i == 3)) { + $('#nationality' + i).show(); + } } -function getAddressElement(adrid, adelement) +// Education {{{1 + +function prepareType(id) { - return document.forms.prof_annu["addresses[" + adrid + "][" + adelement + "]"]; + var edu = $('.edu_' + id).find("[name='edus[" + id + "][eduid]']").val() - 1; + var sel = $('.edu_' + id).find('[name=edu_' + id + '_tmp]').val(); + var html = ''; + if (educationDegree[edu]) { + var length = educationDegree[edu].length; + } else { + var length = 0; + } + for (i = 0; i < length; ++i) { + html += ''; + } + $('.edu_' + id).find("[name='edus[" + id + "][degreeid]']").html(html); } -function checkCurrentAddress(newCurrent) +function addEdu() { - var hasCurrent = false; var i = 0; - while (getAddressElement(i, 'pub') != null) { - var radio = getAddressElement(i, 'current'); - var removed = getAddressElement(i, 'removed'); - if (removed.value == "1" && radio.checked) { - radio.checked = false; - } else if (radio.checked && radio != newCurrent) { - radio.checked = false; - } else if (radio.checked) { - hasCurrent = true; + var j = 0; + var prefix = 'edu_'; + var class_parity; + + while (!$('#edu_add').hasClass(prefix + i)) { + if ($('.' + prefix + i).length != 0) { + j++; } i++; } - if (!hasCurrent) { - i = 0; - while (getAddressElement(i, 'pub') != null) { - var radio = getAddressElement(i, 'current'); - var removed = getAddressElement(i, 'removed'); - if (removed.value != "1") { - radio.checked= true; - return; - } - i++; - } + if (j % 2) { + class_parity = 'pair'; + } else { + class_parity = 'impair'; + } + $('#edu_add').removeClass(prefix + i); + i++; + $('#edu_add').addClass(prefix + i); + i--; + $.xget('profile/ajax/edu/' + i + '/' + class_parity, + function(data) { + $('#edu_add').before(data); + prepareType(i); + }); +} + +function removeEdu(i) +{ + var prefix = 'edu_'; + $('.' + prefix + i).remove(); + while (!$('#edu_add').hasClass(prefix + i)) { + $('.' + prefix + i).toggleClass('pair'); + $('.' + prefix + i).toggleClass('impair'); + i++; } } -function removeAddress(id, pref) +// Networking {{{1 + +function addNetworking() { - removeObject(id, pref); - checkCurrentAddress(null); - if (document.forms.prof_annu[pref + '[datemaj]'].value != '') { - document.getElementById(id + '_grayed').style.display = ''; + var i = 0; + while ($('#networking_' + i).length != 0) { + i++; } + var namefirst = ''; + var html = '' + + ' ' + + '
' + + ' ' + + ' ' + + ' site public' + + '  ' + + ' ' + + ' ' + + '
' + + '
' + + ' ' + + ' ' + + ' cross' + + ' ' + + '
' + + ' ' + + ''; + + $('#networking').before(html); } -function restoreAddress(id, pref) +function removeNetworking(id) { - document.getElementById(id + '_grayed').style.display = 'none'; - checkCurrentAddress(null); - restoreObject(id, pref); + $('#networking_' + id).remove(); } -function addAddress() +function updateNetworking(i) +{ + $('#networking_' + i).find("[name='networking[" + i + "][name]']").val($('#networking_' + i).find('select option:selected').text()); +} + +// Addresses {{{1 + +function toggleAddress(id, val) +{ + $('#addresses_' + id + '_grayed').toggle(); + $('#addresses_' + id).toggle(); + $('#addresses_' + id + '_cont').find('[name*=removed]').val(val); + checkCurrentAddress(); +} + +function checkCurrentAddress(id) { + var hasCurrentAddress = id ? true : false; var i = 0; - while (getAddressElement(i, 'pub') != null) { + while ($('#addresses_' + i + '_cont').length != 0) { + if ($('#addresses_' + i + '_cont').find('[name*=removed]').val() == 1) { + $('#addresses_' + i + '_cont').find('[name*=current]').attr('checked', false); + } + if (!hasCurrentAddress && $('#addresses_' + i + '_cont').find('[name*=current]:checked').length != 0) { + hasCurrentAddress = true; + } else { + $('#addresses_' + i + '_cont').find('[name*=current]').attr('checked', false); + } i++; } - $("#add_adr").before('
'); - Ajax.update_html('addresses_' + i + '_cont', 'profile/ajax/address/' + i, checkCurrentAddress); + if (!hasCurrentAddress) { + i = 0; + while ($('#addresses_' + i + '_cont').length != 0) { + if ($('#addresses_' + i + '_cont').find('[name*=removed]').val() == 0) { + $('#addresses_' + i + '_cont').find('[name*=current]').attr('checked', 'checked'); + break; + } + i++; + } + } + if (id) { + $('#addresses_' + id + '_cont').find('[name*=current]').attr('checked', 'checked'); + } } -function addTel(id) +function addAddress() { var i = 0; - var adid = 'addresses_' + id; - var tel = adid + '_tel_'; - while (document.getElementById(tel + i) != null) { + while ($('#addresses_' + i + '_cont').length != 0) { i++; } - $('#' + adid + '_add_tel').before('
'); - Ajax.update_html(tel + i, 'profile/ajax/tel/' + id + '/' + i); + $('#add_address').before('
'); + $('#addresses_' + i + '_cont').updateHtml('profile/ajax/address/' + i, + checkCurrentAddress()); } - -// Geoloc - -function validGeoloc(id, pref) +function addressChanged(prefid) { - document.getElementById(id + '_geoloc').style.display = 'none'; - document.getElementById(id + '_geoloc_error').style.display = 'none'; - document.getElementById(id + '_geoloc_valid').style.display = 'none'; - document.forms.prof_annu[pref + "[parsevalid]"].value = "1"; - document.forms.prof_annu[pref + "[text]"].value = document.forms.prof_annu[pref + "[geoloc]"].value; - document.forms.prof_annu[pref + "[cityid]"].value = document.forms.prof_annu[pref + "[geoloc_cityid]"].value; - $(document.forms.prof_annu[pref + "[text]"]).click(function() { document.forms.prof_annu[pref + "[text]"].blur(); }); - document.forms.prof_annu[pref + "[text]"].className = ''; + $('#' + prefid + '_cont').find('[name*=changed]').val("1"); } -function validAddress(id, pref) +function validGeoloc(prefid, id, geoloc) { - document.getElementById(id + '_geoloc').style.display = 'none'; - document.getElementById(id + '_geoloc_error').style.display = 'none'; - document.getElementById(id + '_geoloc_valid').style.display = 'none'; - document.forms.prof_annu[pref + "[parsevalid]"].value = "1"; - $(document.forms.prof_annu[pref + "[text]"]).click(function() { document.forms.prof_annu[pref + "[text]"].blur(); }); - document.forms.prof_annu[pref + "[text]"].className = ''; + if (geoloc == 1) { + $('#' + prefid + '_cont').find('[name*=text]').val($('#' + prefid + '_cont').find('[name*=geocodedText]').val()); + $('#' + prefid + '_cont').find('[name*=postalText]').val(''); + } + if (geoloc > 0) { + $('#' + prefid + '_cont').find("[name*='[geocodedText]']").remove(); + } + $('#' + prefid + '_cont').find('[name*=text]').removeClass('error'); + $('#' + prefid + '_cont').find('[name*=geocodeChosen]').val(geoloc); + $('.' + prefid + '_geoloc').remove(); } +// {{{1 Phones -// Groups +function addTel(prefid, prefname, subField, mainField, mainId) +{ + var i = 0; + var prefix = prefid + '_'; + while ($('#' + prefix + i).length != 0) { + i++; + } + $('#' + prefix + 'add').before('
'); + $('#' + prefix + i).updateHtml('profile/ajax/tel/' + prefid + '/' + prefname + '/' + i + '/' + subField + '/' + mainField + '/' + mainId); +} -function updateGroup(type) +function removeTel(prefname, prefid, id) { - var val = document.forms.prof_annu[type + '_sel'].value; - if (val == '0' || document.getElementById(type + '_' + val) != null) { - document.getElementById(type + '_add').style.display = 'none'; - } else { - document.getElementById(type + '_add').style.display = ''; + var total = 0; + while ($('#' + prefid + '_' + total).length != 0) { + ++total; + } + $('#' + prefid + '_' + id).remove(); + for (var i = parseInt(id) + 1; i < total; ++i) { + renumberPhone(prefname, prefid, i); } } -function removeGroup(cat, id) +function addPhoneComment(id) { - $('#' + cat + '_' + id).remove(); - updateGroup(cat); + $('#' + id + '_comment').show(); + $('#' + id + '_addComment').hide(); } -function addGroup(cat) +function removePhoneComment(id, pref) { - var cb = document.forms.prof_annu[cat + '_sel']; - var id = cb.value; - var text = cb.options[cb.selectedIndex].text; - var html = '' - + ' ' - + ' ' - + ' ' - + ' ' - + '
' - + text - + '
' - + ' ' - + ' cross' - + ' ' - + ' ' - + ''; - $('#' + cat).after(html); - updateGroup(cat); + $('#' + id + '_comment').hide(); + $('#' + id + '_comment').find("[name='" + pref + "[comment]']").val(''); + $('#' + id + '_addComment').show(); } -function updateGroupSubLink(cb) +function renumberPhone(prefname, prefid, i) { - var href = cb.value ? cb.value : "http://www.polytechnique.net"; - document.getElementById("groupesx_sub").href = href; + var telid = i - 1; + var telprefOld = prefname + '[' + i + ']'; + var telpref = prefname + '[' + telid + ']'; + var idOld = prefid + '_' + i; + var id = prefid + '_' + telid; + + $('#' + idOld).attr('id', id); + $('#' + id).find('div.titre').html('N°' + i); + $('#' + id).find('a.removeTel').attr('href', 'javascript:removeTel(\'' + prefname + '\',\'' + prefid + '\',' + telid + ')'); + $('#' + id).find('select').attr('name', telpref + '[type]'); + $('#' + id).find("[name='" + telprefOld + "[display]']").attr('name', telpref + '[display]'); + $('#' + id).find("[name='" + telprefOld + "[comment]']").attr('name', telpref + '[comment]'); + $('#' + id).find('a.removePhoneComment').attr('href', 'javascript:removePhoneComment(' + id + ',' + telpref + ')'); + $('#' + id).find('#' + idOld + '_addComment').attr('id', id + '_addComment'); + $('#' + id).find('#' + id + '_addComment').attr('href', 'javascript:addPhoneComment(' + id + ')'); + $('#' + id).find('#' + idOld + '_comment').attr('id', id + '_comment'); + $('#' + id).find("[name='" + telprefOld + "[pub]']").attr('name', telpref + '[pub]'); } +// {{{1 Groups -// Medals +function addBinet() +{ + var id = $('#binets_table').find('[name=binets_sel]').val(); + var text = $('#binets_table').find('select option:selected').text(); + var html = '' + + ' ' + + ' ' + + ' ' + + ' ' + + '
' + + text + + '
' + + ' ' + + ' cross' + + ' ' + + ' ' + + ''; + $('#binets_table').after(html); + updateElement('binets'); +} + +function updateGroupSubLink() +{ + var href = $('[name*=groupesx_sub]').val() ? $('[name*=groupesx_sub]').val() : 'http://www.polytechnique.net'; + $('#groupesx_sub').attr('href', href); +} + +// {{{1 Medals function updateMedal() { - var val = document.forms.prof_annu['medal_sel'].value; - if (val == '' || document.getElementById('medal_' + val) != null) { - document.getElementById('medal_add').style.display = 'none'; + var val = $('#medals').find('[name*=medal_sel]').val(); + if (val && ($('#medal_' + val).length == 0)) { + $('#medal_add').show(); } else { - document.getElementById('medal_add').style.display = ''; + $('#medal_add').hide(); } } function getMedalName(id) { - document.getElementById('medal_name_' + id).innerHTML = names[id]; + $('#medal_name_' + id).html(names[id]); } function buildGrade(id, current) @@ -304,8 +488,8 @@ function makeAddProcess(id) function addMedal() { - var id = document.forms.prof_annu['medal_sel'].value; - $.get(platal_baseurl + 'profile/ajax/medal/' + id, makeAddProcess(id)); + var id = $('#medals').find('[name=medal_sel]').val(); + $.xget('profile/ajax/medal/' + id, makeAddProcess(id)); } function removeMedal(id) @@ -314,34 +498,23 @@ function removeMedal(id) updateMedal(); } - -// Jobs +// Jobs {{{1 function removeJob(id, pref) { - document.getElementById(id + '_cont').style.display = 'none'; - if (document.forms.prof_annu[pref + '[new]'].value == '0') { - document.getElementById(id + '_grayed').style.display = ''; - document.getElementById(id + '_grayed_name').innerHTML = - document.forms.prof_annu[pref + "[name]"].value.replace('<', '<'); + $('#' + id + '_cont').hide(); + if ($('#' + id).find("[name='" + pref + "[new]']").val() == '0') { + $('#' + id + '_grayed').show(); + $('#' + id + '_grayed_name').html($('#' + id).find("[name='" + pref + "[name]']").val()); } - document.forms.prof_annu[pref + "[removed]"].value = "1"; + $('#' + id).find("[name='" + pref + "[removed]']").val('1'); } function restoreJob(id, pref) { - document.getElementById(id + '_cont').style.display = ''; - document.getElementById(id + '_grayed').style.display = 'none'; - document.forms.prof_annu[pref + "[removed]"].value = "0"; -} - -function updateJobSecteur(nb, id, pref, sel) -{ - var secteur = document.forms.prof_annu[pref + '[secteur]'].value; - if (secteur == '') { - secteur = '-1'; - } - Ajax.update_html(id + '_ss_secteur', 'profile/ajax/secteur/' +nb + '/' + secteur + '/' + sel); + $('#' + id + '_cont').show(); + $('#' + id + '_grayed').hide(); + $('#' + id).find("[name='" + pref + "[removed]']").val('0'); } function makeAddJob(id) @@ -350,165 +523,264 @@ function makeAddJob(id) { $('#add_job').before(data); registerEnterpriseAutocomplete(id); - updateSecteur('job_' + id, 'jobs[' + id + ']', ''); }; } function addJob() { var i = 0; - while (document.getElementById('job_' + i) != null) { + while ($('#jobs_' + i).length != 0) { ++i; } - $.get(platal_baseurl + 'profile/ajax/job/' + i, makeAddJob(i)); + $.xget('profile/ajax/job/' + i, makeAddJob(i)); } +function addEntreprise(id) +{ + $('.entreprise_' + id).toggle(); +} -// Skills - -function updateSkill(cat) +/** + * Adds a job term in job profile page + * @param jobid id of profile's job among his different jobs + * @param jtid id of job term to add + * @param full_name full text of job term + * @return false if the term already exist for this job, true otherwise + */ +function addJobTerm(jobid, jtid, full_name) { - var val = document.forms.prof_annu[cat + '_sel'].value; - var show = true; - if (val == '') { - show = false; + var termid = 0; + var parentpath; + var formvarname; + if (jobid < 0) { + parentpath = ''; + jobid = ''; + formvarname = 'terms'; + } else { + parentpath = '#jobs_'+jobid+' '; + formvarname = 'jobs['+jobid+'][terms]'; } - if (document.getElementById(cat + '_' + val) != null) { - show = false; + var lastJobTerm = $(parentpath + '.jobs_term:last'); + if (lastJobTerm.length != 0) { + termid = parseInt(lastJobTerm.children('input').attr('name').replace(/^(jobs\[[0-9]+\]\[terms\]|terms)\[([0-9]+)\]\[jtid\]/, '$2')) + 1; + if ($('#job'+jobid+'_term'+jtid).length > 0) { + return false; + } + } + var newdiv = '
'+ + ''+full_name+''+ + ''+ + 'retirer'+ + '
'; + if (lastJobTerm.length == 0) { + $(parentpath + '.jobs_terms').prepend(newdiv); + } else { + lastJobTerm.after(newdiv); } - document.getElementById(cat + '_add').style.display = show ? '' : 'none'; + $('#job'+jobid+'_term'+jtid+' img').css('cursor','pointer').click(removeJobTerm); + return true; } -function addSkill(cat) +/** + * Remove a job term in job profile page. + * Must be called from a button in a div containing the term + */ +function removeJobTerm() { - var sel = document.forms.prof_annu[cat + '_sel']; - var val = sel.value; - var text = sel.options[sel.selectedIndex].text; - $.get(platal_baseurl + 'profile/ajax/skill/' + cat + '/' + val, - function(data) { - $('#' + cat).append(data); - document.getElementById(cat + '_' + val + '_title').innerHTML = text; - updateSkill(cat); - }); + $(this).parent().remove(); } -function removeSkill(cat, id) +/** + * Prepare display for autocomplete suggestions in job terms + * @param row an array of (title of term, id of term) + * @return text to display + * If id is negative, it is because there are too much terms to + * be displayed. + */ +function displayJobTerm(row) { - $('#' + cat + '_' + id).remove(); - updateSkill(cat); + if (row[1] < 0) { + return '... parcourir les résultats dans un arbre ...'; + } + return row[0]; } +/** + * Function called when a job term has been selected from autocompletion + * in search + * @param li is the list item (
  • ) that has been clicked + * The context is the jsquery autocomplete object. + */ +function selectJobTerm(li) +{ + var jobid = this.extraParams.jobid; + if (li.extra[0] >= 0) { + addJobTerm(jobid,li.extra[0],$(li).text()); + } + var search_input; + if (jobid < 0) { + search_input = $('.term_search')[0]; + } else { + search_input = $('#jobs_'+jobid+' .term_search')[0]; + } + if (li.extra[0] >= 0) { + search_input.value = ''; + search_input.focus(); + } else { + search_input.value = li.selectValue.replace(/%$/,''); + toggleJobTermsTree(jobid, li.selectValue); + } +} -// Mentor - -function updateCountry() +/** + * Function to show or hide a terms tree in job edition + * @param jobid is the id of the job currently edited + */ +function toggleJobTermsTree(jobid, textfilter) { - var val = document.forms.prof_annu.countries_sel.value; - var show = true; - if (val == '' || val == '00') { - show = false; + $('#term_tree_comment').toggle(); + + var treepath; + if (jobid < 0) { + treepath = ''; + } else { + treepath = '#jobs_'+jobid+' '; } - if (document.getElementById('countries_' + val) != null) { - show = false; + treepath += '.term_tree'; + if ($(treepath + ' ul').length > 0) { + $(treepath).empty().removeClass().addClass('term_tree'); + if (!textfilter) { + return; + } } - document.getElementById('countries_add').style.display = show ? '' : 'none'; + createJobTermsTree(treepath, 'profile/ajax/tree/jobterms/all', 'job' + jobid, 'chooseJobTerm', textfilter); } +/** + * Function called when a job term is chosen from terms tree + * @param treeid is the full id of the tree (must look like job3) + * @param jtid is the id of the job term chosen + * @param fullname is the complete name (understandable without context) of the term + */ +function chooseJobTerm(treeid, jtid, fullname) +{ + addJobTerm(treeid.replace(/^job(.*)$/, '$1'), jtid, fullname); +} + +// {{{1 Skills + +function addSkill(cat) +{ + var val = $('#' + cat + '_table').find('[name=' + cat + '_sel]').val(); + var text = $('#' + cat + '_table').find('[name=' + cat + '_sel] :selected').text(); + $.xget('profile/ajax/skill/' + cat + '/' + val, + function(data) { + $('#' + cat).append(data); + $('#' + cat + '_' + val + '_title').text(text); + updateElement(cat); + }); +} + +// {{{1 Mentor + function addCountry() { - var cb = document.forms.prof_annu.countries_sel; - var val = cb.value; - var text = cb.options[cb.selectedIndex].text; + var val = $('#countries_table').find('[name=countries_sel] :selected').val(); + var text = $('#countries_table').find('[name=countries_sel] :selected').text(); var html = '
    ' - + ' ' + + ' ' + ' ' + ' ' + '
    ' + text + '
    ' + ' ' + '
    '; $('#countries').append(html); - updateCountry(); + updateElement('countries'); } -function removeCountry(id) -{ - $('#countries_' + id).remove(); - updateCountry(); -} -function updateSSecteur() +function registerEnterpriseAutocomplete(id) { - var s = document.forms.prof_annu.secteur_sel.value; - var ss = document.forms.prof_annu['jobs[-1][ss_secteur]'].value; - var show = true; - if (s == '' || ss == '') { - show = false; - } - if (document.getElementById('secteurs_' + s + '_' + ss) != null) { - show = false; - } - document.getElementById('secteurs_add').style.display = show ? 'block' : 'none'; + $(".enterpriseName").each( + function() { + if (id == -1 || this.name == "jobs[" + id + "][name]") { + $(this).autocomplete($.plURL("search/autocomplete/entreprise"), + { + selectOnly:1, + field:this.name, + matchSubset:0, + width:$(this).width() + }); + } + }); + + $(".sectorName").each( + function() { + if (id == -1 || this.name == "jobs[" + id + "][subSubSectorName]") { + $(this).autocomplete($.plURL("search/autocomplete/subSubSector"), + { + selectOnly:1, + field:this.name, + matchSubset:0, + width:$(this).width() + }); + } + }); } -function updateSecteur() +// {{{1 Multiusage functions + +function updateElement(cat) { - var secteur = document.forms.prof_annu.secteur_sel.value; - if (secteur == '') { - secteur = '-1'; - document.getElementById('ss_secteur_sel').innerHTML = ''; - return; + var val = $('#' + cat + '_table').find('[name=' + cat + '_sel]').val(); + if (val == '' || $('#' + cat + '_' + val).length != 0) { + $('#' + cat + '_add').hide(); + } else { + $('#' + cat + '_add').show(); } - $.get(platal_baseurl + 'profile/ajax/secteur/-1/' + secteur, - function(data) { - data = '' + data; - document.getElementById('ss_secteur_sel').innerHTML = data; - $(document.forms.prof_annu['jobs[-1][ss_secteur]']).change(updateSSecteur); - }); } -function addSecteur() +function removeElement(cat, id) { - var scb = document.forms.prof_annu.secteur_sel; - var s = scb.value; - var st = scb.options[scb.selectedIndex].text; - - var sscb = document.forms.prof_annu['jobs[-1][ss_secteur]']; - var ss = sscb.value; - var sst = sscb.options[sscb.selectedIndex].text; - - var html = '
    ' - + ' ' - + ' ' - + ' ' - + ' ' - + ' ' + sst - + '
    '; - $('#secteurs').append(html); - updateSSecteur(); + $('#' + cat + '_' + id).remove(); + updateElement(cat); } -function removeSecteur(s, ss) +function updateSubPublicity(subFieldId, name, mainPub) { - $('#secteurs_' + s + '_' + ss).remove(); - updateSSecteur(); + var subPub = $(subFieldId).find("[name='" + name + "']:checked").val(); + if (publicity[subPub] > publicity[mainPub]) { + $(subFieldId).find("[name='" + name + "']:checked").removeAttr('checked'); + $(subFieldId).find('[value=' + mainPub + ']').attr('checked', 'checked'); + } } -function registerEnterpriseAutocomplete(id) +function updatePublicity(mainField, mainId, subField, subId) { - $(".enterprise_name").each( - function() { - if (id == -1 || this.name == "jobs[" + id + "][name]") { - $(this).autocomplete(platal_baseurl + "search/autocomplete/entreprise", - { - selectOnly:1, - field:this.name, - matchSubset:0, - width:$(this).width() - }); + var mainFieldId = '#' + mainField + '_' + mainId; + var mainPub = $(mainFieldId).find("[name='" + mainField + "[" + mainId + "][pub]']:checked").val(); + if (subId == -1) { + var subFields = subField.split(','); + for (var i =0; i < subFields.length; ++i) { + var subFieldBaseId = mainFieldId + '_' + subFields[i]; + var name = mainField + '[' + mainId + '][' + subFields[i] + ']'; + if ($(subFieldBaseId).length != 0) { + updateSubPublicity(subFieldBaseId, name + '[pub]', mainPub); + updateSubPublicity(subFieldBaseId, mainField + '[' + mainId + '][' + subFields[i] + '_pub]', mainPub); + } + subId = 0; + while ($(subFieldBaseId + '_' + subId).length != 0) { + updateSubPublicity(subFieldBaseId + '_' + subId, name + '[' + subId + '][pub]', mainPub); + ++subId; + } } - } - ); + } else { + if (subId == '') { + updateSubPublicity(mainFieldId + '_' + subField, mainField + '[' + mainId + '][' + subField + '_pub]', mainPub); + updateSubPublicity(mainFieldId + '_' + subField, mainField + '[' + mainId + '][' + subField + '][pub]', mainPub); + } else { + updateSubPublicity(mainFieldId + '_' + subField + '_' + subId, mainField + '[' + mainId + '][' + subField + '][' + subId + '][pub]', mainPub); + } + } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: