paniers/public_html_admin/js/functions.js

1181 lines
42 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'];
/* 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 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) $(this).blur();
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) {
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) $(this).blur();
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 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('align_right')) ipt.addClass('align_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 == "") return date;
switch(format) {
case 'yyyy-mm-dd' : { d=dateStr.split("-"); if(d.length==3) date = new Date(d[0], d[1] - 1, d[2]); } break;
case 'yyyy-dd-mm' : { d=dateStr.split("-"); if(d.length==3) date = new Date(d[0], d[2] - 1, d[1]); } break;
case 'dd/mm/yyyy' : { d=dateStr.split("/"); if(d.length==3) date = new Date(d[2], d[1] - 1, d[0]); } break;
case 'mm/dd/yyyy' : { d=dateStr.split("/"); if(d.length==3) date = new Date(d[2], d[0] - 1, 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');
}
}
});
}
}
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);
}