/**
 * fonction aide
 */
  function print_r(obj) {
  win_print_r = window.open('about:blank', 'win_print_r');
  win_print_r.document.write('<html><body><ul>');
  r_print_r(obj, win_print_r);
  win_print_r.document.write('</ul></body></html>');
 }

 
 //Sous-fonction pour print_r
 function r_print_r(theObj, win_print_r) {
  if(theObj.constructor == Array ||
   theObj.constructor == Object){
   if (win_print_r == null)
	win_print_r = window.open('about:blank', 'win_print_r');
   }
   for(var p in theObj){
	if(theObj[p].constructor == Array||
	 theObj[p].constructor == Object){
	 win_print_r.document.write("<li>["+p+"] =>"+typeof(theObj)+"</li>");
	 win_print_r.document.write("<ul>")
	 r_print_r(theObj[p], win_print_r);
	 win_print_r.document.write("</ul>")
	} else {
	 win_print_r.document.write("<li>["+p+"] =>"+theObj[p]+"</li>");
	}
   }
  //win_print_r.document.write("</ul>")
 }    
 
 sprintfWrapper = {

 	init : function () {

 		if (typeof arguments == "undefined") { return null; }
 		if (arguments.length < 1) { return null; }
 		if (typeof arguments[0] != "string") { return null; }
 		if (typeof RegExp == "undefined") { return null; }

 		var string = arguments[0];
 		var exp = new RegExp(/(%([%]|(\-)?(\+|\x20)?(0)?(\d+)?(\.(\d)?)?([bcdfosxX])))/g);
 		var matches = new Array();
 		var strings = new Array();
 		var convCount = 0;
 		var stringPosStart = 0;
 		var stringPosEnd = 0;
 		var matchPosEnd = 0;
 		var newString = '';
 		var match = null;

 		while (match = exp.exec(string)) {
 			if (match[9]) { convCount += 1; }

 			stringPosStart = matchPosEnd;
 			stringPosEnd = exp.lastIndex - match[0].length;
 			strings[strings.length] = string.substring(stringPosStart, stringPosEnd);

 			matchPosEnd = exp.lastIndex;
 			matches[matches.length] = {
 				match: match[0],
 				left: match[3] ? true : false,
 				sign: match[4] || '',
 				pad: match[5] || ' ',
 				min: match[6] || 0,
 				precision: match[8],
 				code: match[9] || '%',
 				negative: parseInt(arguments[convCount]) < 0 ? true : false,
 				argument: String(arguments[convCount])
 			};
 		}
 		strings[strings.length] = string.substring(matchPosEnd);

 		if (matches.length == 0) { return string; }
 		if ((arguments.length - 1) < convCount) { return null; }

 		var code = null;
 		var match = null;
 		var i = null;

 		for (i=0; i<matches.length; i++) {

 			if (matches[i].code == '%') { substitution = '%' }
 			else if (matches[i].code == 'b') {
 				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));
 				substitution = sprintfWrapper.convert(matches[i], true);
 			}
 			else if (matches[i].code == 'c') {
 				matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));
 				substitution = sprintfWrapper.convert(matches[i], true);
 			}
 			else if (matches[i].code == 'd') {
 				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));
 				substitution = sprintfWrapper.convert(matches[i]);
 			}
 			else if (matches[i].code == 'f') {
 				matches[i].argument = String(Math.abs(parseFloat(matches[i].argument)).toFixed(matches[i].precision ? matches[i].precision : 6));
 				substitution = sprintfWrapper.convert(matches[i]);
 			}
 			else if (matches[i].code == 'o') {
 				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));
 				substitution = sprintfWrapper.convert(matches[i]);
 			}
 			else if (matches[i].code == 's') {
 				matches[i].argument = matches[i].argument.substring(0, matches[i].precision ? matches[i].precision : matches[i].argument.length)
 				substitution = sprintfWrapper.convert(matches[i], true);
 			}
 			else if (matches[i].code == 'x') {
 				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
 				substitution = sprintfWrapper.convert(matches[i]);
 			}
 			else if (matches[i].code == 'X') {
 				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
 				substitution = sprintfWrapper.convert(matches[i]).toUpperCase();
 			}
 			else {
 				substitution = matches[i].match;
 			}

 			newString += strings[i];
 			newString += substitution;

 		}
 		newString += strings[i];

 		return newString;

 	},

 	convert : function(match, nosign){
 		if (nosign) {
 			match.sign = '';
 		} else {
 			match.sign = match.negative ? '-' : match.sign;
 		}
 		var l = match.min - match.argument.length + 1 - match.sign.length;
 		var pad = new Array(l < 0 ? 0 : l).join(match.pad);
 		if (!match.left) {
 			if (match.pad == "0" || nosign) {
 				return match.sign + pad + match.argument;
 			} else {
 				return pad + match.sign + match.argument;
 			}
 		} else {
 			if (match.pad == "0" || nosign) {
 				return match.sign + match.argument + pad.replace(/0/g, ' ');
 			} else {
 				return match.sign + match.argument + pad;
 			}
 		}
 	}
 }

 

/**
 * Fonctions communes à tous les FO et tous les BOP
 */ 

 
 function jaf_Query(url) {
    var reg=new RegExp("[?&=]", "g");
    var queryString = action.split(reg);
    this['script'] = queryString[0];
    for ( i = 1  ; i < queryString.length ; i=i+2 ) {
         this[queryString[i]] = queryString[i+1];
    }
    this.getUrl = function () {
        var tab_url = new Array();
        for ( var e in this ) {
             if ( e != 'script' &&
                  e != 'getUrl' )
                tab_url.push(e+'='+this[e]);
        }
        return this['script']+'?'+tab_url.join('&');
    }
}
function jaf_sendForm(obj) {
    action = $(obj).attr('action');
	method = $(obj).attr('method');
	// @TODO  il faudrait detected tous les objets contenant o comme nom 
    var o = $(obj).find('[name=o]').val();
    if (o && o.length==0) {
        o = $(obj).attr('o');
    }
    action = action=='' ? window.location.href : action;
	if (o && o.length > 0 ) {
        var maq = new jaf_Query(action);
        maq.o = o;
        action = maq.getUrl();
    }
    window.status=action;
	if (method == 'post')
		$.post(action,$(obj).serialize(), function(data) {
			  eval(data);
		});
	else
		$.get(action,$(obj).serialize(), function(data) {
			  eval(data);
		});
		
}
function jaf_majAjax( champ , nom_champ , nom_concept , id , cle ) {
	 jaf_majAjax_Aux( champ , nom_champ , nom_concept , id , cle,  $(champ).val() );
}

function jaf_majAjax_Aux( champ , nom_champ , nom_concept , id , cle,val ) {
    $.post('/majAjax',
    		{   id      : champ.id,   
                champ   : nom_champ,      
                concept : nom_concept,
    	        primary : id,         
                valeur  : val,   
                cle     : cle
    		}, function(data) {eval(data);});
}

function zaf_cocheTout(selecteur) {
	$(selecteur).each(function () {
		if ($(this).attr("checked"))
			$(this).removeAttr("checked");
		else {
			$(this).attr("checked",'checked');
		}
		$(this).change();
	});
}
/**
 * jaf_plus : permet de faire apparaire le div class=closed et faire disparaitre le div open sur click de la class=clickable
 * @param speed : temps mis pour l'apparition de la zone fermée
 */
$.fn.jaf_plus = function(options) {
    var defaults = {speed: 350};
    var opts = $.extend(defaults, options);    // la fonction extend() permet d'ajouter la gestion des options par défaut.
    return this.each(function() {
      var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
      $('.closed',this).css('display','none');
      $('.clickable',this).css('cursor','pointer');
      $('.open.clickable,.open .clickable',this).unbind('click').bind('click',function() {zone=$(this).closest('.jaf_plus'); $('.open',zone).slideUp(0); $('.closed',zone).slideDown(o.speed);});
      $('.closed.clickable,.closed .clickable',this).unbind('click').bind('click',function() {zone = $(this).closest('.jaf_plus');$('.closed',zone).slideUp(o.speed);$('.open',zone).slideDown(0);});
    });
};

$.fn.jaf_post = function(options) {
    var defaults = { href : document.location.href }; 
    var opts = $.extend(defaults, options); 
    return this.each(function() { 
        $(this).css('cursor','pointer').unbind('click').bind('click',function(){
            for (var i=0,l=this.attributes.length;i<l;i++) {
          		opts[this.attributes[i].nodeName] = this.attributes[i].nodeValue; 
            }
            opts = addOptsId(opts,this);
            $.post(opts.href,opts,function(data){eval(data);});
            return(false);});});
}; 

function addOptsId(opts,obj) {
    re = new RegExp('^([a-zA-Z_]+)([0-9]+)$');
    if ( m = re.exec(obj.id) )
        opts[m[1]]=m[2];
    return (opts);    
}

function ouvreInfo(id,w) {
  $(id).dialog({ 
                 width: w,
                 modal: true });
}
function zaf_accordeon(id) {
	etat = $(id).css('display');
	if (etat=='none') {
		$(id).show('slow');
		
	} else {
		$(id).hide('slow');
		
	}
}
function compte_a_rebours(obj, annee , mois , jour , heure , min) {
	var date_fin=new Date(annee,mois-1,jour,heure,min)
	var date_jour=new Date();
	var tps=(date_fin.getTime()-date_jour.getTime())/1000;
	var j=Math.floor(tps/3600/24);     	// récupere le nb de jour
	tps=tps % (3600*24);
	var h=Math.floor(tps / 3600);		// recupère le nb d'heure
	tps=tps % 3600;
	var m=Math.floor(tps/60);		// récupère le nb minute
	tps=tps % 60
	var s=Math.floor(tps);
	$(obj).find('.compte_a_rebours_jours').html(j);
	$(obj).find('.compte_a_rebours_heure').html(h);
	$(obj).find('.compte_a_rebours_minute').html(m);
	$(obj).find('.compte_a_rebours_seconde').fadeOut(250,function () {
															  $(this).html(s).fadeIn(250);
													     });
}


function zaf_deplie(obj,id) {
	nom_image = $(obj).attr('src');
	if (nom_image.indexOf('ouvert')>0) {
		var reg=new RegExp("(ouvert)", "g");
		nom_image = nom_image.replace(reg,'fermer');
        $('#'+id).hide('slow');
	} else {
		var reg=new RegExp("(fermer)", "g");
		nom_image = nom_image.replace(reg,'ouvert');
        $('#'+id).show('slow');
	}
	$(obj).attr('src',nom_image);
}

function jaf_indicateur_majAjax(champ) {
	if ($('#'+champ).attr('type') == 'checkbox') {
	  alert('ok');
	} else {
		couleur_fond = $('#'+champ).css('background-color');
    $('#'+champ).animate({backgroundColor: '#80FF80'},300).animate({backgroundColor: '#80FF80'},1000).animate({backgroundColor: couleur_fond},300);
	}
}

function FormulaireEtape_Precedent(id) {
    var numetape = FormulaireEtape_numetape['f'+id];
    var effet    = FormulaireEtape_typeEffect[id];
    if (numetape > 0 ) {
		switch (effet) {
		case 'formulaireEtape-accordion' :
			$('#etape-'+id+'-'+numetape).slideUp(500);
			numetape--;
			FormulaireEtape_numetape['f'+id]--;
			$('#etape-'+id+'-'+numetape).slideDown(500);
			break;
		default:
		    	$('#conteneurForm-etape-'+id+'-'+numetape).hide();
		    	numetape--;
		    	$('#conteneurForm-etape-'+id+'-'+numetape).show();
		    	FormulaireEtape_numetape['f'+id]--;
		    
		break;
		}
	}
}

function FormulaireEtape_Suivant(id,etape_suivante) {
	var numetape = 	FormulaireEtape_numetape['f'+id];
    var effet = FormulaireEtape_typeEffect[id];
	switch (effet) {
	case 'formulaireEtape-accordion' :
		$('#etape-'+id+'-'+numetape).slideUp(500);
		$('#etape-'+id+'-'+numetape).parent().find('.formulaireEtape-accordion').slideUp(500,function () {
			$('#etape-'+id+'-'+numetape).find('#etape_suivante').val(numetape+1);
			$('#etape-'+id+'-'+etape_suivante).slideDown(500);
			$('#etape-'+id+'-'+etape_suivante).parent().find('.description-form').slideDown(500);
		});
		FormulaireEtape_numetape['f'+id] = etape_suivante;
		
		break;
	default:
		$('#conteneurForm-etape-'+id+'-'+numetape).hide();
		numetape++;
		$('#conteneurForm-etape-'+id+'-'+numetape).show();
		FormulaireEtape_numetape['f'+id]=etape_suivante;
		break;
		
	}
}

function FormulaireEtape_submit(id,numetape_next) {
	var numetape = FormulaireEtape_numetape['f'+id];
    var effet    = FormulaireEtape_typeEffect[id];
   //alert(numetape_next);
	switch (effet) {
	case 'formulaireEtape-accordion' :
		//$('#etape-'+id+'-'+numetape).slideUp(500);
		//$('#etape-'+id+'-'+numetape).parent().find('.description-form').slideUp(500);
		break;
	default:
		$('#conteneurForm-etape-'+id+'-'+numetape).hide();
		break;
		
	}
	$('#etape-'+id+'-'+numetape).find('#etape_suivante').val(numetape_next);
	$('#etape-'+id+'-'+numetape).submit();
}

function FormulaireEtape_unsubmit() {
    $('.formulaireEtape').each(function () {
	    $(this).unbind('submit').submit(function () {
	    	jaf_dialog('Chargement du formulaire en cours, veuillez recommencer dans 2 secondes.<br>Installation in progress, please wait');
	    	return false;
	    });
    });
    $('.formulaireEtape-accordion').each(function () {
	    $(this).unbind('submit').submit(function () {
	    	jaf_dialog('Chargement du formulaire en cours, veuillez recommencer dans 2 secondes.<br>Installation in progress, please wait');
	    	return false;
	    });
    });
	
}

function FormulaireEtape_initEffect() {
	// Effet slide de page
	$('.formulaireEtape').each(function () {
        $(this).unbind('submit').submit(function() {
	    	jaf_sendForm(this); 
            return false;
	    });
	    tab = $(this).attr('id').split('-');
	    id = tab[1];
	    numetape = tab[2];
	    if ( FormulaireEtape_numetape['f'+id] == null) {
	    	FormulaireEtape_numetape['f'+id] = 0;
	    }

	    if ( !(numetape ==  FormulaireEtape_numetape['f'+id])) {
			// masque les formulaires des étapes 1 et plus
			$(this).parents('.conteneur-form').each(function () {
				$(this).hide();
			});
	    }
		FormulaireEtape_typeEffect[id]='formulaireEtape';
	});
	
	// Effet slide de page
	$('.formulaireEtape-accordion').each(function () {
		$(this).unbind('submit').submit(function() {
	    	jaf_sendForm(this); 
	        return false;
	    });
	    tab = $(this).attr('id').split('-');
	    var id = tab[1];
	    var numetape = tab[2];
	    var mon_h4 = $(this).parent().find('.label-form');
		mon_h4.css('cursor','pointer');
		mon_h4.unbind('click').click(function() {
	    	 FormulaireEtape_submit(id,numetape);
	    }); 
		if ( FormulaireEtape_numetape['f'+id] == null) {
		    	FormulaireEtape_numetape['f'+id] = 0;
		}
		if ( numetape !=  FormulaireEtape_numetape['f'+id] ) {
			// masque les formulaires des étapes 1 et plus
			$(this).hide();
			$(this).parent().find('.description-form').hide();
		}
		
		FormulaireEtape_typeEffect[id]='formulaireEtape-accordion';
	});
	
	
}
function  FormulaireFichier_ajouteFichier(objId,nomFichier) {
	with (parent) {
		var ancien = $(objId).val();
		$(objId).val(ancien+';'+nomFichier);
		var mon_iframe=$(objId).next();
		var mon_ul = mon_iframe.contents().find('#uploadFichier');
		//jaf_donneTaille(mon_ul,mon_iframe);
	}
}
/*
function  FormulaireFichier_deleteFichier(objId,nomFichier) {
	with (parent) {
		var ancien = $(objId).val();
		var nouveau = ancien.replace(new RegExp("(\;"+nomFichier+")","g"),'');
		alert('nouveau');
		$(objId).val(nouveau);
		$(objId).next().detach();
		FormulaireFichier_createEffect($(objId));
	}
}
*/
function envoi_en_cours(id) {
	$(id).hide()
	$(id).after('<marquee>Envoi en cours... Veuillez patienter avant de valider le formulaire ou cette étape...</marquee>');
	$(id).submit();
}

function FormulaireFichier_createEffect(obj) {
	var name  = $(obj).attr('name');
	var id    = $(obj).attr('id');
	var value = $(obj).val();
	var title = $(obj).attr('title');
	var tabnbmax = title.split(" ");
	var nbmax = tabnbmax[0];
	var iframe =     $('<iframe id="iframe'+id+'" class="FormulaireEtape_iframe" src="/tools/upload-fichier/load?files='+value+'&nomChamp='+id+'&nbmax='+nbmax+'" frameborder="0" allowtransparency="true" style="overflow:hidden"></iframe>');

	$(obj).hide().after(iframe);
	
	iframe.load(function () {
	    iframe.unbind('load');
		mon_ul = $(this).contents().find('#uploadFichier');
        try {
            formulaire.append(fichier);
            mon_ul.append(formulaire);
        } catch (e) {
            // formulaire n'existe pas
        }
		iframe.css('border','0px');
		iframe.css('overflow','hidden');
		//jaf_donneTaille(mon_ul,iframe);
	});
}

function jaf_donneTaille(obj1,obj2) {
	var width = obj1.width();
	var height = obj1.height();
	if (width > 0 && height > 0 ) {
    obj2.css('width',width+10);
  	obj2.css('height',height+10);
  }
}

function FormulaireFichier_initEffect() {
	$('.formulaireFichier').each(function () {
		FormulaireFichier_createEffect(this);
	});
}

var FormulaireEtape_numetape= new Array();
var FormulaireEtape_typeEffect= new Array();
var tab_mois = ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'];

function jaf_dialog(chaine) {
	$('<div>'+chaine+'</div>').dialog( { 
		buttons: {
		  Ok: function() {
			  $(this).dialog('close');
		  }
	    }
	   }
	);
}
function jaf_dateListe_recalcul(id) {
		var secondes = $('#'+id+'-secondes').length  ? $('#'+id+'-secondes').val() : 0;
		var minutes  = $('#'+id+'-minutes').length   ? $('#'+id+'-minutes').val()  : 0;
		var heures   = $('#'+id+'-heures').length    ? $('#'+id+'-heures').val()   : 0;
		if ($('#'+id+'-date').length) {
			var tab = $('#'+id+'-date').val().split('/');
			var jours    = tab[0];
			var mois     = tab[1]-1;
			var annees   = tab[2];
		    ma_date= new Date(annees, mois, jours, heures, minutes, secondes);
		} else {
			if ( $('#'+id+'-jours').val().length==0 || 
			     $('#'+id+'-mois').val().length==0  || 
			     $('#'+id+'-annees').val().length==0 ) {
				return 0;
			}
			var jours    = $('#'+id+'-jours').length     ? $('#'+id+'-jours').val()    : 0;
			var mois     = $('#'+id+'-mois').length      ? $('#'+id+'-mois').val()     : 0;
			var annees   = $('#'+id+'-annees').length    ? $('#'+id+'-annees').val()   : 0;
		    ma_date= new Date(annees, mois, jours, heures, minutes, secondes);
		}
		
		var val = sprintf( '%02d/%02d/%04d' , ma_date.getDate() ,ma_date.getMonth()+1 , ma_date.getFullYear() );
		if ( !(ma_date.getHours() == 0 && 
			 ma_date.getMinutes() == 0 &&
			 ma_date.getSeconds() == 0 )) {
			val+= ' '+sprintf('%02d:%02d:%02d',ma_date.getHours(),ma_date.getMinutes(),ma_date.getSeconds());
		}
	    $('#'+id).val(val);
	    $('#'+id).change();
	    
}

function jaf_date_install(obj,hasTime,type) {
	var id = obj.attr('id');
	var value = obj.val();
	var mon_heure = '';
	if (value.length > 0 ) {   
       var tab = value.split(new RegExp(" ","g"));
       if (tab.length == 2) {
    	   var value = tab[0]; 
    	   var tab = tab[1].split(new RegExp(":","g")); 
    	   var heure=tab[0]; 
    	   var minute=tab[1]; 
    	   var seconde=tab[2]; 
    	   hasTime=true;
       }
       var tab = value.split(new RegExp("-","g"));
       if ( tab.length==3 )      {
    	   var j=tab[2]; 
    	   var m=tab[1]-1; 
    	   var a=tab[0]; //format anglais
       } else {
            var tab = value.split(new RegExp("/","g"));
            if ( tab.length==3 ) { 
            	var j=tab[0]; 
            	var m=tab[1]-1; 
            	var a=tab[2];
            } //format francais
       }
    }
	var largeur = obj.css('width');
	var lc = hasTime ? 40 : 0;
	largeur = 1*largeur.substr(0,largeur.length-2)-lc*3-28;
	
	if (type == 'liste' ) {
		lj = Math.round(largeur*25/100);
		lm = Math.round(largeur*42/100);
		la = largeur-lj-lm;
		//alert(lj+','+lm+','+la);
		var jours = $('<select id="'+id+'-jours" ><option value="">...</option></select>').css('width',lj+'px');
		for (i=1;i<32;i++)
			jours.append('<option value="'+i+'"" '+( j==i ? 'selected' : '')+'>'+i+'</option>');
		jours.change(function () {
			jaf_dateListe_recalcul(id);
		});
		
		var mois = $('<select id="'+id+'-mois" ><option value="">...</option></select>').css('width',lm+'px');
		for (i=0;i<12;i++)
			mois.append('<option value="'+i+'"  '+( m==i ? 'selected' : '')+'>'+tab_mois[i]+'</option>');
		mois.change(function () {
			jaf_dateListe_recalcul(id);
		});
	
		var annee_min = obj.attr('valeurMin');
		var annee_max = obj.attr('valeurMax');
		var aujourdhui = new Date();
		if (!annee_min)
			var annee_min = aujourdhui.getFullYear()-100;
		if (!annee_max)
			var annee_max = aujourdhui.getFullYear();
		
		var annees = $('<select id="'+id+'-annees"><option value="">...</option></select>').css('width',la+'px');
		for (i=annee_max;i>=annee_min;i--)
			annees.append('<option value="'+i+'"  '+( a==i ? 'selected' : '')+'>'+i+'</option>');
		annees.change(function () {
			jaf_dateListe_recalcul(id);
		});
	}

	
	if (hasTime) {
    	var heures = $('<select id="'+id+'-heures" ><option value="">...</option></select>').css('width',lc+'px');
    	for (i=0;i<24;i++)
    		heures.append('<option value="'+i+'" '+( heure==i ? 'selected' : '')+'>'+i+'</option>');
    	heures.change(function () {
    		jaf_dateListe_recalcul(id);
    	});
    	var minutes = $('<select id="'+id+'-minutes" ></select>').css('width',lc+'px');
    	for (i=0;i<61;i++)
    		minutes.append('<option value="'+i+'" '+( minute==i ? 'selected' : '')+'>'+i+'</option>');
    	minutes.change(function () {
    		jaf_dateListe_recalcul(id);
    	});

    	var secondes = $('<select id="'+id+'-secondes"></select>').css('width',lc+'px');
    	for (i=0;i<61;i++)
    		secondes.append('<option value="'+i+'" '+( seconde==i ? 'selected' : '')+'>'+i+'</option>');
    	secondes.change(function () {
    		jaf_dateListe_recalcul(id);
    	});
    	if (type == 'picker') {
      		//alert(j+','+m+','+a);
    		var valeur = (j && a) ? sprintf("%02d/%02d/%04d",1*j,1*m+1,1*a) : '' ;
    		var dateaff = $('<input type="text" id="'+id+'-date" value="'+valeur+'">').css('width',(largeur-2)+'px').datepicker();
        	dateaff.change(function () {
        		jaf_dateListe_recalcul(id);
        	});

    	} 

    } 
	switch(type) {
		case 'liste'  : 
			if (hasTime)
				obj.after(secondes).after('<span class="separateur">m</span>').after(minutes).after('<span class="separateur">h</span>').after(heures).after('<span class="separateur"> à </span>').after(annees).after(mois).after(jours);
			else
				obj.after(annees).after(mois).after(jours); 	
			obj.hide();
		    break;
		case 'picker' :    	
			if (hasTime) {
				obj.after(secondes).after('<span class="separateur">m</span>').after(minutes).after('<span class="separateur">h</span>').after(heures).after('<span class="separateur"> à </span>').after(dateaff);
				obj.hide();
			}
            break;
		default : 
	}

}

function date_initEffect () {
	$(".dateListe[type=text]").each(function () {
		jaf_date_install($(this),false,'liste');
	});
	$(".dateTimeListe[type=text]").each(function () {
		jaf_date_install($(this),true,'liste');
	});
	$(".datePicker[type=text]").each(function () {
		jaf_date_install($(this),false,'picker');
		});
	$(".dateTimePicker[type=text]").each(function () {
		jaf_date_install($(this),true,'picker');
	});
	$(".datePicker").datepicker();
}

function colorPicker_initEffect() {
	$('.Champ_Couleur').each(function () {
		$(this).css({
			'background-color' : $(this).html(),
			'color'            : $(this).html(),
			'background-image' : 'none'
		}).hover(function() {
			$(this).css('color','#000');
		},function() {
			$(this).css('color',$(this).html());
		}
		);
	});
	$('.colorPicker').jPicker({
        position:
        {
          x: 'screenCenter',
          y: 'center'
        },
        window:
        {
          expandable: true,
          liveUpdate: true
        },
        images:
        {
          clientPath:'/jquery/images/'
        }
      
      }, function () {
    	  $(this).change();
      });
	 setTimeout("$('.jPicker.Container').css('top','75px');",1000);
}

function sendForm_initEffect() {
	$('.sendForm').each(function () {
		$(this).unbind('submit').submit(function() {
				jaf_sendForm(this); 
	            return false;
		    });
	});
}

function isTerminated(element) {
	alert(element);
	return element==0;
}
function init_effects() {
	FormulaireEtape_unsubmit();
	$(".jaf_plus").jaf_plus();
	$(".jaf_post").jaf_post(); 
	$(".deplie").hide();   
	FormulaireFichier_initEffect();
    setTimeout("date_initEffect()",1500);
    setTimeout("FormulaireEtape_initEffect()",2000);
    // on desactive le submit
	sendForm_initEffect();
	colorPicker_initEffect(); 
}
function init_effect_editable(class_ou_id) {
	$(class_ou_id).each(function () {
		$(this).css('border','2px dotted #ff8000').attr('contentEditable',true);
		var icone = $('<img src="/bop2/images/icone/banque_fichier.png" style="position:absolute;top:-10px;left:-10px;cursor:pointer">');
		icone.click(function() {
			alert($(this).next().html());
		});
		$(this).before(icone);
	});
}

function init_effect_message() {
	$(".jaf_message").dialog({
		  modal:true,
		  hide:'fade',
		  buttons: {
			  Ok: function() {
				  $(this).dialog('close');
			  }
		  }
	  }); 
}

var Jaf = {
	backup : new Array(),
	timer : new Array(),
	Bop3 : {
		post : function ( concept , action , params ) {
			$.post('/bop3/'+concept+'/'+action,
		    		params, 
		    		function(data) {eval(data);});
		},
		getrow : function ( concept , id , mafonction ) {
			$.get('/bop3/'+concept+'/getrow',
		    		{ID:id}, 
		    		function(data) {
		    			var myObject = eval('(' + data + ')');
		    			mafonction(myObject);
		    		});
		},
		// insere val dans le tinymce id à la position du curseur
		insereHtmlTinymce: function (id,val) {
			tinyMCE.execInstanceCommand(id,"mceInsertContent",false,val);
		}
	},
    ContrainteSelect : {
		tabCS : new Array(),
		tabPCS : new Array(),

		// ajoute une contrainte sur des listes déroulantes
		add: function ( nom , param ) {
			var tab = new Array();
			for (i=0;i<param.listeChamp.length;i++) {
				tab[param.listeChamp[i]] = i+1;
			}
			param.listeChampNiveau = tab;
			this.tabCS[nom] = param;
		},
		getNoeudArray : function (n,tab,niveau,id) {
			if (n==niveau) {
				return tab[id]; 
			} else {
				var i=0;
				for (i in tab) {
					var t = this.getNoeudArray(n+1,tab[i],niveau,id);
					if (t != null) {
						this.tabPCS[n] = i;
						return t;
					}
				}
				return null;
			}
		},
		consListeParNiveau : function (noeud,niveau) {
			if (noeud!=1) {
				for (n in noeud) {
					if (this.listeParNiveau[niveau]==null) {
						this.listeParNiveau[niveau] = new Array();
					}
					this.listeParNiveau[niveau][n]=1; //.push(n);
					this.consListeParNiveau(noeud[n],niveau+1);
				}
			}
		},
		// applique la contrainte aux listes déroulantes
		appliqueContrainte : function (champ , nom) {
			this.tabPCS = new Array();
			var conf     = this.tabCS[nom];
			var id       = champ.val();
			var nomChamp = champ.attr('name');
			var niveau   = conf.listeChampNiveau[nomChamp];
			if (id.length==0) {
				niveau--;
				id =   $('#'+nom).find('select[name="'+conf.listeChamp[niveau-1]+'"]').val();
				var noeud    = this.getNoeudArray(1,conf.contrainte,niveau,id);
			} else {
				var noeud    = this.getNoeudArray(1,conf.contrainte,niveau,id);
				//positionne les listes parentes
				for (n in this.tabPCS) {
					$('#'+nom).find('select[name="'+conf.listeChamp[n-1]+'"]').val(this.tabPCS[n]);
				}
			}
			// positionne les listes filles
			this.listeParNiveau = new Array();
			this.consListeParNiveau(noeud,niveau);
			
			for (n=niveau;n<conf.listeChamp.length;n++) {
				if (n==niveau) {
					  $('#'+nom).find('select[name="'+conf.listeChamp[n]+'"]').parent().slideDown();
				}
				selectAffiche = $('#'+nom).find('select[name="'+conf.listeChamp[n]+'"]');
				var tab       = this.listeParNiveau[n];
				var obj       = selectAffiche.find('option:last');
				var tbackup   = Jaf.backup[conf.listeChamp[n]];
				//tbackup.sort();
				for ( id in tbackup) {
					var chaine = Jaf.backup[conf.listeChamp[n]][id];
					if ( tab[ id ] == 1 ) {
						obj.after($('<option value="'+id+'">'+chaine+'</option>'));
						delete tbackup[id];
					}
				}
				selectAffiche.find('option').each(function () {
					if ( $(this).val() > 0 && tab[ $(this).val() ] == null ) {
						$(this).detach();
						tbackup[$(this).val()]=$(this).html();
					}
				});
			}
		},
		
		// initialise l'effet des contraintes sur des listes déroulantes
		initEffect : function ( nom , param ) {
			monForm = $('#'+nom);
            if (param.listeChamp) {
                for ( i in param.listeChamp ) {
                    nomChamp = param.listeChamp[i];
                    monChamp = monForm.find('select[name="'+nomChamp+'"]');
                    if (i>0) {
                        Jaf.backup[nomChamp] = new Array();
                    }
                    monChamp.change( function () {
                        Jaf.ContrainteSelect.appliqueContrainte($(this),nom);
                    });
                    

                }
                if (monChamp.val() > 0) {
                    Jaf.ContrainteSelect.appliqueContrainte(monChamp,nom);
                }
            }
		}
	},
	MegaSelect : {
		faitDisparaitre : function(nomChamp,temps) {
			//alert(Jaf.timer[nomChamp]-temps);
			if ( temps >= Jaf.timer[nomChamp] ) {
				$('#infoBulle'+nomChamp).children().hide();
				$('select[name='+nomChamp+']').focus();
			}
		},
		keyup : function(nomChamp,e,force) {
			
			var moninput = $('#inputinfobulle'+nomChamp);
			var select   = $('#'+nomChamp);
			var listeUl  = moninput.next();
			Jaf.timer[nomChamp] = e.timeStamp;
			$('#infoBulle'+nomChamp).children().show();
			moninput.focus();
			if ( e.keyCode==40 ) {
				if (listeUl.has('li.selected').length) {
					var li = listeUl.find('li.selected');
					li.removeClass('selected');
					li.next().addClass('selected');
				} else {
					listeUl.find('li:first').addClass('selected');
				}
			}
			if ( e.keyCode==38 ) {
				if (listeUl.has('li.selected').length) {
					var li = listeUl.find('li.selected');
					li.removeClass('selected');
					li.prev().addClass('selected');
				} else {
					listeUl.find('li:last').addClass('selected');
				}
			}
			if ( ! (e.which==38 ||  
				 e.which==40)  ) {
				listeUl.html('');
				if (force) {
					moninput.val(moninput.val()+String.fromCharCode(e.which));
				}
				var machaine = moninput.val().toUpperCase();
				var expression = new RegExp('('+machaine+')',"ig");
				var nombre=0;
				select.find('option').each(function (){
					if (nombre<20) {
						var chaine = $(this).html();
						if ( expression.test( chaine ) ) {
							listeUl.append('<li rel="'+$(this).val()+'">'+chaine.replace(expression,'<span class="surligne">$1</span>')+'</li>');
							nombre++;
						}
					}
				});
				listeUl.find('li:first').addClass('selected');
			}
			if (listeUl.has('li.selected').length) {
					var li = listeUl.find('li.selected');
					select.val(li.attr('rel'));
			}
			setTimeout("Jaf.MegaSelect.faitDisparaitre('"+nomChamp+"','"+e.timeStamp+"')",2000);
		},
		
		initEffect : function () {
			$('select').each(function () {
				//pour plus de 15 elements dans la liste
				if ( $(this).find('option').length > 15) {
					var nomChamp = $(this).attr('name');
					var inputinfobulle = $('<input type="text" value="" id="inputinfobulle'+nomChamp+'" rel="'+nomChamp+'">');
					var infobulle = $('<div class="MegaSelectInfobulle" id="infoBulle' + nomChamp + '">'
									+ '<div class="zoneAffichable ui-widget ui-widget-content ui-corner-all"></div></div>');
					infobulle.children().append(inputinfobulle);
					infobulle.children().append($('<ul></ul>'));
					$(this).after(infobulle);
					
					$(this).keypress(function(e) {
						Jaf.MegaSelect.keyup($(this).attr('name'),e,true);
					});
					
					$(inputinfobulle).keyup(function(e) {
						Jaf.MegaSelect.keyup($(this).attr('rel'),e,false);
					});
				}
			});
		}
	},
	
	iframe : {
	    tab : new Array(),
		setClass_Aux : function (class_ou_id,classe) {
			$(class_ou_id).each(function () {
				$(this).contents().find('body').addClass(classe); 
			});
		},
		setClass : function (class_ou_id,classe) {
			Jaf.iframe.tab[class_ou_id] = classe;
		},
		initEffect : function () {
			for ( class_ou_id in Jaf.iframe.tab ) {
				Jaf.iframe.setClass_Aux(class_ou_id,Jaf.iframe.tab[class_ou_id]);
			}
		}
	},
	// initialise tous les effects
	initEffect : function () {
		for ( nom in Jaf.ContrainteSelect.tabCS )  {
			Jaf.ContrainteSelect.initEffect( nom , Jaf.ContrainteSelect.tabCS[nom] );
		}
		Jaf.MegaSelect.initEffect();
	},
    
    /**
     * Arrondi avec décimales, comme round() en php
     * @param float val
     * @param int precision
     * @return float
     */
    roundDecimal : function(val, precision)
    {
        return Math.round(val * Math.pow(10, precision)) / Math.pow(10, precision);
    }
}
sprintf = sprintfWrapper.init;
$(document).ready(function(){
	
	var tab= new Array();
	
	init_effects();
	
	Jaf.initEffect();
    
	$(".nondispo").click(function () {
                 $mess = $('<div></div>').html('Fonctionnalité pas encore disponible.<br><br>Prochainement sur votre solution').dialog({ autoOpen: false, 
                                                                                                                                         title: 'Information',
                                                                                                                                         buttons: {
                                                                                                                                  				  Fermer: function() {
                                                                                                                                  					             $(this).dialog('close');
                                                                                                                                  				           }
                                                                                                                                                  }
                                                                                                                                           } );
                 $mess.dialog('open'); 
                 return(false);
                 }
  );
	
  //class=jq_txt_defaut
  //Version 1.02 du 12/02/2009
  //Permet de mettre une valeur par défaut à l'interieur d'un input type=text, lorsqu'il a la classe jq_txt_defaut et un alt
  //Ex : <input type=\"text\" name=\"RECH\" id=\"RECH\" alt=\"Indiquez un produit\" class=\"jq_txt_defaut\" value=\"".htmlentities(stripslashes($RECH))."\" />
  $("input.jq_txt_defaut[value=]") //pour ceux qui n'ont pas de value
      .attr("value", function(){
        return this.alt;            //on met leur alt comme value
      });
    
  var txt_defaut_tab_deja_clique = new Array(); //pour déterminer le premier click
  var txt_defaut_i=0;                           //pour attribuer un id aux formulaires qui n'en ont pas
  $("form:has(input.jq_txt_defaut)")            //pour les formulaires qui ont des input class=jq_txt_defaut
    .each(function(){                           //on les parcourt pour pouvoir incrémenter txt_defaut_i
      //si le formulaire n'a pas d'id, on lui en attribue un
      if(this.id.length==0){
        if(this.name.length>0)
          this.id = this.name;           //on met le name s'il y en a un
        else                  
          this.id = 'form_'+txt_defaut_i;//sinon on prend une variable incrémentale  
      }
    
      $(this).click(function(){                   //onClick du formulaire
        if(!txt_defaut_tab_deja_clique[this.id]){ //seulement le premier click
          txt_defaut_tab_deja_clique[this.id]=true;
          $(this).find("input.jq_txt_defaut")     //on cherche les input concernés de ce formulaire
            .each(function(){                     //on les parcourt
              if(this.value==this.alt)            //si leur value vaut toujours le alt
                this.value='';                    //on vide leur value
            })    
        }   
      }) 
      txt_defaut_i++;                                              
    })
    
    
    
    
  //class=jq_suiveuse
  //Version 1.0 du 22/09/2008
  //Mouche suiveuse jQuery : mettre class=jq_suiveuse à un conteneur. Son padding-top s'adaptera pour que son contenu reste à l'écran
  //Ex : Texte qui disparaît <div class="jq_suiveuse">Texte qui reste à l'écran</div>  
  //NECESSITE LA FONCTION JS findPos() !!
  if($("body").find(".jq_suiveuse").length){         //si on a des mouches suiveuses
    $(window).scroll(function(){                     //onScroll
      $(".jq_suiveuse").each(function(){             //On parcourt les mouches suiveuses
        pos_y=findPos(this).y;                       //position du conteneur par rapport au haut de la page
        scroll_y=document.documentElement.scrollTop; //position du scrolling actuel
        var jq_padding_top = 0;
        if(scroll_y>pos_y)                           //on a scrollé plus bas que le haut du conteneur
          jq_padding_top = scroll_y - pos_y;
        //$(this).css("padding-top", paddingTop+"px"); 
        $(this).stop().animate({paddingTop: jq_padding_top+"px"}, 'normal');
      }); 
    });
  }


  // class= jq_menu
  // Version 1.0 du 18/11/2008
  // Menu avec Sous menus qui apparaissent
  $(".jq_menu li ul").css("display", "none")
                     .css("opacity", 0);
    $(".jq_menu li:has(ul)").hover(function() {
      $(this).children("ul").css("display", "block");
      $(this).children("ul").fadeTo('fast', 0.9);
    }, function() {
      $(this).children("ul").fadeTo('fast', 0, function(){
                                                   $(this).css("display", "none");
                                                 });
    });
    
  init_effect_message();
  
  // HoverAccordion
  $('#jquery_faq').hoverAccordion({
    activateItem: '1',
    speed: 'fast'
  });
  $('#jquery_faq').children('li:first').addClass('firstitem');
  $('#jquery_faq').children('li:last').addClass('lastitem');
  
  $('#reponses .reponse').hide();
  
  $('#jquery_faq li li')
  .css({cursor: 'pointer'})
  .click(function(){
    $('#reponses .reponse').hide();
    $('#jquery_faq li li').removeClass('lihover');
    $(this).addClass('lihover');
    $('#rep_'+$(this).attr('id')+'').slideDown('slow');
  });
  var isCtrl = false;
  $(document).keyup(function (e) {
	  if(e.which == 17) isCtrl=false;
	  }).keydown(function (e) {
	      if(e.which == 17) isCtrl=true;
	      
	      //NE PAS UTILISER 69 (E) car déclenché par ALTGR+E (euro)
	      if(e.which == 83 && isCtrl == true) {
	          // Votre fonction à déclencher au Ctrl+S
	    	  init_effect_editable('.zafEditable'); 
	   	return false;
	   }
	  });
  $('input[type=text]').each(function () {
      var v=$(this).attr('placeholder');
	  if (v && v.length > 0) {
		 $(this).placeholder();
	 }
	 
  });
});  



