paniers/public_html_admin/js/functions.js

1824 lines
65 KiB
JavaScript

// DEFINE
var array_keys_chiffres = ['1','2','3','4','5','6','7','8','9','0'];
var array_keys_ponctuations = ['.','-','_','#','@'];
var array_keys_minuscules = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
var array_keys_majuscules = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
function isDefined(val){
return (val === undefined || val == null || val.length <= 0) ? false : true;
}
/* COLLAPSE BAR */
function initCollapseBars(elem) {
if(!elem.length>0) return;
elem.each(function(n,e) {
if(!$(this).hasClass("collapse_initialized")) {
var bar = $(this);
bar.addClass("collapse_initialized");
var limit = parseInt(bar.attr("collapse-limit"));
if(!limit>0) limit = 768;
$( window ).on( "resize", function() { collapseBar_resize(bar, limit); });
collapseBar_resize(bar, limit);
}
});
}
function collapseBar_resize(bar, limit) {
if(window.innerWidth >= limit) bar.removeClass("collapsed");
else bar.addClass("collapsed");
}
/* MODAL FORM UTIL */
function modalForm_initBtnView(btn, modal, clearFormFct, loadFormDatasFct) {
btn.unbind('click').click( function(e) {
e.preventDefault(); $(this).blur();
id = parseInt($(this).attr('ref'));
if(!id>0) return;
clearFormFct(modal);
modal.attr("view_id", id);
loadFormDatasFct(modal, id);
});
}
function modalForm_initBtnAdd(btn, modal, clearFormFct) {
btn.unbind('click').click( function(e) {
e.preventDefault(); $(this).blur();
clearFormFct(modal);
modal.modal('show');
});
}
function modalForm_initBtnCopy(btn, modal, clearFormFct, loadFormDatasFct) {
btn.unbind('click').click( function(e) {
e.preventDefault(); $(this).blur();
id = parseInt($(this).attr('ref'));
if(!id>0) return;
clearFormFct(modal);
loadFormDatasFct(modal,id, true);
});
}
function modalForm_initBtnSaveAdd(btn, addType, modal, getModalFormDataFct, checkModalFormDataFct, saveURL) {
btn.unbind('click').click( function(e) {
e.preventDefault(); $(this).blur();
// GET & CHECK DATAS
var datas = getModalFormDataFct(modal);
console.log("modalForm_btnSaveAdd", datas);
if( !checkModalFormDataFct(datas) ) return;
datas.action = 'add';
// RUN REQUEST
modalForm_runFormRequest( saveURL, datas, ("add "+addType) , modal, $(this) );
});
}
function modalForm_initBtnEdit(btn, modal, clearFormFct, loadFormDatasFct) {
btn.unbind('click').click( function(e) {
e.preventDefault(); $(this).blur();
id = parseInt($(this).attr('ref'));
if(!id>0) return;
clearFormFct(modal);
modal.attr("edit_id", id);
loadFormDatasFct(modal,id);
});
}
function modalForm_initBtnSaveEdit(btn, editType, modal, getModalFormDataFct, checkModalFormDataFct, saveURL) {
btn.unbind('click').click( function(e) {
e.preventDefault(); $(this).blur();
// GET MODAL EDIT ID
var id = parseInt( modal.attr("edit_id") );
if(!id>0) return;
// GET & CHECK DATAS
var datas = getModalFormDataFct(modal);
console.log("modalForm_btnSaveEdit", datas);
if( !checkModalFormDataFct(datas) ) return;
datas.action = 'edit';
datas.ref = id;
// RUN REQUEST
modalForm_runFormRequest( saveURL, datas, ("edit "+editType) , modal, $(this) );
});
}
function modalForm_initBtnArchive(btn, modal, clearFormFct, loadFormDatasFct) {
btn.unbind('click').click( function(e) {
e.preventDefault(); $(this).blur();
id = parseInt($(this).attr('ref'));
if(!id>0) return;
clearFormFct(modal);
modal.attr("archive_id", id);
loadFormDatasFct($(this),id);
});
}
function modalForm_initBtnSaveArchive(btn, archiveType, modal, saveURL) {
btn.unbind('click').click( function(e) {
e.preventDefault(); $(this).blur();
// GET MODAL DELETE ID
var id = parseInt( modal.attr("archive_id") );
if(!id>0) return;
// GET DATAS
var datas = {
'action' : 'archive',
'ref' : id
};
console.log("ARCHIVE", id, datas );
// RUN REQUEST
modalForm_runFormRequest( saveURL, datas, ("archive "+archiveType) , modal, $(this) );
});
}
function modalForm_initBtnUnarchive(btn, archiveType, modal, saveURL) {
btn.unbind('click').click( function(e) {
e.preventDefault(); $(this).blur();
id = parseInt($(this).attr('ref'));
if(!id>0) return;
var datas = {
'action' : 'unarchive',
'ref' : id
};
console.log("UNARCHIVE", id, datas );
// RUN REQUEST
$.post( saveURL, datas, function( result ) {
if(parseInt(result)>0) document.location.reload();
else {
console.error(result); alert(result);
}
}).fail(function(xhr) {
var errMsg = "SERVER ERROR (unarchive "+archiveType+")";
if( xhr['responseText']!="" ) errMsg += " : " + xhr['responseText'];
console.error(errMsg); alert(errMsg);
});
});
}
function modalForm_initBtnDelete(btn, modal, clearFormFct, loadFormDatasFct) {
btn.unbind('click').click( function(e) {
e.preventDefault(); $(this).blur();
id = parseInt($(this).attr('ref'));
if(!id>0) return;
clearFormFct(modal);
modal.attr("delete_id", id);
loadFormDatasFct($(this),id);
});
}
function modalForm_initBtnSaveDelete(btn, deleteType, modal, getModalFormDataFct, checkModalFormDataFct, saveURL) {
btn.unbind('click').click( function(e) {
e.preventDefault(); $(this).blur();
// GET MODAL DELETE ID
var id = parseInt( modal.attr("delete_id") );
if(!id>0) return;
// GET & CHECK DATAS
var datas = {};
if(typeof getModalFormDataFct === 'function') datas = getModalFormDataFct(modal);
console.log("DELETE", id, datas );
if(typeof checkModalFormDataFct === 'function') { if( !checkModalFormDataFct(datas) ) return; }
datas.action = 'delete';
datas.ref = id;
// RUN REQUEST
modalForm_runFormRequest( saveURL, datas, ("delete "+deleteType) , modal, $(this) );
});
}
function modalForm_runFormRequest(url, datas, srvErrorAction, modal, btnRun) {
modalForm_runFormRequest_lockModal(modal, btnRun);
$.post( url, datas, function( result ) {
if(parseInt(result)>0) {
if(modal && modal.length>0) {
modal.modal('hide');
setTimeout(function() { document.location.reload(); },200);
}
else document.location.reload();
}
else {
console.error(result); alert(result);
modalForm_runFormRequest_unlockModal(modal, btnRun);
}
}).fail(function(xhr) {
var errMsg = "SERVER ERROR";
if( isDefined( srvErrorAction ) ) errMsg += " ("+srvErrorAction+")";
if( xhr['responseText']!="" ) errMsg += " : " + xhr['responseText'];
console.error(errMsg); alert(errMsg);
modalForm_runFormRequest_unlockModal(modal, btnRun);
});
}
function modalForm_runFormRequest_lockModal(modal, btnRun) {
if( isDefined( modal ) && modal.find("div.modaLoader").length>0) modal.find("div.modaLoader").addClass("show");
if( isDefined( btnRun ) ) btnRun.prop("disabled", true);
}
function modalForm_runFormRequest_unlockModal(modal, btnRun) {
if( isDefined( modal ) && modal.find("div.modaLoader").length>0) modal.find("div.modaLoader").removeClass("show");
if( isDefined( btnRun ) ) btnRun.prop("disabled", false);
}
function modalForm_initTabs(modal) {
// TABS
modal.find("a.formTabBtn").click(function(e) {
e.preventDefault();
// BTN
if(!$(this).parent().hasClass("active")) {
modal.find("ul.formTabsBtns > li").removeClass('active');
$(this).parent().addClass("active");
}
// TAB
var tab = modal.find("div.tab."+$(this).attr("tab"));
if(tab.length>0) {
if(tab.hasClass("active")) return;
modal.find("div.formTabs > div.tab").removeClass("active");
tab.addClass("active");
}
});
// RESIZE TABS
var resizeFct = function resizeFormClient(modal) {
var h = window.innerHeight - (window.innerWidth < 768 ? 111 : 180);
modal.find("div.formTabs div.tab").css("max-height", h+"px");
}
resizeFct(modal);
$( window ).on( "resize", function() { resizeFct(modal) });
}
function modalForm_resetTabs(modal) {
modal.find("ul.formTabsBtns > li").removeClass('active hide');
modal.find("ul.formTabsBtns > li:first-child").addClass('active');
modal.find("div.formTabs > div.tab").removeClass("active");
modal.find("div.formTabs > div.tab:first-child").addClass("active");
}
/* INLINE SELECT MANAGER */
function inlineSelectManager_init(
modal,
modal_form_name,
grp,
value_name,
url,
ref_attr,
add_action,
edit_action,
delete_action,
refresh_list_action,
selectClbkFct,
addClbkFct,
editClbkFct,
cancelClbkFct,
getDatasFct,
checkDatasFct,
saveClbkFct
) {
grp.attr("modal_form_name", modal_form_name)
.attr("value_name", value_name)
.attr("ref_attr", ref_attr)
.attr("add_action", add_action)
.attr("edit_action", edit_action)
.attr("delete_action", delete_action)
.attr("refresh_list_action", refresh_list_action);
// SELECT CHANGE => SWITCH ACTION
grp.find("select").change(function(e) {
$(this).blur();
// EXISTING
if(parseInt($(this).val())>0) {
inlineSelectManager_switchBtnAction(grp, "delete");
inlineSelectManager_switchBtnSecondAction(grp, "edit");
}
// CHOISIR...
else {
inlineSelectManager_switchBtnAction(grp, "add");
inlineSelectManager_switchBtnSecondAction(grp, "hide");
}
if(typeof selectClbkFct === 'function') selectClbkFct(modal, grp, $(this));
});
// BTN ACTION
grp.find("button.btnAction").click(function(e) {
e.preventDefault(); $(this).blur();
// ADD / SAVE NEW
if($(this).hasClass("add") || $(this).hasClass("save_new")) {
inlineSelectManager_addInputName(grp, "add");
inlineSelectManager_switchBtnAction(grp, "save");
inlineSelectManager_switchBtnSecondAction(grp, "cancel");
if(typeof addClbkFct === 'function') addClbkFct(modal, grp);
}
// SAVE
else if($(this).hasClass("save")) inlineSelectManager_save(modal, grp, url, getDatasFct, checkDatasFct, saveClbkFct);
// DELETE
else if($(this).hasClass("delete")) inlineSelectManager_delete(modal, grp, url);
});
// BTN SECOND ACTION
grp.find("button.btnSecondAction").click(function(e) {
e.preventDefault(); $(this).blur();
// EDIT
if($(this).hasClass("edit")) {
inlineSelectManager_addInputName(grp, "edit");
inlineSelectManager_switchBtnAction(grp, "save");
inlineSelectManager_switchBtnSecondAction(grp, "cancel");
if(typeof editClbkFct === 'function') editClbkFct(modal, grp);
}
// CANCEL
else if($(this).hasClass("cancel")) {
inlineSelectManager_removeInputName(grp);
// EDIT
if(parseInt(grp.find("select").val())>0) {
inlineSelectManager_switchBtnAction(grp, "delete");
inlineSelectManager_switchBtnSecondAction(grp, "edit");
}
// ADD
else {
inlineSelectManager_switchBtnAction(grp, "add");
inlineSelectManager_switchBtnSecondAction(grp, "hide");
}
if(typeof cancelClbkFct === 'function') cancelClbkFct(modal, grp);
}
});
}
function inlineSelectManager_setValue(grp, val) {
if(isDefined(val) && parseInt(val) > 0) {
grp.find("select").val(val);
inlineSelectManager_switchBtnAction(grp, "delete");
inlineSelectManager_switchBtnSecondAction(grp, "edit");
}
else {
grp.find("select").val("0");
inlineSelectManager_switchBtnAction(grp, "add");
inlineSelectManager_switchBtnSecondAction(grp, "hide");
}
}
function inlineSelectManager_switchBtnAction(grp, action) {
var btn = grp.find("button.btnAction");
if(action == "add") {
btn.removeClass("save save_new delete").addClass("add").removeClass("btn-danger btn-primary").addClass("btn-default")
.find("i").removeClass("glyphicon-floppy-saved glyphicon-floppy-disk glyphicon-trash").addClass("glyphicon-plus");
}
else if(action == "save") {
btn.removeClass("add save_new delete").addClass("save").removeClass("btn-danger btn-default").addClass("btn-primary")
.find("i").removeClass("glyphicon-plus glyphicon-floppy-disk glyphicon-trash").addClass("glyphicon-floppy-saved");
}
else if(action == "save_new") {
btn.removeClass("add save delete").addClass("save_new").removeClass("btn-danger btn-primary").addClass("btn-default")
.find("i").removeClass("glyphicon-plus glyphicon-floppy-saved glyphicon-trash").addClass("glyphicon-floppy-disk");
}
else if(action == "delete") {
btn.removeClass("add save_new save").addClass("delete").removeClass("btn-default btn-primary").addClass("btn-danger")
.find("i").removeClass("glyphicon-plus glyphicon-floppy-saved glyphicon-floppy-disk").addClass("glyphicon-trash");
}
}
function inlineSelectManager_switchBtnSecondAction(grp, action) {
var btn = grp.find("button.btnSecondAction");
if(action == "cancel") {
btn.removeClass("edit").addClass("cancel").removeClass("btn-default").addClass("btn-danger")
.find("i").removeClass("glyphicon-edit").addClass("glyphicon-floppy-remove");
btn.parent().removeClass("hide");
}
else if(action == "edit") {
btn.removeClass("cancel").addClass("edit").removeClass("btn-danger").addClass("btn-default")
.find("i").removeClass("glyphicon-floppy-remove").addClass("glyphicon-edit");
btn.parent().removeClass("hide");
}
else if(action == "hide") {
btn.parent().addClass("hide");
}
}
function inlineSelectManager_addInputName(grp, action) {
var select = grp.find("select");
select.addClass("hide");
var ipt = $('<input type="text" class="form-control" name="name" placeholder="nom">').attr("action", action);
ipt.insertBefore(select);
if(action=="edit") {
ipt.attr("ref", select.val());
ipt.val( select.find("option:selected").html() );
}
else ipt.attr("ref", "new");
ipt.focus();
ipt.keypress(function(e) {
if(e.keyCode==13) {
e.preventDefault();
$(this).parent().find("button.btnAction").click();
}
});
}
function inlineSelectManager_removeInputName(grp) {
var ipt = grp.find("input[name=name]");
if(ipt.length>0) ipt.remove();
grp.find("select").removeClass("hide");
}
function inlineSelectManager_save(modal, grp, url, getDatasFct, checkDatasFct, saveClbkFct) {
// GET DATAS
var datas = (typeof getDatasFct === 'function') ? getDatasFct(modal, grp) : inlineSelectManager_getDatas(grp);
// CHECK DATAS
if(typeof checkDatasFct === 'function') { if( !checkDatasFct(datas) ) return; }
else { if( !inlineSelectManager_checkDatas(datas) ) return; }
var ref = grp.find("input[name=name]").attr("ref");
// ADD
if(ref == "new") datas.action = grp.attr("add_action");
// EDIT
else if(parseInt(ref)>0) {
ref = parseInt(ref);
datas.action = grp.attr("edit_action");
datas[grp.attr("ref_attr")] = ref;
}
// LOCK
modal.find("div.modaLoader").addClass("show");
modal.find("button.btnAction").prop("disabled", true);
$.post( url, datas, function( result ) {
if(parseInt(result)>0) {
inlineSelectManager_switchBtnAction(grp, "delete");
inlineSelectManager_switchBtnSecondAction(grp, "edit");
inlineSelectManager_removeInputName(grp);
if(ref == "new") ref = parseInt(result);
if(typeof saveClbkFct === 'function') saveClbkFct(modal, grp, ref);
// REFRESH LIST
$.post( url, { action: grp.attr("refresh_list_action") }, function( result ) {
grp.find("select").html(result).val(ref);
}).fail(function() {
alert("ERREUR SERVEUR ! (modal form "+grp.attr("modal_form_name")+" - add/edit "+grp.find("select").attr("name")+" - refresh list after)");
});
}
else { console.error(result); alert(result); }
}).fail(function() {
alert("ERREUR SERVEUR ! (modal form "+grp.attr("modal_form_name")+" - add/edit "+grp.find("select").attr("name")+")");
}).always(function() {
// UNLOCK
modal.find("div.modaLoader").removeClass("show");
modal.find("button.btnAction").prop("disabled", false);
});
}
function inlineSelectManager_delete(modal, grp, url) {
var ref = parseInt(grp.find("select").val());
var nom = grp.find("select option:selected").html();
if(confirm('Etês vous sûr de vouloir supprimer '+grp.attr('value_name')+' "'+nom+'" ?')) {
// LOCK
modal.find("div.modaLoader").addClass("show");
modal.find("button.btnGroupeAction").prop("disabled", false);
var datas = { action : grp.attr("delete_action") };
datas[grp.attr("ref_attr")] = ref;
$.post( url, datas, function( result ) {
if(parseInt(result)>0) {
// REFRESH LIST
$.post( url, { action: grp.attr("refresh_list_action") }, function( result ) {
grp.find("select").html(result).val("0");
}).fail(function() {
alert("ERREUR SERVEUR ! (modal form "+grp.attr("modal_form_name")+" - delete "+grp.find("select").attr("name")+" - refresh list after)");
});
}
else { console.error(result); alert(result); }
}).fail(function() {
alert("ERREUR SERVEUR ! (modal form "+grp.attr("modal_form_name")+" - delete "+grp.find("select").attr("name")+")");
}).always(function() {
// UNLOCK
modal.find("div.modaLoader").removeClass("show");
modal.find("button.btnAction").prop("disabled", false);
});
}
}
function inlineSelectManager_getDatas(grp) {
var datas = { 'nom' : grp.find("input[name=name]").val() };
return datas;
}
function inlineSelectManager_checkDatas(datas) {
if(datas.nom=="") {
alert("Merci de renseigner un nom !");
return false;
}
return true;
}
/* AUTOCOMPLETE INPUT */
function initAutocompleteInput(form, ipt, url, action, errContext, requestDataFct, selectFct, clearFct, blurFct) {
ipt.autocomplete({
html: true,
delay: 200,
source: function(requete, reponse) {
datas = {
'action' : action,
'search' : ipt.val(),
'nohist' : true
};
if(typeof requestDataFct === 'function') datas = requestDataFct(form, ipt, datas);
$.post(url, datas, function(jsonTxt) {
datas = JSON.parse(jsonTxt);
reponse(datas);
}).fail(function() { alert("ERREUR SERVEUR !"+( (isDefined(errContext)) ? " "+errContext : "" )); });
},
focus: function(event, ui) { event.preventDefault(); },
select: function(event, ui) {
event.preventDefault();
if(typeof selectFct === 'function') selectFct(form, ipt, ui.item);
else ipt.val( ui.item.value ).attr('ref', ui.item.ref).blur();
}
});
ipt.keydown(function(e) {
if(e.keyCode==13) { e.preventDefault(); $(this).blur(); }
else if(parseInt($(this).attr('ref'))>0) {
if(typeof clearFct === 'function') clearFct(form, $(this));
else $(this).val("").removeAttr('ref');
}
});
ipt.on("blur", function(e) {
if(typeof blurFct === 'function') blurFct(form, $(this));
else if(!parseInt($(this).attr('ref'))>0) $(this).val("").removeAttr('ref');
});
}
/* LIST PROGRESS LOAD */
function initListProgressLoad(list, url, listName) {
if(isDefined(list)) {
var contentH = list.innerHeight();
list.listProgressLoad_resize();
$(window).resize( function() { list.listProgressLoad_resize(); } );
list.scroll(function(e) {
var rest = list.prop("scrollHeight") - list.innerHeight() - list.scrollTop();
if(rest<300 && list.find("td.loader").length==0 && parseInt(list.attr('rest'))>0) {
// APPEND LOADER
var tr = $("<tr class='loader'><td class='loader' colspan='17'></td></tr>");
list.append(tr);
// LOAD
$.post(url, { 'startListAt' : parseInt(list.attr('end')) }, function(jsonTxt) {
datas = JSON.parse(jsonTxt);
list.attr("start", datas.start);
list.attr("end", datas.end);
list.attr("rest", datas.rest);
list.append($(datas.list));
list.trigger( "loaded" );
tr.remove();
list.listProgressLoad_resize();
}).fail(function(xhr) {
errMsg = "SERVER ERROR ("+(( isDefined( listName ) && listName != "" ) ? listName : "list")+" - load items)";
if( xhr['responseText']!="" ) errMsg += " : " + xhr['responseText'];
console.error(errMsg); alert(errMsg);
});
}
});
// FORCE LOAD IF WINDOWS NOT FULL
h = $(window).innerHeight() - list.position().top;
if(parseInt(list.attr("rest"))>0 && contentH<h) list.trigger("scroll");
}
}
function registerListProgressLoadCbkFct(list, clbFct) { if( isDefined(list) && (typeof clbFct === 'function')) list.on("loaded", clbFct); }
$.fn.listProgressLoad_resize = function() {
var h = $(window).innerHeight() - $(this).position().top;
$(this).removeAttr("style");
if($(this).prop("scrollHeight") < h) $(this).parent().addClass("no-scroll");
else $(this).parent().removeClass("no-scroll");
$(this).css("height", h);
};
/* SEARCH */
$.fn.preventFormValidation = function() {
$(this).on("submit", function(e) { e.preventDefault(); e.stopPropagation(); });
}
$.fn.initSearchGroup = function() {
$(this).find("input[name=search]").unbind('keypress').keypress( function(event) {
if(event.keyCode==13) {
event.preventDefault();
console.log("SEARCH", $(this).val());
$(this).blur();
document.location = "?search="+$(this).val();
}
});
$(this).find(".btnClearSearch").unbind('click').click( function(event) {
event.preventDefault(); $(this).blur();
document.location = "?clearSearch";
});
}
function initBtnClearFiltres(btn) {
if(!btn.length>0) return;
btn.initBtnClearFiltres();
}
$.fn.initBtnClearFiltres = function() {
$(this).unbind("click").click(function(e) {
e.preventDefault(); $(this).blur();
document.location = "?clear_filtres=1";
});
}
$.fn.initFiltreSelect = function() {
// LOAD VALUE
$(this).each(function(n,e) {
if(isDefined($(this).attr("load_value"))) $(this).val($(this).attr("load_value"));
});
// SELECT
$(this).change(function(e) {
if( !isDefined( $(this).attr("filtre_request") ) ) return;
$(this).blur();
document.location = "?"+$(this).attr("filtre_request")+"="+$(this).val();
});
}
/* FONCTIONS */
function getUrlParameters() {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
params = [],
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
params[sParameterName[0]] = (sParameterName[1] === undefined) ? true : decodeURIComponent(sParameterName[1]);
}
return params;
}
function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
}
function beep(duration, frequency, volume, type, callback) {
var audioCtx = new (window.AudioContext || window.webkitAudioContext || window.audioContext);
var oscillator = audioCtx.createOscillator();
var gainNode = audioCtx.createGain();
oscillator.connect(gainNode);
gainNode.connect(audioCtx.destination);
if(volume) gainNode.gain.value = volume;
if(frequency) oscillator.frequency.value = frequency;
if(type) oscillator.type = type;
if(callback) oscillator.onended = callback;
oscillator.start(audioCtx.currentTime);
oscillator.stop(audioCtx.currentTime + ((duration || 500) / 1000));
}
function round_number(number, decimals) {
if(!decimals>0) return Math.round(number);
number = parseFloat(number);
mux = decimals * 10;
n = Math.round(number * mux);
return n / mux;
}
function number_format(number, decimals, dec_point, thousands_sep) {
number = (number + '')
.replace(/[^0-9+\-Ee.]/g, '');
var n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
s = '',
toFixedFix = function(n, prec) {
var k = Math.pow(10, prec);
return '' + (Math.round(n * k) / k)
.toFixed(prec);
};
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n))
.split('.');
if (s[0].length > 3) {
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
}
if ((s[1] || '')
.length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1)
.join('0');
}
return s.join(dec);
}
function initFiltreInputNumber() {
iptsInt = $(".inputIntNumber");
iptsFloat = $(".inputFloatNumber");
if(iptsInt.length>0) initIntInput(iptsInt);
if(iptsFloat.length>0) initFloatInput(iptsFloat);
}
function initIntInput(elem) {
elem.unbind('keypress').keypress( function(event) {
keys = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57];
if(event.keyCode==13) setTimeout(function() { elem.blur(); },50);
if(jQuery.inArray(event.keyCode,keys)==-1) event.preventDefault();
});
}
function initIntInputWithLimits(elem, min, max) {
elem.unbind('keypress').keypress( function(event) {
keys = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57];
if(event.keyCode==13) {
$(this).blur();
if(parseInt($(this).val()>max)) $(this).val(max);
else if(parseInt($(this).val()<min)) $(this).val(min);
}
if(jQuery.inArray(event.keyCode,keys)==-1) event.preventDefault();
});
}
function initFloatInput(elem) {
if(elem.attr('type') == "number") elem.attr('lang', 'en').unbind('keypress').keypress( function(event) {
if(event.keyCode==13) setTimeout(function() { elem.blur(); },50);
})
else elem.unbind('keypress').unbind('keyup').keypress( function(event) {
keys = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 46, 44];
if(event.keyCode==13) setTimeout(function() { elem.blur(); },50);
if(jQuery.inArray(event.keyCode,keys)==-1) event.preventDefault();
if((event.keyCode==46 || event.keyCode==44) && $(this).val().indexOf('.')>0) event.preventDefault();
}).keyup( function(event) {
if(event.keyCode==188 && $(this).val().indexOf('.')==-1) {
var pos = $(this)[0].selectionStart;
$(this).val( $(this).val().replace(",",".") );
$(this)[0].setSelectionRange(pos,pos);
}
});
}
function initFloatInputWithLimits(elem, min, max) {
if(elem.attr('type') == "number") elem.attr('lang', 'en').unbind('keypress').keypress( function(event) {
if(event.keyCode==13) {
event.preventDefault();
setTimeout(function() { elem.blur(); },50);
}
})
else elem.unbind('keypress').unbind('keyup').keypress( function(event) {
keys = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 46, 44];
if(event.keyCode==13) {
event.preventDefault();
setTimeout(function() { elem.blur(); },50);
}
if(jQuery.inArray(event.keyCode,keys)==-1) event.preventDefault();
if((event.keyCode==46 || event.keyCode==44) && $(this).val().indexOf('.')>0) event.preventDefault();
}).keyup( function(event) {
if(event.keyCode==188 && $(this).val().indexOf('.')==-1) {
var pos = $(this)[0].selectionStart;
$(this).val( $(this).val().replace(",",".") );
$(this)[0].setSelectionRange(pos,pos);
}
});
elem.blur(function(e) {
if(isDefined(min) && parseFloat($(this).val())<min) $(this).val(min);
else if(isDefined(max) && parseFloat($(this).val())>max) $(this).val(max);
});
}
function initDateInput(elem) {
elem.unbind('keypress').unbind('keyup').keypress( function(event) {
if(event.keyCode==13) {
event.preventDefault();
setTimeout(function() { elem.blur(); },50);
}
}).blur(function(e) {
var date = parseDate($(this).val(), 'yyyy-mm-dd');
var minDate = parseDate($(this).attr("min"), 'yyyy-mm-dd');
var maxDate = parseDate($(this).attr("max"), 'yyyy-mm-dd');
if(!date) $(this).val("")
else if(minDate && date<minDate) $(this).val($(this).attr("min"));
else if(maxDate && date<maxDate) $(this).val($(this).attr("max"));
});
}
function initEdiTable(elem,beforeFct,callbacbFct) {
elem.unbind('dblclick').dblclick( function(e) {
var cell = $(this);
if(cell.parent().parent().find('.ediTabling').length>0 || cell.hasClass('ediTabling') || cell.hasClass('disabled')) return;
var origVal = cell.html();
cell.attr('orig_val',origVal);
cell.addClass('ediTabling');
if(beforeFct) beforeFct(cell,e);
ipt = $("<input class='ediTable' type='text'>");
ipt.val(origVal);
cell.html("").append(ipt);
ipt.focus(function() {
$(this).select();
});
ipt.blur( function(e) {
val = $(this).val();
if(cell.hasClass('int')) val = parseInt(val);
if(cell.hasClass('float')) {
dec_max = parseInt(cell.attr('float_dec'));
dec_max = (!isNaN(dec_max) && dec_max>0) ? dec_max : 2;
dec = 2;
if(dec_max>=3) {
for(i = 3; i<=dec_max; i++) {
x = Math.pow(10, (i-1));
if(parseInt(((val*x) - parseInt(val*x))*10)>0) dec = i;
}
}
val = parseFloat(val).toFixed(dec);
}
$(this).remove();
cell.removeClass('ediTabling').removeAttr('orig_val').html(val);
clbFctReturn = false;
if(callbacbFct) clbFctReturn = callbacbFct(cell,e);
if(!clbFctReturn) {
var nextFocus = false;
cell.parent().find('.ediTable').each( function(n,e) {
if( $(this).attr('id') == cell.attr('id') ) nextFocus = new Array();
else if(nextFocus && nextFocus.length==0) nextFocus = $(this);
});
if(nextFocus && nextFocus.length>0) nextFocus.dblclick();
}
});
ipt.keypress( function(event) {
if(event.keyCode==13) $(this).blur();
});
if(cell.hasClass('int')) initIntInput(ipt);
if(cell.hasClass('float')) initFloatInput(ipt);
if(cell.hasClass('center')) ipt.addClass('center');
if(cell.hasClass('right')) ipt.addClass('right');
ipt.focus();
});
}
function initUpperCaseInput(elem,beforeFct,callbacbFct) {
elem.keyup( function(event) {
if(beforeFct) beforeFct(elem,event);
ignoreKeys = [8, 16, 46, 20, 37, 38, 39, 40];
if(jQuery.inArray(event.keyCode,ignoreKeys)!=-1) return;
pos = getCursorPosition($(this));
$(this).val( $(this).val().toUpperCase() );
setCursorPosition($(this),pos);
if(callbacbFct) callbacbFct(elem,event);
});
}
function initFirstUpperCaseInput(elem,beforeFct,callbacbFct) {
elem.keyup( function(event) {
if(beforeFct) beforeFct(elem,event);
ignoreKeys = [8, 16, 46, 20, 37, 38, 39, 40];
if(jQuery.inArray(event.keyCode,ignoreKeys)!=-1) return;
pos = getCursorPosition($(this));
$(this).val($(this).val().substr(0,1).toUpperCase() + $(this).val().substring(1));
setCursorPosition($(this),pos);
if(callbacbFct) callbacbFct(elem,event);
});
}
function initTelInput(elem,feedback) {
elem.intlTelInput({
validationScript: "libs/intl-tel-input/build/js/isValidNumber.js",
preferredCountries : ['fr'],
nationalMode: false
});
if(feedback===true) {
elem.blur(function() {
if ($.trim($(this).val())) {
if ($(this).intlTelInput("isValidNumber")) {
$(this).parent().parent().addClass('has-success');
$(this).parent().parent().find(".form-control-feedback").removeClass('glyphicon-warning-sign').addClass('glyphicon-ok').removeClass('hide');
}
else {
$(this).parent().parent().addClass('has-warning');
$(this).parent().parent().find(".form-control-feedback").addClass('glyphicon-warning-sign').removeClass('glyphicon-ok').removeClass('hide');
}
}
}).keydown(function() {
$(this).parent().parent().removeClass('has-success').removeClass('has-warning');
$(this).parent().parent().find(".form-control-feedback").addClass('hide');
});
}
}
function initEmailInput(elem) {
elem.blur( function(event) {
checkEmail($(this));
}).keydown(function() {
$(this).parent().removeClass('has-success').removeClass('has-warning');
$(this).parent().find(".form-control-feedback").addClass('hide');
}).keyup(function() {
$(this).val( $(this).val().toLowerCase() );
});
}
function checkEmail(e) {
if ($.trim(e.val())) {
if (validateEmail(e.val())) {
e.parent().addClass('has-success');
e.parent().find(".form-control-feedback").removeClass('glyphicon-warning-sign').addClass('glyphicon-ok').removeClass('hide');
}
else {
e.parent().addClass('has-warning');
e.parent().find(".form-control-feedback").addClass('glyphicon-warning-sign').removeClass('glyphicon-ok').removeClass('hide');
}
}
}
function formatFileSize(s) {
s = parseFloat(s);
if(s<=1024) {
return "1 ko";
}
else {
s = s/1024;
if(s<=1024) {
return Math.round(s) + " ko";
}
else {
s = s/1024;
return Math.round(s) + " Mo";
}
}
}
function getCursorPosition(elem) {
var el = elem.get(0);
var pos = 0;
if('selectionStart' in el) {
pos = el.selectionStart;
} else if('selection' in document) {
el.focus();
var Sel = document.selection.createRange();
var SelLength = document.selection.createRange().text.length;
Sel.moveStart('character', -el.value.length);
pos = Sel.text.length - SelLength;
}
return pos;
}
function setSelectionRange(elem, selectionStart, selectionEnd) {
elem = elem.get(0);
if(elem.setSelectionRange) {
elem.focus();
elem.setSelectionRange(selectionStart, selectionEnd);
}
else if (elem.createTextRange) {
var range = elem.createTextRange();
range.collapse(true);
range.moveEnd('character', selectionEnd);
range.moveStart('character', selectionStart);
range.select();
}
}
function setCursorPosition(elem, pos) {
setSelectionRange(elem, pos, pos);
}
var PRINT_MOIS_COURT = ['null','janv.','fév.','mars','avril','mai','juin','juil.','août','sept.','oct.','nov.','déc.'];
var PRINT_MOIS = ['null','janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre'];
var PRINT_JOUR_INI = ['D.','L.','Ma.','Me.','J.','V.','S.'];
var PRINT_JOUR_COURT = ['dim.','lun.','mar.','mer.','jeu.','ven.','sam.'];
var PRINT_JOUR = ['dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi'];
function formatDate(original, originalFormat, destinationFormat, moment) {
// DEFAULT VALUE
if(!original) original = "";
if(!originalFormat) originalFormat = "mysql_datetime";
if(!destinationFormat) destinationFormat = "datetime";
if(!moment) moment = "start";
var infos = false;
if(original!='' && parseInt(original)!=0) {
switch(originalFormat) {
case 'date': // "DD/MM/YYYY"
infos = new Object();
infos.tm_hour = 0;
infos.tm_min = 0;
infos.tm_sec = 0;
infos.tm_mday = parseInt(original.substr(0,2));
infos.tm_mon = parseInt(original.substr(3,2));
infos.tm_year = parseInt(original.substr(6,4));
break;
case 'datetime': // "DD/MM/YYYY - HH:MM"
infos = new Object();
infos.tm_hour = parseInt(original.substr(13,2));
infos.tm_min = parseInt(original.substr(16,2));
infos.tm_sec = 0;
infos.tm_mday = parseInt(original.substr(0,2));
infos.tm_mon = parseInt(original.substr(3,2));
infos.tm_year = parseInt(original.substr(6,4));
break;
case 'mysql_date': // "YYYY-MM-DD"
infos = new Object();
infos.tm_hour = 0
infos.tm_min = 0
infos.tm_sec = 0;
infos.tm_mday = parseInt(original.substr(8,2));
infos.tm_mon = parseInt(original.substr(5,2));
infos.tm_year = parseInt(original.substr(0,4));
break;
case 'mysql_datetime': // "YYYY-MM-DD HH:MM:SS"
infos = new Object();
infos.tm_hour = parseInt(original.substr(11,2));
infos.tm_min = parseInt(original.substr(14,2));
infos.tm_sec = parseInt(original.substr(17,2));
infos.tm_mday = parseInt(original.substr(8,2));
infos.tm_mon = parseInt(original.substr(5,2));
infos.tm_year = parseInt(original.substr(0,4));
break;
default:
return;
}
if(originalFormat=="date" || originalFormat=="mysql_date") {
if(moment=="start") {
infos.tm_hour = 0;
infos.tm_min = 0;
infos.tm_sec = 0;
}
else {
infos.tm_hour = 23;
infos.tm_min = 59;
infos.tm_sec = 59;
}
}
}
else {
return;
}
// FORMAT NUMBER
infos.tm_hour = '%02d'.sprintf(infos.tm_hour);
infos.tm_min = '%02d'.sprintf(infos.tm_min);
infos.tm_sec = '%02d'.sprintf(infos.tm_sec);
infos.tm_mday = '%02d'.sprintf(infos.tm_mday);
infos.tm_mon = '%02d'.sprintf(infos.tm_mon);
infos.tm_year = '%04d'.sprintf(infos.tm_year);
switch(destinationFormat) {
case 'date': // "%d/%m/%Y"
return infos.tm_mday+"/"+infos.tm_mon+"/"+infos.tm_year;
break;
case 'strdate': // "%Y-%m-%d"
return infos.tm_year+"-"+infos.tm_mon+"-"+infos.tm_mday;
break;
case 'datetime': // "%d/%m/%Y - %H:%M"
return infos.tm_mday+"/"+infos.tm_mon+"/"+infos.tm_year+" - "+infos.tm_hour+":"+infos.tm_min;
break;
case 'print_datetime': // "%d/%m/%Y %H:%M"
return infos.tm_mday+" "+PRINT_MOIS_COURT[parseInt(infos.tm_mon)]+" "+infos.tm_year+" à "+infos.tm_hour+"h"+infos.tm_min;
break;
case 'mysql_date': // "%Y-%m-%d"
return infos.tm_year+"-"+infos.tm_mon+"-"+infos.tm_mday;
break;
case 'mysql_datetime': //"%Y-%m-%d %H:%M:%S"
return infos.tm_year+"-"+infos.tm_mon+"-"+infos.tm_mday+" "+infos.tm_hour+":"+infos.tm_min+":"+infos.tm_sec;
break;
case 'timestamp': //timestamp
return java_mktime(parseInt(infos.tm_year), parseInt(infos.tm_mon), parseInt(infos.tm_mday), parseInt(infos.tm_hour), parseInt(infos.tm_min), parseInt(infos.tm_sec));
break;
default:
return "";
}
}
function getTodayDate(format) {
let now = new Date();
return formatDate(now, format);
}
function parseDate(dateStr, format) {
date = false;
if(dateStr == undefined || dateStr == "" || dateStr.length<10) return date;
switch(format) {
case 'yyyy-mm-dd' : { d=dateStr.split("-"); if(d.length==3) date = new Date(parseInt(d[0]), parseInt(d[1]) - 1, parseInt(d[2])); } break;
case 'yyyy-dd-mm' : { d=dateStr.split("-"); if(d.length==3) date = new Date(parseInt(d[0]), parseInt(d[2]) - 1, parseInt(d[1])); } break;
case 'dd/mm/yyyy' : { d=dateStr.split("/"); if(d.length==3) date = new Date(parseInt(d[2]), parseInt(d[1]) - 1, parseInt(d[0])); } break;
case 'mm/dd/yyyy' : { d=dateStr.split("/"); if(d.length==3) date = new Date(parseInt(d[2]), parseInt(d[0]) - 1, parseInt(d[1])); } break;
}
return date;
}
function formatDate(date, format) {
dateStr = '';
if(!date instanceof Date || !date>0) return dateStr;
var yyyy = date.getFullYear();
var mm = String(date.getMonth()+1).padStart(2, "0");
var dd = String(date.getDate()).padStart(2, "0");
switch(format) {
case 'yyyy-mm-dd' : dateStr = yyyy+"-"+mm+"-"+dd; break;
case 'yyyy-dd-mm' : dateStr = yyyy+"-"+dd+"-"+mm; break;
case 'dd/mm/yyyy' : dateStr = dd+"/"+mm+"/"+yyyy; break;
case 'mm/dd/yyyy' : dateStr = mm+"/"+dd+"/"+yyyy; break;
}
return dateStr;
}
function switchDateFormat(dateStr, fromFormat, toFormat) {
var date = parseDate(dateStr, fromFormat);
if(!date instanceof Date || !date>0) return '';
return formatDate(date, toFormat);
}
function java_mktime(year, month, day, hour, minutes, secondes) {
return new Date(year, month - 1, day, hour, minutes, secondes, 0).getTime() / 1000;
}
function getNbJourOuvrePeriode(d,f) {
var nbj = 0;
if(d.isSame(f) && !d.isFerie() && d.day()!=0 && d.day()!=6) nbj=1;
else {
while(d.isBefore(f)) {
if(!d.isFerie() && d.day()!=0 && d.day()!=6) nbj++;
d.add(1, 'days');
}
if(!f.isFerie() && f.day()!=0 && f.day()!=6) nbj++;
}
return nbj;
}
function rgb2hex(rgb) {
if (/^#[0-9A-F]{6}$/i.test(rgb)) return rgb;
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
function hex(x) {
return ("0" + parseInt(x).toString(16)).slice(-2);
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
function nl2br (str, is_xhtml) {
var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2');
}
function replaceAll(string, find, replace) {
return string.replace(new RegExp(find, 'g'), replace);
}
// VALIDATION
function validateEmail(email) {
if(email.length<6) return false;
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
if( !emailReg.test( email ) ) {
return false;
}
else {
return true;
}
}
function validatePwd(p, minLength, minUpperCase, minLowerCase, minNumber, minSpecial) {
var anUpperCase = /[A-Z]/;
var aLowerCase = /[a-z]/;
var aNumber = /[0-9]/;
var aSpecial = /[!|@|#|$|%|^|&|*|(|)|-|_]/;
if(p.length < minLength) return false;
var numUpper = 0;
var numLower = 0;
var numNums = 0;
var numSpecials = 0;
for(var i=0; i<p.length; i++){
if(anUpperCase.test(p[i]))
numUpper++;
else if(aLowerCase.test(p[i]))
numLower++;
else if(aNumber.test(p[i]))
numNums++;
else if(aSpecial.test(p[i]))
numSpecials++;
}
if(numUpper < minUpperCase || numLower < minLowerCase || numNums < minNumber || numSpecials < minSpecial) return false;
return true;
}
function validateNumSecu(txt) {
var result = new Object();
result.ipt = txt;
while(txt.indexOf(' ')>0) txt = txt.replace(' ','');
result.filtre = txt;
result.test = false;
result.parse = new Object();
result.format = "";
result.error = false;
if(txt.length>=0) {
var sexTxt = txt.substring(0,1);
var sex = parseInt(sexTxt);
result.parse.sex = sexTxt;
result.rest = txt;
if(sex==1 || sex==2 || sex==3 || sex==4 || sex==7 || sex==8) { // TEST SEX => 1er chiffre = 1(M), 2(F), 3(M-entranger en cours) ou 4(F-entranger en cours), 7(M-temp), 8(F-temp)
result.format = sexTxt + " ";
result.rest = txt.substring(1);
if(txt.length>=3) {
var annee = txt.substr(1,2);
result.parse.annee = annee;
if(annee.indexOf("A")==-1 && annee.indexOf("B")==-1) {
result.format = result.format + annee + " ";
result.rest = txt.substring(3);
if(txt.length>=5) {
var moisTxt = txt.substr(3,2);
var mois = parseInt(moisTxt);
result.parse.mois = moisTxt;
if(mois>=1 && mois<=12) { // TEST MOIS => 4 + 5ème chiffre entre 1 & 12
result.format = result.format + moisTxt + " ";
result.rest = txt.substring(5);
if(txt.length>=10) {
// A: FRANCAIS METROPOLE
var deptA = txt.substr(5,2); // de 01 à 95 ou 2A ou 2B
var comAtxt = txt.substr(7,3);
var comA = parseInt( comAtxt ); // de 001 à 990
// B: FRANCAIS OUTREMER
var deptBtxt = txt.substr(5,3);
var deptB = parseInt( deptBtxt ); // de 970 à 989
var comBtxt = txt.substr(8,2);
var comB = parseInt( comBtxt ); // de 01 à 90
// C: FRANCAIS NE A L'ETRANGER
var deptCtxt = txt.substr(5,2);
var deptC = parseInt( deptCtxt ); // = 99
var comCtxt = txt.substr(7,3);
var comC = parseInt( comCtxt ); // de 001 à 990
result.error = 'deptCom';
if( ((parseInt(deptA)>0 && parseInt(deptA)<=95) || deptA=='2A' || deptA=='2B') && ( comA>0 && comA<=990 ) ) { // TEST DEPT/COM A
result.error = false;
result.parse.deptCom = "a";
result.parse.dept = deptA;
result.parse.com = comAtxt;
result.format = result.format + deptA + " " + comAtxt + " ";
}
else if( (deptB>=970 && deptB<=989) && ( comB>0 && comB<=90 ) ) { // TEST DEPT/COM B
result.error = false;
result.parse.deptCom = "b";
result.parse.dept = deptBtxt;
result.parse.com = comBtxt;
result.format = result.format + deptBtxt + " " + comBtxt + " ";
}
else if( deptC==99 && ( comC>0 && comC<=990 ) ) { // TEST DEPT/COM C
result.error = false;
result.parse.deptCom = "c";
result.parse.dept = deptCtxt;
result.parse.com = comCtxt;
result.format = result.format + deptCtxt + " " + comCtxt + " ";
}
if(!result.error) { // RESULT TEST DEPT/COM
result.rest = txt.substring(10);
if(txt.length>=13) {
var naisTxt = txt.substr(10,3);
var nais = parseInt( naisTxt );
result.parse.nais = naisTxt;
result.error = 'naissance';
if(nais>=1 && nais<=999) { // TEST NAISSANCE
result.format = result.format + naisTxt + " ";
result.rest = txt.substring(13);
if(txt.length==15) {
var keyTxt = txt.substr(13,2);
var key = parseInt( keyTxt );
result.parse.key = keyTxt;
var nir = txt.substr(0,13);
result.parse.nirTxt = nir;
if(nir.indexOf("A")>0) nir = parseInt( nir.replace('A','0') ) - 1000000;
else if(nir.indexOf("B")>0) nir = parseInt( nir.replace('B','0') ) - 2000000;
else nir = parseInt( nir );
result.parse.nir = nir;
result.parse.correctKey = 97-(nir%97);
if( key==result.parse.correctKey ) {
result.format = result.format + keyTxt;
result.test = true;
result.rest = "";
}
else result.error = 'key';
}
else result.error = 'length';
}
else result.error = 'naissance';
}
else result.error = 'length';
}
else result.error = 'deptCom';
}
else result.error = 'length';
}
else result.error = 'mois';
}
else result.error = 'length';
}
else result.error = 'annee';
}
else result.error = 'length';
}
else result.error = 'sex';
}
else result.error = 'length';
return result;
}
function validateNumCS(txt) {
var result = new Object();
result.ipt = txt;
while(txt.indexOf(' ')>0) txt = txt.replace(' ','');
result.filtre = txt;
result.test = false;
result.format = "";
result.rest = txt;
result.error = false;
if(!txt.length>=1) result.error = 'length';
else {
var l = txt.substr(0,1);
var regex = new RegExp(/([^A-Za-z\-])/);
if (regex.test (l)) result.error = 'l';
else {
result.format = l.toUpperCase();
result.rest = txt.substr(1);
regex = new RegExp(/([^0-9\-])/);
if(txt.length>1 && regex.test (result.rest)) result.error = 'caract';
else {
if(!txt.length>=3) result.error = 'length';
else {
result.format = result.format + " " + txt.substr(1,2);
result.rest = txt.substr(3);
if(!txt.length>=5) result.error = 'length';
else {
result.format = result.format + " " + txt.substr(3,2);
result.rest = txt.substr(5);
if(txt.length!=7) result.error = 'length';
else {
result.format = result.format + " " + txt.substr(5,2);
result.rest = "";
result.test = true;
}
}
}
}
}
}
return result;
}
function validateNumCNI(txt) {
var result = new Object();
result.ipt = txt;
txt = txt.replace(new RegExp(' ', 'g'), '');
result.filtre = txt;
result.test = false;
result.format = "";
result.rest = txt;
result.error = false;
if(txt.length<2) result.error = 'length';
else {
// ANNEE
var annee = txt.substr(0,2);
result.annee = annee;
var regex = new RegExp(/([^0-9\-])/);
if(regex.test(annee)) result.error = 'annee';
else {
result.annee = parseInt(annee);
result.format = annee;
result.rest = txt.substr(2);
if(txt.length<4) result.error = 'length';
else {
// MOIS
var moisTxt = txt.substr(2,2);
var mois = parseInt(moisTxt);
result.mois = moisTxt;
if(!(mois>=1 && mois<=12) || regex.test(mois)) result.error = 'mois';
else {
result.format = result.format + " " + moisTxt;
result.rest = txt.substr(4);
// DEPT
if(txt.length<6) result.error = 'length';
else {
var deptTxt = txt.substr(4,2).toUpperCase();
var dept = parseInt(deptTxt);
result.dept = deptTxt;
if(!((dept>=1 && dept<=95) || deptTxt=="2A" || deptTxt=="2B" || dept==97)) result.error = 'dept';
else {
result.format = result.format + " " + deptTxt;
result.rest = txt.substr(6);
// SERVICE
if(txt.length<7) result.error = 'length';
else {
var srvTxt = txt.substr(6,1);
result.srv = srvTxt;
result.format = result.format + " " + srvTxt;
result.rest = txt.substr(7);
// NUM ATTRIB
if(txt.length<12) result.error = 'length';
else {
var attribTxt = txt.substr(7,5);
if(regex.test(attribTxt)) result.error = 'attrib';
else {
result.format = result.format + " " + attribTxt;
result.rest = txt.substr(12);
// KEY
if(txt.length!=13) result.error = 'length';
else {
var key = txt.substr(12,1);
result.key = key;
var correctKey = calculCNIkey(result.format);
result.correctKey = correctKey;
if(regex.test(key) || parseInt(key)!=correctKey) result.error = 'key';
else {
result.format = result.format + " " + key;
result.rest = "";
result.test = true;
}
}
}
}
}
}
}
}
}
}
}
return result;
}
function calculCNIkey(cniFormat) {
var cni = cniFormat.replace(new RegExp(' ', 'g'), '');
var factors = [7, 3, 1];
var result = 0;
var regex = new RegExp(/([0-9\-])/);
for(var i=0 ; i<cni.length ; i++) {
var char = cni.substr(i,1);
var conv = 0;
if(regex.test(char)) { // CHIFFRE
conv = parseInt(cni.substr(i,1));
}
else { // LETTRE
conv = char.charCodeAt(0) - 55;
}
result += conv * factors[i % 3];
}
return result % 10;
}
function validateNumPasseport(txt) {
var result = new Object();
result.ipt = txt;
txt = txt.replace(new RegExp(' ', 'g'), '');
result.filtre = txt;
result.test = false;
result.format = "";
result.rest = txt;
result.error = false;
if(txt.length<2) result.error = 'length';
else {
// 1er NUM
var num1 = txt.substr(0,2);
result.num1 = num1;
var regexChiffres = new RegExp(/([^0-9\-])/);
var regexLettres = new RegExp(/([^A-Z\-])/);
if(regexChiffres.test(num1)) result.error = 'num1';
else {
result.format = num1;
result.rest = txt.substr(2);
if(txt.length<4) result.error = 'length';
else {
// LETTRE
var letter = txt.substr(2,2).toUpperCase();;
result.letter = letter;
if(regexLettres.test(letter)) result.error = 'letter';
else {
result.format = result.format + " " + letter;
result.rest = txt.substr(4);
// 2ème NUM
if(txt.length<7) result.error = 'length';
else {
var num2 = txt.substr(4,3);
result.num2 = num2;
if(regexChiffres.test(num2)) result.error = 'num2';
else {
result.format = result.format + " " + num2;
result.rest = txt.substr(7);
// 3ème NUM
if(txt.length!=9) result.error = 'length';
else {
var num3 = txt.substr(7,2);
result.num3 = num3;
if(regexChiffres.test(num3)) result.error = 'num3';
else {
result.format = result.format + " " + num3;
result.rest = "";
result.test = true;
}
}
}
}
}
}
}
}
return result;
}
function basename(path, suffix) {
var b = path;
var lastChar = b.charAt(b.length - 1);
if (lastChar === '/' || lastChar === '\\') {
b = b.slice(0, -1);
}
b = b.replace(/^.*[\/\\]/g, '');
if (typeof suffix === 'string' && b.substr(b.length - suffix.length) == suffix) {
b = b.substr(0, b.length - suffix.length);
}
return b;
}
// GENERATE PASSWORD
function generatePassword(length,uppercase,numbers,punction) {
var sPassword = "";
for (i=1; i <= length; i++) {
numI = getRandomNum();
if ((punction == 0 && checkPunc(numI)) || (numbers == 0 && checkNumber(numI)) ||(uppercase == 0 && checkUppercase(numI))) {i -= 1;}
else {sPassword = sPassword + String.fromCharCode(numI);}
}
return sPassword;
}
function getRandomNum() {
// between 0 - 1
var rndNum = Math.random()
// rndNum from 0 - 1000
rndNum = parseInt(rndNum * 1000);
// rndNum from 33 - 127
rndNum = (rndNum % 94) + 33;
return rndNum;
}
function checkPunc(num) {
if (((num >=33) && (num <=47)) || ((num >=58) && (num <=64))) { return true; }
if (((num >=91) && (num <=96)) || ((num >=123) && (num <=126))) { return true; }
return false;
}
function checkNumber(num) {
if ((num >=48) && (num <=57)) { return true; }
else { return false; }
}
function checkUppercase(num) {
if ((num >=65) && (num <=90)) { return true; }
else { return false; }
}
function copyTextToClipboard(text) {
$("body").append("<input type='text' id='temp' style='position:absolute;opacity:0;'>");
$("#temp").val(text).select();
document.execCommand("copy");
$("#temp").remove();
}
function copyHTMLToClipboard(htmlText) {
var copyDiv = document.createElement('div');
copyDiv.contentEditable = true;
document.body.appendChild(copyDiv);
copyDiv.innerHTML = htmlText;
copyDiv.unselectable = "off";
copyDiv.focus();
document.execCommand('SelectAll');
document.execCommand("Copy", false, null);
document.body.removeChild(copyDiv);
}
// TABLE SORTABLE
var tableSortableFixHelper = function(e, ui) {
ui.children().each(function() {
$(this).width($(this).width());
});
return ui;
};
// PHOTO FORM
function initPhotoForm(div, calbckURL, defaultPhotoURL) {
var photoPreview = div.find("div.photoPreview");
var photoIptFile = div.find("input[name=photoFile]");
var btnResetPhoto = div.find("button.btnResetPhoto");
// OPEN FILE EXPLORER
photoPreview.unbind('click').click( function(event) {
event.preventDefault();
photoIptFile.click();
});
// AUTO UPLOAD ON FILE CHANGE
photoIptFile.change( function() {
oldFile = $(this).attr("file");
file = $(this)[0].files[0];
if(typeof(file)=="undefined") return false;
type = file.type;
name = file.name;
size = formatFileSize(file.size);
if(type=="image/png" || type=="image/jpeg" || type=="image/jpg") {
photoPreview.css('background-image',"url(img/wait.svg)");
uploadTmpPhotoFile(div, file, oldFile, calbckURL);
}
else {
alert("ERREUR : format de fichier non-admis... ("+type+")");
}
});
// RESET PHOTO
btnResetPhoto.click( function(e) {
e.preventDefault();
photoIptFile.attr("file", "").attr("nom", "");
photoPreview.css('background-image', "url('"+defaultPhotoURL+"')");
btnResetPhoto.addClass('hide');
});
}
function uploadTmpPhotoFile(div, file, oldFile, calbckURL) {
if(file.size>0) {
var photoPreview = div.find("div.photoPreview");
var photoIptFile = div.find("input[name=photoFile]");
var btnResetPhoto = div.find("button.btnResetPhoto");
var data = new FormData();
data.append('action', 'upload_tmp_file');
data.append('tmp_file', file);
data.append('old_file', oldFile);
data.append('nohist', true);
$.ajax({
url: calbckURL,
data: data,
cache: false,
contentType: false,
processData: false,
type: 'POST',
success: function(txt){
if(txt=="error") {
alert("ERREUR : un problème est survenue durant le chargement de la photo...");
}
else {
datas = JSON.parse(txt);
photoIptFile.attr("file", datas.dir+datas.tmp).attr("nom", datas.tmp);
photoPreview.css('background-image', "url('"+datas.prw+"&size=230')");
btnResetPhoto.removeClass('hide');
}
}
});
}
}