/*/tzr/templates/generic.js*/; function sstree_toggle(elm,iopen,iclose) { var newDisplay = "none"; if(iopen=='') iopen='/tzr/templates/images/folder-open.gif'; if(iclose=='') iclose='/tzr/templates/images/folder-closed.gif'; if(iopen=='none') iopen=''; if(iclose=='none') iclose=''; if(iclose!='none') elm.style.backgroundImage = 'url( '+iclose+' )'; var e = elm.nextSibling; while (e != null) { if (e.tagName == "OL" || e.tagName == "ol" || e.tagName == "ul" || e.tagName == "UL") { if (e.style.display == "none") { newDisplay = "block"; if(iopen!='none') {elm.style.backgroundImage = 'url( '+iopen+' )';}; } break; } e = e.nextSibling; } while (e != null) { if (e.tagName == "OL" || e.tagName == "ol" || e.tagName == "ul" || e.tagName == "UL") e.style.display = newDisplay; e = e.nextSibling; } } function sstree_toggleBullet(elm) { var newDisplay = "none"; var e = elm.nextSibling; while (e != null) { if (e.tagName == "OL" || e.tagName == "ol" || e.tagName == "UL" || e.tagName == "ul") { if (e.style.display == "none") newDisplay = "block"; break; } e = e.nextSibling; } while (e != null) { if (e.tagName == "OL" || e.tagName == "ol" || e.tagName == "UL" || e.tagName == "ul") e.style.display = newDisplay; e = e.nextSibling; } } function sstree_collapseAll() { var lists = document.getElementsByTagName('OL'); for (var j = 0; j < lists.length; j++) lists[j].style.display = "none"; lists = document.getElementsByTagName('UL'); for (var j = 0; j < lists.length; j++) lists[j].style.display = "none"; var e = document.getElementById("root"); e.style.display = "block"; } function sstree_open(tag) { var lists = document.getElementsByTagName('A'); for (var j = 0; j < lists.length; j++) if(lists[j].id==tag) sstree_toggle(lists[j],'',''); } /** * Conversion d'une taille de fichier en octets en unité de stockage correspondante */ function sizeToString(size,precision) { precision = precision || 0; var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; var bytes = Math.max(size, 0); var pow = Math.min( Math.floor( (bytes ? Math.log(bytes) : 0) / Math.log(1024) ), units.length); return Math.round(bytes >>= (10 * pow), precision) + ' ' + units[pow]; } /** * Analyse le header d'un blob (ex: fichier) et retourne le mime type correspondant */ function getFileMimeType(blob) { var fileReader = new FileReader(); fileReader.onloadend = function(e) { var arr = (new Uint8Array(e.target.result)).subarray(0, 4); var header = ''; for(var i = 0; i < arr.length; i++) { header += arr[i].toString(16); } var type = null; switch (header) { case '89504e47': type = 'image/png'; break; case '47494638': type = 'image/gif'; break; case '0000000c6a5020200d0a870a': type = 'image/jp2'; break; case 'ffd8': case 'ffd8ffe0': type = 'image/jpeg'; break; case '424D': type = 'image/bmp'; break; case '49492a00': case '4d4d002a': case '4d4d002b': case '492049': type = 'image/tiff'; break; case '52494646': type = 'image/webp'; break; default: type = blob.type; break; } return type; }; fileReader.readAsArrayBuffer(blob); } if(typeof(TZR)=="undefined") TZR=new Object(); if(typeof(TZR._sharescripts)=="undefined") TZR._sharescripts="/tzr/scripts/"; if(typeof(TZR._sharetemplates)=="undefined") TZR._sharetemplates="/tzr/templates/"; TZR.isFormOk=true; TZR.formValidation=true; TZR.validator=new Array(); TZR.dependency=new Object(); TZR.onsubmit=new Array(); // validation des formulaires TZR.isShortTextValid = function (id,fmt,fieldlabel,color) { var o = document.getElementById(id); var phrase = o.value; var resultat = fmt.test(phrase); if(!resultat) { TZR.setElementErrorState(o,false,color); TZR.isFormOk=false; return false; } else { TZR.setElementErrorState(o,true,color); return true; } } // validation des formulaires TZR.isLinkValid = function (id,fmt,fieldlabel,color,linktext,listid) { var o = document.getElementById(id); var typ=o.type; // Cas "radio" ou "checkbox" if(typ=="radio" || typ=="checkbox"){ return TZR.isRadioValid(id,fmt,fieldlabel,color,linktext,listid); }else{ var resultat = true; // Cas "un select" if(fmt=='compselect'){ resultat = false; for(var i=0;i -1) || (compulsory == '1' && !TZR.uploadXFileCompleted[id] && document.getElementById(id+'-old').value == '')) { // upload in progress or required TZR.setElementErrorState(o,false,color,tocol); TZR.isFormOk=false; return false; } TZR.setElementErrorState(o,true,color,tocol); return true; } TZR.isFileValid = function (id,fmt,fieldlabel,color,browsemods,allow_externalfile, messages) { // Exception : BO + Uploader Async OFF dans paramètrage du champ "ajax_uploader" // (En BO, le Async est forcé (même si pas dans le paramètrage) donc pb de ciblage de fonction de validation : TZR.isFileValid => TZR.isUploaderValid) if(document.getElementById(id + '_cont')) { return TZR.isUploaderValid(id,fmt,fieldlabel,color); } var o = document.getElementById(id); var tocol = o; // MaxSize + Mimes if(o.files && o.files.length > 0) { // MaxSize var checkSize = true; var maxSize = o.dataset.maxsize; if(maxSize !== undefined && maxSize != '') { var fileSize = o.files[0].size; checkSize = fileSize === undefined || maxSize && fileSize < maxSize; } // Mimes var accept = o.getAttribute('accept'); var fileType = getFileMimeType(o.files[0]); if(fileType === undefined) fileType = o.files[0].type; var checkType = accept === '' || accept.indexOf(fileType) >= 0; if( checkSize && checkType) { TZR.setCustomValidityMess(id, ''); TZR.setElementErrorState(o,true,color,tocol); } else { TZR.setElementErrorState(o,false,color,tocol); TZR.isFormOk = false; if (!checkType) TZR.setCustomValidityMess(id, messages[1] + ': ' + accept); else if (!checkSize) TZR.setCustomValidityMess(id, messages[0] + ': ' + sizeToString(maxSize)); return false; } } // Obligatoire var compulsory = o.dataset.compulsory; if(compulsory == '1') { o.isValid = false; if (o.value != '' || document.getElementById(id+'-old').value != '') o.isValid = true; else if (browsemods && document.getElementById(id+'-from').value != '') o.isValid = true; else if (allow_externalfile && document.getElementById(id+'-external').value != '') o.isValid = true; else if (jQuery('#'+id+'_cont').length) { tocol = jQuery('#'+id+'_cont'); if(jQuery('#'+id+'_cont div.uploadQueueItem.uploadComplete:first').length) o.isValid = true; } TZR.setElementErrorStyle(o,color,tocol); if (!o.isValid) { TZR.isFormOk = false; } } return o.isValid; } TZR.setElementErrorState=function(o,state,color,tocol){ o.isValid=state; TZR.setElementErrorStyle(o,color,tocol); } TZR.setElementErrorStyle=function(o,color,tocol){ if(!tocol) tocol=o; tocol=jQuery(tocol); if(!tocol[0]) return; if(o.isValid==false){ if(tocol[0].isError) return; tocol[0].isError=true; if(color.charAt(0)=='#') { tocol[0].obackgroundColor=tocol[0].style.backgroundColor; tocol.css('background-color',color); } else { tocol.addClass(color); } } else { if(!tocol[0].isError) return; tocol[0].isError=false; if(color.charAt(0)=='#') { if(tocol[0].obackgroundColor) tocol.css('background-color',tocol[0].obackgroundColor); else tocol.css('background-color',''); } else { tocol.removeClass(color); } } } TZR.isFormValidWithAjax=function(f,method,overlay_target,color,callback){ if(typeof f!=='object') f=document.getElementById(f); // Vide les erreurs précédentes var error_el=jQuery('div.error',f); error_el.html(''); // Prepare les données var data=jQuery(f).serializeArray(); for(var i in data){ if(data[i].name=="function" || data[i].name=="_function") data[i].value=method; if(data[i].name=="uniqid") delete data[i]; } // Overlay if(overlay_target){ if(overlay_target=='module-container') overlay_target=jQuery(f).parents('div.cv8-module-container'); else overlay_target=jQuery(overlay_target); var overlay=TZR.setOverlay(overlay_target); }else{ var overlay=null; } // Envoi var ok=false; jQuery.ajax({ url:f.action, data:data, async:false, type:f.method }).done(function(data){ if(overlay) TZR.unsetOverlay(overlay); if(data.status=="success"){ ok=true; if(callback) callback(true,data); }else{ TZR.isFormOk=false; if(callback){ if(callback(false,data)===false) return; } if(data.error){ for(var i in data.error){ error_el.append('
'+data.error[i]+'
'); } error_el.show(); } } }); return ok; } TZR.isIntervalValid = function (id,fmt,fieldlabel,color) { var hiddenField = document.getElementById(id); var pictoCalendar = jQuery('#'+'pictoCalendar'+id); var phrase = hiddenField.value; var resultat = fmt.test(phrase); if(!resultat) { if(hiddenField.isValid!==false){ if(color.charAt(0)=='#') { pictoCalendar.obackgroundColor=hiddenField.style.backgroundColor; pictoCalendar.prop('style').cssText="border:solid 1px red; border-radius:7px; padding:3px;"; } else { pictoCalendar.className = color; pictoCalendar.prop('style').cssText="border:solid 1px red; border-radius:7px; padding:3px;"; } } hiddenField.isValid=false; TZR.isFormOk=false; return false; } else { if(color.charAt(0)=='#') { if(pictoCalendar.obackgroundColor) pictoCalendar.style.backgroundColor=pictoCalendar.obackgroundColor; else pictoCalendar.style.backgroundColor=''; } else { pictoCalendar.removeClass(color); } hiddenField.isValid=true; return true; } } TZR.actualizeCaptcha=function(url,id){ document.getElementById('cimg'+id).src=url+"?id="+id+"&nocache=1&"+(new Date()).getTime(); } TZR.getUrlTitle=function(url,color){ var urlu=document.getElementById("url"+url); var urll=document.getElementById("label"+url); urlu.style.backgroundImage="url('/tzr/templates/ico/general/indicator.gif')"; urlu.style.backgroundPosition="right center"; urlu.style.backgroundRepeat="no-repeat"; var reg=/^(((?!mailto)(?!\[)).+)$/; if(!reg.test(urlu.value)){ urlu.obackgroundColor=urlu.style.backgroundColor; urlu.style.backgroundColor=color; }else{ var title=TZR.file_get_contents(TZR._sharescripts+'ajax8.php?function=xurldef_getPageTitle&class=XUrlDef&url='+escape(urlu.value)); if(title=="error"){ urlu.obackgroundColor=urlu.style.backgroundColor; urlu.style.backgroundColor=color; }else{ if(urlu.obackgroundColor) urlu.style.backgroundColor=urlu.obackgroundColor; else urlu.style.backgroundColor=''; urll.value=title; } } urlu.style.backgroundImage=""; urlu.style.backgroundPosition=""; urlu.style.backgroundRepeat=""; } TZR.openPopup = function(url){ window.open(url,'','menubar=no,status=no,resizable=1,scrollbars=1,width=700,height=500'); return false; } TZR.validFormInPopup = function(f){ var ret=TZR.isFormValidWithFocus(f,true); if(ret){ window.opener.name=TZR.uniqid('TZR'); document.editform.target=window.opener.name; f.submit(); self.close(); return false; }else{ return false; } } TZR.isFormValid = function (f) { return TZR.isFormValidWithFocus(f,false); } TZR.isFormValidWithFocus=function(f,foc) { TZR.isFormOk=true; TZR.errorGiveFocus=true; for(var i=0;ilegend').click(); var tabid = jQuery(o).parents('.tzr-tabcontent').attr('id'); if (typeof(tabid) != "undefined" ){ jQuery('li>a[href="#'+tabid+'"]').click(); } jQuery(o).focus(); if(jQuery(o).is(':not(:input),:hidden')) scrollToElement(jQuery(o).closest(':visible')); return false; } } } }else if(!o){ TZR.validator.splice(i,1); i--; } } nb=TZR.onsubmit.length; for(i=0; i0) return; var tr=TZR.addTableLine("table"+id,[undefined,v],0,false); jQuery('input',tr.cells[0]).val(oid); jQuery(tr).show(); jQuery('#_INPUT'+id).val(''); } TZR.autoCompleteMultipleFields = function (id, oid, v) { var autocomplete = jQuery('#' + id).data('autocomplete'), relatedFields = autocomplete.params.relatedFields.split(','), _values = v.split(', '); jQuery('#' + id).val(_values[0]); for (key in relatedFields) { jQuery(':input[name="' + relatedFields[key] + '"]').val(_values[parseInt(key) + 1]); } } TZR.isIdValid = function (id) { found=false; nb=TZR.validator.length; for(i=0;i= 48 && e.keyCode <= 57 ) || ( e.keyCode >= 65 && e.keyCode <= 90 ) ) { x_xlinkdef_autocomplete( tab, field, TZR.autocomplete_field.value, TZR.autocomplete_cb); } } // Inverse la coche de toutes les checkbox d'un formulaire TZR.toggleCheckBoxes = function(src,startn,endn) { if(!startn) startn='selectstart'; var start=false; for(var i=0;i 0) { // grouped options for (i=0; i order) break; } if (opts[j]) jQuery(opts[j]).before(src.options[i]); else jQuery(dstGroup).append(src.options[i]); i--; } } } else { // non grouped options for (i=0; i order) break; } if (dst.options[j]) jQuery(dst.options[j]).before(src.options[i]); else jQuery(dst).append(src.options[i]); i--; } } } } else { for (i=src.options.length-1; i>=0; i--) { if (src.options[i].selected) { jQuery(dst).append(src.options[i]); } } } jQuery(src).val(''); jQuery(dst).val(''); // trigger the change event for additionnal control (FO usage) jQuery(dst).change(); } TZR.idxidx=10; TZR.addTableLine = function(tableid,td,trtoclone,del) { if(td[1]=='--') return; if(typeof(trtoclone)=='undefined') trtoclone=0; if(typeof(del)=='undefined') del=true; var table = document.getElementById(tableid); var tbody = table.tBodies[0]; var tr = tbody.rows[trtoclone].cloneNode(true); if(del){ for(i=0;i 0){ // si il y ades conteneurs // containeurs visibles ? var show = false; conts.each(function(ii, o){ if (jQuery(o).css('display') != 'none'){ show = true; } }); if (show){ var jgroup = jQuery(group); jgroup.show(); if (jgroup.hasClass('fieldsetAccordionClose')){ jgroup.find('>legend').click(); } } else { jQuery(group).hide(); } } }); } TZR.setValue=function(form,field,ftype,value){ if(typeof(field)=='string' && !form){ fid=document.getElementById(field); field=fid.name; form=fid.form; }else if(typeof(field)=='string' && typeof(form)=='string'){ form=jQuery('form[name='+form+']').get(0); } if(ftype=="XLinkDef" || ftype=="XThesaurusDef") TZR.setLinkValue(form,field,value); else TZR.setTextValue(form,field,value); } // form (objet), field (string) TZR.setLinkValue=function(form,field,value){ var cont=document.getElementById('cont-'+field); if(typeof(cont)=='undefined' || !cont){ cont=document.getElementById('cv8d-displayobj-field-'+field); } var ret=jQuery(cont).find(":radio[name='"+field+"']").val([value]); if(ret.length==0) var ret=jQuery(cont).find("select[name='"+field+"']").val(value); if(ret.length==0) var ret=jQuery(cont).find("select[name='"+field+"[]']").val(value); if(ret.length==0) var ret=jQuery(cont).find(":checkbox[name^='"+field+"[']").val([value]); if(!value && ret.length==0) var ret=jQuery(cont).find("tr:not('.model') a.xthesaurus-del").click(); } TZR.setTextValue=function(form,field,value){ if(form.elements[field]) form.elements[field].value=value; } // Affiche du contenu centré dans l'écran avec une div d'arriere plan pleine page // content est soit du texte, soit l'id d'un objet deja existant TZR.dispFullScreenContent=function(content,color,op){ if(!color) color="#000000"; if(!op) op=0.2; var div=document.getElementById('fsoverlay'); if(!div){ jQuery("body").append('
'); jQuery("#fsoverlay").css({position:"absolute", zIndex:99998, padding:0, margin:0, top:0, left:0, background:color, opacity:op, width:"100%", height:jQuery(document).height()}); } if(content.substr(0,1)!="#"){ jQuery("#fscontent").remove(); jQuery("body").append('
'); jQuery("#fscontent").css({position:"absolute", zIndex:99999, padding:0, margin:0, top:0, left:0}); jQuery("#fscontent").html(content); jQuery("#fscontent").css({top:(jQuery(window).height()-jQuery("#fscontent").outerHeight())/2+jQuery(window).scrollTop(), left:(jQuery(window).width()-jQuery("#fscontent").outerWidth())/2, visibility:"visible"}); }else{ jQuery(content).css({visibility:"visible", display:"block"}); jQuery(content).css({position:"absolute", zIndex:99999, padding:0, margin:0, top:(jQuery(window).height()-jQuery(content).outerHeight())/2+jQuery(window).scrollTop(), left:(jQuery(window).width()-jQuery(content).outerWidth())/2}); } } TZR.hideFullScreenContent=function(content){ jQuery("#fsoverlay").remove(); if(content!=undefined && content.substr(0,1)=="#"){ jQuery(content).css('display','none'); }else{ jQuery("#fscontent").remove(); } } /* Fonctions pour faciliter la gestion des champs préremplis avec leur libellé */ // Initialise les différentes propiétés du champ (o=objet, l=libellé) function inputInit(o,l,cpltblur){ if(cpltblur==undefined) cpltblur=true; if(typeof o=="string") { o=document.getElementById(o); } if(o.type=="text" || o.type=="textarea" || o.type=="password"){ o.cpltblur=cpltblur; o.ovalue=l; if(o.value=="") o.value=l; o.onfocus=delValue; o.onblur=retablishValue; o.onchange=function(){}; }else if(o.type=="select-one"){ o.options[0].text=l; } } // Efface le contenu d'un champ (o=objet (se renseigne automatiquement sur un onfocus)) function delValue(o){ if(o==undefined || o.type=="focus") o=this; if(o.value==o.ovalue){ o.value=""; }else{ var r=new RegExp("^"+o.ovalue+" : ",""); o.value=o.value.replace(r,""); } } // Rétabli le libellé si necessaire lors de la perte du focus (o=objet (se renseigne automatiquement sur un onblur)) function retablishValue(o){ if(o==undefined || o.type=="blur") o=this; if(o.value==""){ o.value=o.ovalue; }else if(o.cpltblur){ o.value=o.ovalue+" : "+o.value; } } // A appeller sur le submit pour vider les champs non saisis function checkFields(f){ l=f.elements.length; for(i=0;i\\s*('+fmt_re+')'); matches = val.match(range_pattern); if (matches != null && matches.length == 3) dates = new Array(matches[1], matches[2]); else dates = new Array(val); values = new Array(); var fmttab=fmt.split(/[\/.-]/); for (i=0; i '); } TZR.format2dates=function(obj,b,e,fmt){ if(fmt==undefined) fmt=jQuery.datepicker._defaults.dateFormat; var form=obj.form; var b=form.elements[b]; var e=form.elements[e]; TZR.formatDate(obj); var begindate=jQuery.datepicker.parseDate(fmt,b.value); var enddate=jQuery.datepicker.parseDate(fmt,e.value); if(obj==b && begindate>enddate) e.value=b.value; else if(obj==e && begindate>enddate) b.value=e.value; } TZR.formatHour=function(obj,n){ val=obj.value; tab=val.split(":"); var rtab=new Array(); if(/^[0-9]$/.test(tab[0])) { rtab[0]="0"+tab[0]; }else if(/^[0-9]{2}$/.test(tab[0])) { rtab[0]=tab[0]; }else{ return; } if(n>1){ if(!tab[1]){ rtab[1]="00"; }else if(/^[0-9]$/.test(tab[1])){ rtab[1]="0"+tab[1]; }else if(/^[0-9]{2}$/.test(tab[1])) { rtab[1]=tab[1]; }else{ return; } } if(n>2){ if(!tab[2]){ rtab[2]="00"; }else if(/^[0-9]$/.test(tab[2])){ rtab[2]="0"+tab[2]; }else if(/^[0-9]{2}$/.test(tab[2])) { rtab[2]=tab[2]; }else{ return; } } obj.value=rtab.join(":"); } TZR.format2hours=function(obj,n,b,e,bd,ed){ var form=obj.form; b=form.elements[b]; e=form.elements[e]; if(bd!=undefined) bd=form.elements[bd]; if(ed!=undefined) ed=form.elements[ed]; TZR.formatHour(obj,n); var reg=/^[0-9]{2}(:[0-9]{2})?(:[0-9]{2})?$/; var tab=obj.value.split(":"); if(obj.value==""){ b.value=""; e.value=""; }else if(obj==b && b.value>e.value && (bd==undefined || ed==undefined || bd.value==ed.value) && reg.test(b.value)){ var hour=parseFloat(tab[0]); var minute=parseFloat(tab[1]); if(hour==23) e.value="23:59"; else e.value=(hour+1)+":"+minute; TZR.formatHour(e,n); }else if(obj==e && b.value>e.value && (bd==undefined || ed==undefined || bd.value==ed.value) && reg.test(e.value)){ var hour=parseFloat(tab[0]); var minute=parseFloat(tab[1]); if(hour==0) b.value="00:00"; else b.value=(hour-1)+":"+minute; TZR.formatHour(b,n); } } /* Fonction du champ couleur */ function colourPickerCallback(acolor){ TZR.ColourPicker.setFieldColor(acolor); } function colourPickerClose(acolor){ TZR.ColourPicker.hide(); } TZR.ColourPicker = { parent:null, target:null, control:null, lastColor:'#7f7f7f', myAppName:'ColourPicker', myfield:null, init:function(target){ if(!this.target){ this.target=target; this.parent=document.getElementById(target).parentNode; swfobject.embedSWF('/tzr/templates/flash/Colourpicker.swf',target,"435","220","8.0.0",null,{},{menu:false,allowScriptAccess:"sameDomain"},{name:this.myAppName,id:this.myAppName}); } }, initField:function(field){ var value; if(field) this.myField = field; else field=this.myField; TZR.ColourPicker.show(field); var swf=this.getMyApp(); if(swf.setColour){ if(field.value) value=field.value; else value=this.lastColor; swf.setColour(value, field.name); }else{ setTimeout("TZR.ColourPicker.initField()", 250); } }, show:function(field){ coor=jQuery(field).offset(); this.parent.style.left = (coor.left+field.clientWidth+10)+"px"; this.parent.style.top = coor.top+"px"; if(this.control) clearInterval(this.control); this.control=setInterval("if(!document.getElementById('"+field.id+"')) TZR.ColourPicker.hide();",1000); }, hide:function(){ this.parent.style.top = '-500px'; clearInterval(this.control); this.control=null; }, setFieldColor:function(acolor){ TZR.ColourPicker.hide(); this.lastColor=acolor; document.getElementById('col'+this.myField.id).style.backgroundColor=acolor; this.myField.value=acolor; }, getMyApp:function () { if (navigator.appName.indexOf ("Microsoft") !=-1) { return window[this.myAppName]; } else { return document[this.myAppName]; } } } // fonctions des champs de geodesiccoordinates TZR.geodesic = { geoSearch:null, dms2dd:function(inid, outid){ var dms = document.getElementById(inid).value; 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})/); if (exp.test(dms)){ var dd = document.getElementById(outid); var dlng = RegExp.$5; var mlng = RegExp.$6; var slng = RegExp.$7; var lng = RegExp.$8; var dlat = RegExp.$1; var mlat = RegExp.$2; var slat = RegExp.$3; var lat = RegExp.$4; if (lat == 'S'){ lat = '-'; } else { lat = ''; } if (lng == 'W' || lng == 'O'){ lng = '-'; } else { lng = ''; } var ddlat = parseInt(dlat) + parseFloat(mlat/60) + parseFloat(slat/3600); var ddlng = parseInt(dlng) + parseFloat(mlng/60) + parseFloat(slng/3600); dd.value = lat+ddlat+';'+lng+ddlng; }else{ // var dd = document.getElementById('dd').value='####'; } }, setPointCoordinates:function(field, rawvalue, dmsvalue){ document.getElementById(field.fid).value = rawvalue; document.getElementById('dms'+field.fid).value = dmsvalue; document.getElementById(field.fid+'_autogc').checked = false; this.geocodeauto(document.getElementById(field.fid+'_autogc'), field.fid); }, geocodeauto:function(cb, fid){ if (cb.checked){ document.getElementById(fid+'_b1').style.display='block'; document.getElementById(fid+'_b2').style.display='block'; } else { document.getElementById(fid+'_b1').style.display='none'; document.getElementById(fid+'_b2').style.display='none'; document.getElementById(fid+'_unchanged').value = '0'; document.getElementById(fid+'_accuracy1').innerHTML = ''; document.getElementById(fid+'_upd').innerHTML = ''; document.getElementById(fid+'_accuracy2').value = 'N/A'; } }, openGeoSearch:function( url, fname, fid, ftable, foptions){ var v = document.getElementById(fid).value; if (v != ';'){ var c = v.split(';'); var newp = false; var lat = c[0]; var lng = c[1]; } else { var newp = true; var lat = 0; var lng = 0; } try{ TZR.geodesic.geoSearch.setPoint({table:ftable, name:fname, id:fid, newpoint:newp, lat:lat, lng:lng, options:foptions}); TZR.geodesic.geoSearch.focus(); }catch(e){ var foptionsu = ''; for(o in foptions){ foptionsu = '&foptions['+o+']='+escape(foptions[o]); } 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"); TZR.geodesic.geoSearch.focus(); } }, clear:function(fid){ document.getElementById(fid).value=''; document.getElementById('dms'+fid).value=''; document.getElementById(fid).value=''; document.getElementById(fid+'_accuracy1').innerHTML = ''; document.getElementById(fid+'_upd').innerHTML = ''; document.getElementById(fid+'_accuracy2').value = 'N/A'; }, openGeoView:function(coordstring, url, fname, fid, ftable, foptions){ var v = coordstring; if (v != ';'){ var c = v.split(';'); var newp = false; var lat = c[0]; var lng = c[1]; } else { var newp = true; var lat = 0; var lng = 0; } try{ TZR.geoSearch.setPoint({table:ftable, name:fname, id:fid, newpoint:newp, lat:lat, lng:lng, foptions:foptions}); TZR.geoSearch.focus(); }catch(e){ var foptionsu = ''; for(o in foptions){ foptionsu = '&foptions['+o+']='+escape(foptions[o]); } 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"); TZR.geoSearch.focus(); } } }; // Applique une popup a des objets (obj est un objet jQuery) TZR.applyHottip=function(obj,param){ param=jQuery.extend(true,{fill:'#F9F9F9',strokeStyle:'#4b4b4b',spikeLength:10,spikeGirth:10,padding:8,cornerRadius:0, cssStyles:{fontFamily:'"lucida grande",tahoma,verdana,arial,sans-serif',fontSize:'11px'}, closeWhenOthersOpen:true,closeButton:0,ajaxPath:["$(this).attr('bt-xpath')"],offsetParent:'body',overlap:-2},param); obj.bt(param); return obj; } function scrollToElement(o,offset){ var dTop=jQuery(o).offset().top; var sTop=jQuery(window).scrollTop(); var wHeight=jQuery(window).height(); if(!offset) offset=20; if(sTop>dTop) jQuery(window).scrollTop(dTop-offset); else if(sTop+wHeight'); } } if(popup){ window.open('','tzrpopup','width=650,height=550,scrollbars=yes,location=no,resizable=yes'); form.target='tzrpopup'; form.method='post'; return form.submit(); }else{ return TZR.ajaxSubmitForm(form); } } // Verifie si un lien demande une confirmation TZR.checkLinkConfirm=function(a){ if(jQuery(a).attr('x-confirm')){ var self=a; eval(jQuery(a).attr('x-confirm')); if(!ret) return false; }; return true; } /// Fonctions de gestion des evenements sur un container TZR.Event=new Object(); TZR.Event.events=new Object(); // Ajoute un listener (id:uniqid, t:type de l'evenement, f:fonction, p:parametres TZR.Event.add=function(id,t,f,p){ if(!TZR.Event.events[t]){ TZR.Event.events[t]={}; jQuery(document).bind(t,TZR.Event.execute); } if(!TZR.Event.events[t][id]) TZR.Event.events[t][id]=[]; TZR.Event.events[t][id].push({f:f,p:p}); } TZR.Event.execute=function(e){ var ret=true; for(id in TZR.Event.events[e.type]){ var evs=TZR.Event.events[e.type][id]; if(document.getElementById('cv8-uniqdiv-'+id)){ for(j in evs){ if(evs[j].f(e,id,evs[j].p)===false){ ret=false; break; } } }else{ delete TZR.Event.events[e.type][id]; } } return ret; } // Fonctions de nettoyage des objets TZR.initObjCleaner=function(){ if(!TZR.objCleaner) TZR.objCleaner=setInterval(function(){TZR.checkObjCleaner();},30000); } TZR.stopObjCleaner=function(){ if(TZR.objCleaner) clearInterval(TZR.objCleaner); } TZR.addToObjCleaner=function(id,jso,f){ if(!TZR.objToClean) TZR.objToClean=new Object(); if(!f) f=TZR.cleanObj; TZR.objToClean[id]={o:jso,f:f}; } TZR.checkObjCleaner=function(){ for(var i in TZR.objToClean){ if(!document.getElementById(i)){ TZR.objToClean[i].f(TZR.objToClean[i].o); delete TZR.objToClean[i]; } } } TZR.cleanObj=function(o){ if(!delete o) o=undefined; } // Change le titre de la fenetre courante TZR.setDocumentTitle=function(title,noprefix){ if(!TZR.title) TZR.title=document.title; if(noprefix) document.title=title; else document.title=TZR.title+" : "+title; jQuery('#cv8-pagetitle').html(TZR.maintitle); } // Redimensionne l'interface (width : taille de la zone centrale ou toggle pour switcher entre plein ecran/taille d'origine TZR.resizeTo=function(width){ if(!width) return; var jc=jQuery('#cv8-content'); var jc2=jQuery('#cv8-container'); if(width=='toggle'){ var toadd=jQuery(window).width()-jc2.width(); toadd-=5; if(toadd!=0){ var w1=jc.width()+toadd; var w2=jc2.width()+toadd; } if(toadd==0 || w1<750){ var w1=''; var w2=''; } }else{ var w1=width; var w2=jc2.width()+width-jc.width(); var sw=screen.availWidth; if(w1+jc.offset().left>sw){ TZR.resizeTo('toggle'); return; } } jc.width(w1); jc2.width(w2); jQuery('div.cv8-contenu-haut,#cv8-top').width('100%'); return w1; } // Fonction pour appliquer l'alernance de couleur et le hover sur les tables .cv8_tablelist TZR.applyAlternate=function(what,table){ if(table==undefined){ if(what==undefined) var what=document; var jts=jQuery('table.cv8_tablelist',what); }else{ jts=jQuery(table); } jts.each(function(){ if(!jQuery(this).hasClass('nohover')) jQuery('tbody:first>tr:visible',this).alternate({odd:'odd', even:'even', hover:'hover'}); else jQuery('tbody:first>tr:visible',this).alternate({odd:'odd', even:'even'}); }); } // Ajoute un item à un menu TZR.addMenuItem=function(mid,group,text,url,conf,newgroup,separator,target){ var li=''+text+''; else if(url.substr(0,11)=='javascript:'){ url=url.replace("javascript:","").replace(/\"/g,'"'); li+=''+text+''; }else{ li+=' '+text+''; } if(newgroup) li+='
    '; li+=''; jQuery('#'+mid+'-'+group).append(li); } // Ajoute un item à une toolbar TZR.addToolBarItem=function(tid,group,order,picto){ if(document.getElementById(tid+'-'+group)==undefined){ jQuery('#'+tid).append('
    '); }else{ jQuery('#'+tid+'-'+group).show(); } var li='
  • '+picto+'
  • '; var added=false; var jul=jQuery('#'+tid+'-'+group); jul.find('li').each(function(){ if(parseInt(jQuery(this).attr('morder'))>order){ jQuery(this).before(li); added=true; return false; } }); if(!added) jul.append(li); } // Met à jour le texte d'information TZR.setInfoText=function(text){ if(text!==undefined && text!==null) jQuery('#cv8-infotext>div.cv8-infotextg>div.cv8-txtseul').html(text+' '); } // Recupère le texte d'information TZR.getInfoText=function(){ return jQuery('#cv8-infotext>div.cv8-infotextg>div.cv8-txtseul').html(); } // Efface le chemin actuel TZR.clearNav=function(){ jQuery('#cv8-path>ul>li:gt(0)').remove(); } // Ajoute une entrée au chemin TZR.addNav=function(title,url){ jQuery('#cv8-path>ul').append('
  • '+title+'
  • '); } // Affiche une fenetre modale permettant de s'authentifier TZR.authAlert=function(cb){ var alertArgs=arguments; jQuery("#cv8-unauth").dialog({modal:true,resizable:false,draggable:false,width:450,height:110,close:function(event,ui){ document.auth.login.value=""; document.auth.password.value=""; if(jQuery("#cv8-unauth").data('callcb') && cb){ var args=new Array(); for(var i=1;i
    '); var jt=jQuery('#cv8-module-container-0'); } var overlay=TZR.setOverlay(jo); }else{ var overlay=TZR.setOverlay(jo); } // Overlay de confirmation sur un objet du DOM if(statetarget){ var stateoverlay=TZR.setOverlay(statetarget,{content:'',oclass:'overlay-confirm',css:{opacity:0.8}}); } // Scroll le contenu si necessaire var pos=jt.position().top; if(!noautoscroll && jQuery(document).scrollTop()>pos) jQuery(document).scrollTop(pos); // Activation/desactivation du cache var currentajaxsettings=jQuery.extend({},jQuery.ajaxSettings); if(nocache) jQuery.ajaxSettings.cache=false; else jQuery.ajaxSettings.cache=true; // Options ajax selon contexte if(TZR.supportFormData() && data instanceof FormData){ jQuery.ajaxSettings.processData=false; jQuery.ajaxSettings.contentType=false; } // Complete l'url if(url.indexOf(' ')!=-1){ var url2=url.substr(url.indexOf(' ')); url=url.substr(0,url.indexOf(' ')); }else{ var url2=''; } if(url==url.replace('_raw=','')) url+='&_raw=1'; if(url==url.replace('_ajax=','')) url+='&_ajax=1'; url=url+url2; if(typeof(data)=='function'){ cb=data; data=undefined; } // Construit la callback (desactivation overlay + callback personnalisable) var callback=function(responseText,textStatus,XMLHttpRequest){ TZR.ajaxQueue--; TZR.unsetOverlay(overlay); if(!nowaitcursor) jQuery('body,a').css('cursor',''); if(!nocheckauth){ if(XMLHttpRequest.status==401){ TZR.authAlert(TZR.jQueryAjax,obj); return false; } } // Overlay de confirmation sur un objet du DOM if(statetarget){ TZR.unsetOverlay(stateoverlay); stateoverlay=TZR.setOverlay(statetarget,{content:(textStatus=='success'?'OK':'ERROR'), oclass:(textStatus=='success'?'overlay-confirm':'overlay-error'),css:{opacity:0.8}}); setTimeout(function(){stateoverlay.fadeOut(800,function(){TZR.unsetOverlay(stateoverlay);})},500);; } if(cb) return cb(responseText,textStatus,XMLHttpRequest); }; // Appel ajax if(mode=="load") jt.load(url,data,callback); if(mode=="post") jQuery.post(url,data,callback); jQuery.ajaxSettings=currentajaxsettings; return overlay; } TZR.jQueryLoad=function(obj){ obj.mode="load"; TZR.jQueryAjax(obj); } TZR.jQueryPost=function(obj){ obj.mode="post"; TZR.jQueryAjax(obj); } // Soumet un formulaire via ajax (div : element cible pour l'overlay / loadresult : charge le resultat dans div) TZR.ajaxSubmitForm=function(form,div,loadresult,cplt,confirmmessage){ if(TZR.ajaxSubmitFormOngoing==form) return true; if(confirmmessage && !confirm(confirmmessage)) return false; TZR.ajaxSubmitFormOngoing=form; if((form.enctype=="multipart/form-data" || form.ENCTYPE=="multipart/form-data") && !TZR.supportFormData()){ var ret=TZR.iframeSubmitForm(form,div,loadresult,cplt); if(ret) jQuery(form).submit(); return TZR.ajaxFormSubmitted(); } if(loadresult==undefined) loadresult=true; if(!TZR.isFormValidWithFocus(form,true)){ return TZR.ajaxFormSubmitted(); } if(div==undefined) div=jQuery(form).parents('div.cv8-module-container')[0]; var param={target:div,url:jQuery(form).attr('action')}; if(TZR.supportFormData()){ TZR.updateCKEditorElements(form); param.data=new FormData(form); }else{ param.data=jQuery(form).serializeArray(); } if(cplt!=undefined) jQuery.extend(param,cplt); if(loadresult) TZR.jQueryLoad(param); else TZR.jQueryPost(param); return TZR.ajaxFormSubmitted(); } // Rétablit la configuration du précédent formulaire dans le cadre d'une soumission AJAX d'ajout de sous-fiche à une fiche en cours d'édition TZR.ajaxFormSubmitted = function() { TZR.ajaxSubmitFormOngoing=''; // TZR.parentFormValidator est copié à partir de TZR.validator lors de l'ajout d'un onglet AJAX dans xmodtable/edit.html if (typeof TZR.parentFormValidator != 'undefined' && TZR.parentFormValidator != null) { jQuery.extend(TZR.validator, TZR.parentFormValidator); TZR.parentFormValidator = null; } return false; } // Soumet un formulaire via iframe (div : element cible pour l'overlay / loadresult : charge le resultat dans div) TZR.iframeSubmitForm=function(form,div,loadresult,cplt){ if(loadresult==undefined) loadresult=true; if(div==undefined) div=jQuery(form).parents('div.cv8-module-container')[0]; if(cplt==undefined) cplt={}; var jdiv=jQuery(div); var nowaitcursor=cplt.nowaitcursor; var overlay=''; return TZR.iframeSubmitFormKernel.submit(form,{onStart:function(){ var ret=TZR.isFormValidWithFocus(form,true); if(!ret) return false; if(!nowaitcursor) jQuery('body,a').css('cursor','progress'); overlay=TZR.setOverlay(jdiv); return true; },onComplete:function(html){ if(!nowaitcursor) jQuery('body,a').css('cursor',''); if(loadresult){ if(html=="401 Unauthorized"){ TZR.unsetOverlay(overlay); cplt.force=true; TZR.authAlert(TZR.iframeSubmitForm,form,div,loadresult,cplt); }else{ jdiv.html(html); TZR.unsetOverlay(overlay); // Scroll le contenu si necessaire var pos=jdiv.position().top; if(jQuery(document).scrollTop()>pos) jQuery(document).scrollTop(pos); } }else{ TZR.unsetOverlay(overlay); } if(cplt){ if(cplt.cb) cplt.cb(html); } },force:cplt.force}); } // Force la mise à jour de l'element recevant le texte de CKEditor TZR.updateCKEditorElements=function(f){ for (instance in CKEDITOR.instances){ if(f && CKEDITOR.instances[instance].element.$.form!=f) continue; CKEDITOR.instances[instance].updateElement(); } } // Teste si le navigateur support formData TZR.supportFormData=function(){ return !!window.FormData; } // Ajout/suppression d'un overlay sur une div if(!TZR.defaultOverlay){ TZR.defaultOverlay=''; } TZR.setOverlay=function(o,opts){ if(!opts) opts=new Object(); if(!opts.css) opts.css=new Object(); if(!opts.content) opts.content=TZR.defaultOverlay; if(!opts.oclass) opts.oclass='overlay'; // Génération du HTML de l'overlay var jo=jQuery(o); if(jo.length==0) return; offset=jo.offset(); var overlay=jQuery('
     '+opts.content+' 
    '); // CSS de l'overlay var w=jo.outerWidth(); var h=jo.outerHeight(); var css=jQuery.extend({position:'absolute',top:offset.top,left:offset.left,opacity:0.3,width:w,'z-index':999},opts.css); // CSS du fond var css2={opacity:css.opacity,width:'100%',height:'100%',position:'absolute',top:0,left:0}; delete css.opacity; // Applique les css overlay.css(css); jQuery('div:first',overlay).css(css2); // Aoute l'overlay et verifie la hauteur jQuery('body').append(overlay); var ch=overlay.height(); if(h>ch){ overlay.css({height:h,'line-height':h+'px'}); jQuery('span.cv8_inlineblock',overlay).css('line-height',h+'px'); } // Timer pour replacement automatique overlay.data('_timer',setInterval(function(){ var offset=jo.offset(); var h=jo.outerHeight(); var css3={top:offset.top,left:offset.left,width:jo.outerWidth()}; if(h>ch){ css3.height=h; css3['line-height']=h+'px'; } overlay.css(css3); },100)); // Timer pour eviter les deconnexion if(TZR._sessid){ overlay.data('_timersess',setInterval(function(){ TZR.keepAlive(); },300000)); } return overlay; } TZR.unsetOverlay=function(o){ var jo=jQuery(o); if(jo.length==0) return; clearInterval(jo.data('_timer')); if(TZR._sessid) clearInterval(jo.data('_timersess')); jo.remove(); } // Ajoute une entrée dans l'historique navigateur TZR.addNavHistory=function(title,nowaitajax){ // Attend la fin du traitement de la pile ajax if(!nowaitajax && TZR.ajaxQueue){ setTimeout(function(){TZR.addNavHistory(title,nowaitajax);},200); return false; } var jh=jQuery('#cv8-history-list'); // Prepare la liste des historique à effacer var htodel=new Array(); if(TZR.historymode=='loadnav'){ jh.find('li').each(function(i){ if(this.id=="_"+location.hash.substring(1)) return false; jQuery(this).remove(); htodel.push(this.id.substring(1)); }); TZR.historymode='normal'; } jh.find('li').each(function(i){ if(i>TZR.historysize-2){ jQuery(this).remove(); htodel.push(this.id.substring(1)); } }); // Prepare les parametres à enregistrer var hid='history-'+Math.floor(Math.random()*9999999); var container=new Array(); jQuery('div.cv8-module-container').each(function(){ if(typeof(this._here)=='string') container.push(this._here); }); if(TZR.maintitle && TZR.maintitle!=title && title.indexOf(TZR.maintitle+" > ")!=0) title=TZR.maintitle+" > "+title; jQuery.post(TZR._sharescripts+'addHistory.php',{hid:hid,maintitle:TZR.maintitle,title:title,url:TZR.mainurl,comment:TZR.getInfoText(),'container':container,'todel':htodel}); TZR.lasthid=hid; TZR.setDocumentTitle(title); jQuery(window).history('add',hid); jh.find('li.active').removeClass('active'); if(title.length>35) var stitle=title.substr(0,32)+"..."; else stitle=title; TZR.applyHottip(jQuery('
  • '+stitle+'
  • ').prependTo(jh).attr('bt-xTitle',title.replace(new RegExp('>','g'), '
      >') )); } // Charge une page de l'historique navigateur TZR.loadNavHistory=function(hid,nav){ if(nav){ var jh=jQuery('#cv8-history-list'); jh.find('li.active').removeClass('active'); jQuery('#_'+hid).addClass('active'); TZR.historymode='loadnav'; } TZR.jQueryLoad({noautocreate:true,url:TZR._self+"class=XSession&function=goHistory&template=generic8-historycontent.html&skip=1&hid="+hid,cb:function(){ if(nav) TZR.historymode='normal'; }}); } // Enregistre un cookie TZR.setCookie=function(name,value,expire,path,domain,secure) { document.cookie=name+"="+escape(value)+((expire)?"; expires="+expire.toGMTString():"")+((path)?"; path="+path:"")+((domain)?"; domain="+domain:"")+((secure)?"; secure":""); } // Recupere un cookie TZR.getCookie=function(name,isfloat,isbool){ var deb=document.cookie.indexOf(name+"=") if(deb>=0) { deb+=name.length+1; var fin=document.cookie.indexOf(";",deb); if(fin<0) fin=document.cookie.length; var val=unescape(document.cookie.substring(deb,fin)); if(isbool){ if(!val || val=="false" || val=="0") return false; else return true; } if(isfloat) return parseFloat(val); return val; } return ""; } // Accordeon sur des fieldset (obj=>noeud contenant les fieldset à traiter, open=index à ouvrir (0 par defaut, 'all' pour tout ouvrir)) TZR.fieldsetAccordion=function(obj,open,selector){ if(!open) open=0 if(!selector) selector='fieldset'; jQuery(obj).find(selector).addClass('fieldsetAccordion').each(function(i){ var jt=jQuery(this); jQuery('>legend',jt).click(function(){ var l=jQuery(this); var c=jQuery('>div,>table,>section',this.parentNode); var f=function(){ l.parents('fieldset:first').toggleClass('fieldsetAccordionClose fieldsetAccordionOpen'); c.slideToggle(200); }; if(!c.text() && l.attr('href')){ c.load(l.attr('href'),f); }else{ f(); } }).css('cursor','pointer'); if(((open!='all' && i!=open) || jt.hasClass('fieldsetAccordionClose')) && !jt.hasClass('fieldsetAccordionOpen')){ jt.addClass('fieldsetAccordionClose'); jQuery('>div,>table,>section',jt).hide(); }else{ jt.addClass('fieldsetAccordionOpen'); } }); } /* Mediatheque */ // Inverse la selection d'une fiche via un des elements du DOM TZR.selectMedia=function(obj){ li=jQuery(obj).parents('.cv8_inlineblock')[0]; var cb=jQuery(':checkbox',li)[0]; cb.checked=!cb.checked; } // Inverse la selection des fiches d'une ligne via un des elements du DOM TZR.selectMediaLine=function(obj){ jli=jQuery(obj).parents('li.cv8_inlineblock'); var cb=jQuery(':checkbox',jli)[0]; cb.checked=!cb.checked; var y=jli.offset().top; jli.prevAll().each(function(){ var _y=jQuery(this).offset().top; if(y!=_y) return false; jQuery(':checkbox',this)[0].checked=cb.checked; }); jli.nextAll().each(function(){ var _y=jQuery(this).offset().top; if(y!=_y) return false; jQuery(':checkbox',this)[0].checked=cb.checked; }); } TZR.downloadMedia=function(moid,oid){ jQuery.ajax({dataType:"json",url:TZR._self+"&moid="+moid+"&function=chooseDownloadFormat&skip=1",data:{'oid[]':oid}}).success(function(data){ if(data.url){ location.href=data.url; }else{ var popup=jQuery(data.content); popup.find('#downselectedbutton').click(function(){ jQuery(this).parents('form:first').submit(); popup.dialog('close'); }); popup.dialog({title:"",modal:true,resizable:false,close:function(e,ui){popup.dialog('destroy').remove();}}); } }); return false; } /* Gestion selection */ // Met à jour la selection TZR.SELECTION=new Object(); TZR.SELECTION.update=function(moid,geturl){ if(!moid) moid=0; var jp=jQuery('#cv8-panier'); jp.show(); var url=TZR._self+'&moid='+TZR._sysmods_xmoduser2+'&function=browseSelection&template=generic8-panier.html&skip=1&tplentry=br&tabs='+moid; if(!geturl) TZR.jQueryLoad({url:url,target:'#cv8-panier',cb:function(resp,status,xml){if(resp=="") jp.hide();}}); else return url; } // Met à jour le nombre de fiche cochée pour un module TZR.SELECTION.updateChecked=function(moid){ jQuery('#selection-nbchecked'+moid).html(jQuery('#selection-sc'+moid+' :checkbox:checked[name^="_selected"]').length); } // Supprime les fiches selectionnées de la selection TZR.SELECTION.delTo=function(moid,all){ var f=document.forms['selectionform'+moid]; if(all) TZR.checkBoxes(f,true); f._function.value="delToUserSelection"; f._next.value=TZR.SELECTION.update(moid,true); TZR.ajaxSubmitForm(f,'#cv8-panier'); return false; } // Applique une fonction sur les elements de la selection // use param.applyToAll=1 pour appliquer à tous les elements TZR.SELECTION.applyTo=function(moid,func,next,param,confirm,ftarget,refresh){ var f=document.forms['selectionform'+moid]; if(jQuery(':checkbox:checked',f).length==0){ if(!param || param.applyToAll!=1){ alert(TZR._noobjectselected); return false; }else TZR.checkBoxes(f,true); } if(confirm && typeof(confirm)=='function' && !confirm.call()) return false; if(ftarget===undefined || ftarget===null) ftarget='#cv8-panier'; if(next===undefined || next===null) f._next.value=TZR.SELECTION.update(moid,true); var jf=jQuery(f); jf.find('input.applyToInput').remove(); f._function.value=func; if(typeof(param)=='object'){ for(var i in param){ if (jQuery('input[name="'+i+'"]').length){ jQuery('input[name="'+i+'"]').val(param[i]); } else { jf.append(''); } } } if(!ftarget) f.submit(); else TZR.ajaxSubmitForm(f,ftarget); if(refresh){ jQuery('#cv8-content div.cv8-module-container').each(function(){ jQuery(this).data('tzrobj').refresh(); }); } return false; } TZR.SELECTION.applyToInContentDiv=function(moid,func,next,param,confirm){ if(typeof(param)!=='object'){ param={}; } param._bdxnewstack=1; return TZR.SELECTION.applyTo(moid,func,next,param,confirm,'#cv8-content'); } TZR.SELECTION.exportSelection=function(moid) { window.open('','print','width=650,height=550,scrollbars=yes,location=no,resizable=yes'); var form=document.forms['selectionform'+moid]; form._next.value=''; form._function.value='preExportBrowse'; form.template.value='xmodtable/preexportbrowse.html'; form.tplentry.value='br'; form.target='print'; form.method='post'; form.selectedfields.value=''; form.submit(); } /* Soumet un formulaire (peut avoir des champs fichier) sans rechargement de la page */ /* Utilisation : TZR.iframeSubmitFormKernel.submit(form,{onStart:function,onComplete:function},true/false); */ TZR.iframeSubmitFormKernel={ frame:function(c) { var n = 'iframe' + Math.floor(Math.random() * 99999); var d = document.createElement('DIV'); d.innerHTML=''; document.body.appendChild(d); var i = document.getElementById(n); if (c && typeof(c.onComplete) == 'function') { i.onComplete = c.onComplete; } return n; }, form : function(f, name) { f.setAttribute('target',name); return name; }, submit : function(f, c) { var ret=false; if (c && typeof(c.onStart) == 'function') { ret=c.onStart(); } else { ret=true; } if(!ret) return false; var id=this.form(f, TZR.iframeSubmitFormKernel.frame(c)); jQuery(f).append(''); document.getElementById(id).initialized=1; if(c.force) f.submit(); return true; }, loaded : function(id) { var i = document.getElementById(id); if(i.initialized!=1) return false; if (i.contentDocument) { var d = i.contentDocument; } else if (i.contentWindow) { var d = i.contentWindow.document; } else { var d = window.frames[id].document; } if(d.location.href != "about:blank" && typeof(i.onComplete) == 'function') { if(jQuery('#_iframeencode',d.body).length==1){ i.onComplete(jQuery('#_iframeencode',d.body).val()); }else{ i.onComplete(d.body.innerHTML); } } setTimeout(function(){jQuery(i).parent().remove()},500); } } // Garde en vie la session en cours TZR.keepAlive=function(url){ if(url) TZR.file_get_contents(url,true); else TZR.file_get_contents(TZR._sharescripts+'keepalive.php'); } /* Gestion du champ user */ TZR.activeUser=function(widget) { widget.simpleTree({ autoclose:false, drag:false, animate:true, afterClick:function(node){ var span=jQuery("span:first span:first",node); if(span.hasClass("selected")){ jQuery("span.selected",node).removeClass("hselected selected").addClass("unselected").children("input[type='hidden']").remove(); }else{ jQuery("span.unselected,span.hselected",node).removeClass("hselected unselected").addClass("selected").each(function(i){ var pli=jQuery(this).parents('li:first'); jQuery(this).append(''); }); } if(node.attr('x-type')=='doc'){ var pul=node.parents("ul:first"); var pli=node.parents("li:first"); var spans=jQuery("span:first span:first",pli); if(jQuery("span.unselected",pul).length==0) spans.removeClass("unselected hselected").addClass("selected"); else if(jQuery("span.selected",pul).length==0) spans.removeClass("selected hselected").addClass("unselected"); else spans.removeClass("selected unselected").addClass("hselected"); spans.children("input[type='hidden']").remove(); } }, afterDblClick:function(node){ }, afterMove:function(destination, source, pos){ }, afterAjax:function(node){ // Applique la selection aux users si le groupe est selectionné lors du depliage if(jQuery("span:first span:first",node.parent()).hasClass('selected')){ jQuery("span.unselected",node.parent()).removeClass("unselected").addClass("selected").each(function(i){ var pli=jQuery(this).parents('li:first'); jQuery(this).append(''); }); } } }); } /* Gestion des champs thesaurus */ // Active le thesaurus TZR.activeThesaurus=function(varid, optimizeWith) { var tree = jQuery("#treecontainer"+varid), form = tree.parents('form'), nodeData = tree.data(), filter; if (nodeData.quickquery == 1) filter = '' else { filter = []; jQuery('input[name^="'+optimizeWith+'"]', form).each(function(i, elt){ if (elt.value) filter.push(elt.value); }); filter.sort(); } tree.data({oldfilter: JSON.stringify(filter), cache: {}}); form.on('change', 'input[name^="'+optimizeWith+'"]', function(e){ jQuery("#treecontainer"+varid+">ul.treefiltered").show(); // timeout pour remove setTimeout(function(){ TZR.thesaurusRefrechFiltered(varid, false); }, 500); }) } TZR.thesaurusClick = function(varid, event) { jQuery.Event(event).stopPropagation(); var jsrc = jQuery(event.target || event.srcElement), li = (jsrc.is('li') ? jsrc : jsrc.parents('li:first')), oid = li.attr('tzroid'); if (jsrc.is('.root')) { if (jsrc.is('.close') && jsrc.parent().is('.quickquery')) return TZR.openThesaurusFolder(jsrc, varid, ''); jsrc.toggleClass('open').toggleClass('close').children('ul').toggle(); if (jsrc.is('.open') && jsrc.parent().is('.treefiltered')) return TZR.thesaurusRefrechFiltered(varid, true); return false; } if (oid == undefined) return false; if (jsrc.is('.ico, .trigger') && li.is('.folder')) return TZR.openThesaurusFolder(li, varid, oid); else return TZR.selectThesaurusItem(li, varid, oid); } TZR.thesaurusRefrechFiltered = function(varid, ajax) { var tree = jQuery("#treecontainer"+varid), nodeData = tree.data(), treefiltered = tree.children('.treefiltered'), filter = [], optimizeWithInputs = jQuery('input[name^="'+nodeData.optimizewith+'\[\]"]'); if (optimizeWithInputs.length) // optimizewith present optimizeWithInputs.each(function(i, elt){ if (elt.value) filter.push(elt.value); }); else //quickquery & optimizewith absent filter = nodeData.optimizevalues.split(' '); filter.sort(); var filterString = JSON.stringify(filter); if (nodeData.oldfilter != undefined && filterString != nodeData.oldfilter) { if (!filter.length && tree.children('.full').length) treefiltered.hide(); nodeData.cache[nodeData.oldfilter] = treefiltered.html(); if (nodeData.cache[filterString] != undefined) { treefiltered.html(nodeData.cache[filterString]); tree.data({oldfilter: filterString}) return; } if (!ajax) return jQuery("li.root", treefiltered).removeClass('open').addClass('close').children('ul').hide(); var values = []; jQuery('#table'+nodeData.varid+' input[name^="'+nodeData.field+'"]').each(function(i, elt){ if (elt.value) values.push(elt.value); }); jQuery('li.root ul:first', treefiltered).addClass('ajax').html('').show(); jQuery.ajax({ url:nodeData.reloadUrl, data: {value:values, filter:filter,justfiltered:1}, success: function(data){ if (data) { if (treefiltered.length == 0) tree.prepend(data); else treefiltered.replaceWith(data); } tree.data({oldfilter: filterString}); if (nodeData.quickquery) tree.find(">ul").addClass("treefiltered"); tree.find(">ul.treefiltered").show() .children("li.root").removeClass('close').addClass('open') .children('ul').show(); } }); } } // (un)select thesaurus entry TZR.selectThesaurusItem = function(li, varid, oid) { var parentDiv = li.parents('#div'+varid); var tree = jQuery("#treecontainer"+varid, parentDiv); var table = jQuery('#table'+varid.replace('filtered', ''), parentDiv); var span = jQuery("span:first span:first", li); if (span.hasClass("selected")) { jQuery('li[tzroid="'+oid+'"] span.selected',"#div"+varid).removeClass("selected"); jQuery('input[value="'+oid+'"]',table).trigger('change').parents('tr:first').remove(); } else { if(!tree.data('multivalued')){ TZR.thesaurusClick(varid,{target:tree.find('span.selected')}); } var tds = jQuery('tr.model',table).clone().appendTo(table).removeClass('model none').find('td'); if (tds.length==0) return; var parents = span.parentsUntil('li.root'); var text=''; jQuery('li[tzroid="'+oid+'"]>span>span',"#div"+varid).addClass("selected"); jQuery('input',tds[0]).val(oid).trigger('change'); for (var i=parents.length-1;i>=0;i--) { if (parents[i].nodeName == "LI") { text += jQuery('span:first span:first',parents[i]).html()+" > "; } } tds[1].innerHTML = text.substr(0,text.length-3); } return false; } // open thesaurus folder, if empty populate with json data TZR.openThesaurusFolder = function(li, varid, oid) { var subNode = li.find('>ul').toggle(); li.toggleClass('open').toggleClass('close'); if (!subNode.length) return false; if (!subNode.html().length) { var tree = jQuery("#treecontainer"+varid), nodeData = tree.data(); if (li.is('.root') && nodeData.quickquery && nodeData.optimizewith) return TZR.thesaurusRefrechFiltered(varid, true); var values = []; jQuery('input[name^="'+nodeData.field+'"]').each(function(i, elt){ if (elt.value) values.push(elt.value); }); subNode.addClass('ajax').show(); jQuery.ajax({ url:nodeData.reloadUrl, data: {value:values, justfiltered:0, top:oid, quickquery:nodeData.quickquery}, success: function(data){ if (data) { subNode.removeClass('ajax').html(data); } } }); } return false; } // menu contextuel jQuery(document).on("contextmenu", '.thesaurustree', function(e){ var jTarget = jQuery(e.target), tree = jQuery(e.currentTarget); if(!tree.data('rw')) return; e.stopPropagation(); TZR.thesaurusMenu(jTarget); TZR.thesaurusShowMenu(jTarget, e); return false; }); TZR.thesaurusShowMenu = function(node,e){ var event = jQuery.Event("mousedown"); event.button = 2; var event2 = jQuery.Event("mouseup"); event2.button = 2; event2.pageX=e.pageX; event2.pageY=e.pageY; node.trigger(event); setTimeout(function(){ node.trigger(event2); },50); return false; } TZR.thesaurusMenu = function(node) { if(jQuery(node).is('.hasContextMenu')) return; var nodeData = jQuery(node).parents('.thesaurustree').data(); var contextMenu = jQuery(node).contextMenu({ menu:'xthesaurusmenu', beforeShow:function(o) { var m=jQuery(node); if (!m.hasClass('simpleTree')) m = m.parents('ul.simpleTree:first'); if(jQuery(o).parents('li:first').hasClass('root')) { this.disableContextMenuItems('#del,#edit,#cut'); } else { this.enableContextMenuItems('#del,#edit,#cut'); } if (m.data('topaste')) { this.enableContextMenuItems('#paste'); } else { this.disableContextMenuItems('#paste'); } }}, function(action, el, pos) { if (action.lastIndexOf('#') !== -1) action = action.substr(action.lastIndexOf('#')+1); var jtree=el.parents('ul.simpleTree:first'); var tree=jtree[0]; var jli=el.parents('li:first'); var oid=jli.attr('tzroid'); // ajout un noeud, retourne le li var addNode = function() { if (jli.is(".folder")) { var tmpNode = jQuery('
  •  
  • '); tmpNode.prependTo(jQuery('>ul', jli)); jQuery('>ul', jli).show(); jli.removeClass('close').addClass('open'); var li = jQuery(tmpNode[1]); } else { if (!jli.is(".root")) jli.addClass("folder open").removeClass('doc'); var tmpNode = jQuery('
    •  
    '); tmpNode.appendTo(jli); var li = jQuery('li.doc', tmpNode); } return li } if (action == 'copy') { jtree.data('topaste',{oid:oid,text:el.text(),mode:'copy',node:jli}); } else if (action == 'cut') { jtree.data('topaste',{oid:oid,text:el.text(),mode:'cut',node:jli}); jli.addClass('tocut'); } else if (action == "paste") { var param = jtree.data('topaste'); if (param.mode =='copy') { jQuery.ajax({url:TZR._sharescripts+'ajax8.php?class=xthesaurusdef&function=xthesaurusdef_copyvalue&moid='+nodeData.moid+'&table='+nodeData.xtable+'&field='+nodeData.field,async:false,data:{value:param.oid, parentoid:oid}, success: function(data){ if (data) { var li = addNode(); li.attr('tzroid', data); jQuery('>span>span', li).html(param.text); } }}); } else { jQuery.ajax({url:TZR._sharescripts+'ajax8.php?class=xthesaurusdef&function=xthesaurusdef_cutvalue&moid='+nodeData.moid+'&table='+nodeData.xtable+'&field='+nodeData.field,async:false,data:{value:param.oid,parentoid:oid},success:function(data){ if (data) { var li = addNode(); li.attr('tzroid', data); jQuery('>span>span', li).html(param.text); jQuery(param.node).remove(); } }}); } jtree.data('topaste',''); } else if(action == "del") { jQuery.ajax({url:TZR._sharescripts+'ajax8.php?class=xthesaurusdef&function=xthesaurusdef_delvalue&moid='+nodeData.moid+'&field='+nodeData.field+'&oid='+oid+'&table='+nodeData.xtable,async:false,success:function(data){ if (data == "ok") { var parentLi = jli.parents('li:first'); TZR.removeThesaurusValue(nodeData.varid,oid); if (jQuery('.doc, .folder', parentLi).length == 1) parentLi.removeClass('folder').addClass('doc'); else if (jQuery('.doc, .folder', parentLi).length == 2) { jQuery('.doc, .folder', parentLi).addClass('last'); } jli.prev().remove(); jli.remove(); } }}); } else if (action == "edit") { var input=jQuery(''); input.val(el.html()); input.keypress(function(e){ if (e.which==0 || e.which==27) { jQuery(this).parent().find('span:first').show(); jQuery(this).remove(); } else if (e.which==13) { var _this=this; jQuery.ajax({url:TZR._sharescripts+'ajax8.php?class=xthesaurusdef&function=xthesaurusdef_editvalue&moid='+nodeData.moid+'&field='+nodeData.field+'&oid='+oid+'&table='+nodeData.xtable,async:false,data:{value:this.value},success:function(data){ var span=jQuery(_this).parent().find('span:first'); var li=span.parents('li:first'); if(data=="ok"){ span.html(_this.value); span.click(); } span.show(); jQuery(_this).remove(); }}); return false; } }).bind('click dblclick mousedown mouseup mousemove',function(e){e.stopPropagation();}); el.hide().parent().append(input); input[0].focus(); } else if(action=='add') { var input=jQuery(''); input.keypress(function(e){ if (e.which==0) { jQuery(this).parent().parent().remove(); } else if(e.which==13) { var _this=this; jQuery.ajax({url:TZR._sharescripts+'ajax8.php?class=xthesaurusdef&function=xthesaurusdef_addvalue&moid='+nodeData.moid+'&table='+nodeData.xtable+'&field='+nodeData.field,async:false,data:{value:this.value,parentoid:el.parents('li:first').attr('tzroid')},success:function(data){ if(data) { jQuery(_this).parent().html(_this.value).parents('li:first').attr('tzroid',data); jQuery(_this).remove(); } else { jQuery(_this).parent().parent().remove(); } }}); return false; } }).bind('click dblclick mousedown mouseup mousemove',function(e){e.stopPropagation();}); var li = addNode(); jQuery('>span>span', li).html(input); } }).addClass('hasContextMenu'); } // Supprime une valeur du thesaurus de la selection TZR.removeThesaurusValue=function(varid,oid){ if(typeof(oid)=='object'){ var table = jQuery(oid).parents('#table'+varid); oid=jQuery(oid).parents('tr:first').find('input').val(); } else var table=jQuery('#table'+varid); jQuery('input[value="'+oid+'"]',table).change().parents('tr:first').remove(); jQuery('li[tzroid="'+oid+'"] span.selected',"#div"+varid).removeClass("selected"); } // Ajoute une valeur suite à une saisie via le champ en autocomplete TZR.autocompleteThesaurus=function(varid,oid,v){ if(oid && v){ var tree = jQuery("#treecontainer"+varid); if(!tree.data('multivalued')){ TZR.thesaurusClick(varid,{target:tree.find('span.selected')}); } var table=jQuery('#table'+varid); if(table.find('input[value="'+oid+'"]').length>0) return; var tds=jQuery('tr:first',table).clone().appendTo(table).show().find('td'); if(tds.length==0) return; jQuery('input',tds[0]).val(oid).trigger('change'); tds[1].innerHTML=v; jQuery('li[tzroid="'+oid+'"]>span>span',"#div"+varid).addClass("selected"); jQuery('#_INPUT'+varid).val(''); } } // Fonctions d'ajout de ligne, de colonne et d'application de tablesorter à un champ XTableDef TZR.XTableAddLine=function(tableid,fname){ var jt=jQuery('#'+tableid); var tr=jt[0].tBodies[0].rows[jt[0].tBodies[0].rows.length-1]; var jnewtr=jQuery(tr).clone(true); var reg=new RegExp(fname+"\\[(\\d+)\\]","g"); var reg2=new RegExp("\\[_rlabels\\]\\[(\\d+)\\]","g"); var regres=reg.exec(tr.innerHTML); var newnum=parseInt(regres[1])+1; jnewtr.html(tr.innerHTML.replace(reg,fname+"["+newnum+"]").replace(reg2,"[_rlabels]["+newnum+"]").replace('>'+newnum+'','>'+(newnum+1)+'')); jnewtr.insertAfter(tr).find('input').keyup(function(){jQuery("#"+tableid).trigger("update");}).bind('click mousedown',function(e){e.stopPropagation();}).val(''); jt.trigger("update"); } TZR.XTableAddColumn=function(tableid,fname){ var jt=jQuery('#'+tableid); var trs=jt.find('tr') trs.each(function(i){ if(this.cells.length>1){ var reg=/(\[[^\]]+\])\[(\d+)\]/g; var td=this.cells[this.cells.length-2]; var jnewtd=jQuery(td).clone(true); var regres=reg.exec(td.innerHTML); var newnum=parseInt(regres[2])+1; jnewtd.html(td.innerHTML.replace(reg,"$1["+newnum+"]")); jnewtd.insertAfter(td).find('input').keyup(function(){jQuery("#"+tableid).trigger("update");}).bind('click mousedown',function(e){e.stopPropagation();}).val('');; } }); jt.trigger("update"); } TZR.XTableSorter=function(tableid){ jQuery('#'+tableid).find('input').keyup(function(){jQuery("#"+tableid).trigger("update");}).bind('click mousedown',function(e){e.stopPropagation();}); jQuery('#'+tableid).tablesorter({textExtraction:function(node){ var i=jQuery('input',node); if(i.length>0) return i[0].value; else return node.innerHTML; }}); } /* Champ image */ TZR.Image=new Object(); TZR.Image.activeCrop=function(id,ratio){ jQuery('#'+id+'-cropinfo a').bind('click',function(){ TZR.Image.crop(id,ratio); }); jQuery('#'+id).bind('change',function(){ jQuery('#'+id+'-cropinfo>input').remove(); jQuery('#'+id+'-croppreview').remove(); jQuery('#'+id+'-cropinfo').insertAfter('#'+id).show(); }); } TZR.Image.crop=function(id,ratio){ if(!jQuery('#'+id).val()) return false; jQuery('#'+id).trigger('change'); jQuery.ajaxFileUpload({ url:TZR._sharescripts+'ajax8.php?class=xfiledef&function=xfiledef_uploadfiletopreview', secureuri:false, fileElementId:id, dataType: 'json', data:{}, success: function (data, status) { var is={},ps={},settings={},preview,div,confirmcb,nmaxw=800,nmaxh=500,pmax=200; settings.aspectRatio=eval(ratio); if(settings.aspectRatio>1){ ps={w:pmax,h:(pmax/settings.aspectRatio)}; }else{ ps={w:(pmax*settings.aspectRatio),h:pmax}; } ps.html=' style="width:'+ps.w+'px; height:'+ps.h+'px;"'; if(data.w>nmaxw || data.h>nmaxh){ if(data.w/data.h>nmaxw/nmaxh){ is={w:nmaxw,h:nmaxw/data.r,html:' width="'+nmaxw+'"'}; }else{ is={w:nmaxh*data.r,h:nmaxh,html:' height="'+nmaxh+'"'}; } }else{ is={w:data.w,h:data.h,html:''}; } confirmcb=function(){ var name=jQuery('#'+id).attr('name'); var s=jQuery('#'+id+'-crop img:first').data('Jcrop').tellSelect(); var r = ps.w / (s.w * data.w / is.w); var r2 = ps.w / s.w; var r3= data.w / is.w; jQuery('').appendTo('#'+id+"-cropinfo"); jQuery('').appendTo('#'+id+"-cropinfo"); jQuery('').appendTo('#'+id+"-cropinfo"); jQuery('').appendTo('#'+id+"-cropinfo"); jQuery('#'+id+'-croppreview>img').css({ width: Math.round(r * data.w) + 'px', height: Math.round(r * data.h) + 'px', marginLeft: '-' + Math.round(r2 * s.x) + 'px', marginTop: '-' + Math.round(r2 * s.y) + 'px' }); jQuery('#'+id+'-croppreview').show(); jQuery.nmTop().close(); } div=jQuery('
    '); div.find('input').bind('click',confirmcb); jQuery('
    ').appendTo('#'+id+'-cropinfo').hide(); jQuery.nmData(div,{sizes:{w:nmaxw+20,minW:nmaxw+20,h:nmaxh+40,minH:nmaxh+40},callbacks:{afterShowCont:function(){ div.find('img').Jcrop(settings); }}}); } } ) } /* Agenda */ TZR.Calendar=new Object(); // Ajoute/deplace/supprime un evenement/note dans le tableau des evenements/notes selon l'heure de debut/fin TZR.Calendar.orderEvent=function(uniqid,obj,tomove,del){ var found=false; var notes=obj.notes; var evs=obj.evs; var added=false; if(!tomove.allday || tomove.allday=='0'){ for(var i in evs){ var e=evs[i]; if(e.id==tomove.id){ evs.splice(i,1); break; } } if(del==undefined){ for(var i in evs){ var e=evs[i]; if(e._isod>tomove._isod || (e._isod==tomove._isod && (e._bh>tomove._bh || (e._bh==tomove._bh && e._eh>=tomove._eh) || e._bd>tomove._bd))){ evs.splice(i,0,tomove); added=true; break; } } if(!added) evs.push(tomove); } }else{ if(del){ for(var i in notes){ var n=notes[i]; if(n.id==tomove.id){ notes.splice(i,1); break; } } } } } // Caclule la position et la taille des evenements (les evenements doivent etre trié par heure de debut) TZR.Calendar.calculatePosition=function(uniqid,obj){ var dates=obj.dates; var evs=obj.evs; var max=obj.max; for(var num in dates){ var date=dates[num]; max[date]=0; } var rows=new Object(); var cols=new Object(); var groupinfos={max:1,rows:{},cols:{},end:-1,hour:0,date:"1000-01-01"}; for(var i in evs){ var e=evs[i]; var ok=false; var l=TZR.Calendar.getEventLimit(e); var ee=l.e; var eb=l.b; var nbcase=l.d; var c=0; if(groupinfos.hour<=eb || e._isod!=groupinfos.date){ groupinfos={max:1,rows:{},cols:{},hour:ee,date:e._isod}; var newgroup=true; }else{ var newgroup=false; } while(!ok && groupinfos.rows!=undefined && groupinfos.rows[eb]!=undefined && groupinfos.rows[eb][c]!=undefined){ ok=true; for(var j=0;jgroupinfos.max) groupinfos.max=c+1; if(ee>groupinfos.hour) groupinfos.hour=ee; } e.groupinfos=groupinfos; e.col=c; e.row=eb; e.h=nbcase; e.w=1; for(j=0;jdiv.note').length+1; if(l>nl){ document.getElementById('agallday'+uniqid).style.height=(l*obj.noteHeight)+"px"; nl=l; } } for(var e in obj.evs){ e=obj.evs[e]; TZR.Calendar.createEventDiv(uniqid,obj,e); } } // Créé/met à jour la div d'une note TZR.Calendar.createNoteDiv=function(uniqid,obj,e){ e.id=e.id.replace(':','_'); var ag=document.getElementById('agdaysallday-'+uniqid); var jdiv=jQuery('#'+e.id+"-"+uniqid); var div=jdiv[0]; if(div==undefined){ div=document.createElement("div"); div.innerHTML='
    '; div.style.backgroundColor=e.color; div.id=e.id+"-"+uniqid; div.style.height=obj.noteHeight+"px"; div.style.position="relative"; div.className="note"; document.getElementById('agad'+e._isod+"-"+uniqid).appendChild(div); jdiv=jQuery(div); div.tzrevent=e; // Setter : met à jour le texte html de l'evenement (heure + titre) div.setEventText=function(){ jQuery('.event-content',this).html(this.tzrevent.text); } // Active deplacement if(e.rw && e._obd==e._bd && e._oed==e._ed){ jdiv.draggable({grid:[1,999],containment:'parent',axis:"y",start:function(event,ui){ TZR.Calendar.startDrag(uniqid,obj,event); obj.actEvent="drag"; obj.actTarget=event.target; jQuery('div.agadday',ag).mouseenter(function(event){ jdiv.mousemove(function(){return false;}) jQuery(obj.actTarget).appendTo(this); obj.actTarget.tzrevent._isod=this.id.substr(4,10); setTimeout(function(){jdiv.unbind('mousemove');},100); }); },stop:function(event,ui){ TZR.Calendar.stopDrag(uniqid,obj,event); jQuery('div.agadday',ag).unbind('mouseenter'); }}); } // Tooltip TZR.Calendar.applyHottip(uniqid,obj,jdiv); jdiv.mousedown(function(event){ // Stoppe la propagation de l'evenement (sinon ie active le selected quand on veut le deplacer) event.stopPropagation(); }); } div.setEventText(); } // Créé/met à jour la div d'un evenement TZR.Calendar.createEventDiv=function(uniqid,obj,e){ e.id=e.id.replace(':','_'); var ag=document.getElementById('agdays-'+uniqid); var jdiv=jQuery('#'+e.id+"-"+uniqid); var div=jdiv[0]; if(div==undefined){ div=document.createElement("div"); div.innerHTML='
    '; div.style.backgroundColor=e.color; div.id=e.id+"-"+uniqid; div.className="event"; document.getElementById('ag'+e._isod+"-"+uniqid).appendChild(div); jdiv=jQuery(div); div.tzrevent=e; // Setter : met à jour le texte html de l'evenement (heure + titre) div.setEventText=function(pos){ jQuery('.event-content',this).html(TZR.Calendar.getEventText(uniqid,obj,this.tzrevent,pos)); } // Active deplacement if(e.rw && e._obd==e._bd && e._oed==e._ed){ jdiv.draggable({grid:[1,obj.lineHeight],containment:'parent',axis:"y",drag:function(event,ui){ event.target.setEventText(TZR.Calendar.positionToHour(uniqid,obj,event.target)); },start:function(event,ui){ TZR.Calendar.startDrag(uniqid,obj,event); obj.actEvent="drag"; obj.actTarget=event.target; event.target.style.width="100%"; event.target.style.left="0px"; jQuery('div.agday',ag).mouseenter(function(event){ jdiv.mousemove(function(){return false;}); jQuery(obj.actTarget).appendTo(this); obj.actTarget.tzrevent._isod=this.id.substr(2,10); setTimeout(function(){jdiv.unbind('mousemove');},100); }); },stop:function(event,ui){ TZR.Calendar.stopDrag(uniqid,obj,event); jQuery('div.agday',ag).unbind('mouseenter'); }}); } // Active redimmenssionement if(e.rw && (e._obd==e._bd || e._oed==e._ed)){ if(e._obd==e._bd && e._oed==e._ed) var handles='s,n'; else if(e._obd==e._bd) var handles='n'; else if(e._oed==e._ed) var handles='s'; jdiv.resizable({grid:obj.lineHeight,containment:document.getElementById('ag'+e._isod+"-"+uniqid),handles:handles,start:function(event,ui){ obj.actEvent="resize"; TZR.Calendar.startDrag(uniqid,obj,event); },stop:function(event,ui){ TZR.Calendar.stopDrag(uniqid,obj,event); },resize:function(event,ui){ if(ui.size.height!=ui.originalSize.height){ var pos=""; if(obj.actEvent=="" || obj.actEvent=="resize"){ if(ui.position.top!=ui.originalPosition.top) obj.actEvent="resizen"; else obj.actEvent="resizes"; } if(obj.actEvent=="resizen") pos=TZR.Calendar.positionToHour(uniqid,obj,event.target,"begin"); else pos=TZR.Calendar.positionToHour(uniqid,obj,event.target,"end"); event.target.setEventText(pos); } }}); } // Tooltip TZR.Calendar.applyHottip(uniqid,obj,jdiv); jdiv.click(function(event){ var _now=new Date().getTime(); if(this.lastclick && _now-this.lastclick<300){ obj.vuniqid.jQueryLoad(e.url+"&display="+obj.display); return; } this.lastclick=_now; }).mousedown(function(event){ // Stoppe la propagation de l'evenement (sinon ie active le selected quand on veut le deplacer) et supprime un eventuel hottip event.stopPropagation(); }); } // Position var l=Math.floor(100/e.groupinfos.max)*e.col; if(e.col+e.w==e.groupinfos.max) var w=100-Math.floor(100/e.groupinfos.max)*e.col; else w=Math.floor(100/e.groupinfos.max)*e.w; div.style.position="absolute"; div.style.left=l+"%"; div.style.top=(e.row*obj.lineHeight-obj.agStart*obj.lineHeight*4)+"px"; div.style.width=w+'%'; div.style.height=(e.h*obj.lineHeight)+'px'; div.setEventText(); } // Initialise un drag/resize : ecouteur touche pour annuler via ECHAP TZR.Calendar.startDrag=function(uniqid,obj,e){ jQuery(jQuery.bt.vars.closeWhenOpenStack).btOff(); var o=e.target; var jo=jQuery(o); var pos=jo.position(); jQuery(document).bind('keydown',{parent:o.parentNode,target:o,top:jo.css('top'),left:jo.css('left'),width:jo.css('width'),height:jo.css('height'),obj:obj},TZR.Calendar.cancelDrag); } // Termine un drag/resize : efface ecouteur touche pour annuler via ECHAP, sauvegarde des nouvelles heures/actualise agenda TZR.Calendar.stopDrag=function(uniqid,obj,e){ var o=e.target; jQuery(document).unbind('keydown',TZR.Calendar.cancelDrag); if(obj.actEvent!=""){ if(!o.tzrevent.allday || o.tzrevent.allday=='0'){ var hours=TZR.Calendar.positionToHour(uniqid,obj,o); if(obj.actEvent!="resizes") o.tzrevent._bh=hours.b; if(obj.actEvent!="resizen") o.tzrevent._eh=hours.e; } TZR.Calendar.ajaxSaveEvent(uniqid,obj,o.tzrevent,true); } obj.actEvent=""; } // Annule un drag/resize TZR.Calendar.cancelDrag=function(event){ if(event.keyCode==27){ event.data.obj.actEvent=""; // La div a changée de colonne, on la remet if(event.data.target.parentNode!=event.data.parent){ jQuery(event.data.target).appendTo(event.data.parent); event.data.target.tzrevent._isod=event.data.parent.id.substr(2,10); } // Retablissement position dans la colonne jQuery(event.data.target).css({top:event.data.top,left:event.data.left,width:event.data.width,height:event.data.height}); jQuery(event.data.target).mouseup(); event.data.target.setEventText(); } } // Annule une création TZR.Calendar.cancelNew=function(event){ if(event.keyCode==27){ event.data.obj.actEvent=""; jQuery(event.data.target).mouseup(); } } // Rafrachi l'agenda TZR.Calendar.refreshAgenda=function(uniqid,obj,event,del){ if(del) jQuery(jQuery.bt.vars.closeWhenOpenStack).btOff(); if(event) TZR.Calendar.orderEvent(uniqid,obj,event,del); TZR.Calendar.calculatePosition(uniqid,obj); TZR.Calendar.drawAgenda(uniqid,obj); if(!del) jQuery(jQuery.bt.vars.closeWhenOpenStack).btOn(); } // Sauvegarde un evenement. Envoi des données au serveur et le serveur renvoie les données enregistrées que l'on met dans event afin que le traitement js porte sur les vrai données TZR.Calendar.ajaxSaveEvent=function(uniqid,obj,event,refresh,cb){ var reg=/<.?br.?.?>/; if(reg.test(event.descr)) event.descr=event.descr.replace("\n","","g").replace(/<.?br.?.?>/g,"\n"); var param={oid:obj.oid,koid:event.oid,text:event.text,descr:event.descr,place:event.place,allday:event.allday}; if(!event.oid || event._obd==event._bd){ param["begin[date]"]=event._isod; param["begin[hour]"]=event._bh; } if(!event.oid || event._oed==event._ed){ param["end[date]"]=event._isod; param["end[hour]"]=event._eh; } param['skip']=1; jQuery.getJSON(TZR._self+"&moid="+obj.moid+"&function=ajaxEdit",param,function(data,status){ if(data){ jQuery.extend(event,data); if(refresh) TZR.Calendar.refreshAgenda(uniqid,obj,event); if(cb) cb.call(TZR.Calendar,uniqid,obj,event); }else{ alert('Error'); } }); return true; } // Créer un evenement TZR.Calendar.createEvent=function(uniqid,obj,event){ if(event.text==undefined) event.text=""; if(event.id==undefined) event.id="ev-"+obj.evs.length+"-"+event._isod; if(event.descr==undefined) event.descr=''; if(event.place==undefined) event.place=''; var l=TZR.Calendar.getEventLimit(event); event.col=0; event.w=1; event.groupinfos={max:1}; event.row=l.b; event.h=l.d; event.rw=1; event.color=obj.color; event.dname=obj.name; TZR.Calendar.createEventDiv(uniqid,obj,event); var jdiv=jQuery('#'+event.id+"-"+uniqid); setTimeout(function(){ jdiv.click(); jQuery('#bt-edittext').triggerHandler('click'); },100); } // Supprime un evenement sur le serveur TZR.Calendar.ajaxDelEvent=function(uniqid,obj,event){ if(event.oid==undefined) return; jQuery.getJSON(TZR._self+"&moid="+obj.moid+"&function=ajaxDel&oid="+obj.oid+"&koid="+event.oid,{},function(data,status){ if(data!="ok"){ alert('Error'); }else{ TZR.Calendar.delEvent(uniqid,obj,event); } }); return true; } // Supprime une div evenement TZR.Calendar.delEvent=function(uniqid,obj,event){ jQuery(jQuery.bt.vars.closeWhenOpenStack).btOff(); jQuery('#'+event.id+'-'+uniqid).remove(); if(obj.display!="displayMonth") TZR.Calendar.refreshAgenda(uniqid,obj,event,true); } // Ecouteur clavier pour un agenda TZR.Calendar.keyListener=function(event){ var uniqid=event.data.uniqid; var obj=event.data.obj; var ag=document.getElementById('agenda'+uniqid); if(!ag){ jQuery(document).unbind('keydown',TZR.Calendar.keyListener); return; } if(event.keyCode==46 && obj.actEvent==""){ jo=jQuery('div.event-selected',ag); if(jo.length==1 && confirm('Supprimer?')){ TZR.Calendar.ajaxDelEvent(uniqid,obj,jo[0].tzrevent); } }else if(event.keyCode==27 && obj.actEvent=="edit"){ jQuery('#bt-cancel').click(); } } // Retourne les limites et le durée d'un evenemtn au format decimal TZR.Calendar.getEventLimit=function(e){ var foo=e._bh.split(':'); var bdec=parseFloat(foo[0])+parseFloat(foo[1])/60; var brounddec=Math.floor(bdec*4)/4; foo=e._eh.split(':'); var edec=parseFloat(foo[0])+parseFloat(foo[1])/60; var erounddec=Math.ceil(edec*4)/4; var eb=brounddec*4; var ee=erounddec*4; return {b:eb,e:ee,d:ee-eb}; } // Recupere l'heure a afficher d'un evenement (en prenant en compte une eventuelle position calculée par positionToHour) TZR.Calendar.getEventText=function(uniqid,obj,event,pos){ var ret="",b,e; if(!event.allday || event.allday=="0"){ if(typeof(pos)=='object'){ b=pos.b; e=pos.e; }else{ b=event._bh; e=event._eh; } if(event._obd!=event._bd && event._oed!=event._ed) ret=".. > .."; else if(event._obd!=event._bd) ret=".. > "+e; else if(event._oed!=event._ed) ret=b+" > .."; else ret=b+" > "+e; ret=''+ret+' '+event.text+''; }else{ ret=''+event.text+''; } return ret; } // Initialise la tooltip d'une div evenement TZR.Calendar.applyHottip=function(uniqid,obj,jo,cb){ TZR.applyHottip(jo,{closeButton:1,trigger:"click",width:320,spikeLength:40,spikeGirth:20,padding:10,cornerRadius:10,'overlap':'jQuery(this).height()/2',positions:['top','bottom'],offsetParent:'#tooltip',hideTip:function(box,callback){if(obj.actEvent=="edit"){jQuery('#bt-cancel').click();}jQuery(box).hide();callback();},postShow:function(box){ jQuery(this).addClass('event-selected'); // Rend titre/descr/lieu de l'helper editable inline if(this.tzrevent.rw){ jQuery('#bt-view').hide(); TZR.Calendar.applyEditable(uniqid,obj,this,cb); }else{ jQuery('#bt-del,#bt-edit').hide(); jQuery('.ieditable2',box).removeClass("ieditable2"); } },postHide:function(){jQuery('div.event-selected',document.getElementById('agdays-'+uniqid)).removeClass('event-selected');},contentSelector:TZR.Calendar.getHottipContent}); } // Applique l'edition directe TZR.Calendar.applyEditable=function(uniqid,obj,div,cb){ jQuery('#bt-edittext,#bt-editplace,#bt-editdescr').click(function(){ if(jQuery('input,textarea',this).length) return false; obj.actEvent="edit"; this.oldvalue=this.innerHTML; if(this.innerHTML==" " || this.innerHTML==" ") this.innerHTML=""; if(this.id=="bt-edittext" || this.id=="bt-editplace"){ jQuery(this).html(''); }else{ jQuery(this).html(''); } jQuery('input,textarea',this).focus(); jQuery('#bt-del,#bt-edit,#bt-view').hide(); jQuery('#bt-cancel,#bt-save').show(); }).each(function(){ if(this.innerHTML=="") this.innerHTML=" "; }); jQuery('#bt-cancel').click(function(){ jQuery('#bt-edittext,#bt-editplace,#bt-editdescr').each(function(){ if(typeof(this.oldvalue)!="undefined") this.innerHTML=this.oldvalue; }); if(div.tzrevent.rw) jQuery('#bt-del,#bt-edit').show(); else jQuery('#bt-view').show(); jQuery('#bt-cancel,#bt-save').hide(); obj.actEvent=""; if(div.tzrevent.oid==undefined) return TZR.Calendar.delEvent(uniqid,obj,div.tzrevent); }); jQuery('#bt-save').click(function(){ jQuery('#bt-edittext,#bt-editplace,#bt-editdescr').each(function(){ if(typeof(this.oldvalue)!="undefined"){ div.tzrevent[this.id.substr(7)]=jQuery('input,textarea',this).val(); this.innerHTML=this.oldvalue; } }); obj.actEvent=""; TZR.Calendar.ajaxSaveEvent(uniqid,obj,div.tzrevent,(obj.display!="displayMonth"),cb); jQuery('#bt-cancel,#bt-save').hide(); }); return ; } // Retourne le contenu de la tooltip d'un evenement TZR.Calendar.getHottipContent=function(div){ var event=this.tzrevent,d=""; var txt=jQuery(this).parents('div.cv8-module-container:first').find('div.cv8-agendabtcontent:first').html(); if(event.allday && event.allday!="0"){ if(event._obd==event._oed) d=event._obd; else d=event._obd+" - "+event._oed; }else{ if(event._obd==event._oed) d=event._obd+" "+event._bh+" - "+event._eh; else d=event._obd+" "+event._bh+" - "+event._oed+" "+event._eh; } txt=txt.replace('_hour_',event.dname+" : "+d); txt=txt.replace('_title_',event.text).replace('_place_',event.place).replace(/_descr_/g,event.descr).replace(/_url_/g,event.url).replace(/_bt/g,"bt"); if(!event.oid){ txt=jQuery('
    '+txt+'
    '); txt.find('#bt-view,#bt-edit,#br-del').remove(); txt=txt.html(); } return txt; } // Recupere la decimal d'un nombre TZR.Calendar.decimal=function(num){ return num-Math.floor(num); } // Trasnforme un flaot en heur HH:mm TZR.Calendar.floatToHour=function(num){ var h=Math.floor(num); if(h<10) h="0"+h; var m=TZR.Calendar.decimal(num)*60; if(m<10) m="0"+m; return h+":"+m; } // Transforme une position en heure HH:mm TZR.Calendar.positionToHour=function(uniqid,obj,o,what){ var jo=jQuery(o); var t=parseInt(jo.css('top')); var h=parseInt(jo.css('height')); var dec=obj.agStart+(t/obj.lineHeight/4); if(what=='end') var b=o.tzrevent._bh; else var b=TZR.Calendar.floatToHour(dec); dec=dec+(h/obj.lineHeight/4); if(what=='begin') var e=o.tzrevent._eh; else var e=TZR.Calendar.floatToHour(dec); return {b:b,e:e}; } // Création de la grille d'un agenda TZR.Calendar.makeGrid=function(uniqid,obj){ var agglob=document.getElementById('agglobal'+uniqid); var aghead=document.getElementById('agdayshead'+uniqid); var agdays=document.getElementById('agdays'+uniqid); var aghour=document.getElementById('aghour'+uniqid); var agdaysallday=document.getElementById('agdaysallday'+uniqid); var div,div2,h,ht,date,i,num,date,l,w,agw,tmp; // Heures if(obj.dates.length==1){ tmp=document.getElementById('aghourallday'+uniqid); date=obj.dates[0]; tmp.innerHTML=''+tmp.innerHTML+''; } h=((obj.agEnd-obj.agStart)*4)*obj.lineHeight; agglob.style.height=(h+10)+"px"; agdays.style.height=h+"px"; for(i=obj.agStart;i'+ht+''; }else{ div.innerHTML=ht; } aghour.appendChild(div); // Fonds div=document.createElement("div"); div.style.position="absolute"; div.style.left="0px"; div.style.top=(i*4*obj.lineHeight-obj.agStart*4*obj.lineHeight)+"px"; if(Math.floor(i+1)%2) div.className="bgodd"; else div.className="bgeven"; agdays.appendChild(div); } } // Colonnes dates agw=Math.floor(100/obj.dates.length); for(num in obj.dates){ num=parseInt(num); date=obj.dates[num]; if(num==obj.dates.length-1) w=(100-agw*num)+"%"; else w=agw+"%"; l=(num*agw)+"%"; // Div d'entete div=document.createElement("div"); div.className="aghead"; div.style.left=l; div.style.width=w; if(obj.dates.length>1){ div.innerHTML=''+jQuery.datepicker.formatDate("D dd/mm",jQuery.datepicker.parseDate('yy-mm-dd',date))+''; }else{ div.innerHTML=jQuery.datepicker.formatDate("DD dd MM yy",jQuery.datepicker.parseDate('yy-mm-dd',date)); } aghead.appendChild(div); // Div des notes div=document.createElement("div"); if(num+1==obj.dates.length) div.className="agadday agaddaylast"; else div.className="agadday"; div.id="agad"+date+"-"+uniqid; div.style.left=l; div.style.width=w; agdaysallday.appendChild(div); // Div des evenements div=document.createElement("div"); if(num+1==obj.dates.length) div.className="agday agdaylast"; else div.className="agday"; div.id="ag"+date+"-"+uniqid; div.style.left=l; div.style.width=w; agdays.appendChild(div); // Création de la grille (div selectionnable pour creation) for(i=obj.agStart;i
    '+TZR.Calendar.getEventText(null,null,e)+'
    '; } TZR.Calendar.monthStopDrag=function(e){ if(e.data.event.modified) TZR.Calendar.ajaxSaveEvent(e.data.uniqid,e.data.obj,e.data.event,false); e.data.jdiv.removeClass('ui-draggable-dragging'); jQuery('.tzr-cal-display-in').unbind('mouseover'); jQuery(document).unbind('mouseup',TZR.Calendar.monthStopDrag); return false; } // Annule un drag dans l'affichage mensuel TZR.Calendar.monthCancelDrag=function(e){ if(e.keyCode==27){ // La div a changée de colonne, on la remet if(e.data.target.parentNode!=e.data.parent){ jQuery(e.data.target).appendTo(e.data.parent); e.data.target.tzrevent._isod=e.data.parent.id.substr(2,10); } e.data.target.tzrevent.modified=false; jQuery(document).mouseup(); jQuery(document).unbind('keydown',TZR.Calendar.monthCancelDrag); } } // champs liens lies // TZR.linkedfields = {notifsStack:[], stacktimeout:null, fields:{}}; // traite les requetes de mise à jour function link2field_popStack(){ // pile vide if (TZR.linkedfields.notifsStack.length == 0) return; // paquet suivant si paquet en cours vide if (TZR.linkedfields.notifsStack[0].length == 0){ TZR.linkedfields.notifsStack.shift(); TZR.linkedfields.stacktimeout = setTimeout(link2field_popStack, 1); return; } var dest = TZR.linkedfields.notifsStack[0].shift(); // appel du traitement pour le champ cible en cours dest.field.refresh(dest.value, dest.options); TZR.linkedfields.stacktimeout = setTimeout(link2field_popStack, 1); } TZR.linkedfields.init = function(f, reset){ reset=reset||false; for(var id in this.fields){ var el = document.getElementById(this.fields[id].properties.varid); if (el != null && el.form == f){ this.fields[id].init1(reset); } } // Lors de l'initialisation, on simule un changement sur les champs déjà renseignées if (!reset) { for (var id in this.fields){ if (this.fields[id].jqobj.val() != '') { this.fields[id].grouplocked = true; this.fields[id].jqobj.change(); this.fields[id].grouplocked = false; } } } } // reset des champs liés TZR.linkedfields.reset = function(ori){ var el = document.getElementById(ori.properties.varid); this.init(el.form, true); } TZR.linkedfields.add = function(params, linkedfields){ var newfield = null; if (TZR.linkedfields.fields[params.varid] == undefined){ TZR.linkedfields.fields[params.varid] = newfield = new link2field(params); }else{ newfield = TZR.linkedfields.fields[params.varid]; } newfield.addLinkedFields(linkedfields); linkedfields = newfield.linkedfields; newfield.linkedfields = []; // consolidation des champs parents for(var i=0; i 0) current = selvals.join('||'); } jQuery("#"+this.properties.varid+"_nb").html(" nb : "+data[0].items.length); var newvalues = []; for(var i in data[0].items){ var selected = ""; if (data[0].items[i].koid == current || current.indexOf(data[0].items[i].koid)>=0){ selected = "selected"; } newvalues.push(data[0].items[i].koid); target.append(""); } // répercution aux champs liés si pas déja concernés, avec mes valeurs en cours (data.items ...) for(var i=0; iRéinitialiser
    "); jQuery("#reset"+this.properties.varid).bind('click', {field:this}, function(event){ jQuery("#reset"+event.data.field.properties.varid).css('display', 'none'); event.data.field.groupLock(false); TZR.linkedfields.reset(event.data.field); return false; }); } else { resetobj.css('display',''); } } TZR.linkedfields.notifsStack.push(newstack); TZR.linkedfields.stacktimeout = setTimeout(link2field_popStack, 1); } // Déplace une ou plusieurs options d'un select multiple vers le haut TZR.doubleSelectOptionUp = function(selectObj) { var cancelMove = false; jQuery('option:selected', selectObj).each( function() { if (cancelMove) return; var newPos = jQuery('option', selectObj).index(this) - 1; if (newPos > -1) { jQuery('option', selectObj).eq(newPos).before(""); jQuery(this).remove(); } else { cancelMove = true; return; } }); }; // Déplace une ou plusieurs options d'un select multiple vers le bas TZR.doubleSelectOptionDown = function(selectObj) { var countOptions = jQuery('option', selectObj).size(); var countOptionsSelected = jQuery('option:selected', selectObj).size(); var cancelMove = false; jQuery(jQuery('option:selected', selectObj).get().reverse()).each( function() { if (cancelMove) return; var newPos = jQuery('option', selectObj).index(this) + 1; if (newPos < countOptions) { jQuery('option', selectObj).eq(newPos).after(""); jQuery(this).remove(); } else { cancelMove = true; return; } }); }; // champ GmapPoint TZR.geocode = function(id) { var address = jQuery("#gmap"+id+" .gmap-address").val(), geocoder = new google.maps.Geocoder(), error_div = jQuery("#gmap"+id+" .gmap-error"); error_div.html('').hide(); var latlng = /(\d+\.\d+),(\d+\.\d+)/.exec(address); if (latlng != null) { // we have latlng var loc = new google.maps.LatLng(latlng[1], latlng[2]); TZR.gmap.setCenter(loc); TZR.marker.setPosition(loc); return; } geocoder.geocode({'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { TZR.gmap.setCenter(results[0].geometry.location); TZR.marker.setPosition(results[0].geometry.location); } else { error_div.html("Geodode error: " + status).show(); } }); } gmaplocalize = function() { TZR.localize(TZR.gmap_options); } // display edit TZR.localize = function(options) { if (window.google == undefined || google.maps == undefined) { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "https://maps.google.com/maps/api/js?sensor=false&callback=gmaplocalize"; document.body.appendChild(script); TZR.gmap_options = options; return false; } TZR.gmapremove(); var params = jQuery.extend({ edit: 0, }, options); TZR.input_lat = jQuery("#"+params.id+"-lat"); TZR.input_lng = jQuery("#"+params.id+"-lng"); var defaultLocation = params.defaultLocation.split(/,|;/), lat = TZR.input_lat.val(), lng = TZR.input_lng.val(), latlng, width = params.mapGeometry.split('x')[0], height = params.mapGeometry.split('x')[1], addrFields = jQuery("#"+params.id+"-addrFields").val(), address; if (params.edit) { if (lat != undefined && lat.length && lng != undefined && lng.length) address = lat+','+lng; else if (jQuery("#"+params.id+"-address").val()) // intable edit address = jQuery("#"+params.id+"-address").val(); else address = ''; TZR.gmap_div = jQuery('
    '); } else TZR.gmap_div = jQuery('
    '); TZR.gmap_div.insertAfter('#'+params.id+'-loc'); jQuery("#gmap"+params.id) .resizable({ minHeight: height-30, minWidth: width, stop: function(event, ui) { jQuery('.map-container', ui.element).css({height:(ui.size.height-30)+'px', width:ui.size.width+'px'}); google.maps.event.trigger(TZR.gmap, 'resize') }}) .draggable({containment:'document', handle: '.move'}) .css({position: 'absolute'}); if (lat != undefined && lat.length && lng != undefined && lng.length) { // existing position latlng = new google.maps.LatLng(lat, lng); } else { // default position latlng = new google.maps.LatLng(defaultLocation[0], defaultLocation[1]); if (params.edit) { if (addrFields != undefined) { // edit address = ''; jQuery.each(addrFields.split(','), function(index, value) { if (value.charAt(0) == "'") address += value.replace(/'/g, "") + ' '; else if (jQuery('input[name="_INPUT'+value+'"]').val()) // link address += jQuery('input[name="_INPUT'+value+'"]').val() + ' '; else if (jQuery('textarea[name="'+value+'"]').val()) // text address += jQuery('textarea[name="'+value+'"]').val().replace(/\n/g, ' ') + ' '; else if (jQuery('input[name="'+value+'"]').val()) // shorttext address += jQuery('input[name="'+value+'"]').val() + ' '; }); } if (address.length) { TZR.gmap_div.find(".gmap-form").show().find(".gmap-address").val(address); TZR.geocode(params.id); } } } TZR.gmap = new google.maps.Map(document.getElementById('map'+params.id), { zoom: params.zoom, center: latlng, mapTypeControl: true, mapTypeId: google.maps.MapTypeId.ROADMAP }); TZR.marker = new google.maps.Marker({ map: TZR.gmap, position: latlng }); if (params.edit) { TZR.marker.setDraggable(true); google.maps.event.addListener(TZR.marker, 'dblclick', function(event){ return TZR.gmapsetPosition(); }); } TZR.gmap_div.click(function(e){ e.stopPropagation(); }); setTimeout(function(){ jQuery("html").one('click.gmaplocalize', function(e){ TZR.gmapremove(); }) },10); return false; } TZR.gmapsetPosition = function() { var pos = TZR.marker.getPosition(); TZR.input_lat.val(pos.lat()); TZR.input_lng.val(pos.lng()); TZR.gmapremove(); return false; }; TZR.gmapremove = function(){ if (TZR.gmap_div != undefined) { TZR.gmap_div.remove(); TZR.gmap_div = null; jQuery("html").unbind('click.gmaplocalize'); } } // FO gmapdisplay = function() { for (i=0; iproperdragenter * Entrée sur la div : appel de div->properdragenter * Sortie de la div : appel de div->properdragleave * Sortie de la fenêtre : appel de body->properdragleave * Avec stopPropagation sur dragenter et dragleave : * Entrée sur la fenêtre : appel de body->properdragenter * Entrée sur la div : appel de div->properdragenter et de body->properdragleave * Sortie de la div : appel de div->properdragleave et de body->properdragenter * Sortie de la fenêtre : appel de body->properdragleave */ jQuery.event.props.push("dataTransfer"); TZR.addProperDragEventsTo=function(el,addoverlay){ var $el=jQuery(el).addClass('droppable'); $el.on('dragover.proper',function(e){ // Obligatoire pour pouvoir avoir un drop personnalisé e.preventDefault(); }).on('drop.proper',function(e){ // Obligatoire pour pouvoir avoir un drop personnalisé e.preventDefault(); $el.trigger('properdragleave'); }).on('dragenter.proper',function(e){ var cnt=jQuery(this).data('dragentercounter'); if(!cnt) cnt=0; cnt++; // Dans la théorie, pour chaque enter dans un fils, il y a un leave et un enter du parent. De ce fait le compteur ne peut pas dépasser 2. // Dans la pratique, il arrive que le leave du parent ne se fasse pas, d'ou la limitation par programme if(cnt>2) cnt=2; if(cnt==1) jQuery(this).trigger('properdragenter'); jQuery(this).data('dragentercounter',cnt); }).on('dragleave.proper',function(e){ var cnt=jQuery(this).data('dragentercounter'); cnt--; if(cnt<0) cnt=0; if(cnt==0) jQuery(this).triggerHandler('properdragleave'); jQuery(this).data('dragentercounter',cnt); }).on('properdragenter',function(e){ e.stopPropagation(); jQuery(this).addClass('dragging'); }).on('properdragleave',function(e){ e.stopPropagation(); jQuery(this).data('dragentercounter',0).removeClass('dragging'); }); if(addoverlay){ if(typeof addoverlay!='string') addoverlay='Déposez vos fichiers dans la zone ci-dessous'; $el.append('
    '+addoverlay+'
    '); } return $el; } // Vérifie si un evenement DnD concerne des fichiers TZR.dragEventContainsFiles=function(e){ if(e.dataTransfer.types && e.dataTransfer.files && e.dataTransfer.files.length){ for(var i in e.dataTransfer.types){ if(e.dataTransfer.types[i]=="Files") return true; } } return false; } // Ajoute la gestion des evenements propres DnD sur body jQuery(function(){ TZR.addProperDragEventsTo('body'); }); /* XFile */ // Initiliase un champ dossier TZR.addXFileUploader=function(table,field,uniqid,opts){ var $cont=jQuery('#'+uniqid+"_cont"); var $queue=$cont.find("div.uploadQueue"); var _opts={ drop_element:$cont[0], runtimes:"html5,flash,html4", url:TZR._sharescripts+'uploader.php?swf='+uniqid+'*'+table+'*'+field, browse_button:$cont.find("input.uploadAddButton")[0], flash_swf_url:'/tzr/templates/js/plupload/Moxie.swf', file_data_name:'Filedata', init:{ FilesAdded:function(up,files){ if(TZR.uploadInProgressFiles==undefined) TZR.uploadInProgressFiles=0; if(TZR.uploadInProgressFilesName==undefined) TZR.uploadInProgressFilesName=[]; if(!up.settings.multi_selection){ if($queue.find('>div.uploadQueueItem').length){ TZR.removeXFileFile(uniqid,$queue.find('>div.uploadQueueItem').attr('id')); } if(files.length>1){ files=files.slice(0,1); } } TZR.uploadInProgressFiles+=files.length; var size_total=0; plupload.each(files,function(file){ if(file.name.length>30) var name=file.name.substr(0,27)+'...'; else var name=file.name; size_total+=file.size; $queue.append('
    '+ ''+ ''+name+' ('+plupload.formatSize(file.size)+')'+ '
    '+ '
    '); TZR.uploadInProgressFilesName.push(uniqid); }); up.start(); if(TZR.uploadAutoSaveMessage && size_total>(10*1024*1024)) setTimeout(function(){TZR.uploadAutoSave=confirm(TZR.uploadAutoSaveMessage)},500); if(!TZR.uploadKeepAliveTimer) TZR.uploadKeepAliveTimer=setInterval(TZR.keepAlive,300000); }, FilesRemoved:function(up,files){ TZR.uploadInProgressFiles-=files.length; plupload.each(files,function(file){ var index = TZR.uploadInProgressFilesName.indexOf(uniqid); if (index > -1) { TZR.uploadInProgressFilesName.splice(index, 1); } }); }, UploadFile:function(up,file){ file.percentagespan=jQuery('#'+file.id+' span.uploadPercentage'); file.progressbardiv=jQuery('#'+file.id+' div.uploadProgressBar'); if(up.runtime=="html4") var t='Uploading...'; else var t="0%"; file.percentagespan.html(" - "+t); }, UploadProgress:function(up,file){ file.percentagespan.html(" - "+file.percent+"%"); file.progressbardiv.css('width',file.percent+'%'); }, FileUploaded:function(up,file){ jQuery('#'+file.id).addClass('uploadComplete').find('div.uploadCancel').remove(); TZR.uploadXFileCompleted[uniqid] = true; file.percentagespan.html(" - Complete"); if(file.timer){ clearInterval(file.timer); delete file.timer; } TZR.uploadInProgressFiles--; var index = TZR.uploadInProgressFilesName.indexOf(uniqid); if (index > -1) { TZR.uploadInProgressFilesName.splice(index, 1); } }, UploadComplete:function(up){ if(TZR.uploadKeepAliveTimer){ clearInterval(TZR.uploadKeepAliveTimer); delete TZR.uploadKeepAliveTimer; } if(TZR.uploadAutoSave) { var $form=jQuery(up.settings.browse_button).closest('form'); $form.submit(); TZR.uploadAutoSave=false; } }, Error:function(up,error){ if(error.file && error.file.percentagespan){ error.file.percentagespan.html(" - "+error.message).addClass('tzr-message'); error.file.progressbardiv.css('width',0); jQuery('#'+error.file.id).addClass('uploadError').find('div.uploadCancel').remove(); }else{ if(error.file){ if(error.code && error.code === plupload.FILE_SIZE_ERROR) { alert(error.file.name+' : '+error.message+' ('+sizeToString(opts.filters.max_file_size.substr(0,opts.filters.max_file_size.length-1),2)+' max)'); }else{ alert(error.file.name+' : '+error.message); } }else{ alert(error.message); } } } } }; if(typeof opts=="object") jQuery.extend(_opts,opts); var uploader=new plupload.Uploader(_opts); $cont.data('uploader',uploader); uploader.init(); // Gestion du DnD TZR.addProperDragEventsTo($cont); // Stockage des uploads valides. TZR.uploadXFileCompleted=[] } TZR.removeXFileFile=function(uniqid,file){ var $cont=jQuery('#'+uniqid+"_cont"); $cont.data('uploader').removeFile(file); $cont.find('#'+file).remove(); } TZR.Xinterval=new Object(); // Initialisation des variables des inputs et datepickers TZR.Xinterval.selectMode = []; TZR.Xinterval.NbMonth = []; TZR.Xinterval.inputDate = []; TZR.Xinterval.divInfos = []; TZR.Xinterval.divControls = []; TZR.Xinterval.divDatePicker = []; TZR.Xinterval.selectedDates = []; TZR.Xinterval.selectedDateTime = []; TZR.Xinterval.divRecap = []; TZR.Xinterval.pictoReset = []; TZR.Xinterval.date1 = []; TZR.Xinterval.date2 = []; TZR.Xinterval.selectIntervalMode = []; TZR.Xinterval.nbMonthStep = []; TZR.Xinterval.dateMin = []; TZR.Xinterval.dateMax = []; TZR.Xinterval.current = []; TZR.Xinterval.initOptions = function (varid,init) { // Initilisation des variables TZR.Xinterval.selectMode[varid] = jQuery('#selectMode'+varid); ///< Choix : selectDates || selectInterval TZR.Xinterval.NbMonth[varid] = parseInt(jQuery('#selectNbMonth'+varid).val()); ///< Nombre de mois à afficher TZR.Xinterval.inputDate[varid] = jQuery('#'+varid); ///< Champs caché qui contient la séléction TZR.Xinterval.divInfos[varid] = jQuery('#infos'+varid); ///< Div d'affichage de message utilisateur TZR.Xinterval.divControls[varid] = jQuery('#controls'+varid); ///< Div conteneur des contôles // (Boutons, selects...) TZR.Xinterval.divDatePicker[varid] = jQuery('#datePicker'+varid); ///< Div conteneur du datepicker TZR.Xinterval.divRecap[varid] = jQuery('#recap'+varid); ///< Div d'affichage des dates séléctionnées // Si le picto reset est présent, on le mémorise if (!TZR.Xinterval.pictoReset[varid]) { TZR.Xinterval.pictoReset[varid] = TZR.Xinterval.divRecap[varid].html(); } // Initialisation des dates déjà séléctionnées (Pour l'édition notament) TZR.Xinterval.initSelectedDates(varid); // Si des dates ont déjà été sélectionnées et que c'est le premier affichage (init==1) on précalcule le nombre de mois if (TZR.Xinterval.selectedDateTime[varid].length > 0 && init) { var min = TZR.Xinterval.selectedDates[varid][0]; var max = TZR.Xinterval.selectedDates[varid][TZR.Xinterval.selectedDateTime[varid].length-1]; var now = new Date(); // On mémorise le nombre de mois a afficher TZR.Xinterval.NbMonth[varid] = (max.getUTCFullYear()-min.getUTCFullYear())*12 + ((max.getMonth()+1)-(min.getMonth()+1))+1; // On fixe le nombre de mois dans le select jQuery('#selectNbMonth'+varid).val(TZR.Xinterval.NbMonth[varid]); // Si la date courante est comprise entre la datemin et la datemax if (min < now && now < max) { TZR.Xinterval.current[varid] = (now.getUTCFullYear()-min.getUTCFullYear())*12 + ((now.getMonth()+1)-(min.getMonth()+1)); } // Si la datemin est dans le futur else if (min > now) { TZR.Xinterval.current[varid] = (now.getUTCFullYear()-min.getUTCFullYear())*12 + ((now.getMonth()+1)-(min.getMonth()+1)); } // Si la datemax est danss le passé else if (now > max) { TZR.Xinterval.current[varid] = (now.getUTCFullYear()-max.getUTCFullYear())*12 + ((now.getMonth()+1)-(max.getMonth()+1)) + TZR.Xinterval.NbMonth[varid]-1; } else { TZR.Xinterval.current[varid] = 0; } } if (TZR.Xinterval.NbMonth[varid]>4) { var ligne = TZR.Xinterval.NbMonth[varid]/4; if (ligne != parseInt(TZR.Xinterval.NbMonth[varid]/4)) ligne = parseInt(ligne)+1; TZR.Xinterval.NbMonth[varid] = [ligne,4]; jQuery('#selectNbMonth'+varid).val(ligne*4); TZR.Xinterval.nbMonthStep[varid] = 4; } else { TZR.Xinterval.nbMonthStep[varid] = 1; } // Vérification des dates minimale et maximal var dateMinMax = jQuery('#dateMinMax'+varid).val(); dateMinMax = dateMinMax.split('/'); TZR.Xinterval.dateMin[varid] = dateMinMax[0]; TZR.Xinterval.dateMin[varid] = TZR.Xinterval.dateMin[varid].split('-'); TZR.Xinterval.dateMax[varid] = dateMinMax[1]; TZR.Xinterval.dateMax[varid] = TZR.Xinterval.dateMax[varid].split('-'); // Mise à jour de l'input hidden et du recap TZR.Xinterval.updateInput(varid); } // Initialisation global datepicker TZR.Xinterval.datePicker = function(varid, init) { // Fonction d'initialisation des variables du datepicker TZR.Xinterval.initOptions(varid,init); // Initialisation réelle du datepicker TZR.Xinterval.divDatePicker[varid].datepicker({ inline: true, showOtherMonths: true, selectOtherMonths: true, changeMonth:true, changeYear:true, minDate: new Date(TZR.Xinterval.dateMin[varid][0], TZR.Xinterval.dateMin[varid][1]-1, TZR.Xinterval.dateMin[varid][2]), maxDate: new Date(TZR.Xinterval.dateMax[varid][0], TZR.Xinterval.dateMax[varid][1]-1, TZR.Xinterval.dateMax[varid][2]), showCurrentAtPos: TZR.Xinterval.current[varid], hideIfNoPrevNext: true, direction: "down", showAnim:"slideDown", showOn: "both", stepMonths: TZR.Xinterval.nbMonthStep[varid], numberOfMonths: TZR.Xinterval.NbMonth[varid], showButtonPanel: true, onSelect: function (dateText, inst) { // Fixe le bug (showCurrentAtPos) inst.drawMonth +=TZR.Xinterval.divDatePicker[varid].datepicker( "option", "showCurrentAtPos"); // Récupère la date sélectionnée var curDate = new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay); // Sinon, on choisi la fonction suivant le mode if (TZR.Xinterval.selectMode[varid].val() == 'selectDates') { TZR.Xinterval.selectDates(curDate,varid); }else if (TZR.Xinterval.selectMode[varid].val() == 'selectInterval') { TZR.Xinterval.handlingInterval(curDate,varid); } TZR.Xinterval.selectedDates[varid].sort(date_sort_asc); // Mise à jour de l'input hidden et du recap TZR.Xinterval.updateInput(varid); }, beforeShowDay: function (date) { // On vérifie si le timestamp de la date courante est sélectionné var index = TZR.Xinterval.selectedDateTime[varid].indexOf(date.getTime()); // Si c'est la cas on lui affecte une classe css (Pour qu'il soit distinguable ) if (index!=-1){ return [true , 'dates-selected']; } // Sinon : rien; return [true , '']; } }); // Fonction de trie du tableau de dates var date_sort_asc = function (date1, date2) { if (date1 > date2) return 1; if (date1 < date2) return -1; return 0; }; } // Fonction de réinitialisation du datepicker (appelé par : Effacer, ou chagement du nombre de mois) TZR.Xinterval.reLoadDatePicker = function(varid) { TZR.Xinterval.divDatePicker[varid].datepicker("destroy"); TZR.Xinterval.datePicker(varid); TZR.Xinterval.updateInput(varid); } var lastPicto = null; TZR.Xinterval.toggle = function(varid) { // Pour tout les divControls de la page for (var key in TZR.Xinterval.divControls) { // Si ce n'est pas celui qui a appelé la fonction, on le ferme if (TZR.Xinterval.divControls[key] != TZR.Xinterval.divControls[varid]) { TZR.Xinterval.divControls[key].hide(); } // Sinon on l'ouvre else { TZR.Xinterval.divControls[varid].toggle().draggable({containment:'document', handle: '.move'}).css({position: 'absolute'});; } } jQuery('html').click(function(e){ // Si le clique porte sur le div controle || un de ses fils || le bouton courant || les fleches (prec, suiv) || un picto calendrier if (jQuery(e.target).attr('id') == 'controls'+varid || jQuery(e.target).parents('#controls'+varid).length || jQuery(e.target).hasClass('ui-datepicker-current') || jQuery(e.target).hasClass('ui-icon') || jQuery(e.target).attr('id') == 'pictoCalendar'+varid ) { // On retourne, car le toggle à déjà géré l'affichage return; } // Sinon si le clic est n'importe ou dans la page, on rappel le toggle, qui le fermera TZR.Xinterval.toggle(varid); // Et on detruit l'écouteur jQuery('html').unbind('click'); }); } // Fonction de ré-initialisation TZR.Xinterval.reset = function(varid) { TZR.Xinterval.date1[varid] = null; TZR.Xinterval.date2[varid] = null; TZR.Xinterval.selectedDates[varid] = []; TZR.Xinterval.selectedDateTime[varid] = []; TZR.Xinterval.inputDate[varid].val(''); TZR.Xinterval.divRecap[varid].empty(); TZR.Xinterval.reLoadDatePicker(varid); } // Fonction de changement de mode de sélection du datepicker TZR.Xinterval.switchModeDatePicker = function (varid){ if (TZR.Xinterval.selectMode[varid]) { // Si on veut séléctionner un intervalle, if (TZR.Xinterval.selectMode[varid].val() == 'selectInterval') { // On ré-initialise les variables TZR.Xinterval.date1[varid] = null; TZR.Xinterval.date2[varid] = null; // On affiche le div de messages if (jQuery("input:radio[name=action"+varid+"]:checked").val() == 'delete') { TZR.Xinterval.divInfos[varid].empty().show().prepend("

    Veuillez sélectionner la date de début a effacer

    " ); } else { TZR.Xinterval.divInfos[varid].empty().show().prepend("

    Veuillez sélectionner la date de début

    " ); } } // Sinon, on les masque else { TZR.Xinterval.divInfos[varid].empty().hide(); } } } // Fonction qui ajoute une date unitaire TZR.Xinterval.selectDates = function (curDate,varid) { // Vérifie si la date séléctionnée l'était dejà var index = TZR.Xinterval.selectedDateTime[varid].indexOf(curDate.getTime()); // Si on est en mode suppresion, et que l'index existe, on supprime l'entrée if (jQuery("input:radio[name=action"+varid+"]:checked").val() == 'delete' && index != -1) { TZR.Xinterval.selectedDateTime[varid].splice(index, 1); TZR.Xinterval.selectedDates[varid].splice(index, 1); }else if(jQuery("input:radio[name=action"+varid+"]:checked").val() == 'select' ){ // Si on est en mode sélection, et que l'index n'existe pas, on insère if (index == -1) { TZR.Xinterval.selectedDates[varid].push(curDate); TZR.Xinterval.selectedDateTime[varid].push(curDate.getTime()); } } } // Mode période TZR.Xinterval.handlingInterval = function (curDate,varid) { // Choix de la méthode en foction du type d'action (Sélection/Suppresion) if (jQuery("input:radio[name=action"+varid+"]:checked").val() == 'delete') { TZR.Xinterval.deSelectInterval(curDate,varid); }else{ TZR.Xinterval.selectInterval(curDate,varid); } } // Fonction de sélection d'une période TZR.Xinterval.selectInterval = function (curDate,varid) { // Vérifie si la date séléctionnée l'était dejà var index = TZR.Xinterval.selectedDateTime[varid].indexOf(curDate.getTime()); // Si ce n'est pas le cas, on l'ajoute if (index==-1) { TZR.Xinterval.selectedDates[varid].push(curDate); TZR.Xinterval.selectedDateTime[varid].push(curDate.getTime()); } // Si TZR.Xinterval.date1[varid] n'est pas initialiser if (!TZR.Xinterval.date1[varid]) { // On l'initialise TZR.Xinterval.date1[varid] = curDate; // Et on affiche le message pour l'utilisateur TZR.Xinterval.divInfos[varid].empty(); TZR.Xinterval.divInfos[varid].prepend( "

    Veuillez sélectionner la date de fin

    " ); } // Si TZR.Xinterval.date2[varid] n'est pas initialiser else if(!TZR.Xinterval.date2[varid]) { // On l'initialise TZR.Xinterval.date2[varid] = curDate; // Si l'utilisateur à inverser les deux dates, on les ré-affecte if (TZR.Xinterval.date2[varid].getTime() < TZR.Xinterval.date1[varid].getTime()) { var dateTmp = TZR.Xinterval.date1[varid]; TZR.Xinterval.date1[varid] = TZR.Xinterval.date2[varid]; TZR.Xinterval.date2[varid] = dateTmp; } // On calcule la date du jour suivant TZR.Xinterval.date1[varid] var date = new Date(TZR.Xinterval.date1[varid]); date.setDate(TZR.Xinterval.date1[varid].getDate() + 1); // Tant que date est compris entre TZR.Xinterval.date1 et TZR.Xinterval.date12 while (date >= TZR.Xinterval.date1[varid] && date <= TZR.Xinterval.date2[varid]) { // On passe par une variable temporaire pour éviter les problèmes de pointeur var dateToInsert = new Date(date); // Vérifie si la date courante était déjà sélectionner var index = TZR.Xinterval.selectedDateTime[varid].indexOf(date.getTime()); // Si cen'est pas le cas if (index==-1){ // On l'ajoute TZR.Xinterval.selectedDates[varid].push(dateToInsert); TZR.Xinterval.selectedDateTime[varid].push(dateToInsert.getTime()); } // On incrémente la date courante date.setDate(date.getDate() + 1); } // On ré-initialise les variables TZR.Xinterval.date1[varid] = null; TZR.Xinterval.date2[varid] = null; // Et on affiche le message pour l'utilisateur TZR.Xinterval.divInfos[varid].empty(); TZR.Xinterval.divInfos[varid].prepend( "

    Veuillez sélectionner la date de début

    " ); } } TZR.Xinterval.deSelectInterval = function (curDate,varid) { var index = TZR.Xinterval.selectedDateTime[varid].indexOf(curDate.getTime()); if (index!=-1) { TZR.Xinterval.selectedDateTime[varid].splice(index, 1); TZR.Xinterval.selectedDates[varid].splice(index, 1); } // Si TZR.Xinterval.date1[varid] n'est pas initialiser if (!TZR.Xinterval.date1[varid]) { // On l'initialise TZR.Xinterval.date1[varid] = curDate; // Et on affiche le message pour l'utilisateur TZR.Xinterval.divInfos[varid].empty(); TZR.Xinterval.divInfos[varid].prepend( "

    Veuillez sélectionner la date de fin de la période à effacer

    " ); } // Si TZR.Xinterval.date2[varid] n'est pas initialiser else if(!TZR.Xinterval.date2[varid]) { // On l'initialise TZR.Xinterval.date2[varid] = curDate; // Si l'utilisateur à inverser les deux dates if (TZR.Xinterval.date2[varid].getTime() < TZR.Xinterval.date1[varid].getTime()) { var dateTmp = TZR.Xinterval.date1[varid]; TZR.Xinterval.date1[varid] = TZR.Xinterval.date2[varid]; TZR.Xinterval.date2[varid] = dateTmp; } // On calcule la date du jour suivant TZR.Xinterval.date1[varid] var date = new Date(TZR.Xinterval.date1[varid]); date.setDate(TZR.Xinterval.date1[varid].getDate() + 1); // Tant que date est compris entre TZR.Xinterval.date1 et TZR.Xinterval.date2 while (date >= TZR.Xinterval.date1[varid] && date <= TZR.Xinterval.date2[varid]) { // Vérifie si la date courante était déjà sélectionner var index = TZR.Xinterval.selectedDateTime[varid].indexOf(date.getTime()); // Si elle est déjà sélectionnée if (index!=-1){ // On l'enlève TZR.Xinterval.selectedDateTime[varid].splice(index, 1); TZR.Xinterval.selectedDates[varid].splice(index, 1); } // On incrémente la date courante date.setDate(date.getDate() + 1); } // On ré-initialise les variables TZR.Xinterval.date1[varid] = null; TZR.Xinterval.date2[varid] = null; // Et on affiche le message pour l'utilisateur TZR.Xinterval.divInfos[varid].empty(); TZR.Xinterval.divInfos[varid].prepend( "

    Veuillez sélectionner la date de début à effacer

    " ); } } // Fonction de mise à jour de l'input hidden TZR.Xinterval.updateInput = function (varid) { // On efface les valeur précédentes TZR.Xinterval.inputDate[varid].val(''); TZR.Xinterval.divRecap[varid].empty(); var contentHidden = ''; var contentDisplay = ''; if (TZR.Xinterval.selectedDates[varid].length > 0) { contentDisplay = '
    '+TZR.Xinterval.selectedDates[varid].length + ' dates séléctionnées : '; TZR.Xinterval.divRecap[varid].append(TZR.Xinterval.pictoReset[varid]); contents = TZR.Xinterval.formatValues(TZR.Xinterval.selectedDates[varid]); contentHidden = contents[0]; contentDisplay += contents[1]; } TZR.Xinterval.inputDate[varid].val(contentHidden); TZR.Xinterval.divRecap[varid].append(contentDisplay); } // Initialisation des dates sélectionnées TZR.Xinterval.initSelectedDates = function (varid){ // Si les tableaux de dates du champs ne sont pas initialisés if (!TZR.Xinterval.selectedDateTime[varid]) { // Si il n'y a pas de dates déjà renseignées if (!TZR.Xinterval.inputDate[varid].val()) { TZR.Xinterval.selectedDateTime[varid] = []; TZR.Xinterval.selectedDates[varid] = []; } // Sinon on récupère les dates déjà sélectionnées else { // On sépare les dates (; caractère d'échappement) var dates = TZR.Xinterval.inputDate[varid].val().split(';'); // On initialise le tableau de timestamp() du champs TZR.Xinterval.selectedDateTime[varid] = []; TZR.Xinterval.selectedDates[varid] = []; // pour chaques dates for (var key in dates){ if (!/\d{4}-\d{2}-\d{2}/.test(dates[key]) || dates[key] == '0000-00-00') continue; var date = jQuery.datepicker.parseDate('yy-mm-dd', dates[key]); if (date == 'Invalid Date') continue; TZR.Xinterval.selectedDates[varid][key] = date; TZR.Xinterval.selectedDateTime[varid][key] = date.getTime(); } var content = TZR.Xinterval.formatValues(TZR.Xinterval.selectedDates[varid]); TZR.Xinterval.inputDate[varid].empty().append(content[0]); TZR.Xinterval.divRecap[varid].append('
    '+ (TZR.Xinterval.selectedDates[varid].length-1) + ' dates séléctionnées : '+content[1]); } } } TZR.Xinterval.formatValues = function (dates) { // On mémorise le dernier élément var last = dates[dates.length-1]; var datePrev = null; var i = 0; var contentDisplay = ''; var contentHidden = ''; for(var key in dates) { if (dates[key] && dates[key] !="") { // S'il n'y a qu'une entrée if (dates[0] == last) { return [TZR.Xinterval.dateFormatSQL(last),TZR.Xinterval.dateFormat(last)]; } // Si la date précédente n'est pas initilisé, on l'initialise if (datePrev == null ) { datePrev = dates[key]; // Et on fixe le compteur i=0; } // Si on connait la date précédente else { // On calcule la date du jour précedent var testDate = new Date(dates[key]); testDate.setDate(dates[key].getDate() - 1); // Si la date courante est consécutive à la date précédente if (datePrev.getTime() == testDate.getTime()) { // Si c'est la première date, après celle de début if (i == 0) { // La date de précédente correspond donc à un debut de période contentDisplay += '
    Du '+TZR.Xinterval.dateFormat(datePrev); i++; } // On mémorise la date courante datePrev = dates[key]; // Si c'est la dernière date if (dates[key] == last) { // Si on était dans une période, on la ferme if (i > 0) { contentDisplay += ' au '+TZR.Xinterval.dateFormat(dates[key])+"; "; } } } // Si la date courante n'est pas consécutive à la date précédente else { // Si on était dans une période, on la ferme if (i > 0) { contentDisplay += ' au '+TZR.Xinterval.dateFormat(datePrev)+"; "; } else { if (datePrev == dates[0]) contentDisplay += '
    '+TZR.Xinterval.dateFormat(datePrev)+'; '; else contentDisplay += TZR.Xinterval.dateFormat(datePrev)+'; '; } // Si c'est la dernière date if (dates[key] == last) { // Si on était dans une période, on la ferme contentDisplay += TZR.Xinterval.dateFormat(dates[key])+"; "; } // Et on ré-initialise tout datePrev = dates[key]; i=0; } } // Le contenu qui sera mémorisé dans l'input hidden des dates contentHidden += TZR.Xinterval.dateFormatSQL(dates[key])+';'; } else dates.splice(dates[key], 1); } return [contentHidden,contentDisplay]; } TZR.Xinterval.dateFormat = function (date) { return ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth()+1)).slice(-2) + '/' + date.getFullYear(); } TZR.Xinterval.dateFormatSQL = function (date) { return date.getFullYear() + '-' + ('0' + (date.getMonth()+1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2); } /** * Fait défiler la page jusqu'à la position "offset" passée en paramètre * @param offset int Position d'arrêt du défilement * @param margin int nombre de pixel à retirer au défilement * @param speed string|int Vitesse du défilement, voir paramètres jQuery.animate */ TZR.scrollToOffset = function(offset, margin, speed) { margin = margin||10; speed = speed||'slow'; jQuery('html,body').animate({ scrollTop: offset - margin }, speed); } /** * Fait défiler la page jusqu'à la position de l'élément DOM passée en paramètre * @param elem DOMElement Element du DOM jusqu'au quel il faut arrêter le défilement * @param margin int nombre de pixel à retirer au défilement * @param speed string|int Vitesse du défilement, voir paramètres jQuery.animate */ TZR.scrollTo = function(elem, margin, speed) { margin = margin||10; speed = speed||'slow'; TZR.scrollToOffset(jQuery(elem).offset().top, margin, speed); } ;