PageSourceSearch

https://www.ville-nievroz.fr/tzr/templates/generic.js

js ville-nievroz.fr collected 2026-10-02 15:28:19 UTC 48,952 bytes, 1,481 lines download raw bytes

1function sstree_toggle(elm,iopen,iclose) {
2 var newDisplay = "none";
3 if(iopen=='') iopen='/tzr/templates/images/folder-open.gif';
4 if(iclose=='') iclose='/tzr/templates/images/folder-closed.gif';
5 if(iopen=='none') iopen='';
6 if(iclose=='none') iclose='';
7 if(iclose!='none') elm.style.backgroundImage = 'url( '+iclose+' )';
8 var e = elm.nextSibling;
9 while (e != null) {
10  if (e.tagName == "OL" || e.tagName == "ol" || e.tagName == "ul" || e.tagName == "UL") {
11   if (e.style.display == "none") {
12    newDisplay = "block";
13    if(iopen!='none') {elm.style.backgroundImage = 'url( '+iopen+' )';};
14   }
15   break;
16  }
17  e = e.nextSibling;
18 }
19 while (e != null) {
20  if (e.tagName == "OL" || e.tagName == "ol" || e.tagName == "ul" || e.tagName == "UL") e.style.display = newDisplay;
21  e = e.nextSibling;
22 }
23}
24
25function sstree_toggleBullet(elm) {
26 var newDisplay = "none";
27 var e = elm.nextSibling;
28 while (e != null) {
29  if (e.tagName == "OL" || e.tagName == "ol" || e.tagName == "UL" || e.tagName == "ul") {
30   if (e.style.display == "none") newDisplay = "block";
31   break;
32  }
33  e = e.nextSibling;
34 }
35 while (e != null) {
36  if (e.tagName == "OL" || e.tagName == "ol" || e.tagName == "UL" || e.tagName == "ul") e.style.display = newDisplay;
37  e = e.nextSibling;
38 }
39}
40
41
42
43function sstree_collapseAll() {
44  var lists = document.getElementsByTagName('OL');
45  for (var j = 0; j < lists.length; j++)
46   lists[j].style.display = "none";
47  lists = document.getElementsByTagName('UL');
48  for (var j = 0; j < lists.length; j++)
49   lists[j].style.display = "none";
50  var e = document.getElementById("root");
51  e.style.display = "block";
52}
53function sstree_open(tag) {
54  var lists = document.getElementsByTagName('A');
55  for (var j = 0; j < lists.length; j++)
56   if(lists[j].id==tag) sstree_toggle(lists[j],'','');
57}
58
59if(typeof(TZR)=="undefined") TZR=new Object();
60if(typeof(TZR._sharescripts)=="undefined") TZR._sharescripts="/tzr/scripts/";
61if(typeof(TZR._sharetemplates)=="undefined") TZR._sharetemplates="/tzr/templates/";
62TZR.isFormOk=true;
63TZR.formValidation=true;
64TZR.validator=new Array();
65TZR.dependency=new Object();
66TZR.onsubmit=new Array();
67// validation des formulaires
68TZR.isShortTextValid = function (id,fmt,fieldlabel,color) {
69  var o = document.getElementById(id);
70  var phrase = o.value;
71  var resultat = fmt.test(phrase);
72  if(!resultat) {
73    TZR.setElementErrorState(o,false,color);
74    TZR.isFormOk=false;
75    return false;
76  } else {
77    TZR.setElementErrorState(o,true,color);
78    return true;
79  }
80}
81// validation des formulaires des champs evalutaiton/rating
82TZR.isEvalValid = function (id,fmt,fieldlabel,color,linktext,listid) {
83    if (fmt != '/(.+)/'){
84	return;
85    }
86    var o = jQuery("#container"+id);
87    if (o.data('clicked') != 1){
88	TZR.setElementErrorState(o.parent(),false,color);
89	TZR.isFormOk=false;
90	return false;
91    } else {
92	TZR.setElementErrorState(o.parent(),true,color);
93	return true;
94    }
95}
96// validation des formulaires
97TZR.isLinkValid = function (id,fmt,fieldlabel,color,linktext,listid) {
98  var o = document.getElementById(id);
99  var typ=o.type;
100  // Cas "radio" ou "checkbox"
101  if(typ=="radio" || typ=="checkbox"){
102    return TZR.isRadioValid(id,fmt,fieldlabel,color,linktext,listid);
103  }else{
104    var resultat = true;
105    // Cas "un select"
106    if(fmt=='compselect'){
107      resultat = false;
108      for(var i=0;i<o.options.length;i++){
109	if(o.options[i]!=null && o.options[i].selected && o.options[i].value!=''){
110	  resultat=true;
111	  break;
112	}
113      }
114    }else if(fmt=='') { // Cas "2 select non obligatoire"
115      for(var i=0;i<o.options.length;i++) if(o.options[i]!=null) o.options[i].selected=true;
116    } else if(fmt=='/(.+)/') { // Cas "2 select obligatoire"
117      if(o.options.length==0) resultat=false;
118      else for(var i=0;i<o.options.length;i++) if(o.options[i]!=null) o.options[i].selected=true;
119    } else if(document.getElementById("table"+id)!=undefined){ // Cas autocomplete multiple
120      if(document.getElementById("table"+id).tBodies[0].rows.length<2) resultat=false;
121      o=document.getElementById(linktext);
122    } else { // Autre cas : autocomplete, lien base doc...
123      var phrase = o.value;
124      var resultat = fmt.test(phrase);
125      if(linktext){
126	o=document.getElementById(linktext);
127      }
128    }
129    if(!resultat) {
130      TZR.setElementErrorState(o,false,color);
131      TZR.isFormOk=false;
132      return false;
133    } else {
134      TZR.setElementErrorState(o,true,color);
135      return true;
136    }
137  }
138}
139TZR.isRadioValid = function (id,fmt,fieldlabel,color,linktext,listid) {
140  var resultat=false;
141  var o=document.getElementById(id);
142  var l=listid.length;
143  for(var i=0;i<l;i++){
144    if(document.getElementById(listid[i]).checked){
145      resultat=true;
146      break;
147    }
148  }
149  var tab=TZR.getParent(o,'TABLE');
150  if(!resultat){
151    TZR.setElementErrorState(o,false,color,tab);
152    TZR.isFormOk=false;
153    return false;
154  } else {
155    TZR.setElementErrorState(o,true,color,tab);
156    return true;
157  }
158}
159TZR.isThesaurusValid=function(id,fmt,fieldlabel,color){
160  var o=document.getElementById("div"+id);
161  var ok=false;
162  jQuery('#table'+id+" input").each(function(i){
163    if(this.value!=''){
164      ok=true;
165      return false;
166    }
167  });
168  if(!ok){
169    TZR.setElementErrorState(o,false,color);
170    TZR.isFormOk=false;
171    return false;
172  } else {
173    TZR.setElementErrorState(o,true,color);
174    return true;
175  }
176}
177TZR.isCaptchaValid = function(id,fmt,fieldlabel,color){
178  var response=0;
179  o=document.getElementById(id);
180  jQuery.ajax({async:false,
181	       url:TZR._sharescripts+"ajax8.php?class=XModTable&function=xmodtable_captcha",
182	       cache:false,
183	       data:{value:o.value,id:id},
184	       success:function(resp){response=resp;}
185  });
186  if(response=='0') response=false;
187  else response=true;
188  if(!response) {
189    document.getElementById("ca"+id).onclick();
190    document.getElementById(id).value="";
191    TZR.setElementErrorState(o,false,color);
192    TZR.isFormOk=false;
193    return false;
194  } else {
195    TZR.setElementErrorState(o,true,color);
196    TZR.isFormOk=true;
197    return true;
198  }
199}
200TZR.isUploaderValid = function (id,fmt,fieldlabel,color) {
201  var o=jQuery('#'+id+"_cont div.uploadQueue")[0];
202  var nb=jQuery(o).find('div.uploadCancel').length;
203  var tocol=jQuery(o).find('div.uploadQueueItem');
204  if(nb>0) {
205    TZR.setElementErrorState(o,false,color,tocol);
206    TZR.isFormOk=false;
207    return false;
208  } else {
209    TZR.setElementErrorState(o,true,color,tocol);
210    return true;
211  }
212}
213TZR.isFileValid = function (id,fmt,fieldlabel,color,browsemods,allow_externalfile) {
214  var o = document.getElementById(id);
215  var tocol = o;
216  o.isValid = false;
217  if (o.value != '' || document.getElementById(id+'-old').value != '')
218    o.isValid = true;
219  else if (browsemods && document.getElementById(id+'-from').value != '')
220    o.isValid = true;
221  else if (allow_externalfile && document.getElementById(id+'-external').value != '')
222    o.isValid = true;
223  else if (jQuery('#'+id+'_cont').length) {
224    tocol = jQuery('#'+id+'_cont');
225    if(jQuery('#'+id+'_cont div.uploadQueueItem.uploadComplete:first').length)
226      o.isValid = true;
227  }
228  TZR.setElementErrorStyle(o,color,tocol);
229  if (!o.isValid) {
230    TZR.isFormOk = false;
231  }
232  return o.isValid;
233}
234TZR.setElementErrorState=function(o,state,color,tocol){
235  o.isValid=state;
236  TZR.setElementErrorStyle(o,color,tocol);
237}
238TZR.setElementErrorStyle=function(o,color,tocol){
239  if(!tocol) tocol=o;
240  tocol=jQuery(tocol);
241  if(!tocol[0]) return;
242
243  if(o.isValid==false){
244    if(tocol[0].isError) return;
245    tocol[0].isError=true;
246    if(color.charAt(0)=='#') {
247      tocol[0].obackgroundColor=tocol[0].style.backgroundColor;
248      tocol.css('background-color',color);
249    } else {
250      tocol.addClass(color);
251    }
252  } else {
253    if(!tocol[0].isError) return;
254    tocol[0].isError=false;
255    if(color.charAt(0)=='#') {
256      if(tocol[0].obackgroundColor) tocol.css('background-color',tocol[0].obackgroundColor);
257      else tocol.css('background-color','');
258    } else {
259      tocol.removeClass(color);
260    }
261  }
262}
263TZR.isFormValidWithAjax=function(f,method,overlay_target,color,callback){
264  if(typeof f!=='object') f=document.getElementById(f);
265  // Vide les erreurs précédentes
266  var error_el=jQuery('div.error',f);
267  error_el.html('');
268  // Prepare les données
269  var data=jQuery(f).serializeArray();
270  for(var i in data){
271    if(data[i].name=="function" || data[i].name=="_function") data[i].value=method;
272    if(data[i].name=="uniqid") delete data[i];
273  }
274  // Overlay
275  if(overlay_target){
276    if(overlay_target=='module-container') overlay_target=jQuery(f).parents('div.cv8-module-container');
277    else overlay_target=jQuery(overlay_target);
278    var overlay=TZR.setOverlay(overlay_target);
279  }else{
280    var overlay=null;
281  }
282  // Envoi
283  var ok=false;
284  jQuery.ajax({
285    url:f.action,
286    data:data,
287    async:false,
288    type:f.method
289  }).done(function(data){
290    if(overlay) TZR.unsetOverlay(overlay);
291    if(data.status=="success"){
292      ok=true;
293      if(callback) callback(true,data);
294    }else{
295      TZR.isFormOk=false;
296      if(callback){
297        if(callback(false,data)===false) return;
298      }
299      if(data.error){
300        for(var i in data.error){
301          error_el.append('<div class="error_message">'+data.error[i]+'</div>');
302        }
303        error_el.show();
304      }
305    }
306  });
307  return ok;
308}
309TZR.isIntervalValid = function (id,fmt,fieldlabel,color) {
310  var hiddenField = document.getElementById(id);
311  var pictoCalendar = jQuery('#pictoCalendar' + id);
312  var phrase = hiddenField.value;
313  var resultat = fmt.test(phrase);
314  if (!resultat) {
315    pictoCalendar.css("border", "1px solid red");
316    TZR.isFormOk = false;
317    return false;
318  }
319  pictoCalendar.css("border", "");
320  return true;
321}
322TZR.actualizeCaptcha=function(url,id){
323  document.getElementById('cimg'+id).src=url+"?id="+id+"&"+(new Date()).getTime();
324}
325TZR.getUrlTitle=function(url,color){
326  var urlu=document.getElementById("url"+url);
327  var urll=document.getElementById("label"+url);
328  urlu.style.backgroundImage="url('/tzr/templates/ico/general/indicator.gif')";
329  urlu.style.backgroundPosition="right center";
330  urlu.style.backgroundRepeat="no-repeat";
331  var reg=/^(((?!mailto)(?!\[)).+)$/;
332  if(!reg.test(urlu.value)){
333    urlu.obackgroundColor=urlu.style.backgroundColor;
334    urlu.style.backgroundColor=color;
335  }else{
336    var title=TZR.file_get_contents(TZR._sharescripts+'ajax8.php?function=xurldef_getPageTitle&class=XUrlDef&url='+escape(urlu.value));
337    if(title=="error"){
338      urlu.obackgroundColor=urlu.style.backgroundColor;
339      urlu.style.backgroundColor=color;
340    }else{
341      if(urlu.obackgroundColor) urlu.style.backgroundColor=urlu.obackgroundColor;
342      else urlu.style.backgroundColor='';
343      urll.value=title;
344    }
345  }
346  urlu.style.backgroundImage="";
347  urlu.style.backgroundPosition="";
348  urlu.style.backgroundRepeat="";
349}
350TZR.openPopup = function(url){
351  window.open(url,'','menubar=no,status=no,resizable=1,scrollbars=1,width=700,height=500');
352  return false;
353}
354TZR.validFormInPopup = function(f){
355  var ret=TZR.isFormValidWithFocus(f,true);
356  if(ret){
357    window.opener.name=TZR.uniqid('TZR');
358    document.editform.target=window.opener.name;
359    f.submit();
360    self.close();
361    return false;
362  }else{
363    return false;
364  }
365}
366TZR.isFormValid = function (f) {
367  return TZR.isFormValidWithFocus(f,false);
368}
369TZR.isFormValidWithFocus=function(f,foc) {
370  TZR.isFormOk=true;
371  TZR.errorGiveFocus=true;
372  for(var i=0;i<TZR.validator.length;i++){
373    if(typeof TZR.validator[i][0]!=='object') var o=document.getElementById(TZR.validator[i][0]);
374    else var o=TZR.validator[i][0];
375    if(o!=null && (o==f || o.form==f) && !jQuery(o).prop('data-disabled')) {
376      if(TZR.validator[i][99]){
377	TZR.isIdxValid(i);
378	if(foc) {
379	  if(!TZR.isFormOk) {
380            if(!TZR.errorGiveFocus) return false;
381	    if(TZR.validator[i][5]){
382	      if(typeof TZR.validator[i][5]=='string') o=document.getElementById(TZR.validator[i][5]);
383              else o=TZR.validator[i][5];
384            }
385	    jQuery(o).parents('fieldset.fieldsetAccordionClose').find('>legend').click();
386            var tabid = jQuery(o).parents('.tzr-tabcontent').attr('id');
387            if (typeof(tabid) != "undefined" ){
388              jQuery('li>a[href="#'+tabid+'"]').click();
389            }
390	    jQuery(o).focus();
391            if(jQuery(o).is(':not(:input),:hidden')) scrollToElement(jQuery(o).closest(':visible'));
392	    return false;
393	  }
394	}
395      }
396    }else if(!o){
397      TZR.validator.splice(i,1);
398      i--;
399    }
400  }
401  nb=TZR.onsubmit.length;
402  for(i=0; i<nb; i++) {
403    eval(TZR.onsubmit[i]);
404  }
405  if(!TZR.isFormOk) {
406    if(typeof(TZR.customValid)!='undefined')
407      return TZR.customValid(f);
408    else
409      return confirm('Some data are not valid. Save anyway ?');
410  }
411  return true;
412}
413TZR.isIdxValid = function (i) {
414   var isValid=false;
415   var val=TZR.validator[i];
416   if(val[4]=='Form')
417      isValid=TZR.isFormValidWithAjax(val[0],val[1],val[2],val[3],val[6]);
418   else if(val[4]=='XShortTextDef')
419      isValid=TZR.isShortTextValid(val[0],val[1],val[2],val[3]);
420   else if(val[4]=='XRealDef')
421      isValid=TZR.isShortTextValid(val[0],val[1],val[2],val[3]);
422   else if(val[4]=='XEvalDef')
423      isValid=TZR.isEvalValid(val[0],val[1],val[2],val[3]);
424   else if(val[4]=='XPasswdDef'){
425      isValid=TZR.isShortTextValid(val[0],val[1],val[2],val[3]);
426      if(isValid && document.getElementById(val[0]+'_HID')){
427	isValid=TZR.isShortTextValid(val[0]+'_HID',new RegExp('^'+document.getElementById(val[0]).value+'$'),val[2],val[3]);
428      }
429   }else if(val[4]=='XDocumentDef')
430      isValid=TZR.isShortTextValid(val[0],val[1],val[2],val[3],val[5]);
431   else if(val[4]=='XLinkDef')
432      isValid=TZR.isLinkValid(val[0],val[1],val[2],val[3],val[5],val[6]);
433   else if(val[4]=='XStringSetDef')
434      isValid=TZR.isLinkValid(val[0],val[1],val[2],val[3],val[5],val[6]);
435   else if(val[4]=='XThesaurusDef')
436      isValid=TZR.isThesaurusValid(val[0],val[1],val[2],val[3]);
437   else if(val[4]=='Captcha')
438      isValid=TZR.isCaptchaValid(val[0],val[1],val[2],val[3]);
439   else if(val[4]=='XFileUploader')
440      isValid=TZR.isUploaderValid(val[0],val[1],val[2],val[3]);
441   else if(val[4]=='XFileDef')
442      isValid=TZR.isFileValid(val[0],val[1],val[2],val[3],val[6],val[7]);
443   else if(val[4]=='XIntervalDef')
444      isValid=TZR.isIntervalValid(val[0],val[1],val[2],val[3],val[6],val[7]);
445   return isValid;
446}
447TZR.autoCompleteCache = {};
448TZR.addAutoComplete=function(id) {
449  var acfield = jQuery("#_INPUT" + id), hiddenfield;
450  if (acfield.length) {
451    hiddenfield = document.getElementById(id);
452  } else { // cas shorttext edit
453    acfield = jQuery("#" + id);
454  }
455  // init/empty cache
456  TZR.autoCompleteCache[acfield.attr('id')] = {};
457  acfield.keydown(function(event) {
458    if(event.keyCode!=13 && event.keyCode!=9 && hiddenfield)
459      hiddenfield.value="";
460  }).autocomplete({
461    autoFocus: true,
462    delay: 500,
463    minLength: 3,
464    source : function(request, response) {
465      var autocomplete = this.element.data('autocomplete');
466      // check cache
467      var term = request.term.toLowerCase().trim(),
468          cache = TZR.autoCompleteCache[acfield.attr('id')];
469
470      if (cache && cache[term]) {
471        response(cache[term]);
472        return;
473      }
474      for (cachedTerm in cache) {
475        var regexp = new RegExp((autocomplete.params.prefixSearch ? '^' : '') + cachedTerm);
476        if (regexp.test(term) && !cache[cachedTerm]) {
477          response();
478          return false;
479        }
480      }
481
482      jQuery.ajax({
483          url: autocomplete.url + '&q=' + request.term,
484          dataType: "json",
485          data: autocomplete.params,
486          success: function(data) {
487            TZR.autoCompleteCache[acfield.attr('id')][term] = data;
488            response(data);
489          }
490        });
491    },
492    select : function(event, ui) {
493      var autocomplete = jQuery(this).data('autocomplete');
494      if (autocomplete.callback && typeof autocomplete.callback == 'function') {
495        autocomplete.callback(autocomplete.params.id, ui.item.value, ui.item.label);
496      } else {
497        if (hiddenfield) {
498          hiddenfield.value = ui.item.value;
499        }
500        acfield.val(ui.item.label);
501      }
502      jQuery(hiddenfield).change();
503      return false; // job done
504    },
505    open: function() {
506      jQuery('.ui-autocomplete').css({width: '300px'});
507    },
508    focus: function( event, ui ) {
509      event.preventDefault();
510    }
511  });
512}
513TZR.autoCompleteMultipleValue=function(id,oid,v){
514  if(jQuery('#table'+id).find('input[value="'+oid+'"]').length>0) return;
515  var tr=TZR.addTableLine("table"+id,[undefined,v],0,false);
516  jQuery('input',tr.cells[0]).val(oid);
517  jQuery(tr).show();
518  jQuery('#_INPUT'+id).val('');
519}
520TZR.autoCompleteMultipleFields = function (id, oid, v) {
521  var autocomplete = jQuery('#' + id).data('autocomplete'),
522      relatedFields = autocomplete.params.relatedFields.split(','),
523      _values = v.split(', ');
524  jQuery('#' + id).val(_values[0]);
525  for (key in relatedFields) {
526    jQuery(':input[name="' + relatedFields[key] + '"]').val(_values[parseInt(key) + 1]);
527  }
528}
529TZR.isIdValid = function (id) {
530  found=false;
531  nb=TZR.validator.length;
532  for(i=0;i<nb;i++) {
533    if(id==TZR.validator[i][0]) {
534	if(!TZR.isIdxValid(i)){
535	    var valmess = jQuery("#"+id).data('pattern-error-message');
536	    if (typeof valmess != "undefined")
537		TZR.setCustomValidityMess(id, valmess);
538	    else
539		TZR.setCustomValidityMess(id, "");
540	    return false;
541	} else {
542	    TZR.setCustomValidityMess(id, "");
543	}
544    }
545  }
546  if(typeof(TZR.customOnBlur)!='undefined')
547    return TZR.customOnBlur(id);
548  return true;
549}
550TZR.setCustomValidityMess = function(id, valmess){
551    try{
552	document.getElementById(id).setCustomValidity(valmess);
553    } catch(except){
554	// IE9
555    }
556}
557TZR.copyDivToHidden = function (idsrc, iddst) {
558  var objsrc = document.getElementById(idsrc);
559  var objdst = document.getElementById(iddst);
560  if(objsrc.innerHTML=="...") objdst.value="";
561  else objdst.value = objsrc.innerHTML;
562  return true;
563}
564
565TZR.addOnSubmit=function (src) {
566  nb=TZR.onsubmit.length;
567  TZR.onsubmit[nb]=src;
568}
569TZR.addValidator=function(src){
570  if(typeof src[0]!=='object') var o=document.getElementById(src[0]);
571  else var o=src[0];
572  if(!o) return false;
573  if(!src[5] && src[4]=='Form') src[5]=jQuery('div.error:visible:first',o);
574  if(src[99]===undefined) src[99]=true;
575  var v=jQuery(o).data('validators');
576  if(!v) v=[src];
577  else v.push(src);
578  jQuery(o).data('validators',v);
579  TZR.validator.push(src);
580  return true;
581}
582TZR.changeValidatorsState=function(id,active){
583  if(!active) active=false;
584  var vs=jQuery('#'+id+',#url'+id).data('validators');
585  if(vs){
586    for(var i in vs){
587      vs[i][99]=active;
588    }
589  }
590}
591TZR.editSec=function (selfu, moid, oid, selectedfrom, _function) {
592  if (typeof _function == 'undefined') {
593    _function = 'secEditSimple';
594  }
595  
596  if(typeof(selectedfrom)!='undefined'){
597    if(typeof(selectedfrom)=='object'){
598      var f=document.forms['browse'+selectedfrom.uniqid];
599    }else{
600      var f=document.forms[selectedfrom];
601    }
602    if(!f || !TZR.checkBoxesIsChecked(f)){
603      if(oid){
604	oid="oid="+oid;
605      }else{
606	alert(TZR._noobjectselected);
607	return;
608      }
609    }else{
610      oid=jQuery(f).find('input:checked[name^=_selected]').serialize()+'&_selectedok=ok';
611    }
612  }else{
613    oid="oid="+oid;
614  }
615  window.open(selfu+'&function='+_function+'&template=xmodule/edit-sec.html&moid='+moid+'&tplentry=br&'+oid,
616	      'SecBrowser','width=600,height=350,resizable=yes,scrollbars=yes,dependent=yes');
617  return false;
618}
619
620TZR.autocomplete_cb = function (suggestion) {
621  if ( suggestion ) {
622    var inp = TZR.autocomplete_field;
623    var inp_enc = TZR.autocomplete_encoded_field;
624    inp_enc.value=suggestion[0];
625    // IE
626    if ( document.selection ) {
627      var sel = document.selection.createRange();
628      sel.text = suggestion[1];
629      sel.move( 'character', -suggestion[1].length );
630      sel.findText( suggestion[1] );
631      sel.select();
632    } else {
633      var preLength = inp.value.length;
634      inp.value += suggestion[1];
635      inp.selectionStart = preLength;
636      inp.selectionEnd   = inp.value.length;
637    }
638  }
639}
640
641TZR.autocomplete_running=false;
642TZR.autocomplete_precheck = function ( tab, field, myform, e ) {
643  // Check for alpha numeric keys
644  TZR.autocomplete_field = myform.elements[field+'_HID'];
645  TZR.autocomplete_encoded_field = myform.elements[field];
646  if ( ( e.keyCode >= 48 && e.keyCode <= 57 ) || ( e.keyCode >= 65 && e.keyCode <= 90 ) ) {
647    x_xlinkdef_autocomplete( tab, field, TZR.autocomplete_field.value, TZR.autocomplete_cb);
648  }
649}
650
651// Inverse la coche de toutes les checkbox d'un formulaire
652TZR.toggleCheckBoxes = function(src,startn,endn) {
653  if(!startn) startn='selectstart';
654  var start=false;
655  for(var i=0;i<src.elements.length;i++) {
656    if(endn){
657      if(src.elements[i].value==endn) break;
658    }
659    if(start) src.elements[i].checked = !src.elements[i].checked;
660    if(src.elements[i].value==startn) start=true;
661  }
662}
663// Coche ou decoche toutes les checkbox d'un formulaire
664TZR.checkBoxes = function(src,value,startn,endn) {
665  if(!startn) startn='selectstart';
666  var start=false;
667  for(var i=0;i<src.elements.length;i++) {
668    if(endn){
669      if(src.elements[i].value==endn) break;
670    }
671    if(start && (src.elements[i].type=='checkbox')) src.elements[i].checked=value;
672    if(src.elements[i].value==startn) start=true;
673  }
674}
675// Retourne vrai si au moins une checkbox est coché dans le formulaire
676TZR.checkBoxesIsChecked = function(src,startn,endn,nameregex) {
677  if(!startn) startn='selectstart';
678  var start=false;
679  for(var i=0;i<src.elements.length;i++) {
680    if(endn){
681      if(src.elements[i].value==endn) break;
682    }
683    if(src.elements[i].value==startn){
684      start=true;
685      continue;
686    }
687    if(nameregex && !nameregex.test(src.elements[i].name)) continue;
688    if(start && src.elements[i].checked) return true;
689  }
690  return false;
691}
692
693TZR.referer = function(markers,lang) {
694 var maintenant = new Date();
695 var msg=maintenant.toLocaleString();
696 var n1=new Image();
697 n1.src=TZR._sharescripts+'marker.php?_marks='+markers+'&_lang='+lang+'&alea='+msg;
698}
699TZR.refererWithTotalOn = function(markers,lang,totalon) {
700 var maintenant = new Date();
701 var msg=maintenant.toLocaleString();
702 var n1=new Image();
703 n1.src=TZR._sharescripts+'marker.php?_marks='+markers+'&_lang='+lang+'&_total='+totalon+'&alea='+msg;
704}
705
706TZR.setDateEmpty = function(id) {
707  document.getElementById(id).value='';
708  return false;
709}
710
711TZR.selectDocument=function(selfu,moid,id,showfiles){
712  if(typeof(showfiles)=='undefined') showfiles=1;
713  var w=window.open(selfu+'&function=index2Light&nosess=1&template=xmoddocmgt/poptree.html&moid='+moid+
714		'&tplentry=br&showfiles='+showfiles+'&_raw=1&_silent=1&action=selectDoc&target='+id,
715	      	'DocumentBrowser','width=400,height=600,resizable=yes,scrollbars=yes,dependent=yes');
716}
717
718TZR.setDocumentEmpty = function(id) {
719  document.getElementById("id_"+id).value='';
720  document.getElementById("id_INPUT"+id).value='';
721  return false;
722}
723
724TZR.selectTopic = function(moid, selectedTopicOid, onUnloadCallback) {
725  var params = {
726    'function': 'home',
727    'template': 'xmodinfotree/popaction.html',
728    'moid': moid,
729    'tplentry': 'mit',
730    'do': 'showtree',
731    'action': 'selectTopic',
732    'maxlevel': '5',
733    '_selected': {}
734  };
735  if (typeof(selectedTopicOid) == 'string' && selectedTopicOid.length > 0)
736    params._selected[selectedTopicOid] = '1';
737  var w = window.open(window.location.pathname+'?'+jQuery.param(params),'TreeBrowser','width=400,height=600,resizable=yes,scrollbars=yes,dependent=yes');
738  if (typeof(onUnloadCallback) == 'function')
739    w.onunload = onUnloadCallback;
740}
741
742TZR.applySelected=function(func,form,message,template,tplentry,noselect) {
743   if(TZR.checkBoxesIsChecked(form)){
744     form.target='_self';
745     form._function.value=func;
746     form.message.value=message;
747     if(template!==false){
748       form.template.value=template;
749       form._next.value="";
750     }
751     if(tplentry!==false) form.tplentry.value=tplentry;
752     if(!form.onsubmit || form.onsubmit()) form.submit();
753   }else{
754     alert(noselect);
755     return;
756   }
757}
758
759TZR.doubleAdd = function(src,dst,morder) {
760  var i=0;
761  if(morder) {
762    if (jQuery(dst).find('optgroup').length > 0) { // grouped options
763      for (i=0; i<src.options.length; i++) {
764        if (src.options[i].selected) {
765          order = parseInt(jQuery(src.options[i]).attr('order'));
766          groupId = src.options[i].parentNode.id.replace(/(unselected_)?(.*)/, "$2");
767          dstGroup = jQuery(dst).find('optgroup[id$="'+groupId+'"]');
768          opts = jQuery(dstGroup).find('option');
769          for (j=0; j<opts.length; j++) {
770            if (parseInt(jQuery(opts[j]).attr('order')) > order)
771              break;
772          }
773          if (opts[j])
774            jQuery(opts[j]).before(src.options[i]);
775          else
776            jQuery(dstGroup).append(src.options[i]);
777          i--;
778        }
779      }
780    } else { // non grouped options
781      for (i=0; i<src.options.length; i++) {
782        if (src.options[i].selected) {
783          order = parseInt(jQuery(src.options[i]).attr('order'));
784          for (j=0; j<dst.options.length; j++) {
785            if (parseInt(jQuery(dst.options[j]).attr('order')) > order)
786              break;
787          }
788          if (dst.options[j])
789            jQuery(dst.options[j]).before(src.options[i]);
790          else
791            jQuery(dst).append(src.options[i]);
792          i--;
793        }
794      }
795    }
796  } else {
797    for (i=src.options.length-1; i>=0; i--) {
798      if (src.options[i].selected) {
799        jQuery(dst).append(src.options[i]);
800      }
801    }
802  }
803  jQuery(src).val('');
804  jQuery(dst).val('');
805  // trigger the change event for additionnal control (FO usage)
806  jQuery(dst).change();
807}
808
809TZR.idxidx=10;
810TZR.addTableLine = function(tableid,td,trtoclone,del) {
811  if(td[1]=='--') return;
812  if(typeof(trtoclone)=='undefined') trtoclone=0;
813  if(typeof(del)=='undefined') del=true;
814  var table = document.getElementById(tableid);
815  var tbody = table.tBodies[0];
816  var tr = tbody.rows[trtoclone].cloneNode(true);
817  if(del){
818    for(i=0;i<tr.cells.length; i++) {
819      tr.cells[i].innerHTML="";
820    }
821  }
822  table.tBodies[0].appendChild(tr);
823  var td3;
824  for(i=0;i<td.length; i++) {
825    if(td[i]!=undefined){
826      td3=td[i].replace(/xidxid/g,'xid'+TZR.idxidx);
827      jQuery(tr.cells[i]).html(td3);
828    }
829  }
830  TZR.idxidx++;
831  return tr;
832}
833
834/* ajout d'une valeur a partir d'une combo */
835TZR.addValueToShortText = function(text, multi, sep) {
836   var text1 = document.getElementById(text);
837   var combo1 = document.getElementById(text+'_H');
838   if(combo1.selectedIndex==0) return;
839   if(multi) {
840     if(text1.value=='') sep='';
841     text1.value+=sep+combo1.options[combo1.selectedIndex].text;
842   } else {
843     text1.value=combo1.options[combo1.selectedIndex].text;
844   }
845   jQuery(text1).trigger('change');
846   return;
847}
848
849/* trouve le tag "parentTagName" parent de "element" */
850TZR.getParent = function(element, parentTagName) {
851  if ( ! element ) return null;
852  else if ( element.nodeType == 1 && element.tagName.toLowerCase() == parentTagName.toLowerCase() ) return element;
853  else return TZR.getParent(element.parentNode, parentTagName);
854}
855
856/* supprimer une ligne dans un tableau */
857TZR.delLine = function(link) {
858  var td = link.parentNode;
859  var table = TZR.getParent(td, 'TABLE');
860  var tbody = table.tBodies[0];
861  tbody.removeChild(TZR.getParent(td, 'TR'));
862}
863
864// Recupere le contenu d'une url via ajax en synchrone
865TZR.file_get_contents=function(url,nocache){
866    var req = null;
867    try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {
868        try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {
869            try { req = new XMLHttpRequest(); } catch(e) {}
870        }
871    }
872    if (req == null) throw new Error('XMLHttpRequest not supported');
873    if(typeof(nocache)!='undefined'){
874      url += (url.match(/[?]+/) ? '&' : '?' ) + 'uniqid=' + TZR.uniqid();
875    }
876    req.open("GET", url, false);
877    req.send(null);
878    return req.responseText;
879}
880TZR.winEditor = null;
881TZR.openhtmlfileeditor = function(options){
882  var url = options.url+'&formid='+options.uniqid+'&editflag='+escape(options.editflag)+'&uploader='+escape(options.uploader)+'&downloader='+escape(options.downloader);
883  try{
884    if(TZR.winEditor.closed) throw "Closed";
885    TZR.winEditor.location = url;
886    TZR.winEditor.focus();
887  } catch(e){
888    TZR.winEditor = window.open(url, 'file editor', 'width=800px,height=700px;')
889  }
890}
891// Génére un identifiant unique avec un prefix eventuel
892TZR.uniqid=function(prefix){
893  if(typeof(prefix)=='undefined') prefix="";
894  var alea=Math.random()*1000000000;
895  return prefix+alea.toString();
896}
897TZR.addDependency=function(ftype,fd,f,vd,v,op,s,nochange){
898  if(typeof(TZR.dependency[fd])=='undefined'){
899    TZR.dependency[fd]=new Object();
900    TZR.dependency[fd]['_depfields']=new Object();
901    TZR.dependency[fd]['_=']=new Object();
902    TZR.dependency[fd]['_!=']=new Object();
903  }
904  if(vd=='') vd='_empty';
905  if(op=='='){
906    if(typeof(TZR.dependency[fd]['_='][vd])=='undefined')
907      TZR.dependency[fd]['_='][vd]=new Object();
908  }else{
909    if(typeof(TZR.dependency[fd]['_!='][vd])=='undefined')
910      TZR.dependency[fd]['_!='][vd]=new Object();
911  }
912  TZR.dependency[fd]['_depfields'][f]=1;
913  if(op=='=')
914    TZR.dependency[fd]['_='][vd][f]={field:f,ftype:ftype,value:v,style:s,op:op,nochange:nochange};
915  else
916    TZR.dependency[fd]['_!='][vd][f]={field:f,ftype:ftype,value:v,style:s,op:op,nochange:nochange};
917}
918TZR.activeDependency=function(f){
919  jQuery(f).find('select').bind('change',{form:f},TZR.checkDependency);
920  jQuery(f).find(':checkbox,:radio').bind("click",{form:f},TZR.checkDependency);
921  var els=jQuery(f).find('select');
922  for(var i=0;i<els.length;i++){
923    var fd = jQuery(els[i]).attr('name');
924    if(fd) fd = fd.replace("[]","");
925    if(typeof(TZR.dependency[fd])!='undefined')
926      jQuery(els[i]).triggerHandler("change");
927  }
928  var oks=new Object();
929  var els=jQuery(f).find(':checkbox:checked,:radio:checked');
930  for(var i=0;i<els.length;i++){
931    jQuery(els[i]).triggerHandler("click");
932    oks[els[i].name]=1;
933  }
934  var els=jQuery(f).find(':checkbox,:radio');
935  for(var i=0;i<els.length;i++){
936    if(els[i].checked || oks[els[i].name]==1) continue;
937    jQuery(els[i]).triggerHandler("click");
938    oks[els[i].name]=1;
939  }
940  // voir un generique tzrload ... (voir jcp)
941  // + correction dans xmodtable/edit
942  if (TZR.linkedfields != undefined)
943    TZR.linkedfields.init(f);
944}
945// Dependance uniquement sur select simple, select multiple, radio et checkbox de booleen
946TZR.checkDependency=function(e){
947  var t=e.target;
948  var n=t.name;
949  var valList=[].concat(jQuery(t).val());
950
951  if(typeof(n)=='undefined' || n=="") return;
952  if(t.type=="hidden") return;
953  if(t.type=="radio" && !t.checked) valList=[];
954  if(t.type=="checkbox"){
955    n=n.replace(/(\[.+\])$/g,"");
956    n=n.replace(/(_HID)$/g,"");
957    if(t.checked) valList=["1"];
958    else valList=["2"];
959  }
960  if(t.type=="select-multiple"){
961    n=n.replace("[]","");
962  }
963  if(valList.length==0 || (valList.length==1 && !valList[0])) valList=['_empty'];
964  if(typeof(TZR.dependency[n])=='undefined') return;
965
966  for(var v in TZR.dependency[n]['_=']) {
967    // Si la valeur dépendante (v) est dans la liste des val sélectionnées
968    if(valList.indexOf(v)!=-1){
969      for(var i in TZR.dependency[n]['_='][v]){
970        var dep=TZR.dependency[n]['_='][v][i];
971        TZR.setDependencyValue(e.data.form,dep.field,dep.ftype,dep.value,dep.nochange);
972        if(!e.data.nostyle) TZR.setDependencyStyle(dep.field,dep.style);
973      }
974    }
975  }
976
977  for(var v2 in TZR.dependency[n]['_!=']){
978    // Si la valeur dépendante (v2) n'est pas dans la liste des val sélectionnées
979    if(valList.indexOf(v2)==-1){
980      for(var i in TZR.dependency[n]['_!='][v2]){
981        var dep=TZR.dependency[n]['_!='][v2][i];
982        TZR.setDependencyValue(e.data.form,dep.field,dep.ftype,dep.value,dep.nochange);
983        if(!e.data.nostyle) TZR.setDependencyStyle(dep.field,dep.style);
984      }
985    }
986  }
987}
988
989TZR.setDependencyStyle=function(field,style){
990  var toStyle=document.getElementById('cont-'+field);
991  if(typeof(toStyle)=='undefined' || !toStyle){
992      toStyle=document.getElementById('cv8d-displayobj-field-'+field);
993  }
994  if(typeof(toStyle)!='undefined' && toStyle){
995    if(style=='hidden'){
996      toStyle.style.display='none';
997      jQuery(toStyle).find(":input").prop('data-disabled',true);
998    }else if(style=="invalid"){
999      jQuery(toStyle).find(":input").attr('disabled',true);
1000      jQuery(toStyle).find(":input").prop('data-disabled',true);
1001    }else{
1002      jQuery(toStyle).find(":input").attr('disabled',false);
1003      jQuery(toStyle).find(":input").prop('data-disabled',false);
1004      toStyle.style.display='';
1005    }
1006    TZR.checkFieldsGroupsVisibility(toStyle);
1007  }
1008}
1009TZR.setDependencyValue=function(form,field,ftype,value,nochange){
1010  if(!nochange || nochange=="0"){
1011    TZR.setValue(form,field,ftype,value);
1012    if(typeof(TZR.dependency[field])=='undefined') return;
1013    TZR.checkDependency({target:{name:field,value:value},data:{nostyle:false,form:form}});
1014  }
1015}
1016TZR.checkFieldsGroupsVisibility = function(field){
1017  var group = jQuery(field).parents('fieldset.fieldsetAccordion');
1018  var conts = jQuery("*[id^='cont-']", jQuery(group));
1019  if (conts.length > 0) {
1020    var show = false;
1021    conts.each(function(ii, o){
1022      if (jQuery(o).css('display') != 'none'){
1023        show = true;
1024      }
1025     });
1026    if (show){
1027      jQuery(group).show();
1028    } else {
1029      jQuery(group).hide();
1030    }
1031  }
1032}
1033TZR.setValue=function(form,field,ftype,value){
1034  if(typeof(field)=='string' && !form){
1035    fid=document.getElementById(field);
1036    field=fid.name;
1037    form=fid.form;
1038  }else if(typeof(field)=='string' && typeof(form)=='string'){
1039    form=jQuery('form[name='+form+']').get(0);
1040  }
1041
1042  if(ftype=="XLinkDef" || ftype=="XThesaurusDef") TZR.setLinkValue(form,field,value);
1043  else TZR.setTextValue(form,field,value);
1044}
1045
1046// form (objet), field (string)
1047TZR.setLinkValue=function(form,field,value){
1048  var cont=document.getElementById('cont-'+field);
1049  if(typeof(cont)=='undefined' || !cont){
1050    cont=document.getElementById('cv8d-displayobj-field-'+field);
1051  }
1052
1053  var ret=jQuery(cont).find(":radio[name='"+field+"']").val([value]);
1054  if(ret.length==0) var ret=jQuery(cont).find("select[name='"+field+"']").val(value);
1055  if(ret.length==0) var ret=jQuery(cont).find("select[name='"+field+"[]']").val(value);
1056  if(ret.length==0) var ret=jQuery(cont).find(":checkbox[name^='"+field+"[']").val([value]);
1057  if(!value && ret.length==0) var ret=jQuery(cont).find("tr:not('.model') a.xthesaurus-del").click();
1058}
1059TZR.setTextValue=function(form,field,value){
1060  if(form.elements[field]) form.elements[field].value=value;
1061}
1062
1063// Affiche du contenu centré dans l'écran avec une div d'arriere plan pleine page
1064// content est soit du texte, soit l'id d'un objet deja existant
1065TZR.dispFullScreenContent=function(content,color,op){
1066  if(!color) color="#000000";
1067  if(!op) op=0.2;
1068
1069  var div=document.getElementById('fsoverlay');
1070  if(!div){
1071    jQuery("body").append('<div id="fsoverlay"></div>');
1072    jQuery("#fsoverlay").css({position:"absolute", zIndex:99998, padding:0, margin:0, top:0, left:0, background:color,
1073	  	              opacity:op, width:"100%", height:jQuery(document).height()});
1074  }
1075  if(content.substr(0,1)!="#"){
1076    jQuery("#fscontent").remove();
1077    jQuery("body").append('<div id="fscontent"></div>');
1078    jQuery("#fscontent").css({position:"absolute", zIndex:99999, padding:0, margin:0, top:0, left:0});
1079    jQuery("#fscontent").html(content);
1080    jQuery("#fscontent").css({top:(jQuery(window).height()-jQuery("#fscontent").outerHeight())/2+jQuery(window).scrollTop(),
1081    				    left:(jQuery(window).width()-jQuery("#fscontent").outerWidth())/2, visibility:"visible"});
1082  }else{
1083    jQuery(content).css({visibility:"visible", display:"block"});
1084    jQuery(content).css({position:"absolute", zIndex:99999, padding:0, margin:0,
1085				    top:(jQuery(window).height()-jQuery(content).outerHeight())/2+jQuery(window).scrollTop(),
1086				    left:(jQuery(window).width()-jQuery(content).outerWidth())/2});
1087  }
1088}
1089TZR.hideFullScreenContent=function(content){
1090  jQuery("#fsoverlay").remove();
1091  if(content!=undefined && content.substr(0,1)=="#"){
1092    jQuery(content).css('display','none');
1093  }else{
1094    jQuery("#fscontent").remove();
1095  }
1096}
1097
1098/* Fonctions pour faciliter la gestion des champs préremplis avec leur libellé */
1099// Initialise les différentes propiétés du champ (o=objet, l=libellé)
1100function inputInit(o,l,cpltblur){
1101  if(cpltblur==undefined) cpltblur=true;
1102  if(typeof o=="string") { o=document.getElementById(o); }
1103  if(o.type=="text" || o.type=="textarea" || o.type=="password"){
1104    o.cpltblur=cpltblur;
1105    o.ovalue=l;
1106    if(o.value=="") o.value=l;
1107    o.onfocus=delValue;
1108    o.onblur=retablishValue;
1109    o.onchange=function(){};
1110  }else if(o.type=="select-one"){
1111    o.options[0].text=l;
1112  }
1113}
1114// Efface le contenu d'un champ (o=objet (se renseigne automatiquement sur un onfocus))
1115function delValue(o){
1116  if(o==undefined || o.type=="focus") o=this;
1117  if(o.value==o.ovalue){
1118    o.value="";
1119  }else{
1120    var r=new RegExp("^"+o.ovalue+" : ","");
1121    o.value=o.value.replace(r,"");
1122  }
1123}
1124// Rétabli le libellé si necessaire lors de la perte du focus (o=objet (se renseigne automatiquement sur un onblur))
1125function retablishValue(o){
1126  if(o==undefined || o.type=="blur") o=this;
1127  if(o.value==""){
1128    o.value=o.ovalue;
1129  }else if(o.cpltblur){
1130    o.value=o.ovalue+" : "+o.value;
1131  }
1132}
1133// A appeller sur le submit pour vider les champs non saisis
1134function checkFields(f){
1135  l=f.elements.length;
1136  for(i=0;i<l;i++){
1137    if((f.elements[i].type=="text" || f.elements[i].type=="textarea")){
1138      if(f.elements[i].value==f.elements[i].ovalue){
1139        f.elements[i].value = "";
1140      }else{
1141        var r = new RegExp("^" + f.elements[i].ovalue + " : ", "");
1142        f.elements[i].value = f.elements[i].value.replace(r, "");
1143      }
1144    }
1145  }
1146}
1147
1148/* Fonctions pour formater les champs date et heure/durée (besoin de jquery.ui.datepicker)*/
1149TZR.formatDate=function(obj,fmt){
1150  if(obj.value[0]=='=') return;
1151  if(fmt==undefined) fmt=jQuery(obj).datepicker('option','dateFormat');
1152  var val=obj.value;
1153  if(val=='') return false;
1154  // traitement interval
1155  fmt_re = fmt.replace(new RegExp('dd|mm|y','g'), '\\d{1,2}').replace(new RegExp('\/','g'),'[\/.-]');
1156  range_pattern = new RegExp('('+fmt_re+')\\s*\<\>\\s*('+fmt_re+')');
1157  matches = val.match(range_pattern);
1158  if (matches != null && matches.length == 3)
1159    dates = new Array(matches[1], matches[2]);
1160  else
1161    dates = new Array(val);
1162  values = new Array();
1163  var fmttab=fmt.split(/[\/.-]/);
1164  for (i=0; i<dates.length; i++) {
1165    var tab=dates[i].split(/[\/.-]/);
1166    var date = jQuery(obj).datepicker('getDate');
1167    for (j=0; j<fmttab.length; j++){
1168      if((fmttab[j]=='dd' || fmttab[j]=='d') && tab[j]!=undefined && tab[j]!='') date.setDate(tab[j]);
1169      if((fmttab[j]=='mm' || fmttab[j]=='m') && tab[j]!=undefined && tab[j]!='') date.setMonth(tab[j]-1);
1170      if((fmttab[j]=='yy' || fmttab[j]=='y') && tab[j]!=undefined && tab[j]!=''){
1171        if(tab[j].length==1) date.setYear("200"+tab[j]);
1172        else if(tab[j].length==2) date.setYear("20"+tab[j]);
1173        else if(tab[j].length==3) date.setYear("2"+tab[j]);
1174        else date.setYear(tab[j]);
1175      }
1176    }
1177    values[i] = jQuery.datepicker.formatDate(fmt,date);
1178  }
1179  obj.value = values.join(' <> ');
1180}
1181TZR.format2dates=function(obj,b,e,fmt){
1182  if(fmt==undefined) fmt=jQuery.datepicker._defaults.dateFormat;
1183  var form=obj.form;
1184  var b=form.elements[b];
1185  var e=form.elements[e];
1186  TZR.formatDate(obj);
1187  var begindate=jQuery.datepicker.parseDate(fmt,b.value);
1188  var enddate=jQuery.datepicker.parseDate(fmt,e.value);
1189  if(obj==b && begindate>enddate) e.value=b.value;
1190  else if(obj==e && begindate>enddate) b.value=e.value;
1191}
1192TZR.formatHour=function(obj,n){
1193  val=obj.value;
1194  tab=val.split(":");
1195  var rtab=new Array();
1196
1197  if(/^[0-9]$/.test(tab[0])) {
1198    rtab[0]="0"+tab[0];
1199  }else if(/^[0-9]{2}$/.test(tab[0])) {
1200    rtab[0]=tab[0];
1201  }else{
1202    return;
1203  }
1204  if(n>1){
1205   if(!tab[1]){
1206     rtab[1]="00";
1207   }else if(/^[0-9]$/.test(tab[1])){
1208     rtab[1]="0"+tab[1];
1209   }else if(/^[0-9]{2}$/.test(tab[1])) {
1210     rtab[1]=tab[1];
1211   }else{
1212     return;
1213   }
1214  }
1215  if(n>2){
1216   if(!tab[2]){
1217     rtab[2]="00";
1218   }else if(/^[0-9]$/.test(tab[2])){
1219     rtab[2]="0"+tab[2];
1220   }else if(/^[0-9]{2}$/.test(tab[2])) {
1221     rtab[2]=tab[2];
1222   }else{
1223     return;
1224   }
1225  }
1226  obj.value=rtab.join(":");
1227}
1228
1229TZR.format2hours=function(obj,n,b,e,bd,ed){
1230  var form=obj.form;
1231  b=form.elements[b];
1232  e=form.elements[e];
1233  if(bd!=undefined) bd=form.elements[bd];
1234  if(ed!=undefined) ed=form.elements[ed];
1235  TZR.formatHour(obj,n);
1236  var reg=/^[0-9]{2}(:[0-9]{2})?(:[0-9]{2})?$/;
1237  var tab=obj.value.split(":");
1238  if(obj.value==""){
1239    b.value="";
1240    e.value="";
1241  }else if(obj==b && b.value>e.value && (bd==undefined || ed==undefined || bd.value==ed.value) && reg.test(b.value)){
1242    var hour=parseFloat(tab[0]);
1243    var minute=parseFloat(tab[1]);
1244    if(hour==23) e.value="23:59";
1245    else e.value=(hour+1)+":"+minute;
1246    TZR.formatHour(e,n);
1247  }else if(obj==e && b.value>e.value && (bd==undefined || ed==undefined || bd.value==ed.value) && reg.test(e.value)){
1248    var hour=parseFloat(tab[0]);
1249    var minute=parseFloat(tab[1]);
1250    if(hour==0) b.value="00:00";
1251    else b.value=(hour-1)+":"+minute;
1252    TZR.formatHour(b,n);
1253  }
1254}
1255
1256
1257/* Fonction du champ couleur */
1258function colourPickerCallback(acolor){
1259  TZR.ColourPicker.setFieldColor(acolor);
1260}
1261function colourPickerClose(acolor){
1262  TZR.ColourPicker.hide();
1263}
1264
1265TZR.ColourPicker = {
1266  parent:null,
1267  target:null,
1268  control:null,
1269  lastColor:'#7f7f7f',
1270  myAppName:'ColourPicker',
1271  myfield:null,
1272  init:function(target){
1273    if(!this.target){
1274      this.target=target;
1275      this.parent=document.getElementById(target).parentNode;
1276      swfobject.embedSWF('/tzr/templates/flash/Colourpicker.swf',target,"435","220","8.0.0",null,{},{menu:false,allowScriptAccess:"sameDomain"},{name:this.myAppName,id:this.myAppName});
1277    }
1278  },
1279  initField:function(field){
1280    var value;
1281    if(field) this.myField = field;
1282    else field=this.myField;
1283    TZR.ColourPicker.show(field);
1284    var swf=this.getMyApp();
1285    if(swf.setColour){
1286      if(field.value) value=field.value;
1287      else value=this.lastColor;
1288      swf.setColour(value, field.name);
1289    }else{
1290      setTimeout("TZR.ColourPicker.initField()", 250);
1291    }
1292  },
1293  show:function(field){
1294    coor=jQuery(field).offset();
1295    this.parent.style.left = (coor.left+field.clientWidth+10)+"px";
1296    this.parent.style.top = coor.top+"px";
1297    if(this.control) clearInterval(this.control);
1298    this.control=setInterval("if(!document.getElementById('"+field.id+"')) TZR.ColourPicker.hide();",1000);
1299  },
1300  hide:function(){
1301    this.parent.style.top = '-500px';
1302    clearInterval(this.control);
1303    this.control=null;
1304  },
1305  setFieldColor:function(acolor){
1306    TZR.ColourPicker.hide();
1307    this.lastColor=acolor;
1308    document.getElementById('col'+this.myField.id).style.backgroundColor=acolor;
1309    this.myField.value=acolor;
1310  },
1311  getMyApp:function () {
1312    if (navigator.appName.indexOf ("Microsoft") !=-1) {
1313      return window[this.myAppName];
1314    } else {
1315      return document[this.myAppName];
1316    }
1317  }
1318}
1319// fonctions des champs de geodesiccoordinates
1320TZR.geodesic = {
1321  geoSearch:null,
1322  dms2dd:function(inid, outid){
1323    var dms = document.getElementById(inid).value;
1324    var exp = new RegExp(/[ ]*([0-9]{1,2})° ([0-9]{1,2})' ([0-9]{1,2}\.[0-9]{0,3})'' ([NS]{1})[ ]+([0-9]{1,3})° ([0-9]{1,2})' ([0-9]{1,2}\.[0-9]{0,3})'' ([WOE]{1})/);
1325    if (exp.test(dms)){
1326      var dd = document.getElementById(outid);
1327      var dlng = RegExp.$5;
1328      var mlng = RegExp.$6;
1329      var slng = RegExp.$7;
1330      var lng = RegExp.$8;
1331      var dlat = RegExp.$1;
1332      var mlat = RegExp.$2;
1333      var slat = RegExp.$3;
1334      var lat = RegExp.$4;
1335      if (lat == 'S'){
1336	lat = '-';
1337      } else {
1338	lat = '';
1339      }
1340      if (lng == 'W' || lng == 'O'){
1341	lng = '-';
1342      } else {
1343	lng = '';
1344      }
1345      var ddlat = parseInt(dlat) + parseFloat(mlat/60) + parseFloat(slat/3600);
1346      var ddlng = parseInt(dlng) + parseFloat(mlng/60) + parseFloat(slng/3600);
1347      dd.value = lat+ddlat+';'+lng+ddlng;
1348    }else{
1349      //      var dd = document.getElementById('dd').value='####';
1350    }
1351  },
1352  setPointCoordinates:function(field, rawvalue, dmsvalue){
1353    document.getElementById(field.fid).value = rawvalue;
1354    document.getElementById('dms'+field.fid).value = dmsvalue;
1355    document.getElementById(field.fid+'_autogc').checked = false;
1356    this.geocodeauto(document.getElementById(field.fid+'_autogc'), field.fid);
1357  },
1358  geocodeauto:function(cb, fid){
1359    if (cb.checked){
1360      document.getElementById(fid+'_b1').style.display='block';
1361      document.getElementById(fid+'_b2').style.display='block';
1362    } else {
1363      document.getElementById(fid+'_b1').style.display='none';
1364      document.getElementById(fid+'_b2').style.display='none';
1365      document.getElementById(fid+'_unchanged').value = '0';
1366      document.getElementById(fid+'_accuracy1').innerHTML = '';
1367      document.getElementById(fid+'_upd').innerHTML = '';
1368      document.getElementById(fid+'_accuracy2').value = 'N/A';
1369    }
1370
1371  },
1372    openGeoSearch:function( url, fname, fid, ftable, foptions){
1373    var v = document.getElementById(fid).value;
1374    if (v != ';'){
1375      var c = v.split(';');
1376      var newp = false;
1377      var lat = c[0];
1378      var lng = c[1];
1379    } else {
1380      var newp = true;
1381      var lat = 0;
1382      var lng = 0;
1383    }
1384    try{
1385	TZR.geodesic.geoSearch.setPoint({table:ftable, name:fname, id:fid, newpoint:newp, lat:lat, lng:lng, options:foptions});
1386	TZR.geodesic.geoSearch.focus();
1387    }catch(e){
1388	var foptionsu = '';
1389	for(o in foptions){
1390	    foptionsu = '&foptions['+o+']='+escape(foptions[o]);
1391	}
1392	TZR.geodesic.geoSearch = window.open(url+'&fid='+fid+'&ftable='+ftable+'&fname='+fname+'&flatlng='+escape(v)+foptionsu, 'GeoSearch',"resizable=no,width=700,height=530,left=100,top=100");
1393	TZR.geodesic.geoSearch.focus();
1394    }
1395  },
1396  clear:function(fid){
1397    document.getElementById(fid).value='';
1398    document.getElementById('dms'+fid).value='';
1399    document.getElementById(fid).value='';
1400    document.getElementById(fid+'_accuracy1').innerHTML = '';
1401    document.getElementById(fid+'_upd').innerHTML = '';
1402    document.getElementById(fid+'_accuracy2').value = 'N/A';
1403  },
1404    openGeoView:function(coordstring, url, fname, fid, ftable, foptions){
1405    var v = coordstring;
1406    if (v != ';'){
1407      var c = v.split(';');
1408      var newp = false;
1409      var lat = c[0];
1410      var lng = c[1];
1411    } else {
1412      var newp = true;
1413      var lat = 0;
1414      var lng = 0;
1415    }
1416    try{
1417	TZR.geoSearch.setPoint({table:ftable, name:fname, id:fid, newpoint:newp, lat:lat, lng:lng, foptions:foptions});
1418      TZR.geoSearch.focus();
1419    }catch(e){
1420	var foptionsu = '';
1421	for(o in foptions){
1422	    foptionsu = '&foptions['+o+']='+escape(foptions[o]);
1423	}
1424	TZR.geoSearch = window.open(url+'&fid='+fid+'&ftable='+ftable+'&fname='+fname+'&flatlng='+escape(v)+foptionsu, 'GeoView',"resizable=no,width=700,height=530,left=100,top=100");
1425	TZR.geoSearch.focus();
1426    }
1427  }
1428};
1429
1430// Applique une popup a des objets (obj est un objet jQuery)
1431TZR.applyHottip=function(obj,param){
1432  param=jQuery.extend(true,{fill:'#F9F9F9',strokeStyle:'#4b4b4b',spikeLength:10,spikeGirth:10,padding:8,cornerRadius:0,
1433			    cssStyles:{fontFamily:'"lucida grande",tahoma,verdana,arial,sans-serif',fontSize:'11px'},
1434			    closeWhenOthersOpen:true,closeButton:0,ajaxPath:["$(this).attr('bt-xpath')"],offsetParent:'body',overlap:-2},param);
1435  obj.bt(param);
1436  return obj;
1437}
1438
1439function scrollToElement(o,offset){
1440  var dTop=jQuery(o).offset().top;
1441  var sTop=jQuery(window).scrollTop();
1442  var wHeight=jQuery(window).height();
1443  if(!offset) offset=20;
1444  if(sTop>dTop) jQuery(window).scrollTop(dTop-offset);
1445  else if(sTop+wHeight<dTop) jQuery(window).scrollTop(dTop-wHeight+jQuery(o).height()+offset);
1446}
1447
1448function showObj(objid){
1449  var o = document.getElementById(objid);
1450  if(o){
1451    o.style.visibility = "visible";
1452    o.style.position = "relative";
1453  }
1454}
1455function hideObj(objid){
1456  var o = document.getElementById(objid);
1457  if(o){
1458    o.style.visibility = "hidden";
1459    o.style.position = "absolute";
1460  }
1461}
1462function showHide(objid){
1463  var o = document.getElementById(objid);
1464  if(o){
1465    if(o.style.visibility == "hidden"){
1466      o.style.visibility = "visible";
1467      o.style.position = "relative";
1468    }else{
1469      o.style.visibility = "hidden";
1470      o.style.position = "absolute";
1471    }
1472  }
1473}
1474
1475// Function appelé à la fin du chargment de la page
1476function onLoadComplete(){
1477  // Correction des PNG sous IE
1478	  if(window.attachEvent && window.correctPNG) correctPNG();
1479}
1480
1481window.onload=onLoadComplete;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.